diff --git a/DEPS b/DEPS
index 84055d8..d5b2acd 100644
--- a/DEPS
+++ b/DEPS
@@ -311,11 +311,11 @@
   # 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': 'c4f0e3ece4814ddbfa4ef66fedb9fdac05476dde',
+  'v8_revision': '17f98f9b999d414bece0cdf872f20408f1555969',
   # 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': 'bae82cfae31732cdce1772242632a9a99107641f',
+  'angle_revision': 'a12c00a1df80da516294391029e89a6c10edb16b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -334,7 +334,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
-  'fuchsia_version': 'version:10.20221101.2.1',
+  'fuchsia_version': 'version:10.20221102.0.1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -386,7 +386,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '62373ba04419221b6202a21cdb49fbc0f042dac6',
+  'devtools_frontend_revision': 'a00ddc259e61f8ab17babc995bbf17685f77cba6',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -490,7 +490,7 @@
 
   # If you change this, also update the libc++ revision in
   # //buildtools/deps_revisions.gni.
-  'libcxx_revision':       'f8571eaba606bde2eb8cd34b30104ca33e7c207e',
+  'libcxx_revision':       'fc6bbc5eb039769b5ed2de84444a3c6f9b45a598',
 
   # GN CIPD package version.
   'gn_version': 'git_revision:a4d67be044b42963de801001e7146f9657c7fad4',
@@ -688,7 +688,7 @@
       'packages': [
         {
           'package': 'chromium/third_party/updater/chrome_win_x86',
-          'version': 'F8_T9y21h4ZjF0j3oo8KicefkB9wgRPt6OhN-Gg4n8IC',
+          'version': 'WKRsObwNiMN79FNam9_gcd1sYVx-MAlaI1Aj4VzFQnsC',
         },
       ],
   },
@@ -699,7 +699,7 @@
       'packages': [
         {
           'package': 'chromium/third_party/updater/chrome_win_x86_64',
-          'version': 'ceDnZtMdCGb-BOWcsA7RzOqyzbwowKyCkmRaoGkb460C',
+          'version': 'WVnILyW4Rdr2vYFeuZ0b6UPP5FIAPyNtH-5VqfkTVRcC',
         },
       ],
   },
@@ -734,7 +734,7 @@
       'packages': [
         {
           'package': 'chromium/third_party/updater/chromium_win_x86',
-          'version': 'fAR-GoS_gqCPzLV9BawhtAa_YxLxcjsmL4BZVkoh4V8C',
+          'version': 'V3dFG1gwlfKlnCE88Ir-h6dmcjgHGjcdrLJrS6-5qTAC',
         },
       ],
   },
@@ -745,7 +745,7 @@
       'packages': [
         {
           'package': 'chromium/third_party/updater/chromium_win_x86_64',
-          'version': 'DNUl1KjU5p_SFdLNtSi7txtXzO1E6EKPr_8E4R1UQ-MC',
+          'version': 'IBenCvq9xWNcOEWG-ivXhhd-FLTmpbG-oKUaxDkQkAsC',
         },
       ],
   },
@@ -817,7 +817,7 @@
 
   'src/clank': {
     'url': 'https://chrome-internal.googlesource.com/clank/internal/apps.git' + '@' +
-    'e2591de35145f5c71c071eacea88c5845d69b1ee',
+    '68d635599de34c6d34ad68e376cbdc8b4c0951b6',
     'condition': 'checkout_android and checkout_src_internal and not checkout_clank_via_src_internal',
   },
 
@@ -1234,7 +1234,7 @@
 
   # For Linux and Chromium OS.
   'src/third_party/cros_system_api': {
-      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '705483fead67eb6b6929a030e78354a80dad0a58',
+      'url': Var('chromium_git') + '/chromiumos/platform2/system_api.git' + '@' + '7ba8cd1ca07835bee033db0da46178b444068baa',
       'condition': 'checkout_linux',
   },
 
@@ -1250,7 +1250,7 @@
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
 
   'src/third_party/devtools-frontend-internal': {
-      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + '54edb6382b3c4a7c28ee21b1184100223276b34a',
+      'url': 'https://chrome-internal.googlesource.com/devtools/devtools-internal.git' + '@' + 'a04519ecf82cf63c8babdbb701939637a278c6ab',
     'condition': 'checkout_src_internal',
   },
 
@@ -1665,7 +1665,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + '0cbb37ad93ee2bfcf4c1b0bc3e136eadbe4fb467',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '06c0150ef04cb2b72c8df56acd8d22a185d81cb7',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1719,7 +1719,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': 'zoicZU9zhNbJmgq7fa0FZxcPTPlmRi907Rn2MZ21rAsC',
+              'version': 'qGtBu6TtxyR5XNy4cmsslb7c946YtkZF5_QCjVP-wc8C',
           },
       ],
       'condition': 'checkout_android',
@@ -1850,7 +1850,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '2fb4b12a6c5174def779ea889da3f810c2814684',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '733673c12bfcf2fcebfabbba2285b282589149a8',
+    Var('webrtc_git') + '/src.git' + '@' + '957ffed4cad13a7700755eb3cd6b4fa7d6c450c7',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1920,7 +1920,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@3a8871cf8e439140ce39b1074a82e1d625a37245',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@c0d57f0ad7858cabcaf874c70c152dd6d1e53795',
     'condition': 'checkout_src_internal',
   },
 
@@ -1950,7 +1950,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': 'GbzYVUZYWJYHgcr2RXp9eqqN6-oAX2Karf0qE58fvHoC',
+        'version': 'nn1eKdxjiDiw7Vamm7D-xfyhXGpBALmyqdwcnRdnPjQC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1961,7 +1961,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/media_app/app',
-        'version': '4jOgw4WTfNaMhARYeJ2738V8-pO80fUOjQIJ8jY-iJgC',
+        'version': 'DTZhfSFTTXVS3L79Lh4JBvft6Xnwonw8Td-3eAm3c5IC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1972,7 +1972,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': 'H62hvihFpl3C4BlVQNT9g7BFS0gBMTfYT7579T4foxIC',
+        'version': 'PsPXPFD54IUhcTs734Y3DzvtXbVp9UlYE--lVQJCNuAC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/android_webview/browser/aw_client_hints_controller_delegate.cc b/android_webview/browser/aw_client_hints_controller_delegate.cc
index 5ac936bc..a0c488ef 100644
--- a/android_webview/browser/aw_client_hints_controller_delegate.cc
+++ b/android_webview/browser/aw_client_hints_controller_delegate.cc
@@ -4,10 +4,12 @@
 
 #include "android_webview/browser/aw_client_hints_controller_delegate.h"
 
+#include "android_webview/browser/aw_contents.h"
 #include "base/notreached.h"
 #include "components/embedder_support/user_agent_utils.h"
 #include "content/public/browser/client_hints_controller_delegate.h"
 #include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
 #include "services/network/public/cpp/network_quality_tracker.h"
 #include "third_party/blink/public/common/client_hints/enabled_client_hints.h"
 #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
@@ -38,9 +40,21 @@
 bool AwClientHintsControllerDelegate::IsJavaScriptAllowed(
     const GURL& url,
     content::RenderFrameHost* parent_rfh) {
-  // TODO(crbug.com/921655): Actually implement function.
-  NOTIMPLEMENTED();
-  return false;
+  if (!parent_rfh) {
+    return false;
+  }
+  content::WebContents* web_contents =
+      content::WebContents::FromRenderFrameHost(
+          parent_rfh->GetOutermostMainFrame());
+  if (!web_contents) {
+    // TODO(crbug.com/921655): Detect and support service workers here.
+    return false;
+  }
+  AwContents* aw_contents = AwContents::FromWebContents(web_contents);
+  if (!aw_contents) {
+    return false;
+  }
+  return aw_contents->IsJavaScriptAllowed();
 }
 
 bool AwClientHintsControllerDelegate::AreThirdPartyCookiesBlocked(
diff --git a/android_webview/browser/aw_client_hints_controller_delegate_unittest.cc b/android_webview/browser/aw_client_hints_controller_delegate_unittest.cc
index 84c12992..be40da87 100644
--- a/android_webview/browser/aw_client_hints_controller_delegate_unittest.cc
+++ b/android_webview/browser/aw_client_hints_controller_delegate_unittest.cc
@@ -39,9 +39,11 @@
 }
 
 TEST_F(AwClientHintsControllerDelegateTest, IsJavaScriptAllowed) {
-  // TODO(crbug.com/921655): Actually test function once implemented.
   EXPECT_FALSE(client_hints_controller_delegate_->IsJavaScriptAllowed(GURL(""),
                                                                       nullptr));
+  EXPECT_FALSE(client_hints_controller_delegate_->IsJavaScriptAllowed(
+      GURL("https://example.com/"), nullptr));
+  // TODO(crbug.com/921655): Add integration test when the rest is implemented.
 }
 
 TEST_F(AwClientHintsControllerDelegateTest, AreThirdPartyCookiesBlocked) {
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index 5a91235..d526036 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -698,20 +698,6 @@
       ignore_navigation);
 }
 
-bool AwContentBrowserClient::
-    ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport() {
-  // On Android WebView, we should not fire the initial NavigationEntry
-  // creation/modification NavigationStateChanged calls to preserve legacy
-  // behavior (not firing extra onPageFinished calls), as initial
-  // NavigationEntries used to not exist. See https://crbug.com/1277414.
-  // However, if kWebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess is
-  // enabled, we won't need to ignore the extra NavigationStateChanged() calls,
-  // because they won't trigger synthesized page loads and won't cause extra
-  // onPageFinished calls.
-  return !base::FeatureList::IsEnabled(
-      features::kWebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess);
-}
-
 bool AwContentBrowserClient::SupportsAvoidUnnecessaryBeforeUnloadCheckSync() {
   // WebView allows the embedder to override navigation in such a way that
   // might trigger reentrancy if this returned true. See comments in
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h
index d4d3ee8..c2c6ce1 100644
--- a/android_webview/browser/aw_content_browser_client.h
+++ b/android_webview/browser/aw_content_browser_client.h
@@ -164,9 +164,6 @@
                                 bool is_outermost_main_frame,
                                 ui::PageTransition transition,
                                 bool* ignore_navigation) override;
-  bool
-  ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport()
-      override;
   bool SupportsAvoidUnnecessaryBeforeUnloadCheckSync() override;
   bool CreateThreadPool(base::StringPiece name) override;
   std::unique_ptr<content::LoginDelegate> CreateLoginDelegate(
diff --git a/android_webview/browser/aw_contents.cc b/android_webview/browser/aw_contents.cc
index c5fc1bf..6efba5c 100644
--- a/android_webview/browser/aw_contents.cc
+++ b/android_webview/browser/aw_contents.cc
@@ -801,6 +801,12 @@
   return find_helper_.get();
 }
 
+bool AwContents::IsJavaScriptAllowed() {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  AwSettings* aw_settings = AwSettings::FromWebContents(web_contents_.get());
+  return aw_settings->GetJavaScriptEnabled();
+}
+
 bool AwContents::AllowThirdPartyCookies() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   AwSettings* aw_settings = AwSettings::FromWebContents(web_contents_.get());
diff --git a/android_webview/browser/aw_contents.h b/android_webview/browser/aw_contents.h
index 783c9ca..fbee816d 100644
--- a/android_webview/browser/aw_contents.h
+++ b/android_webview/browser/aw_contents.h
@@ -226,6 +226,9 @@
   void ClearMatches(JNIEnv* env);
   FindHelper* GetFindHelper();
 
+  // Per WebView Javascript Policy
+  bool IsJavaScriptAllowed();
+
   // Per WebView Cookie Policy
   bool AllowThirdPartyCookies();
 
diff --git a/android_webview/browser/aw_feature_list.cc b/android_webview/browser/aw_feature_list.cc
index fa54822..75244f75 100644
--- a/android_webview/browser/aw_feature_list.cc
+++ b/android_webview/browser/aw_feature_list.cc
@@ -11,7 +11,6 @@
 #include "base/metrics/field_trial_params.h"
 #include "base/notreached.h"
 #include "components/safe_browsing/core/common/features.h"
-#include "content/public/common/content_features.h"
 #include "third_party/blink/public/common/features.h"
 
 using base::android::ConvertJavaStringToUTF8;
@@ -35,7 +34,6 @@
     &features::kWebViewUseMetricsUploadService,
     &features::kWebViewXRequestedWithHeaderControl,
     &features::kWebViewXRequestedWithHeaderManifestAllowList,
-    &features::kWebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess,
     &features::kWebViewClientHintsControllerDelegate,
 };
 
diff --git a/android_webview/browser/aw_settings.cc b/android_webview/browser/aw_settings.cc
index 6d37fd8..acff4f1 100644
--- a/android_webview/browser/aw_settings.cc
+++ b/android_webview/browser/aw_settings.cc
@@ -78,13 +78,6 @@
                        jobject obj,
                        content::WebContents* web_contents)
     : WebContentsObserver(web_contents),
-      renderer_prefs_initialized_(false),
-      javascript_can_open_windows_automatically_(false),
-      allow_third_party_cookies_(false),
-      allow_file_access_(false),
-      enterprise_authentication_app_link_policy_enabled_(
-          true),  // TODO(b/222053757,ayushsha): Change this policy to be by
-                  // default false from next Android version(Maybe Android U).
       xrw_allowlist_matcher_(base::MakeRefCounted<AwContentsOriginMatcher>()),
       aw_settings_(env, obj) {
   web_contents->SetUserData(kAwSettingsUserDataKey,
@@ -112,6 +105,10 @@
   return allow_third_party_cookies_;
 }
 
+bool AwSettings::GetJavaScriptEnabled() {
+  return javascript_enabled_;
+}
+
 AwSettings::MixedContentMode AwSettings::GetMixedContentMode() {
   return mixed_content_mode_;
 }
@@ -188,6 +185,7 @@
   UpdateOffscreenPreRasterLocked(env, obj);
   UpdateWillSuppressErrorStateLocked(env, obj);
   UpdateCookiePolicyLocked(env, obj);
+  UpdateJavaScriptPolicyLocked(env, obj);
   UpdateAllowFileAccessLocked(env, obj);
   UpdateMixedContentModeLocked(env, obj);
 }
@@ -312,6 +310,15 @@
       Java_AwSettings_getAcceptThirdPartyCookiesLocked(env, obj);
 }
 
+void AwSettings::UpdateJavaScriptPolicyLocked(
+    JNIEnv* env,
+    const JavaParamRef<jobject>& obj) {
+  if (!web_contents())
+    return;
+
+  javascript_enabled_ = Java_AwSettings_getJavaScriptEnabledLocked(env, obj);
+}
+
 void AwSettings::UpdateOffscreenPreRasterLocked(
     JNIEnv* env,
     const JavaParamRef<jobject>& obj) {
diff --git a/android_webview/browser/aw_settings.h b/android_webview/browser/aw_settings.h
index b86de760..8a052c9 100644
--- a/android_webview/browser/aw_settings.h
+++ b/android_webview/browser/aw_settings.h
@@ -59,6 +59,7 @@
   AwSettings(JNIEnv* env, jobject obj, content::WebContents* web_contents);
   ~AwSettings() override;
 
+  bool GetJavaScriptEnabled();
   bool GetJavaScriptCanOpenWindowsAutomatically();
   bool GetAllowThirdPartyCookies();
   MixedContentMode GetMixedContentMode();
@@ -92,6 +93,9 @@
   void UpdateRendererPreferencesLocked(
       JNIEnv* env,
       const base::android::JavaParamRef<jobject>& obj);
+  void UpdateJavaScriptPolicyLocked(
+      JNIEnv* env,
+      const base::android::JavaParamRef<jobject>& obj);
   void UpdateCookiePolicyLocked(
       JNIEnv* env,
       const base::android::JavaParamRef<jobject>& obj);
@@ -136,11 +140,14 @@
                              content::RenderViewHost* new_host) override;
   void WebContentsDestroyed() override;
 
-  bool renderer_prefs_initialized_;
-  bool javascript_can_open_windows_automatically_;
-  bool allow_third_party_cookies_;
-  bool allow_file_access_;
-  bool enterprise_authentication_app_link_policy_enabled_;
+  bool renderer_prefs_initialized_{false};
+  bool javascript_enabled_{false};
+  bool javascript_can_open_windows_automatically_{false};
+  bool allow_third_party_cookies_{false};
+  bool allow_file_access_{false};
+  // TODO(b/222053757,ayushsha): Change this policy to be by
+  // default false from next Android version(Maybe Android U).
+  bool enterprise_authentication_app_link_policy_enabled_{true};
   MixedContentMode mixed_content_mode_;
 
   scoped_refptr<AwContentsOriginMatcher> xrw_allowlist_matcher_;
diff --git a/android_webview/common/aw_features.cc b/android_webview/common/aw_features.cc
index 11eda783..2af4e887 100644
--- a/android_webview/common/aw_features.cc
+++ b/android_webview/common/aw_features.cc
@@ -95,13 +95,6 @@
              "WebViewSuppressDifferentOriginSubframeJSDialogs",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-// Only synthesize page load for URL spoof prevention at most once, on initial
-// main document access (instead on every NavigationStateChanged call that
-// invalidates the URL after).
-BASE_FEATURE(kWebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess,
-             "WebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 // A Feature used for WebView variations tests. Not used in production.
 BASE_FEATURE(kWebViewTestFeature,
              "WebViewTestFeature",
diff --git a/android_webview/common/aw_features.h b/android_webview/common/aw_features.h
index 822e96b..1b9a436 100644
--- a/android_webview/common/aw_features.h
+++ b/android_webview/common/aw_features.h
@@ -30,7 +30,6 @@
 BASE_DECLARE_FEATURE(kWebViewOriginTrials);
 BASE_DECLARE_FEATURE(kWebViewRecordAppDataDirectorySize);
 BASE_DECLARE_FEATURE(kWebViewSuppressDifferentOriginSubframeJSDialogs);
-BASE_DECLARE_FEATURE(kWebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess);
 BASE_DECLARE_FEATURE(kWebViewTestFeature);
 BASE_DECLARE_FEATURE(kWebViewUseMetricsUploadService);
 BASE_DECLARE_FEATURE(kWebViewWideColorGamutSupport);
diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected
index 9738952..c3b75f1 100644
--- a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected
+++ b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected
@@ -165,7 +165,7 @@
         android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
         android:enabled="false"
         android:exported="true">
-      <meta-data android:name="SET_DATA_DIRECTORY_SUFFIX:DEV" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
     </service>  # DIFF-ANCHOR: c52936d7
     <service  # DIFF-ANCHOR: dc926e35
         android:name="org.chromium.android_webview.services.VariationsSeedServer"
diff --git a/android_webview/expectations/trichrome_webview_bundle.AndroidManifest.expected b/android_webview/expectations/trichrome_webview_bundle.AndroidManifest.expected
index a7269ce..8d7414d1 100644
--- a/android_webview/expectations/trichrome_webview_bundle.AndroidManifest.expected
+++ b/android_webview/expectations/trichrome_webview_bundle.AndroidManifest.expected
@@ -165,7 +165,7 @@
         android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
         android:enabled="false"
         android:exported="true">
-      <meta-data android:name="SET_DATA_DIRECTORY_SUFFIX:DEV" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
     </service>  # DIFF-ANCHOR: c52936d7
     <service  # DIFF-ANCHOR: dc926e35
         android:name="org.chromium.android_webview.services.VariationsSeedServer"
diff --git a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
index df3b991f..d01b198 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
@@ -18,7 +18,6 @@
 import android.webkit.URLUtil;
 import android.widget.FrameLayout;
 
-import org.chromium.android_webview.common.AwFeatures;
 import org.chromium.base.Callback;
 import org.chromium.base.ContentUriUtils;
 import org.chromium.base.ThreadUtils;
@@ -249,19 +248,15 @@
     public void navigationStateChanged(int flags) {
         // If this is a popup whose document has been accessed by script, hint
         // the client to show the last committed url through synthesizing a page
-        // load, as it may be unsafe to show the pending entry.
-        boolean shouldSynthesizePageLoad = ((flags & InvalidateTypes.URL) != 0)
-                && mAwContents.isPopupWindow() && mAwContents.hasAccessedInitialDocument();
-        if (AwFeatureList.isEnabled(
-                    AwFeatures.WEBVIEW_SYNTHESIZE_PAGE_LOAD_ONLY_ON_INITIAL_MAIN_DOCUMENT_ACCESS)) {
-            // Since we want to synthesize the page load only once for when the
-            // NavigationStateChange call is triggered by the first initial main
-            // document access, the flag must match InvalidateTypes.URL (the flag
-            // fired by NavigationControllerImpl::DidAccessInitialMainDocument())
-            // and we must check whether a page load has previously been
-            // synthesized here.
-            shouldSynthesizePageLoad &= (flags == InvalidateTypes.URL) && !mDidSynthesizePageLoad;
-        }
+        // load, as it may be unsafe to show the pending entry. Since we want to
+        // synthesize the page load only once for when the NavigationStateChange
+        // call is triggered by the first initial main document access, the flag
+        // must match InvalidateTypes.URL (the flag fired by
+        // NavigationControllerImpl::DidAccessInitialMainDocument()) and we must
+        // check whether a page load has previously been synthesized here.
+        boolean shouldSynthesizePageLoad = mAwContents.isPopupWindow()
+                && mAwContents.hasAccessedInitialDocument() && (flags == InvalidateTypes.URL)
+                && !mDidSynthesizePageLoad;
         if (shouldSynthesizePageLoad) {
             String url = mAwContents.getLastCommittedUrl();
             url = TextUtils.isEmpty(url) ? ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL : url;
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
index f84b1ef..0a9765b 100644
--- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
+++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -265,10 +265,6 @@
                     "Restricts insertion of XRequestedWith header on outgoing requests "
                             + "to those that have been allow-listed through the appropriate "
                             + "developer API."),
-            Flag.baseFeature(
-                    AwFeatures.WEBVIEW_SYNTHESIZE_PAGE_LOAD_ONLY_ON_INITIAL_MAIN_DOCUMENT_ACCESS,
-                    "Only synthesize page load for URL spoof prevention at most once,"
-                            + " on initial main document access."),
             Flag.baseFeature(BlinkFeatures.VIEWPORT_HEIGHT_CLIENT_HINT_HEADER,
                     "Enables the use of sec-ch-viewport-height client hint."),
             Flag.baseFeature(BlinkFeatures.USER_AGENT_OVERRIDE_EXPERIMENT,
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java
index 2b72987..d134275 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/PopupWindowTest.java
@@ -22,13 +22,11 @@
 import org.chromium.android_webview.AwContents;
 import org.chromium.android_webview.JsReplyProxy;
 import org.chromium.android_webview.WebMessageListener;
-import org.chromium.android_webview.common.AwFeatures;
 import org.chromium.android_webview.test.AwActivityTestRule.PopupInfo;
 import org.chromium.android_webview.test.TestAwContentsClient.ShouldInterceptRequestHelper;
 import org.chromium.android_webview.test.util.CommonResources;
 import org.chromium.android_webview.test.util.JSUtils;
 import org.chromium.base.ThreadUtils;
-import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.Criteria;
 import org.chromium.base.test.util.CriteriaHelper;
 import org.chromium.base.test.util.CriteriaNotSatisfiedException;
@@ -221,10 +219,7 @@
     @Test
     @SmallTest
     @Feature({"AndroidWebView"})
-    @CommandLineFlags.Add("disable-features="
-            + AwFeatures.WEBVIEW_SYNTHESIZE_PAGE_LOAD_ONLY_ON_INITIAL_MAIN_DOCUMENT_ACCESS)
-    public void
-    testSynthesizedOnPageFinishedCalledMultipleTimesAfterDomModificationDuringNavigation()
+    public void testSynthesizedOnPageFinishedCalledOnceAfterDomModificationDuringNavigation()
             throws Throwable {
         final String popupPath = "/popup.html";
         final String parentPageHtml = CommonResources.makeHtmlPageFrom("",
@@ -261,67 +256,6 @@
         mActivityTestRule.loadPopupContents(mParentContents, popupInfo, null);
         shouldInterceptRequestHelper.waitForCallback(shouldInterceptRequestCount);
         // Modifying DOM in the middle while loading a popup window - this causes navigation state
-        // change through AwWebContentsDelegateAdapter#navigationStateChanged(), resulting in an
-        // additional onPageFinished() callback. Also, the navigation eventually will commit and
-        // trigger an onPageFinished() call, and 2 NavigationStateChanged calls that would
-        // also trigger synthesized onPageFinished() calls, totaling to 4 onPageFinished calls.
-        // See also https://crbug.com/458569 and b/19325392 for context.
-        onPageFinishedHelper.waitForCallback(onPageFinishedCount, 4);
-        List<String> urlList = onPageFinishedHelper.getUrlList();
-
-        // This is the URL that gets shown to the user (instead of the pending navigation's URL)
-        // because the parent changed DOM of the popup window.
-        Assert.assertEquals("about:blank", urlList.get(onPageFinishedCount));
-        // Note that in this test we do not stop the navigation and we still navigate to the page
-        // that we wanted. The loaded page does not have the changed DOM. This is slightly different
-        // from the original workflow in b/19325392 as there is no good hook to stop navigation and
-        // trigger DidAccessInitialDocument at the same time.
-        Assert.assertTrue(urlList.get(onPageFinishedCount + 2).endsWith(popupPath));
-        Assert.assertTrue(urlList.get(onPageFinishedCount + 3).endsWith(popupPath));
-    }
-
-    @Test
-    @SmallTest
-    @Feature({"AndroidWebView"})
-    @CommandLineFlags.Add("enable-features="
-            + AwFeatures.WEBVIEW_SYNTHESIZE_PAGE_LOAD_ONLY_ON_INITIAL_MAIN_DOCUMENT_ACCESS)
-    public void
-    testSynthesizedOnPageFinishedCalledOnceAfterDomModificationDuringNavigation() throws Throwable {
-        final String popupPath = "/popup.html";
-        final String parentPageHtml = CommonResources.makeHtmlPageFrom("",
-                "<script>"
-                        + "function tryOpenWindow() {"
-                        + "  window.popupWindow = window.open('" + popupPath + "');"
-                        + "}"
-                        + "function modifyDomOfPopup() {"
-                        + "  window.popupWindow.document.body.innerHTML = 'Hello from the parent!';"
-                        + "}</script>");
-
-        mActivityTestRule.triggerPopup(mParentContents, mParentContentsClient, mWebServer,
-                parentPageHtml, "<html></html>", popupPath, "tryOpenWindow()");
-        PopupInfo popupInfo = mActivityTestRule.createPopupContents(mParentContents);
-        TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper =
-                popupInfo.popupContentsClient.getOnPageFinishedHelper();
-        ShouldInterceptRequestHelper shouldInterceptRequestHelper =
-                popupInfo.popupContentsClient.getShouldInterceptRequestHelper();
-        int onPageFinishedCount = onPageFinishedHelper.getCallCount();
-        int shouldInterceptRequestCount = shouldInterceptRequestHelper.getCallCount();
-        // Modify DOM before navigation gets committed. Once it gets committed, then
-        // DidAccessInitialDocument does not get triggered.
-        popupInfo.popupContentsClient.getShouldInterceptRequestHelper().runDuringFirstTimeCallback(
-                () -> {
-                    ThreadUtils.assertOnBackgroundThread();
-                    try {
-                        // Ensures that we modify DOM before navigation gets committed.
-                        mActivityTestRule.executeJavaScriptAndWaitForResult(
-                                mParentContents, mParentContentsClient, "modifyDomOfPopup()");
-                    } catch (Exception e) {
-                        throw new RuntimeException(e);
-                    }
-                });
-        mActivityTestRule.loadPopupContents(mParentContents, popupInfo, null);
-        shouldInterceptRequestHelper.waitForCallback(shouldInterceptRequestCount);
-        // Modifying DOM in the middle while loading a popup window - this causes navigation state
         // change from NavigationControllerImpl::DidAccessInitialMainDocument() eventually calling
         // AwWebContentsDelegateAdapter#navigationStateChanged(), resulting in an additional
         // onPageFinished() callback. Also, the navigation eventually will commit and trigger an
diff --git a/android_webview/nonembedded/java/AndroidManifest.xml b/android_webview/nonembedded/java/AndroidManifest.xml
index 82b280bc..f31a77f8f 100644
--- a/android_webview/nonembedded/java/AndroidManifest.xml
+++ b/android_webview/nonembedded/java/AndroidManifest.xml
@@ -51,7 +51,7 @@
               android:exported="true"
               tools:ignore="ExportedService">
               <meta-data
-                  android:name="SET_DATA_DIRECTORY_SUFFIX:DEV"
+                  android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX"
                   android:value="true"/>
             </service>
             <!-- WebView Developer UI Activities. If you change these Activities, please update
diff --git a/android_webview/system_webview_apk_tmpl.gni b/android_webview/system_webview_apk_tmpl.gni
index 7bfa483..cc7bb6d7 100644
--- a/android_webview/system_webview_apk_tmpl.gni
+++ b/android_webview/system_webview_apk_tmpl.gni
@@ -102,7 +102,13 @@
       alternative_android_sdk_dep = webview_framework_dep
     }
 
-    if (webview_devui_show_icon) {
+    # We can't include an icon for anything with the Stable channel package name
+    # because it confuses work profiles. We check
+    # use_stable_package_name_for_trichrome here instead of where
+    # webview_devui_show_icon is assigned to avoid a circular dependency
+    # between //android_webview/variables.gni and
+    # //chrome/android/trichrome.gni.
+    if (webview_devui_show_icon && !use_stable_package_name_for_trichrome) {
       deps += [ "//android_webview/nonembedded:devui_launcher_icon_resources" ]
     }
 
diff --git a/ash/components/arc/arc_features.cc b/ash/components/arc/arc_features.cc
index 33c4331..a895709 100644
--- a/ash/components/arc/arc_features.cc
+++ b/ash/components/arc/arc_features.cc
@@ -152,6 +152,25 @@
              "ArcKeyboardShortcutHelperIntegration",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// Controls ARCVM MGLRU reclaim feature.
+BASE_FEATURE(kMglruReclaim,
+             "ArcMglruReclaim",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
+// Controls the interval between MGLRU reclaims in milliseconds
+// A value of 0 will disable the MGLRU reclaim feature
+const base::FeatureParam<int> kMglruReclaimInterval{&kMglruReclaim, "interval",
+                                                    0};
+
+// Controls the swappiness of MGLRU reclaims, in the range of 0 to 200
+// 0 means only filecache will be used while 200 means only swap will be used
+// any value in between will be a mix of both
+// The lower the value, the higher the ratio of freeing filecache pages
+// Implementation and a more detailed description can be found in ChromeOS
+// src/third_party/kernel/v5.10-arcvm/mm/vmscan.c
+const base::FeatureParam<int> kMglruReclaimSwappiness{&kMglruReclaim,
+                                                      "swappiness", 0};
+
 // Toggles between native bridge implementations for ARC.
 // Note, that we keep the original feature name to preserve
 // corresponding metrics.
diff --git a/ash/components/arc/arc_features.h b/ash/components/arc/arc_features.h
index b9751ae..7f24825 100644
--- a/ash/components/arc/arc_features.h
+++ b/ash/components/arc/arc_features.h
@@ -40,6 +40,9 @@
 extern const base::FeatureParam<int> kLogdConfigSize;
 BASE_DECLARE_FEATURE(kLvmApplicationContainers);
 BASE_DECLARE_FEATURE(kKeyboardShortcutHelperIntegrationFeature);
+BASE_DECLARE_FEATURE(kMglruReclaim);
+extern const base::FeatureParam<int> kMglruReclaimInterval;
+extern const base::FeatureParam<int> kMglruReclaimSwappiness;
 BASE_DECLARE_FEATURE(kNativeBridgeToggleFeature);
 BASE_DECLARE_FEATURE(kOutOfProcessVideoDecoding);
 BASE_DECLARE_FEATURE(kPictureInPictureFeature);
diff --git a/ash/components/arc/session/arc_session_impl.cc b/ash/components/arc/session/arc_session_impl.cc
index f025de603..a187299e 100644
--- a/ash/components/arc/session/arc_session_impl.cc
+++ b/ash/components/arc/session/arc_session_impl.cc
@@ -466,8 +466,6 @@
       base::FeatureList::IsEnabled(kEnableTTSCacheSetup);
   params.enable_consumer_auto_update_toggle = base::FeatureList::IsEnabled(
       ash::features::kConsumerAutoUpdateToggleAllowed);
-  params.update_o4c_list_via_a2c2 =
-      base::FeatureList::IsEnabled(kArcUpdateO4CListViaA2C2);
 
   // TODO (b/196460968): Remove after CTS run is complete.
   if (params.enable_notifications_refresh) {
diff --git a/ash/components/arc/session/arc_start_params.h b/ash/components/arc/session/arc_start_params.h
index ed8dc07..d63079e9 100644
--- a/ash/components/arc/session/arc_start_params.h
+++ b/ash/components/arc/session/arc_start_params.h
@@ -97,9 +97,6 @@
 
   // Flag to enable disable consumer auto update toggle as part of EU new deal.
   bool enable_consumer_auto_update_toggle = false;
-
-  // Flag to enable A2C2 feature for updating O4C list.
-  bool update_o4c_list_via_a2c2 = false;
 };
 
 }  // namespace arc
diff --git a/ash/components/arc/session/arc_vm_client_adapter.cc b/ash/components/arc/session/arc_vm_client_adapter.cc
index e4f350c..dc8ce9ff 100644
--- a/ash/components/arc/session/arc_vm_client_adapter.cc
+++ b/ash/components/arc/session/arc_vm_client_adapter.cc
@@ -213,8 +213,6 @@
       base::StringPrintf("androidboot.enable_notifications_refresh=%d",
                          start_params.enable_notifications_refresh),
       base::StringPrintf("androidboot.zram_size=%d", guest_zram_size),
-      base::StringPrintf("androidboot.update_o4c_list_via_a2c2=%d",
-                         start_params.update_o4c_list_via_a2c2),
   };
 
   const ArcVmUreadaheadMode mode =
@@ -444,6 +442,10 @@
   // Request guest memory locking, if configured.
   request.set_lock_guest_memory(base::FeatureList::IsEnabled(kLockGuestMemory));
 
+  // Add update_o4c_list_via_a2c2.
+  request.set_update_o4c_list_via_a2c2(
+      base::FeatureList::IsEnabled(kArcUpdateO4CListViaA2C2));
+
   // Specify VM Memory.
   if (base::FeatureList::IsEnabled(kVmMemorySize)) {
     base::SystemMemoryInfoKB info;
@@ -506,6 +508,14 @@
   if (base::FeatureList::IsEnabled(kGuestZram))
     request.set_guest_swappiness(kGuestZramSwappiness.Get());
 
+  if (base::FeatureList::IsEnabled(kMglruReclaim)) {
+    request.set_mglru_reclaim_interval(kMglruReclaimInterval.Get());
+    request.set_mglru_reclaim_swappiness(kMglruReclaimSwappiness.Get());
+  } else {
+    request.set_mglru_reclaim_interval(0);
+    request.set_mglru_reclaim_swappiness(0);
+  }
+
   request.set_enable_consumer_auto_update_toggle(base::FeatureList::IsEnabled(
       ash::features::kConsumerAutoUpdateToggleAllowed));
   if (base::FeatureList::IsEnabled(kVmMemoryPSIReports))
diff --git a/ash/components/arc/session/arc_vm_client_adapter_unittest.cc b/ash/components/arc/session/arc_vm_client_adapter_unittest.cc
index 5215430..70fc708 100644
--- a/ash/components/arc/session/arc_vm_client_adapter_unittest.cc
+++ b/ash/components/arc/session/arc_vm_client_adapter_unittest.cc
@@ -2653,5 +2653,46 @@
                              "ro.boot.skip_tts_cache=0"));
 }
 
+// Test that update_o4c_list_via_a2c2 is not set with the feature flag disabled.
+TEST_F(ArcVmClientAdapterTest, ArcUpdateO4CListViaA2C2Disabled) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndDisableFeature(kArcUpdateO4CListViaA2C2);
+  StartParams start_params(GetPopulatedStartParams());
+  StartMiniArcWithParams(true, std::move(start_params));
+  auto request = GetTestConciergeClient()->start_arc_vm_request();
+  EXPECT_FALSE(request.update_o4c_list_via_a2c2());
+}
+
+// Test that update_o4c_list_via_a2c2 is set with the feature flag enabled.
+TEST_F(ArcVmClientAdapterTest, ArcUpdateO4CListViaA2C2Enabled) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(kArcUpdateO4CListViaA2C2);
+  StartParams start_params(GetPopulatedStartParams());
+  StartMiniArcWithParams(true, std::move(start_params));
+  auto request = GetTestConciergeClient()->start_arc_vm_request();
+  EXPECT_TRUE(request.update_o4c_list_via_a2c2());
+}
+
+TEST_F(ArcVmClientAdapterTest, mglruReclaimDisabled) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitWithFeatureState(arc::kMglruReclaim, false);
+  StartMiniArcWithParams(true, GetPopulatedStartParams());
+  auto req = GetTestConciergeClient()->start_arc_vm_request();
+  EXPECT_EQ(req.mglru_reclaim_interval(), 0);
+  EXPECT_EQ(req.mglru_reclaim_swappiness(), 0);
+}
+
+TEST_F(ArcVmClientAdapterTest, mglruReclaimEnabled) {
+  base::test::ScopedFeatureList feature_list;
+  base::FieldTrialParams params;
+  params["interval"] = "30000";
+  params["swappiness"] = "100";
+  feature_list.InitAndEnableFeatureWithParameters(kMglruReclaim, params);
+  StartMiniArcWithParams(true, GetPopulatedStartParams());
+  auto req = GetTestConciergeClient()->start_arc_vm_request();
+  EXPECT_EQ(req.mglru_reclaim_interval(), 30000);
+  EXPECT_EQ(req.mglru_reclaim_swappiness(), 100);
+}
+
 }  // namespace
 }  // namespace arc
diff --git a/ash/constants/ash_switches.cc b/ash/constants/ash_switches.cc
index fb7fbfd..4baccfb 100644
--- a/ash/constants/ash_switches.cc
+++ b/ash/constants/ash_switches.cc
@@ -470,11 +470,6 @@
 const char kEnterpriseEnableInitialEnrollment[] =
     "enterprise-enable-initial-enrollment";
 
-// Whether to use fake PSM (private set membership) RLWE client for testing
-// purposes.
-const char kEnterpriseUseFakePsmRlweClientForTesting[] =
-    "enterprise-use-fake-psm-rlwe-client-for-testing";
-
 // Enables the zero-touch enterprise enrollment flow.
 const char kEnterpriseEnableZeroTouchEnrollment[] =
     "enterprise-enable-zero-touch-enrollment";
@@ -779,6 +774,9 @@
 // TODO(984021): Remove when URL is sent by DMServer.
 const char kPublicAccountsSamlAclUrl[] = "public-accounts-saml-acl-url";
 
+// Adds fake Bluetooth devices to the quick settings menu for UI testing.
+const char kQsAddFakeBluetoothDevices[] = "qs-add-fake-bluetooth-devices";
+
 // The name of the per-model directory which contains per-region
 // subdirectories with regulatory label files for this model.
 // The per-model directories (if there are any) are located under
diff --git a/ash/constants/ash_switches.h b/ash/constants/ash_switches.h
index 8864606..40fdbef 100644
--- a/ash/constants/ash_switches.h
+++ b/ash/constants/ash_switches.h
@@ -158,8 +158,6 @@
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const char kEnterpriseEnableInitialEnrollment[];
 COMPONENT_EXPORT(ASH_CONSTANTS)
-extern const char kEnterpriseUseFakePsmRlweClientForTesting[];
-COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const char kEnterpriseEnableZeroTouchEnrollment[];
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const char kEnterpriseEnrollmentInitialModulus[];
@@ -253,6 +251,7 @@
 extern const char kOobeTriggerSyncTimeoutForTests[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kProfileRequiresPolicy[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kPublicAccountsSamlAclUrl[];
+COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kQsAddFakeBluetoothDevices[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kRegulatoryLabelDir[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kRevenBranding[];
 COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kRlzPingDelay[];
diff --git a/ash/projector/projector_controller_impl.cc b/ash/projector/projector_controller_impl.cc
index 3f52983..9c6908d 100644
--- a/ash/projector/projector_controller_impl.cc
+++ b/ash/projector/projector_controller_impl.cc
@@ -194,12 +194,6 @@
   MaybeWrapUpRecording();
 }
 
-bool ProjectorControllerImpl::IsEligible() const {
-  return speech_recognition_availability_ ==
-             SpeechRecognitionAvailability::kAvailable ||
-         ProjectorController::AreExtendedProjectorFeaturesDisabled();
-}
-
 NewScreencastPrecondition
 ProjectorControllerImpl::GetNewScreencastPrecondition() const {
   NewScreencastPrecondition result;
diff --git a/ash/projector/projector_controller_impl.h b/ash/projector/projector_controller_impl.h
index ec80baa..55958c0 100644
--- a/ash/projector/projector_controller_impl.h
+++ b/ash/projector/projector_controller_impl.h
@@ -73,7 +73,6 @@
   void OnTranscription(const media::SpeechRecognitionResult& result) override;
   void OnTranscriptionError() override;
   void OnSpeechRecognitionStopped() override;
-  bool IsEligible() const override;
   NewScreencastPrecondition GetNewScreencastPrecondition() const override;
   void OnUndoRedoAvailabilityChanged(bool undo_available,
                                      bool redo_available) override;
diff --git a/ash/projector/projector_controller_unittest.cc b/ash/projector/projector_controller_unittest.cc
index 4002f2d..706d7256 100644
--- a/ash/projector/projector_controller_unittest.cc
+++ b/ash/projector/projector_controller_unittest.cc
@@ -222,13 +222,22 @@
 }
 
 TEST_F(ProjectorControllerTest, OnSpeechRecognitionAvailabilityChanged) {
-  controller_->OnSpeechRecognitionAvailabilityChanged(
-      SpeechRecognitionAvailability::kAvailable);
-  EXPECT_TRUE(controller_->IsEligible());
-
+  EXPECT_CALL(mock_client_,
+              OnNewScreencastPreconditionChanged(NewScreencastPrecondition(
+                  NewScreencastPreconditionState::kDisabled,
+                  {NewScreencastPreconditionReason::
+                       kOnDeviceSpeechRecognitionNotSupported})));
   controller_->OnSpeechRecognitionAvailabilityChanged(
       SpeechRecognitionAvailability::kOnDeviceSpeechRecognitionNotSupported);
-  EXPECT_FALSE(controller_->IsEligible());
+
+  ON_CALL(mock_client_, IsDriveFsMounted())
+      .WillByDefault(testing::Return(true));
+
+  EXPECT_CALL(mock_client_,
+              OnNewScreencastPreconditionChanged(NewScreencastPrecondition(
+                  NewScreencastPreconditionState::kEnabled, {})));
+  controller_->OnSpeechRecognitionAvailabilityChanged(
+      SpeechRecognitionAvailability::kAvailable);
 }
 
 TEST_F(ProjectorControllerTest, EnableAnnotatorTool) {
diff --git a/ash/public/cpp/projector/projector_controller.h b/ash/public/cpp/projector/projector_controller.h
index 91f2ef47..9ffb16c 100644
--- a/ash/public/cpp/projector/projector_controller.h
+++ b/ash/public/cpp/projector/projector_controller.h
@@ -71,11 +71,6 @@
   // Called when speech recognition stopped.
   virtual void OnSpeechRecognitionStopped() = 0;
 
-  // Returns true if Projector screen recording feature is available on the
-  // device. If on device speech recognition is not available on device, then
-  // Projector is not eligible.
-  virtual bool IsEligible() const = 0;
-
   // Returns true if we can start a new Projector session.
   virtual NewScreencastPrecondition GetNewScreencastPrecondition() const = 0;
 
diff --git a/ash/public/cpp/test/mock_projector_controller.h b/ash/public/cpp/test/mock_projector_controller.h
index 422060e..e1b5e30 100644
--- a/ash/public/cpp/test/mock_projector_controller.h
+++ b/ash/public/cpp/test/mock_projector_controller.h
@@ -28,7 +28,6 @@
   MOCK_METHOD0(OnTranscriptionError, void());
   MOCK_METHOD0(OnSpeechRecognitionStopped, void());
   MOCK_METHOD1(SetProjectorToolsVisible, void(bool is_visible));
-  MOCK_CONST_METHOD0(IsEligible, bool());
   MOCK_CONST_METHOD0(GetNewScreencastPrecondition, NewScreencastPrecondition());
   MOCK_METHOD2(OnUndoRedoAvailabilityChanged,
                void(bool undo_available, bool redo_available));
diff --git a/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl.cc b/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl.cc
index ac95166..ae4d877 100644
--- a/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl.cc
+++ b/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_impl.cc
@@ -39,7 +39,7 @@
 constexpr uint8_t kSeekerPasskey = 0x02;
 constexpr uint8_t kAccountKeyStartByte = 0x04;
 
-constexpr base::TimeDelta kGattOperationTimeout = base::Seconds(5);
+constexpr base::TimeDelta kGattOperationTimeout = base::Seconds(15);
 
 constexpr const char* ToString(
     device::BluetoothGattService::GattErrorCode error_code) {
diff --git a/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_unittest.cc b/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_unittest.cc
index 1987c3a1..3127dda 100644
--- a/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_unittest.cc
+++ b/ash/quick_pair/fast_pair_handshake/fast_pair_gatt_service_client_unittest.cc
@@ -57,7 +57,7 @@
 const char kWriteAccountKeyTimeMetric[] =
     "Bluetooth.ChromeOS.FastPair.AccountKey.Write.TotalTime";
 
-constexpr base::TimeDelta kConnectingTestTimeout = base::Seconds(5);
+constexpr base::TimeDelta kConnectingTestTimeout = base::Seconds(15);
 
 // Below constants are used to construct MockBluetoothDevice for testing.
 constexpr char kTestBleDeviceAddress[] = "11:12:13:14:15:16";
diff --git a/ash/shelf/drag_window_from_shelf_controller.cc b/ash/shelf/drag_window_from_shelf_controller.cc
index 759af74..7639506 100644
--- a/ash/shelf/drag_window_from_shelf_controller.cc
+++ b/ash/shelf/drag_window_from_shelf_controller.cc
@@ -349,16 +349,6 @@
   window_ = nullptr;
 }
 
-void DragWindowFromShelfController::AddObserver(
-    DragWindowFromShelfController::Observer* observer) {
-  observers_.AddObserver(observer);
-}
-
-void DragWindowFromShelfController::RemoveObserver(
-    DragWindowFromShelfController::Observer* observer) {
-  observers_.RemoveObserver(observer);
-}
-
 void DragWindowFromShelfController::OnDragStarted(
     const gfx::PointF& location_in_screen) {
   drag_started_ = true;
@@ -673,8 +663,8 @@
   show_overview_windows_ = true;
   overview_controller->overview_session()->SetVisibleDuringWindowDragging(
       /*visible=*/true, /*animate=*/true);
-  for (Observer& observer : observers_)
-    observer.OnOverviewVisibilityChanged(true);
+  if (on_overview_shown_callback_for_testing_)
+    std::move(on_overview_shown_callback_for_testing_).Run();
 }
 
 void DragWindowFromShelfController::HideOverviewDuringDrag() {
@@ -686,8 +676,6 @@
   overview_controller->overview_session()->SetVisibleDuringWindowDragging(
       /*visible=*/false,
       /*animate=*/false);
-  for (Observer& observer : observers_)
-    observer.OnOverviewVisibilityChanged(false);
 }
 
 void DragWindowFromShelfController::ScaleDownWindowAfterDrag() {
@@ -720,15 +708,15 @@
   (new WindowScaleAnimation(
        WindowScaleAnimation::WindowScaleType::kScaleUpToRestore,
        base::BindOnce(
-           &DragWindowFromShelfController::OnWindowRestoredToOrignalBounds,
+           &DragWindowFromShelfController::OnWindowRestoredToOriginalBounds,
            weak_ptr_factory_.GetWeakPtr(),
            /*should_end_overview=*/!started_in_overview_)))
       ->Start(window_);
 }
 
-void DragWindowFromShelfController::OnWindowRestoredToOrignalBounds(
+void DragWindowFromShelfController::OnWindowRestoredToOriginalBounds(
     bool end_overview) {
-  base::AutoReset<bool> auto_reset(&during_window_restoration_callback_, true);
+  base::AutoReset<bool> auto_reset(&during_window_restoration_, true);
   if (end_overview) {
     Shell::Get()->overview_controller()->EndOverview(
         OverviewEndAction::kDragWindowFromShelf,
diff --git a/ash/shelf/drag_window_from_shelf_controller.h b/ash/shelf/drag_window_from_shelf_controller.h
index aca6ee14..dee260e 100644
--- a/ash/shelf/drag_window_from_shelf_controller.h
+++ b/ash/shelf/drag_window_from_shelf_controller.h
@@ -71,20 +71,11 @@
   // position. The value is different for standard or dense shelf.
   static float GetReturnToMaximizedThreshold();
 
-  class Observer : public base::CheckedObserver {
-   public:
-    // Called when overview visibility is changed during or after window
-    // dragging.
-    virtual void OnOverviewVisibilityChanged(bool visible) {}
-  };
-
   DragWindowFromShelfController(aura::Window* window,
                                 const gfx::PointF& location_in_screen);
-
   DragWindowFromShelfController(const DragWindowFromShelfController&) = delete;
   DragWindowFromShelfController& operator=(
       const DragWindowFromShelfController&) = delete;
-
   ~DragWindowFromShelfController() override;
 
   // Called during swiping up on the shelf.
@@ -107,18 +98,13 @@
   // aura::WindowObserver:
   void OnWindowDestroying(aura::Window* window) override;
 
-  void AddObserver(Observer* observer);
-  void RemoveObserver(Observer* observer);
-
   aura::Window* dragged_window() const { return window_; }
   bool drag_started() const { return drag_started_; }
-  bool show_overview_windows() const { return show_overview_windows_; }
-  bool during_window_restoration_callback() const {
-    return during_window_restoration_callback_;
-  }
+  bool during_window_restoration() const { return during_window_restoration_; }
 
  private:
   class WindowsHider;
+  friend class DragWindowFromShelfControllerTestApi;
 
   void OnDragStarted(const gfx::PointF& location_in_screen);
   void OnDragEnded(const gfx::PointF& location_in_screen,
@@ -180,7 +166,7 @@
 
   // Callback function to be called after the window has been restored to its
   // original bounds after drag ends.
-  void OnWindowRestoredToOrignalBounds(bool end_overview);
+  void OnWindowRestoredToOriginalBounds(bool end_overview);
 
   // Called to do proper initialization in overview for the dragged window. The
   // function is supposed to be called with an active overview session.
@@ -207,9 +193,11 @@
   // A pending action from EndDrag() to be performed in FinalizeDraggedWindow().
   absl::optional<ShelfWindowDragResult> window_drag_result_;
 
-  base::ObserverList<Observer> observers_;
+  // True while we are restoring windows back to their original bounds after a
+  // drag (i.e. dragged tiny amount from shelf).
+  bool during_window_restoration_ = false;
 
-  bool during_window_restoration_callback_ = false;
+  base::OnceClosure on_overview_shown_callback_for_testing_;
 
   SplitViewController::SnapPosition initial_snap_position_ =
       SplitViewController::SnapPosition::kNone;
diff --git a/ash/shelf/drag_window_from_shelf_controller_test_api.cc b/ash/shelf/drag_window_from_shelf_controller_test_api.cc
index f5b7958..69dc4e45 100644
--- a/ash/shelf/drag_window_from_shelf_controller_test_api.cc
+++ b/ash/shelf/drag_window_from_shelf_controller_test_api.cc
@@ -3,8 +3,11 @@
 // found in the LICENSE file.
 
 #include "ash/shelf/drag_window_from_shelf_controller_test_api.h"
+
+#include "ash/shelf/drag_window_from_shelf_controller.h"
 #include "ash/shell.h"
 #include "ash/wm/overview/overview_controller.h"
+#include "base/run_loop.h"
 
 namespace ash {
 
@@ -19,20 +22,14 @@
   DCHECK(window_drag_controller);
 
   if (!Shell::Get()->overview_controller()->InOverviewSession() ||
-      window_drag_controller->show_overview_windows()) {
+      window_drag_controller->show_overview_windows_) {
     return;
   }
 
-  window_drag_controller->AddObserver(this);
-  show_overview_waiter_ = std::make_unique<base::RunLoop>();
-  show_overview_waiter_->Run();
-  window_drag_controller->RemoveObserver(this);
-}
-
-void DragWindowFromShelfControllerTestApi::OnOverviewVisibilityChanged(
-    bool visible) {
-  if (visible && show_overview_waiter_)
-    show_overview_waiter_->Quit();
+  base::RunLoop run_loop;
+  window_drag_controller->on_overview_shown_callback_for_testing_ =
+      run_loop.QuitClosure();
+  run_loop.Run();
 }
 
 }  // namespace ash
diff --git a/ash/shelf/drag_window_from_shelf_controller_test_api.h b/ash/shelf/drag_window_from_shelf_controller_test_api.h
index a056846..2c090b7d 100644
--- a/ash/shelf/drag_window_from_shelf_controller_test_api.h
+++ b/ash/shelf/drag_window_from_shelf_controller_test_api.h
@@ -6,30 +6,22 @@
 #define ASH_SHELF_DRAG_WINDOW_FROM_SHELF_CONTROLLER_TEST_API_H_
 
 #include "ash/ash_export.h"
-#include "ash/shelf/drag_window_from_shelf_controller.h"
-#include "base/run_loop.h"
 
 namespace ash {
 
-class ASH_EXPORT DragWindowFromShelfControllerTestApi
-    : public DragWindowFromShelfController::Observer {
+class DragWindowFromShelfController;
+
+class ASH_EXPORT DragWindowFromShelfControllerTestApi {
  public:
   DragWindowFromShelfControllerTestApi();
-  ~DragWindowFromShelfControllerTestApi() override;
-
-  void WaitUntilOverviewIsShown(
-      DragWindowFromShelfController* window_drag_controller);
-
-  // DragWindowFromShelfController::Observer:
-  void OnOverviewVisibilityChanged(bool visible) override;
-
- private:
-  std::unique_ptr<base::RunLoop> show_overview_waiter_;
-
   DragWindowFromShelfControllerTestApi(
       const DragWindowFromShelfControllerTestApi&) = delete;
   DragWindowFromShelfControllerTestApi& operator=(
       const DragWindowFromShelfControllerTestApi&) = delete;
+  ~DragWindowFromShelfControllerTestApi();
+
+  void WaitUntilOverviewIsShown(
+      DragWindowFromShelfController* window_drag_controller);
 };
 
 }  // namespace ash
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 164c40e..cfc5103 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -1222,7 +1222,7 @@
                                            aura::Window* lost_active) {
   if (!IsShelfWindow(gained_active) &&
       !(window_drag_controller_ &&
-        window_drag_controller_->during_window_restoration_callback())) {
+        window_drag_controller_->during_window_restoration())) {
     shelf_->hotseat_widget()->set_manually_extended(/*value=*/false);
   }
 
@@ -2146,7 +2146,7 @@
     return *auto_hide_state_from_cursor;
 
   if (window_drag_controller_ &&
-      window_drag_controller_->during_window_restoration_callback()) {
+      window_drag_controller_->during_window_restoration()) {
     return SHELF_AUTO_HIDE_SHOWN;
   }
 
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index 6504a6d1..c19e042f 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -919,6 +919,7 @@
 <translation id="6064463340679478396">Hierdie lêer klaar gebruik</translation>
 <translation id="6073451960410192870">Stop opname</translation>
 <translation id="6074087755403037157">Beta-kanaal</translation>
+<translation id="6093867385179428431">Gedeaktiveer deur admin</translation>
 <translation id="6095008505822982596">Spraaktempo</translation>
 <translation id="6099678161144790572">In die afgelope maand gewysig</translation>
 <translation id="6103838137565245112">stelsel</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index 37f704fa..b11cba0a 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -918,6 +918,7 @@
 <translation id="6064463340679478396">Završio/la sam s korištenjem fajla</translation>
 <translation id="6073451960410192870">Zaustavi snimanje</translation>
 <translation id="6074087755403037157">Beta kanal</translation>
+<translation id="6093867385179428431">Onemogućio administrator</translation>
 <translation id="6095008505822982596">Brzina govora</translation>
 <translation id="6099678161144790572">Uređeno u proteklom mjesecu</translation>
 <translation id="6103838137565245112">sistem</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb
index 66626b1..882fbec0 100644
--- a/ash/strings/ash_strings_cy.xtb
+++ b/ash/strings/ash_strings_cy.xtb
@@ -1309,6 +1309,7 @@
 <translation id="8297006494302853456">Gwan</translation>
 <translation id="8308637677604853869">Dewislen flaenorol</translation>
 <translation id="830868413617744215">Beta</translation>
+<translation id="8314772463905284467">Mae Caps Lock wedi'i droi ymlaen</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363">Mae'r ffenestr <ph name="WINDOW_TITLE" /> wedi'i dewis</translation>
 <translation id="8351131234907093545">Creu nodyn</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 5a50fb91..7a40998 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -918,6 +918,7 @@
 <translation id="6064463340679478396">Δεν χρησιμοποιώ πλέον αυτό το αρχείο</translation>
 <translation id="6073451960410192870">Διακοπή εγγραφής</translation>
 <translation id="6074087755403037157">Κανάλι έκδοσης Beta</translation>
+<translation id="6093867385179428431">Απενεργοποιήθηκε από τον διαχειριστή</translation>
 <translation id="6095008505822982596">Ταχύτητα ομιλίας</translation>
 <translation id="6099678161144790572">Έγινε επεξεργασία τον προηγούμενο μήνα</translation>
 <translation id="6103838137565245112">σύστημα</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 2699b70..716580b 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -918,6 +918,7 @@
 <translation id="6064463340679478396">Fini d'utiliser le fichier</translation>
 <translation id="6073451960410192870">Arrêter l'enregistrement</translation>
 <translation id="6074087755403037157">Version bêta</translation>
+<translation id="6093867385179428431">Désactivé par l'administrateur</translation>
 <translation id="6095008505822982596">Vitesse de la voix</translation>
 <translation id="6099678161144790572">Modifié au cours du dernier mois</translation>
 <translation id="6103838137565245112">système</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 2d4fcb2..7edbbfa7 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -917,6 +917,7 @@
 <translation id="6064463340679478396">Datoteka mi više nije potrebna</translation>
 <translation id="6073451960410192870">Zaustavi snimanje</translation>
 <translation id="6074087755403037157">Beta kanal</translation>
+<translation id="6093867385179428431">Onemogućio administrator</translation>
 <translation id="6095008505822982596">Brzina govora</translation>
 <translation id="6099678161144790572">Uređivano prošli mjesec</translation>
 <translation id="6103838137565245112">sustav</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 696e4a8c..17cac533 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -306,6 +306,7 @@
 <translation id="2673968385134502798">ゲーム</translation>
 <translation id="2678852583403169292">選択して読み上げメニュー</translation>
 <translation id="2689613560355655046">デスク 8</translation>
+<translation id="2695132445805301912">キーとクリックを表示</translation>
 <translation id="2695305337569143674">ウェブ</translation>
 <translation id="2697697418792422688">キーボード設定を表示します。<ph name="KEYBOARD_NAME" /> が選択されています。</translation>
 <translation id="2700493154570097719">キーボードを設定</translation>
@@ -1120,6 +1121,7 @@
 <translation id="7305884605064981971">EDGE</translation>
 <translation id="7313193732017069507">カメラを展開</translation>
 <translation id="731589979057211264">シェルフ グループはオンです。</translation>
+<translation id="7340731148882810149">自動クリックのメニュー</translation>
 <translation id="7346909386216857016">OK</translation>
 <translation id="7348093485538360975">画面キーボード</translation>
 <translation id="735745346212279324">VPN が切断されました</translation>
@@ -1298,6 +1300,7 @@
 <translation id="826107067893790409"><ph name="USER_EMAIL_ADDRESS" /> に対してロックを解除するには、Enter キーを押します</translation>
 <translation id="8261506727792406068">削除</translation>
 <translation id="8270450402312105425">{0,plural, =1{1 時間以内にデバイスを以前のバージョンに戻してください}other{# 時間以内にデバイスを以前のバージョンに戻してください}}</translation>
+<translation id="8277261673056602147">画面上のテキストを選択</translation>
 <translation id="8284362522226889623">前のデスクに切り替えるには 4 本の指で左にスワイプします</translation>
 <translation id="828708037801473432">オフ</translation>
 <translation id="8297006494302853456">弱い</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index 85e4fe2..2467175 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -918,6 +918,7 @@
 <translation id="6064463340679478396">ប្រើឯកសារនេះរួចហើយ</translation>
 <translation id="6073451960410192870">បញ្ឈប់ការថត</translation>
 <translation id="6074087755403037157">បណ្ដាញបេតា</translation>
+<translation id="6093867385179428431">បានបិទដោយអ្នកគ្រប់គ្រង</translation>
 <translation id="6095008505822982596">ល្បឿននៃការនិយាយ</translation>
 <translation id="6099678161144790572">បានកែ​កាលពីខែមុន</translation>
 <translation id="6103838137565245112">ប្រព័ន្ធ</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 3b969815..524d805 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -918,6 +918,7 @@
 <translation id="6064463340679478396">ໃຊ້ໄຟລ໌ແລ້ວໆ</translation>
 <translation id="6073451960410192870">ຢຸດການບັນທຶກ</translation>
 <translation id="6074087755403037157">ຊ່ອງເບຕ້າ</translation>
+<translation id="6093867385179428431">ປິດການນຳໃຊ້ໂດຍຜູ້ເບິ່ງແຍງລະບົບ</translation>
 <translation id="6095008505822982596">ອັດຕາການເວົ້າ</translation>
 <translation id="6099678161144790572">ແກ້ໄຂເດືອນແລ້ວ</translation>
 <translation id="6103838137565245112">ລະບົບ</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index 92d8758..3d6f66c8 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -1310,6 +1310,7 @@
 <translation id="8297006494302853456">Сул</translation>
 <translation id="8308637677604853869">Өмнөх цэс</translation>
 <translation id="830868413617744215">Бета</translation>
+<translation id="8314772463905284467">Caps Lock асаалттай байна</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> цонх сонгосон</translation>
 <translation id="8351131234907093545">Тэмдэглэл үүсгэх</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index 71d0f36..eb0b755 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -1309,6 +1309,7 @@
 <translation id="8297006494302853456">အားမကောင်းပါ</translation>
 <translation id="8308637677604853869">ယခင် မီနျူး</translation>
 <translation id="830868413617744215">စမ်းသပ်ဆဲ</translation>
+<translation id="8314772463905284467">‘စာလုံးကြီးလော့ခ်’ ဖွင့်ထားသည်</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ဝင်းဒိုးကို ရွေးထားသည်</translation>
 <translation id="8351131234907093545">မှတ်စုရေးရန်</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index 5589da2..b03031d 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -1309,6 +1309,7 @@
 <translation id="8297006494302853456">कमजोर</translation>
 <translation id="8308637677604853869">अघिल्लो मेनु</translation>
 <translation id="830868413617744215">बेटा</translation>
+<translation id="8314772463905284467">क्याप्स लक अन छ</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> नामक विन्डो चयन गरियो</translation>
 <translation id="8351131234907093545">टिपोट सिर्जना गर्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index b65af38..af1c366 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -1308,6 +1308,7 @@
 <translation id="8297006494302853456">ଦୁର୍ବଳ</translation>
 <translation id="8308637677604853869">ପୂର୍ବବର୍ତ୍ତୀ ମେନୁ</translation>
 <translation id="830868413617744215">ବେଟା</translation>
+<translation id="8314772463905284467">Caps Lock ଚାଲୁ ଅଛି</translation>
 <translation id="8341451174107936385"><ph name="UNLOCK_MORE_FEATURES" />  <ph name="GET_STARTED" /></translation>
 <translation id="8345019317483336363"><ph name="WINDOW_TITLE" /> ୱିଣ୍ଡୋକୁ ଚୟନ କରାଯାଇଛି</translation>
 <translation id="8351131234907093545">ନୋଟ୍ ତିଆରି କରନ୍ତୁ</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index ef1a219..9a6c1aa6 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -918,6 +918,7 @@
 <translation id="6064463340679478396">Terminei de usar o arquivo</translation>
 <translation id="6073451960410192870">Parar de gravar</translation>
 <translation id="6074087755403037157">Canal Beta</translation>
+<translation id="6093867385179428431">Desativada pelo administrador</translation>
 <translation id="6095008505822982596">Velocidade da fala</translation>
 <translation id="6099678161144790572">Editado no último mês</translation>
 <translation id="6103838137565245112">sistema</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index f3504e525..dddbe00 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -918,6 +918,7 @@
 <translation id="6064463340679478396">فائل کا استعمال کرتے ہوئے ہو گیا</translation>
 <translation id="6073451960410192870">ریکارڈنگ روکیں</translation>
 <translation id="6074087755403037157">بی ٹا چینل</translation>
+<translation id="6093867385179428431">منتظم کی طرف سے غیر فعال کردہ</translation>
 <translation id="6095008505822982596">اسپیچ کی شرح</translation>
 <translation id="6099678161144790572">گزشتہ مہینے میں ترمیم کی</translation>
 <translation id="6103838137565245112">سسٹم</translation>
diff --git a/ash/style/rounded_container.cc b/ash/style/rounded_container.cc
index e2c8c48..df3c626e 100644
--- a/ash/style/rounded_container.cc
+++ b/ash/style/rounded_container.cc
@@ -10,6 +10,7 @@
 #include "ui/compositor/layer.h"
 #include "ui/gfx/geometry/rounded_corners_f.h"
 #include "ui/views/background.h"
+#include "ui/views/border.h"
 #include "ui/views/layout/box_layout.h"
 #include "ui/views/view.h"
 
@@ -27,6 +28,8 @@
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kVertical));
 
+  SetBorderInsets(kBorderInsets);
+
   SetPaintToLayer();
   layer()->SetRoundedCornerRadius(GetRoundedCorners());
   layer()->SetFillsBoundsOpaquely(false);
@@ -34,6 +37,10 @@
 
 RoundedContainer::~RoundedContainer() = default;
 
+void RoundedContainer::SetBorderInsets(const gfx::Insets& insets) {
+  SetBorder(views::CreateEmptyBorder(insets));
+}
+
 void RoundedContainer::OnThemeChanged() {
   views::View::OnThemeChanged();
 
diff --git a/ash/style/rounded_container.h b/ash/style/rounded_container.h
index ebd42fc..86d8ec2f 100644
--- a/ash/style/rounded_container.h
+++ b/ash/style/rounded_container.h
@@ -6,6 +6,7 @@
 #define ASH_STYLE_ROUNDED_CONTAINER_H_
 
 #include "ash/ash_export.h"
+#include "ui/gfx/geometry/insets.h"
 #include "ui/views/view.h"
 
 namespace gfx {
@@ -20,6 +21,9 @@
  public:
   METADATA_HEADER(RoundedContainer);
 
+  // The default empty border insets.
+  static constexpr gfx::Insets kBorderInsets = gfx::Insets::VH(8, 0);
+
   enum class Behavior { kNotRounded, kTopRounded, kBottomRounded, kAllRounded };
 
   explicit RoundedContainer(Behavior corner_behavior = Behavior::kAllRounded);
@@ -27,6 +31,9 @@
   RoundedContainer& operator=(const RoundedContainer& other) = delete;
   ~RoundedContainer() override;
 
+  // Sets the empty border insets.
+  void SetBorderInsets(const gfx::Insets& insets);
+
  private:
   // views::View:
   void OnThemeChanged() override;
diff --git a/ash/system/bluetooth/bluetooth_detailed_view_controller.cc b/ash/system/bluetooth/bluetooth_detailed_view_controller.cc
index dc1f02f1..06f44c5 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view_controller.cc
+++ b/ash/system/bluetooth/bluetooth_detailed_view_controller.cc
@@ -4,6 +4,7 @@
 
 #include "ash/system/bluetooth/bluetooth_detailed_view_controller.h"
 
+#include "ash/constants/ash_switches.h"
 #include "ash/public/cpp/bluetooth_config_service.h"
 #include "ash/public/cpp/system_tray_client.h"
 #include "ash/shell.h"
@@ -11,6 +12,8 @@
 #include "ash/system/model/system_tray_model.h"
 #include "ash/system/unified/unified_system_tray_controller.h"
 #include "base/check.h"
+#include "base/command_line.h"
+#include "build/chromeos_buildflags.h"
 #include "chromeos/ash/services/bluetooth_config/public/cpp/cros_bluetooth_config_util.h"
 #include "mojo/public/cpp/bindings/clone_traits.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -21,7 +24,15 @@
 
 using bluetooth_config::IsBluetoothEnabledOrEnabling;
 using bluetooth_config::mojom::AudioOutputCapability;
+using bluetooth_config::mojom::BatteryProperties;
+using bluetooth_config::mojom::BluetoothDeviceProperties;
+using bluetooth_config::mojom::BluetoothDevicePropertiesPtr;
+using bluetooth_config::mojom::DeviceBatteryInfo;
+using bluetooth_config::mojom::DeviceBatteryInfoPtr;
 using bluetooth_config::mojom::DeviceConnectionState;
+using bluetooth_config::mojom::DeviceType;
+using bluetooth_config::mojom::PairedBluetoothDeviceProperties;
+using bluetooth_config::mojom::PairedBluetoothDevicePropertiesPtr;
 
 BluetoothDetailedViewController::BluetoothDetailedViewController(
     UnifiedSystemTrayController* tray_controller)
@@ -73,6 +84,11 @@
   connected_devices_.clear();
   previously_connected_devices_.clear();
 
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          switches::kQsAddFakeBluetoothDevices)) {
+    AddFakeBluetoothDevices();
+  }
+
   for (auto& paired_device : properties->paired_devices) {
     if (paired_device->device_properties->connection_state ==
         DeviceConnectionState::kConnected) {
@@ -129,4 +145,152 @@
   }
 }
 
+void BluetoothDetailedViewController::AddFakeBluetoothDevices() {
+#if !BUILDFLAG(IS_CHROMEOS_DEVICE)
+  // Only add fake devices in the linux-chromeos emulator. We don't want to
+  // increase the binary size for real devices.
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Unknown";
+    paired_device_properties->device_properties->public_name = u"Unknown";
+    paired_device_properties->device_properties->connection_state =
+        DeviceConnectionState::kConnected;
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kUnknown;
+
+    connected_devices_.push_back(mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Computer";
+    paired_device_properties->device_properties->public_name = u"Computer";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kComputer;
+    paired_device_properties->device_properties->connection_state =
+        DeviceConnectionState::kConnected;
+    paired_device_properties->device_properties->battery_info =
+        DeviceBatteryInfo::New();
+    paired_device_properties->device_properties->battery_info
+        ->default_properties = BatteryProperties::New();
+    paired_device_properties->device_properties->battery_info
+        ->default_properties->battery_percentage = 75;
+
+    connected_devices_.push_back(mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Phone";
+    paired_device_properties->device_properties->public_name = u"Phone";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kPhone;
+    paired_device_properties->device_properties->connection_state =
+        DeviceConnectionState::kConnected;
+    paired_device_properties->device_properties->battery_info =
+        DeviceBatteryInfo::New();
+    paired_device_properties->device_properties->battery_info->left_bud_info =
+        BatteryProperties::New();
+    paired_device_properties->device_properties->battery_info->left_bud_info
+        ->battery_percentage = 5;
+    paired_device_properties->device_properties->battery_info->case_info =
+        BatteryProperties::New();
+    paired_device_properties->device_properties->battery_info->case_info
+        ->battery_percentage = 64;
+    paired_device_properties->device_properties->battery_info->right_bud_info =
+        BatteryProperties::New();
+    paired_device_properties->device_properties->battery_info->right_bud_info
+        ->battery_percentage = 9;
+
+    connected_devices_.push_back(mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Game Controller";
+    paired_device_properties->device_properties->public_name =
+        u"Game Controller";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kGameController;
+
+    connected_devices_.push_back(mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Keyboard";
+    paired_device_properties->device_properties->public_name = u"Keyboard";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kKeyboard;
+
+    connected_devices_.push_back(mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Mouse";
+    paired_device_properties->device_properties->public_name = u"Mouse";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kMouse;
+
+    connected_devices_.push_back(mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Tablet";
+    paired_device_properties->device_properties->public_name = u"Tablet";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kTablet;
+
+    connected_devices_.push_back(mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Headset";
+    paired_device_properties->device_properties->public_name = u"Headset";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kHeadset;
+    paired_device_properties->device_properties->connection_state =
+        DeviceConnectionState::kConnecting;
+
+    previously_connected_devices_.push_back(
+        mojo::Clone(paired_device_properties));
+  }
+  {
+    PairedBluetoothDevicePropertiesPtr paired_device_properties =
+        PairedBluetoothDeviceProperties::New();
+    paired_device_properties->device_properties =
+        BluetoothDeviceProperties::New();
+    paired_device_properties->device_properties->id = "Video Camera";
+    paired_device_properties->device_properties->public_name = u"Video Camera";
+    paired_device_properties->device_properties->device_type =
+        DeviceType::kVideoCamera;
+    paired_device_properties->device_properties->connection_state =
+        DeviceConnectionState::kNotConnected;
+
+    previously_connected_devices_.push_back(
+        mojo::Clone(paired_device_properties));
+  }
+#endif  // !BUILDFLAG(IS_CHROMEOS_DEVICE)
+}
+
 }  // namespace ash
diff --git a/ash/system/bluetooth/bluetooth_detailed_view_controller.h b/ash/system/bluetooth/bluetooth_detailed_view_controller.h
index 3d04d1dc..2e2ddb1 100644
--- a/ash/system/bluetooth/bluetooth_detailed_view_controller.h
+++ b/ash/system/bluetooth/bluetooth_detailed_view_controller.h
@@ -66,6 +66,10 @@
   // Bluetooth state has changed.
   void BluetoothEnabledStateChanged();
 
+  // Adds fake devices for manual testing to `previously_connected_devices_`
+  // and `connected_devices_`.
+  void AddFakeBluetoothDevices();
+
   const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
 
   mojo::Remote<bluetooth_config::mojom::CrosBluetoothConfig>
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc
index b39d248..53b21dad 100644
--- a/ash/system/ime_menu/ime_menu_tray.cc
+++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -22,6 +22,7 @@
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/style/ash_color_provider.h"
 #include "ash/style/icon_button.h"
+#include "ash/style/rounded_container.h"
 #include "ash/system/ime_menu/ime_list_view.h"
 #include "ash/system/model/system_tray_model.h"
 #include "ash/system/tray/detailed_view_delegate.h"
@@ -81,10 +82,10 @@
   const int max_items = 5;
   const int min_items = 1;
   const int tray_item_height = kTrayPopupItemMinHeight;
-  // QsRevamp has insets at the top and bottom of the scroll view.
+  // QsRevamp has insets at the top and bottom of the RoundedContainer.
   const int insets = features::IsQsRevampEnabled()
-                         ? kQsScrollViewInsideBorderInsets.top() +
-                               kQsScrollViewInsideBorderInsets.bottom()
+                         ? RoundedContainer::kBorderInsets.top() +
+                               RoundedContainer::kBorderInsets.bottom()
                          : 0;
   return gfx::Range(tray_item_height * min_items + insets,
                     tray_item_height * max_items + insets);
diff --git a/ash/system/tray/tray_constants.h b/ash/system/tray/tray_constants.h
index f53dbcf..d40d0b0 100644
--- a/ash/system/tray/tray_constants.h
+++ b/ash/system/tray/tray_constants.h
@@ -30,9 +30,6 @@
 // The width of the revamped tray menu.
 constexpr int kRevampedTrayMenuWidth = 440;
 
-// The tray detailed view's scroll view has padding at the top and bottom.
-constexpr auto kQsScrollViewInsideBorderInsets = gfx::Insets::VH(8, 0);
-
 constexpr int kTrayPopupAutoCloseDelayInSeconds = 2;
 constexpr int kTrayPopupAutoCloseDelayInSecondsWithSpokenFeedback = 5;
 constexpr int kTrayPopupPaddingHorizontal = 18;
diff --git a/ash/system/tray/tray_detailed_view.cc b/ash/system/tray/tray_detailed_view.cc
index 776c692..55309ab 100644
--- a/ash/system/tray/tray_detailed_view.cc
+++ b/ash/system/tray/tray_detailed_view.cc
@@ -115,9 +115,6 @@
     box_layout_ = SetLayoutManager(std::make_unique<views::BoxLayout>(
         views::BoxLayout::Orientation::kVertical));
     // NOTE: Pre-QsRevamp, insets are added in ViewHierarchyChanged().
-    if (features::IsQsRevampEnabled()) {
-      box_layout_->set_inside_border_insets(kQsScrollViewInsideBorderInsets);
-    }
   }
 
   ScrollContentsView(const ScrollContentsView&) = delete;
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_af.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_af.xtb
index b303dcea..cf9b199 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_af.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_af.xtb
@@ -47,6 +47,7 @@
 <translation id="2501953888035679275">Neem foto's en neem video's op met jou kamera.</translation>
 <translation id="2517472476991765520">Skandeer</translation>
 <translation id="2549985041256363841">Begin opname</translation>
+<translation id="2577915835281444458">Opname sal binnekort stop. Gaan na toestelberging om spasie beskikbaar te maak.</translation>
 <translation id="2599796128805996109">Agterste kamera</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" /> / <ph name="MAXIMAL" />s</translation>
 <translation id="2761536921376153655">Soort skandering</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_bs.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_bs.xtb
index c6344f6..c52aac6 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_bs.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_bs.xtb
@@ -47,6 +47,7 @@
 <translation id="2501953888035679275">Snimajte fotografije i videozapise kamerom.</translation>
 <translation id="2517472476991765520">Skeniraj</translation>
 <translation id="2549985041256363841">Započni snimanje</translation>
+<translation id="2577915835281444458">Snimanje će se uskoro zaustaviti. Otvorite pohranu uređaja da biste oslobodili prostor.</translation>
 <translation id="2599796128805996109">Zadnja kamera</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" />/<ph name="MAXIMAL" /> s</translation>
 <translation id="2761536921376153655">Vrsta skeniranja</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_el.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_el.xtb
index 164b52110..03d33a3 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_el.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_el.xtb
@@ -31,6 +31,8 @@
 <translation id="1862930711583847113">Δεν είναι δυνατή η εξαγωγή του αρχείου <ph name="FILE" /></translation>
 <translation id="1899697626337024495">Ανάλυση φωτογραφίας</translation>
 <translation id="1925845977604399247">Μετάβαση στο Gallery</translation>
+<translation id="199526504800285197">Η εγγραφή διακόπηκε</translation>
+<translation id="1995951722691075581">Η εγγραφή σας διακόπηκε λόγω περιορισμένου αποθηκευτικού χώρου συσκευής. Για να εγγράψετε περισσότερα βίντεο, θα πρέπει να ελευθερώσετε χώρο στη συσκευή σας.</translation>
 <translation id="2022953316617983419">Κωδικός QR</translation>
 <translation id="2036868001356139588">Διάρκεια χρονομέτρου</translation>
 <translation id="2050339315714019657">Κάθετα</translation>
@@ -47,6 +49,7 @@
 <translation id="2501953888035679275">Τραβήξτε φωτογραφίες και βίντεο με την κάμερά σας.</translation>
 <translation id="2517472476991765520">Σάρωση</translation>
 <translation id="2549985041256363841">Έναρξη εγγραφής</translation>
+<translation id="2577915835281444458">Η εγγραφή θα διακοπεί σύντομα. Μεταβείτε στον αποθηκευτικό χώρο της συσκευής για να ελευθερώσετε χώρο.</translation>
 <translation id="2599796128805996109">Πίσω κάμερα</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" /> / <ph name="MAXIMAL" /> δευτ.</translation>
 <translation id="2761536921376153655">Τύπος σάρωσης</translation>
@@ -77,6 +80,7 @@
 <translation id="3810838688059735925">Βίντεο</translation>
 <translation id="3838931309141338733">Σάρωση γραμμωτού κώδικα</translation>
 <translation id="3892148308691398805">Αντιγραφή κειμένου</translation>
+<translation id="4060608699153044055">Δεν είναι δυνατή η εγγραφή λόγω περιορισμένου αποθηκευτικού χώρου συσκευής. Για να ξεκινήσετε την εγγραφή, θα πρέπει να ελευθερώσετε χώρο στη συσκευή σας.</translation>
 <translation id="4061162772429051350"><ph name="MAGAPIXELS_AMOUNT" /> MP</translation>
 <translation id="4118525110028899586">Παύση εγγραφής</translation>
 <translation id="4121305183798804752">Εντοπίστηκε έγγραφο.</translation>
@@ -160,6 +164,7 @@
 <translation id="7748344063862150053">Επάνω δεξιά γωνία του εγγράφου</translation>
 <translation id="7933675232020478311">Μετακινείται με κατεύθυνση προς τα κάτω και δεξιά</translation>
 <translation id="7983668134180549431">Εντοπίστηκε κείμενο.</translation>
+<translation id="8079255378695216066">Δεν είναι δυνατή η έναρξη της εγγραφής</translation>
 <translation id="8120146556401698679">Μετακίνηση, κλίση και εστίαση</translation>
 <translation id="8131740175452115882">Επιβεβαίωση</translation>
 <translation id="8145038249676204903">Μετάβαση στη λειτουργία λήψης φωτογραφίας</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb
index 11f1a700..f5c80f3 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_fr-CA.xtb
@@ -47,6 +47,7 @@
 <translation id="2501953888035679275">Prenez des photos et enregistrez des vidéos avec votre appareil photo.</translation>
 <translation id="2517472476991765520">Rechercher</translation>
 <translation id="2549985041256363841">Commencer l'enregistrement</translation>
+<translation id="2577915835281444458">L'enregistrement va bientôt s'arrêter. Accédez au stockage de l'appareil pour libérer de l'espace.</translation>
 <translation id="2599796128805996109">Appareil photo arrière</translation>
 <translation id="2759905922487820242"><ph name="MAXIMAL" /> de <ph name="CURRENT" /></translation>
 <translation id="2761536921376153655">Type de recherche</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb
index 7ffa59b5..34706270 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_hr.xtb
@@ -47,6 +47,7 @@
 <translation id="2501953888035679275">Snimajte fotografije i videozapise svojim fotoaparatom.</translation>
 <translation id="2517472476991765520">Traži</translation>
 <translation id="2549985041256363841">Početak snimanja</translation>
+<translation id="2577915835281444458">Snimanje će se uskoro zaustaviti. Otvorite pohranu uređaja da biste oslobodili prostor.</translation>
 <translation id="2599796128805996109">Stražnji fotoaparat</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" /> / <ph name="MAXIMAL" /> s</translation>
 <translation id="2761536921376153655">Vrsta pretraživanja</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb
index 62154587..190492d5 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_km.xtb
@@ -47,6 +47,7 @@
 <translation id="2501953888035679275">ថតរូប និង​ថតវីដេអូ​ដោយ​ប្រើ​កាមេរ៉ា​របស់អ្នក។</translation>
 <translation id="2517472476991765520">ស្កេន</translation>
 <translation id="2549985041256363841">ចាប់​ផ្តើម​ថត</translation>
+<translation id="2577915835281444458">ការថត​នឹង​ឈប់​ក្នុងពេល​ឆាប់ៗនេះ។ សូមចូលទៅ​កាន់​ទំហំផ្ទុក​ឧបករណ៍ ដើម្បី​សម្អាតទំហំផ្ទុក។</translation>
 <translation id="2599796128805996109">កាមេរ៉ាក្រោយ</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" /> / <ph name="MAXIMAL" /> វិ</translation>
 <translation id="2761536921376153655">ប្រភេទនៃការស្កេន</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_lo.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_lo.xtb
index af8cf3cf..9850d38 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_lo.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_lo.xtb
@@ -31,6 +31,8 @@
 <translation id="1862930711583847113">ບໍ່ສາມາດສົ່ງອອກ <ph name="FILE" /> ໄດ້</translation>
 <translation id="1899697626337024495">ຄວາມລະອຽດຮູບພາບ</translation>
 <translation id="1925845977604399247">ໄປຫາຄັງຮູບ</translation>
+<translation id="199526504800285197">ຢຸດການບັນທຶກແລ້ວ</translation>
+<translation id="1995951722691075581">ຢຸດການບັນທຶກຂອງທ່ານແລ້ວເນື່ອງຈາກພື້ນທີ່ຈັດເກັບຂໍ້ມູນອຸປະກອນເຫຼືອໜ້ອຍ. ເພື່ອບັນທຶກວິດີໂອເພີ່ມເຕີມ, ທ່ານຈະຕ້ອງສ້າງພື້ນທີ່ຫວ່າງຢູ່ອຸປະກອນຂອງທ່ານກ່ອນ.</translation>
 <translation id="2022953316617983419">ລະຫັດ QR</translation>
 <translation id="2036868001356139588">ໄລຍະເວລາຂອງໂມງນັບຖອຍຫຼັງ</translation>
 <translation id="2050339315714019657">ລວງຕັ້ງ</translation>
@@ -47,6 +49,7 @@
 <translation id="2501953888035679275">ຖ່າຍຮູບ ແລະ ບັນທຶກວິດີໂອດ້ວຍກ້ອງຖ່າຍຮູບຂອງທ່ານ.</translation>
 <translation id="2517472476991765520">ສະແກນ</translation>
 <translation id="2549985041256363841">ເລີ່ມການບັນທຶກ</translation>
+<translation id="2577915835281444458">ຈະຢຸດການບັນທຶກໃນໄວໆນີ້. ເຂົ້າໄປບ່ອນຈັດເກັບຂໍ້ມູນຂອງອຸປະກອນເພື່ອສ້າງພື້ນທີ່ຫວ່າງ.</translation>
 <translation id="2599796128805996109">ກ້ອງຫຼັງ</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" /> / <ph name="MAXIMAL" />ວິ</translation>
 <translation id="2761536921376153655">ປະເພດການສະແກນ</translation>
@@ -77,6 +80,7 @@
 <translation id="3810838688059735925">ວິ​ດີ​ໂອ</translation>
 <translation id="3838931309141338733">ສະແກນບາໂຄດ</translation>
 <translation id="3892148308691398805">ສຳເນົາຂໍ້ຄວາມ</translation>
+<translation id="4060608699153044055">ທ່ານບໍ່ສາມາດບັນທຶກໄດ້ເນື່ອງຈາກພື້ນທີ່ຈັດເກັບຂໍ້ມູນອຸປະກອນເຫຼືອໜ້ອຍ. ເພື່ອເລີ່ມການບັນທຶກ, ທ່ານຈະຕ້ອງສ້າງພື້ນທີ່ຫວ່າງຢູ່ອຸປະກອນຂອງທ່ານກ່ອນ.</translation>
 <translation id="4061162772429051350"><ph name="MAGAPIXELS_AMOUNT" /> MP</translation>
 <translation id="4118525110028899586">ຢຸດການບັນທຶກໄວ້ຊົ່ວຄາວ</translation>
 <translation id="4121305183798804752">ກວດພົບເອກະສານ</translation>
@@ -160,6 +164,7 @@
 <translation id="7748344063862150053">ມຸມຂວາເທິງຂອງເອກະສານ</translation>
 <translation id="7933675232020478311">ກຳລັງຍ້າຍໄປທາງຂວາລຸ່ມ</translation>
 <translation id="7983668134180549431">ກວດພົບຂໍ້ຄວາມ.</translation>
+<translation id="8079255378695216066">ບໍ່ສາມາດເລີ່ມການບັນທຶກໄດ້</translation>
 <translation id="8120146556401698679">ເລື່ອນ ອຽງ ຊູມ</translation>
 <translation id="8131740175452115882">ຢືນ​ຢັນ</translation>
 <translation id="8145038249676204903">ປ່ຽນເປັນຖ່າຍຮູບ</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb
index 5e30fb2a0..61094af 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-BR.xtb
@@ -47,6 +47,7 @@
 <translation id="2501953888035679275">Tire fotos e grave vídeos com sua câmera.</translation>
 <translation id="2517472476991765520">Verificar</translation>
 <translation id="2549985041256363841">Iniciar gravação</translation>
+<translation id="2577915835281444458">A gravação vai ser interrompida em breve. Acesse o armazenamento do dispositivo para liberar espaço.</translation>
 <translation id="2599796128805996109">Câmera traseira</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" /> / <ph name="MAXIMAL" /> s</translation>
 <translation id="2761536921376153655">Tipo de leitura</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb
index eeebe6e..863e954 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_uk.xtb
@@ -31,6 +31,8 @@
 <translation id="1862930711583847113">Не вдається експортувати файл "<ph name="FILE" />"</translation>
 <translation id="1899697626337024495">Роздільна здатність фото</translation>
 <translation id="1925845977604399247">Перейти в Галерею</translation>
+<translation id="199526504800285197">Запис зупинено</translation>
+<translation id="1995951722691075581">На пристрої недостатньо пам’яті. Щоб записувати більше відео, звільніть місце.</translation>
 <translation id="2022953316617983419">QR-код</translation>
 <translation id="2036868001356139588">Тривалість таймера</translation>
 <translation id="2050339315714019657">Портретна</translation>
@@ -77,6 +79,7 @@
 <translation id="3810838688059735925">Відео</translation>
 <translation id="3838931309141338733">Сканувати штрих-код</translation>
 <translation id="3892148308691398805">Копіювати текст</translation>
+<translation id="4060608699153044055">На пристрої недостатньо пам’яті. Щоб почати запис, звільніть місце.</translation>
 <translation id="4061162772429051350"><ph name="MAGAPIXELS_AMOUNT" /> Мп</translation>
 <translation id="4118525110028899586">Призупинити запис</translation>
 <translation id="4121305183798804752">Виявлено документ</translation>
@@ -160,6 +163,7 @@
 <translation id="7748344063862150053">Верхній правий кут документа</translation>
 <translation id="7933675232020478311">Переміщення вниз і вправо</translation>
 <translation id="7983668134180549431">Виявлений текст.</translation>
+<translation id="8079255378695216066">Не вдається почати запис</translation>
 <translation id="8120146556401698679">Панорамування нахил масштаб</translation>
 <translation id="8131740175452115882">Підтвердити</translation>
 <translation id="8145038249676204903">Перейти в режим фотозйомки</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_ur.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_ur.xtb
index 2487824..635f2189 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_ur.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_ur.xtb
@@ -47,6 +47,7 @@
 <translation id="2501953888035679275">اپنے کیمرے سے تصاویر لیں اور ویڈیوز ریکارڈ کریں۔</translation>
 <translation id="2517472476991765520">اسکین کریں</translation>
 <translation id="2549985041256363841">ریکارڈنگ شروع کریں</translation>
+<translation id="2577915835281444458">ریکارڈنگ جلد ہی بند ہو جائے گی۔ اسپیس خالی کرنے کے لیے آلہ کی اسٹوریج پر جائیں۔</translation>
 <translation id="2599796128805996109">پیچھے کا کیمرہ</translation>
 <translation id="2759905922487820242"><ph name="CURRENT" /> / <ph name="MAXIMAL" />سیکنڈ</translation>
 <translation id="2761536921376153655">اسکین کی قسم</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-HK.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-HK.xtb
index 1fdac53..371468e2 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-HK.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-HK.xtb
@@ -31,6 +31,8 @@
 <translation id="1862930711583847113">無法匯出 <ph name="FILE" /></translation>
 <translation id="1899697626337024495">相機解像度</translation>
 <translation id="1925845977604399247">前往相片集</translation>
+<translation id="199526504800285197">已停止錄影</translation>
+<translation id="1995951722691075581">裝置儲存空間不足,因此已停止錄影。如要錄製更多影片,請先釋出裝置空間。</translation>
 <translation id="2022953316617983419">二維條碼</translation>
 <translation id="2036868001356139588">計時器時間</translation>
 <translation id="2050339315714019657">直向</translation>
@@ -78,6 +80,7 @@
 <translation id="3810838688059735925">影片</translation>
 <translation id="3838931309141338733">掃描條碼</translation>
 <translation id="3892148308691398805">複製文字</translation>
+<translation id="4060608699153044055">裝置儲存空間不足,因此無法錄影。如要開始錄影,請先釋出裝置空間。</translation>
 <translation id="4061162772429051350"><ph name="MAGAPIXELS_AMOUNT" /> 百萬像素</translation>
 <translation id="4118525110028899586">暫停錄影</translation>
 <translation id="4121305183798804752">偵測到文件</translation>
@@ -161,6 +164,7 @@
 <translation id="7748344063862150053">文件右上角</translation>
 <translation id="7933675232020478311">向右下移</translation>
 <translation id="7983668134180549431">已偵測到文字。</translation>
+<translation id="8079255378695216066">無法開始錄影</translation>
 <translation id="8120146556401698679">平移 傾斜 縮放</translation>
 <translation id="8131740175452115882">確定</translation>
 <translation id="8145038249676204903">切換至拍照模式</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-TW.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-TW.xtb
index 79fc877..571edb7 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-TW.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_zh-TW.xtb
@@ -31,6 +31,8 @@
 <translation id="1862930711583847113">無法匯出「<ph name="FILE" />」</translation>
 <translation id="1899697626337024495">相片解析度</translation>
 <translation id="1925845977604399247">前往相片庫</translation>
+<translation id="199526504800285197">已停止錄影</translation>
+<translation id="1995951722691075581">裝置儲存空間不足,因此已停止錄影。如要錄製更多影片,請先釋出裝置空間。</translation>
 <translation id="2022953316617983419">QR 圖碼</translation>
 <translation id="2036868001356139588">計時器倒數時間</translation>
 <translation id="2050339315714019657">直向</translation>
@@ -78,6 +80,7 @@
 <translation id="3810838688059735925">影片</translation>
 <translation id="3838931309141338733">掃描條碼</translation>
 <translation id="3892148308691398805">複製文字</translation>
+<translation id="4060608699153044055">裝置儲存空間不足,因此無法錄影。如要開始錄影,請先釋出裝置空間。</translation>
 <translation id="4061162772429051350"><ph name="MAGAPIXELS_AMOUNT" /> 百萬像素</translation>
 <translation id="4118525110028899586">暫停錄影</translation>
 <translation id="4121305183798804752">偵測到文件</translation>
@@ -161,6 +164,7 @@
 <translation id="7748344063862150053">文件右上角</translation>
 <translation id="7933675232020478311">向右下移動</translation>
 <translation id="7983668134180549431">偵測到文字。</translation>
+<translation id="8079255378695216066">無法開始錄影</translation>
 <translation id="8120146556401698679">平移 傾斜 縮放</translation>
 <translation id="8131740175452115882">確認</translation>
 <translation id="8145038249676204903">切換為拍照模式</translation>
diff --git a/ash/webui/diagnostics_ui/backend/input_data_provider.cc b/ash/webui/diagnostics_ui/backend/input_data_provider.cc
index c893a17..2715f6ce 100644
--- a/ash/webui/diagnostics_ui/backend/input_data_provider.cc
+++ b/ash/webui/diagnostics_ui/backend/input_data_provider.cc
@@ -23,7 +23,6 @@
 #include "base/logging.h"
 #include "base/ranges/algorithm.h"
 #include "ui/display/screen.h"
-#include "ui/display/types/display_constants.h"
 #include "ui/events/devices/device_data_manager.h"
 #include "ui/events/devices/input_device.h"
 
@@ -197,7 +196,7 @@
     uint32_t evdev_id,
     MoveAppToTestingScreenCallback callback) {
   aura::Window* window = widget_->GetNativeWindow();
-  int64_t origin_display_id =
+  int64_t current_display_id =
       display::Screen::GetScreen()->GetDisplayNearestWindow(window).id();
 
   // Find the testing touchscreen device.
@@ -213,10 +212,14 @@
          ui::DeviceDataManager::GetInstance()->GetTouchscreenDevices()) {
       // Only move if the app is not already in the correct display.
       if (device.name == it->second->name &&
-          origin_display_id != device.target_display_id &&
+          current_display_id != device.target_display_id &&
           device.target_display_id != display::kInvalidDisplayId) {
         if (window_util::MoveWindowToDisplay(window,
                                              device.target_display_id)) {
+          // Only if window is successfully moved, we record the
+          // `previous_display_id_` so that we can move the window back when the
+          // tester is closed.
+          previous_display_id_ = current_display_id;
           std::move(callback).Run(true);
           return;
         }
@@ -227,6 +230,22 @@
   std::move(callback).Run(false);
 }
 
+void InputDataProvider::MoveAppBackToPreviousScreen(
+    MoveAppBackToPreviousScreenCallback callback) {
+  if (previous_display_id_ != display::kInvalidDisplayId &&
+      window_util::MoveWindowToDisplay(widget_->GetNativeWindow(),
+                                       previous_display_id_)) {
+    previous_display_id_ = display::kInvalidDisplayId;
+    std::move(callback).Run(true);
+    return;
+  }
+
+  // Always reset previous_display_id_ after MoveAppBackToPreviousScreen is
+  // called. So it won't affect next time the function is used.
+  previous_display_id_ = display::kInvalidDisplayId;
+  std::move(callback).Run(false);
+}
+
 void InputDataProvider::UpdateMaySendEvents() {
   const bool widget_open = !widget_->IsClosed();
   const bool widget_active = widget_->IsActive();
diff --git a/ash/webui/diagnostics_ui/backend/input_data_provider.h b/ash/webui/diagnostics_ui/backend/input_data_provider.h
index ddf945d..398da4f 100644
--- a/ash/webui/diagnostics_ui/backend/input_data_provider.h
+++ b/ash/webui/diagnostics_ui/backend/input_data_provider.h
@@ -26,6 +26,7 @@
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "ui/aura/window.h"
 #include "ui/display/manager/display_configurator.h"
+#include "ui/display/types/display_constants.h"
 #include "ui/events/ozone/device/device_event.h"
 #include "ui/events/ozone/device/device_event_observer.h"
 #include "ui/events/ozone/device/device_manager.h"
@@ -91,6 +92,9 @@
   void MoveAppToTestingScreen(uint32_t evdev_id,
                               MoveAppToTestingScreenCallback callback) override;
 
+  void MoveAppBackToPreviousScreen(
+      MoveAppBackToPreviousScreenCallback callback) override;
+
   // ui::DeviceEventObserver:
   void OnDeviceEvent(const ui::DeviceEvent& event) override;
 
@@ -160,6 +164,10 @@
   // display is testable or not.
   bool is_internal_display_on_ = true;
 
+  // Id of the previous display the Diagnostics app was in, used to move the app
+  // back to previous display when the touchscreen tester is closed.
+  int64_t previous_display_id_ = display::kInvalidDisplayId;
+
   // Map by evdev ids to information blocks.
   base::flat_map<int, mojom::KeyboardInfoPtr> keyboards_;
   base::flat_map<int, std::unique_ptr<InputDataProviderKeyboard::AuxData>>
diff --git a/ash/webui/diagnostics_ui/backend/input_data_provider_unittest.cc b/ash/webui/diagnostics_ui/backend/input_data_provider_unittest.cc
index f433370..c68d7f6 100644
--- a/ash/webui/diagnostics_ui/backend/input_data_provider_unittest.cc
+++ b/ash/webui/diagnostics_ui/backend/input_data_provider_unittest.cc
@@ -2354,5 +2354,70 @@
   ASSERT_TRUE(moveAppToTestingScreenFuture.Take());
 }
 
+// Test the app can be moved back to original screen.
+TEST_F(InputDataProviderTest, MoveAppBackToPreviousScreen) {
+  // Construct a touchscreen. "/dev/input/event2" maps to a touchscreen.
+  ui::DeviceEvent event0(ui::DeviceEvent::DeviceType::INPUT,
+                         ui::DeviceEvent::ActionType::ADD,
+                         base::FilePath("/dev/input/event2"));
+  provider_->OnDeviceEvent(event0);
+  base::RunLoop().RunUntilIdle();
+
+  base::test::TestFuture<std::vector<mojom::KeyboardInfoPtr>,
+                         std::vector<mojom::TouchDeviceInfoPtr>>
+      getConnectedDevicesFuture;
+  provider_->GetConnectedDevices(getConnectedDevicesFuture.GetCallback());
+
+  const auto& keyboards = getConnectedDevicesFuture.Get<0>();
+  const auto& touch_devices = getConnectedDevicesFuture.Get<1>();
+
+  ASSERT_EQ(0ul, keyboards.size());
+  ASSERT_EQ(1ul, touch_devices.size());
+
+  // Set up two fake displays.
+  UpdateDisplay("500x400, 600x400");
+  display::Screen* screen = display::Screen::GetScreen();
+  const int64_t primary_display_id = screen->GetAllDisplays()[0].id();
+  const int64_t secondary_display_id = screen->GetAllDisplays()[1].id();
+
+  // Initialize one touchscreen in DeviceDataManager.
+  std::vector<ui::TouchscreenDevice> touchscreen_devices;
+  touchscreen_devices.push_back(ui::TouchscreenDevice(
+      kDeviceId1, ui::InputDeviceType::INPUT_DEVICE_INTERNAL,
+      touch_devices[0]->name, /*size=*/gfx::Size(600, 400),
+      /*touch_points=*/0));
+  ui::DeviceDataManagerTestApi().SetTouchscreenDevices(touchscreen_devices);
+
+  // Associate the touchscreen in DeviceDataManager to the fake display.
+  std::vector<ui::TouchDeviceTransform> touch_device_transforms(1);
+  touch_device_transforms[0].display_id = secondary_display_id;
+  touch_device_transforms[0].device_id = kDeviceId1;
+  ui::DeviceDataManager::GetInstance()->ConfigureTouchDevices(
+      touch_device_transforms);
+
+  // Before move: make sure the app is currently in the primary display.
+  aura::Window* window = widget_->GetNativeWindow();
+  ASSERT_EQ(primary_display_id, screen->GetDisplayNearestWindow(window).id());
+
+  // Call MoveAppToTestingScreen function with the touchscreen evdev id 2, which
+  // maps to the secondary display.
+  base::test::TestFuture<bool> moveAppToTestingScreenFuture;
+  provider_->MoveAppToTestingScreen(/*evdev_id=*/2,
+                                    moveAppToTestingScreenFuture.GetCallback());
+
+  // Confirm the app has been moved to the secondary display.
+  ASSERT_EQ(secondary_display_id, screen->GetDisplayNearestWindow(window).id());
+  ASSERT_TRUE(moveAppToTestingScreenFuture.Get());
+
+  // Call MoveAppBackToPreviousScreen to move the app back to original display.
+  base::test::TestFuture<bool> moveAppBackToPreviousScreenFuture;
+  provider_->MoveAppBackToPreviousScreen(
+      moveAppBackToPreviousScreenFuture.GetCallback());
+
+  // Confirm the app has been moved back to the original display.
+  ASSERT_EQ(primary_display_id, screen->GetDisplayNearestWindow(window).id());
+  ASSERT_TRUE(moveAppBackToPreviousScreenFuture.Get());
+}
+
 }  // namespace diagnostics
 }  // namespace ash
diff --git a/ash/webui/diagnostics_ui/mojom/input_data_provider.mojom b/ash/webui/diagnostics_ui/mojom/input_data_provider.mojom
index 45d31dc2..c924f19 100644
--- a/ash/webui/diagnostics_ui/mojom/input_data_provider.mojom
+++ b/ash/webui/diagnostics_ui/mojom/input_data_provider.mojom
@@ -227,4 +227,9 @@
   // testing touchscreen. The function returns a boolean indicating if the
   // app has been moved.
   MoveAppToTestingScreen(uint32 evdev_id) => (bool is_moved);
+
+  // When touchscreen tester is closed, the Diagnostics app should be moved
+  // back to previous screen, only if it was moved to a different screen when
+  // the tester was launched.
+  MoveAppBackToPreviousScreen() => (bool is_moved);
 };
diff --git a/ash/webui/diagnostics_ui/resources/fake_input_data_provider.ts b/ash/webui/diagnostics_ui/resources/fake_input_data_provider.ts
index 940e2ed..629d3f2 100644
--- a/ash/webui/diagnostics_ui/resources/fake_input_data_provider.ts
+++ b/ash/webui/diagnostics_ui/resources/fake_input_data_provider.ts
@@ -22,6 +22,7 @@
       InternalDisplayPowerStateObserverRemote;
   private touchDevices_: TouchDeviceInfo[] = [];
   private moveAppToTestingScreenCalled: number = 0;
+  private moveAppBackToPreviousScreenCalled: number = 0;
   constructor() {
     this.registerMethods();
   }
@@ -33,6 +34,7 @@
     this.keyboards_ = [];
     this.touchDevices_ = [];
     this.moveAppToTestingScreenCalled = 0;
+    this.moveAppBackToPreviousScreenCalled = 0;
 
     this.registerMethods();
   }
@@ -210,4 +212,19 @@
   getMoveAppToTestingScreenCalled(): number {
     return this.moveAppToTestingScreenCalled;
   }
+
+  /**
+   * Fakes the function to move the Diagnostics app back to previous screen.
+   */
+  moveAppBackToPreviousScreen(): Promise<{isMoved: boolean}> {
+    this.moveAppBackToPreviousScreenCalled++;
+    return Promise.resolve({isMoved: true});
+  }
+
+  /**
+   * Returns the number of times moveAppBackToPreviousScreen function is called.
+   */
+  getMoveAppBackToPreviousScreenCalled(): number {
+    return this.moveAppBackToPreviousScreenCalled;
+  }
 }
diff --git a/ash/webui/diagnostics_ui/resources/touchscreen_tester.ts b/ash/webui/diagnostics_ui/resources/touchscreen_tester.ts
index 08eb128ca6..596c19ae 100644
--- a/ash/webui/diagnostics_ui/resources/touchscreen_tester.ts
+++ b/ash/webui/diagnostics_ui/resources/touchscreen_tester.ts
@@ -121,11 +121,12 @@
    * 'fullscreenchange' event to handle this case.
    */
   private closeDialogWhenExitFullscreen(): void {
-    this.shadowRoot!.addEventListener('fullscreenchange', (e: Event) => {
+    this.shadowRoot!.addEventListener('fullscreenchange', async (e: Event) => {
       e.preventDefault();
       if (!document.fullscreenElement) {
         this.getDialog(DialogType.INTRO).close();
         this.getDialog(DialogType.CANVAS).close();
+        await this.inputDataProvider.moveAppBackToPreviousScreen();
         if (this.receiver_) {
           this.receiver_.$.close();
         }
diff --git a/ash/webui/file_manager/resources/BUILD.gn b/ash/webui/file_manager/resources/BUILD.gn
index 3654a3f..108f2e46 100644
--- a/ash/webui/file_manager/resources/BUILD.gn
+++ b/ash/webui/file_manager/resources/BUILD.gn
@@ -50,7 +50,6 @@
 js_type_check("closure_compile") {
   deps = [
     ":main_js",
-    "//ui/webui/resources/js:cr.m",
     "//ui/webui/resources/js:load_time_data.m",
   ]
   closure_flags =
diff --git a/ash/webui/file_manager/resources/main.js b/ash/webui/file_manager/resources/main.js
index e3eea125..e797c083 100644
--- a/ash/webui/file_manager/resources/main.js
+++ b/ash/webui/file_manager/resources/main.js
@@ -5,9 +5,6 @@
 import './strings.m.js';
 import 'chrome://file-manager/background/js/metrics_start.js';
 import './test_util_swa.js';
-// Imported for the side-effect of defining |window.webUIResponse|, which is
-// assumed to exist below.
-import 'chrome://resources/js/cr.m.js';
 
 import {background} from 'chrome://file-manager/background/js/file_manager_base.js';
 import {VolumeManagerImpl} from 'chrome://file-manager/background/js/volume_manager_impl.js';
@@ -29,18 +26,8 @@
       console.warn('Failed to get the app ID', e);
     }
 
-    // Temporarily remove window.cr.webUI* while the foreground script loads.
-    const origWebUIResponse = window.webUIResponse;
-    const origWebUIListenerCallback = window.webUIListenerCallback;
-    delete window.cr.webUIResponse;
-    delete window.cr.webUIListenerCallback;
-
     await new ScriptLoader('foreground/js/main.js', {type: 'module'}).load();
 
-    // Restore the window.cr.webUI* objects.
-    window.cr.webUIResponse = origWebUIResponse;
-    window.cr.webUIListenerCallback = origWebUIListenerCallback;
-
     console.warn(
         '%cYou are running Files System Web App',
         'font-size: 2em; background-color: #ff0; color: #000;');
diff --git a/ash/webui/personalization_app/personalization_app_ui.cc b/ash/webui/personalization_app/personalization_app_ui.cc
index c774ab7..967429a 100644
--- a/ash/webui/personalization_app/personalization_app_ui.cc
+++ b/ash/webui/personalization_app/personalization_app_ui.cc
@@ -264,7 +264,7 @@
 }
 
 bool ShouldHandleWebUIRequest(const std::string& path) {
-  return base::StartsWith(path, "wallpaper.png");
+  return base::StartsWith(path, "wallpaper.jpg");
 }
 
 }  // namespace
@@ -374,7 +374,7 @@
     content::WebUIDataSource::GotDataCallback callback) {
   DCHECK(base::Contains(path, "?key="))
       << "wallpaper key must be provided to prevent browser cache collisions";
-  wallpaper_provider_->GetWallpaperAsPngBytes(std::move(callback));
+  wallpaper_provider_->GetWallpaperAsJpegBytes(std::move(callback));
 }
 
 WEB_UI_CONTROLLER_TYPE_IMPL(PersonalizationAppUI)
diff --git a/ash/webui/personalization_app/personalization_app_wallpaper_provider.h b/ash/webui/personalization_app/personalization_app_wallpaper_provider.h
index 66e6863..8c6ef5ec 100644
--- a/ash/webui/personalization_app/personalization_app_wallpaper_provider.h
+++ b/ash/webui/personalization_app/personalization_app_wallpaper_provider.h
@@ -18,7 +18,7 @@
   virtual void BindInterface(
       mojo::PendingReceiver<mojom::WallpaperProvider> receiver) = 0;
 
-  virtual void GetWallpaperAsPngBytes(
+  virtual void GetWallpaperAsJpegBytes(
       content::WebUIDataSource::GotDataCallback callback) = 0;
 
   // Not all users that can view the personalization app can also see google
diff --git a/ash/webui/personalization_app/resources/css/common.css b/ash/webui/personalization_app/resources/css/common.css
index 25dc879..a19f519 100644
--- a/ash/webui/personalization_app/resources/css/common.css
+++ b/ash/webui/personalization_app/resources/css/common.css
@@ -282,8 +282,8 @@
 .preview-text-placeholder > .placeholder:first-child {
   /* Each row is 83 ms after the prior element. */
   --animation-delay: calc(1s + 83ms);
-  width: 20%;
   height: 20px;
+  width: 20%;
 }
 
 .preview-text-container > span:nth-child(2) {
@@ -293,8 +293,8 @@
 
 .preview-text-placeholder > .placeholder:nth-child(2) {
   --animation-delay: calc(1s + 83ms * 2);
-  width: 75%;
   height: 24px;
+  width: 75%;
 }
 
 .preview-text-container > span:nth-child(n+3) {
@@ -304,8 +304,8 @@
 
 .preview-text-placeholder > .placeholder:nth-child(n+3) {
   --animation-delay: calc(1s + 83ms * 3);
-  width: 33%;
   height: 20px;
+  width: 33%;
 }
 
 .ambient-subpage-element-title {
diff --git a/ash/webui/personalization_app/resources/js/wallpaper/utils.ts b/ash/webui/personalization_app/resources/js/wallpaper/utils.ts
index 4ae5566..a75e36f8 100644
--- a/ash/webui/personalization_app/resources/js/wallpaper/utils.ts
+++ b/ash/webui/personalization_app/resources/js/wallpaper/utils.ts
@@ -135,5 +135,5 @@
     return null;
   }
   // Add a key query parameter to cache bust when the image changes.
-  return `/wallpaper.png?key=${encodeURIComponent(image.key)}`;
+  return `/wallpaper.jpg?key=${encodeURIComponent(image.key)}`;
 }
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc
index 7fd4d59..869201d 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc
+++ b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.cc
@@ -37,7 +37,7 @@
   wallpaper_receiver_.Bind(std::move(receiver));
 }
 
-void FakePersonalizationAppWallpaperProvider::GetWallpaperAsPngBytes(
+void FakePersonalizationAppWallpaperProvider::GetWallpaperAsJpegBytes(
     content::WebUIDataSource::GotDataCallback callback) {
   std::move(callback).Run(base::MakeRefCounted<base::RefCountedBytes>());
 }
diff --git a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h
index 8d6d952f..d85e50f 100644
--- a/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h
+++ b/ash/webui/personalization_app/test/fake_personalization_app_wallpaper_provider.h
@@ -39,7 +39,7 @@
       mojo::PendingReceiver<ash::personalization_app::mojom::WallpaperProvider>
           receiver) override;
 
-  void GetWallpaperAsPngBytes(
+  void GetWallpaperAsJpegBytes(
       content::WebUIDataSource::GotDataCallback callback) override;
 
   bool IsEligibleForGooglePhotos() override;
diff --git a/ash/webui/personalization_app/test/personalization_app_mojom_banned_browsertest_fixture.cc b/ash/webui/personalization_app/test/personalization_app_mojom_banned_browsertest_fixture.cc
index 294c825..3b10d79 100644
--- a/ash/webui/personalization_app/test/personalization_app_mojom_banned_browsertest_fixture.cc
+++ b/ash/webui/personalization_app/test/personalization_app_mojom_banned_browsertest_fixture.cc
@@ -119,7 +119,7 @@
                   ash::personalization_app::mojom::WallpaperProvider> receiver),
               (override));
   bool IsEligibleForGooglePhotos() override { return true; }
-  void GetWallpaperAsPngBytes(
+  void GetWallpaperAsJpegBytes(
       content::WebUIDataSource::GotDataCallback callback) override {
     std::move(callback).Run(base::MakeRefCounted<base::RefCountedBytes>());
   }
diff --git a/ash/webui/shortcut_customization_ui/resources/js/accelerator_edit_view.ts b/ash/webui/shortcut_customization_ui/resources/js/accelerator_edit_view.ts
index 1fe2133..1b20f02 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/accelerator_edit_view.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/accelerator_edit_view.ts
@@ -28,15 +28,16 @@
 
 const accelerator: Accelerator = {
   modifiers: 0,
-  key: 0,
-  keyDisplay: '',
+  keyCode: 0,
 };
 
 const defaultAcceleratorInfoState: AcceleratorInfo = {
   accelerator,
-  type: AcceleratorType.kDefault,
-  state: AcceleratorState.kEnabled,
+  hasKeyEvent: true,
+  keyDisplay: '',
   locked: false,
+  state: AcceleratorState.kEnabled,
+  type: AcceleratorType.kDefault,
 };
 
 /**
diff --git a/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts b/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts
index 57db5b4..6d44129 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/accelerator_lookup_manager.ts
@@ -59,7 +59,7 @@
    */
   private getKeyForLookup(accelerator: Accelerator): string {
     return JSON.stringify(
-        {keyCode: accelerator.key, modifiers: accelerator.modifiers});
+        {keyCode: accelerator.keyCode, modifiers: accelerator.modifiers});
   }
 
   getAcceleratorInfos(source: number|string, action: number|string):
diff --git a/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.html b/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.html
index 4fa6eb33..454ad98 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.html
+++ b/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.html
@@ -20,7 +20,7 @@
     <template is="dom-repeat" items=[[modifiers_]]>
       <input-key key=[[item]] key-state="modifier-selected"></input-key>
     </template>
-    <input-key key="[[acceleratorInfo.accelerator.keyDisplay]]"
+    <input-key key="[[acceleratorInfo.keyDisplay]]"
         key-state="alpha-numeric-selected">
     </input-key>
   </template>
diff --git a/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.ts b/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.ts
index 5d6b192..f1d7227 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/accelerator_view.ts
@@ -232,6 +232,13 @@
     this.set(
         'pendingAcceleratorInfo_.accelerator', this.keystrokeToAccelerator_(e));
 
+    if (this.isModifierKey_(e)) {
+      // Reset the keyDisplay property if the key is a modifier.
+      this.set('pendingAcceleratorInfo_.keyDisplay', '');
+    } else {
+      this.set('pendingAcceleratorInfo_.keyDisplay', e.key);
+    }
+
     // New shortcut matches the current shortcut, end capture.
     if (areAcceleratorsEqual(
             this.pendingAcceleratorInfo_.accelerator,
@@ -312,7 +319,7 @@
    * Converts a keystroke event to an Accelerator Object.
    */
   private keystrokeToAccelerator_(e: KeyboardEvent): Accelerator {
-    const output: Accelerator = {modifiers: 0, key: 0, keyDisplay: ''};
+    const output: Accelerator = {modifiers: 0, keyCode: 0};
     if (e.metaKey) {
       output.modifiers = output.modifiers | Modifier.COMMAND;
     }
@@ -330,8 +337,7 @@
 
     // Only add non-modifier keys as the pending key.
     if (!this.isModifierKey_(e)) {
-      output.keyDisplay = e.key;
-      output.key = e.keyCode;
+      output.keyCode = e.keyCode;
     }
 
     return output;
@@ -383,7 +389,7 @@
    * Returns the specified CSS state of the pending key element.
    */
   protected getPendingKeyState_(): string {
-    if (this.pendingAcceleratorInfo_.accelerator.keyDisplay != '') {
+    if (this.pendingAcceleratorInfo_.keyDisplay != '') {
       return KeyState.ALPHANUMERIC;
     }
     return KeyState.NOT_SELECTED;
@@ -393,8 +399,8 @@
    * Returns the specified key to display.
    */
   protected getPendingKey_(): string {
-    if (this.pendingAcceleratorInfo_.accelerator.keyDisplay != '') {
-      return this.pendingAcceleratorInfo_.accelerator.keyDisplay.toLowerCase();
+    if (this.pendingAcceleratorInfo_.keyDisplay != '') {
+      return this.pendingAcceleratorInfo_.keyDisplay.toLowerCase();
     }
     // TODO(jimmyxgong): Reset to a localized default empty state.
     return 'key';
@@ -411,8 +417,7 @@
 
   private isValidDefaultAccelerator_(accelInfo: AcceleratorInfo): boolean {
     // A valid default accelerator is on that has modifier(s) and a key.
-    return accelInfo.accelerator.modifiers > 0 &&
-        accelInfo.accelerator.keyDisplay !== '';
+    return accelInfo.accelerator.modifiers > 0 && accelInfo.keyDisplay !== '';
   }
 
   private showEditView_(): boolean {
diff --git a/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts b/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts
index e2d8fd8..e5ca269 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/fake_data.ts
@@ -30,10 +30,11 @@
       type: AcceleratorType.kDefault,
       state: AcceleratorState.kEnabled,
       locked: true,
+      keyDisplay: '[',
+      hasKeyEvent: true,
       accelerator: {
         modifiers: Modifier.ALT,
-        key: 219,
-        keyDisplay: '[',
+        keyCode: 219,
       },
     }],
     // Snap Window Right
@@ -41,10 +42,11 @@
       type: AcceleratorType.kDefault,
       state: AcceleratorState.kEnabled,
       locked: false,
+      keyDisplay: ']',
+      hasKeyEvent: true,
       accelerator: {
         modifiers: Modifier.ALT,
-        key: 221,
-        keyDisplay: ']',
+        keyCode: 221,
       },
     }],
     // New Desk
@@ -52,10 +54,11 @@
       type: AcceleratorType.kDefault,
       state: AcceleratorState.kEnabled,
       locked: false,
+      keyDisplay: '+',
+      hasKeyEvent: true,
       accelerator: {
         modifiers: Modifier.COMMAND | Modifier.SHIFT,
-        key: 187,
-        keyDisplay: '+',
+        keyCode: 187,
       },
     }],
     // Remove Desk
@@ -63,10 +66,11 @@
       type: AcceleratorType.kDefault,
       state: AcceleratorState.kEnabled,
       locked: false,
+      keyDisplay: '-',
+      hasKeyEvent: true,
       accelerator: {
         modifiers: Modifier.COMMAND | Modifier.SHIFT,
-        key: 189,
-        keyDisplay: '-',
+        keyCode: 189,
       },
     }],
   },
@@ -76,10 +80,11 @@
       type: AcceleratorType.kDefault,
       state: AcceleratorState.kEnabled,
       locked: true,
+      keyDisplay: 't',
+      hasKeyEvent: true,
       accelerator: {
         modifiers: Modifier.CONTROL,
-        key: 84,
-        keyDisplay: 't',
+        keyCode: 84,
       },
     }],
   },
diff --git a/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts b/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts
index 645a72f9..e0329a28 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/shortcut_types.ts
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import * as AcceleratorTypes from 'chrome://resources/mojo/ui/base/accelerators/mojom/accelerator.mojom-webui.js';
+
 import * as AcceleratorInfoTypes from '../mojom-webui/ash/public/mojom/accelerator_info.mojom-webui.js';
 
 /**
@@ -52,18 +54,25 @@
   DUPLICATE,
 }
 
-export interface Accelerator {
-  modifiers: number;
-  key: number;
-  keyDisplay: string;
-}
+/**
+ * Type alias for Accelerator.
+ *
+ * The Pick utility type is used here because only `keyCode` and `modifiers`
+ * are necessary for this app.
+ */
+export type Accelerator =
+    Pick<AcceleratorTypes.Accelerator, 'keyCode'|'modifiers'>;
 
-export interface AcceleratorInfo {
-  accelerator: Accelerator;
-  type: AcceleratorType;
-  state: AcceleratorState;
-  locked: boolean;
-}
+/**
+ * Type alias for AcceleratorInfo.
+ *
+ * The utility type Omit and the intersection type operator (&) are used here
+ * to replace the types of `accelerator` and `keyDisplay` with more accurate
+ * types.
+ */
+export type AcceleratorInfo =
+    Omit<AcceleratorInfoTypes.AcceleratorInfo, 'accelerator'|'keyDisplay'>&
+    {accelerator: Accelerator, keyDisplay: string};
 
 /**
  * Type alias for AcceleratorConfig. This is a two level map, with the top
diff --git a/ash/webui/shortcut_customization_ui/resources/js/shortcut_utils.ts b/ash/webui/shortcut_customization_ui/resources/js/shortcut_utils.ts
index 2d0444b..84be3909 100644
--- a/ash/webui/shortcut_customization_ui/resources/js/shortcut_utils.ts
+++ b/ash/webui/shortcut_customization_ui/resources/js/shortcut_utils.ts
@@ -22,12 +22,14 @@
     (accel: Accelerator): AcceleratorInfo => {
       return {
         accelerator: accel,
-        type: AcceleratorType.kUser,
-        state: AcceleratorState.kEnabled,
+        hasKeyEvent: true,
+        keyDisplay: '',
         locked: false,
+        state: AcceleratorState.kEnabled,
+        type: AcceleratorType.kUser,
       };
     };
 
 export const createEmptyAcceleratorInfo = (): AcceleratorInfo => {
-  return createEmptyAccelInfoFromAccel({modifiers: 0, key: 0, keyDisplay: ''});
+  return createEmptyAccelInfoFromAccel({modifiers: 0, keyCode: 0});
 };
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc
index ce40111b..428c555 100644
--- a/base/allocator/partition_allocator/partition_alloc_unittest.cc
+++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -3940,6 +3940,25 @@
   EXPECT_TRUE(ref_count->Release());
 }
 
+#if !defined(PA_HAS_64_BITS_POINTERS)
+TEST_P(PartitionAllocTest, BackupRefPtrGuardRegion) {
+  size_t alignment = internal::PageAllocationGranularity();
+
+  uintptr_t requested_address;
+  memset(&requested_address, internal::kQuarantinedByte,
+         sizeof(requested_address));
+  requested_address = RoundDownToPageAllocationGranularity(requested_address);
+
+  uintptr_t allocated_address = AllocPages(
+      requested_address, alignment, alignment,
+      PageAccessibilityConfiguration::kReadWrite, PageTag::kPartitionAlloc);
+  EXPECT_NE(allocated_address, requested_address);
+
+  if (allocated_address) {
+    FreePages(allocated_address, alignment);
+  }
+}
+#endif  // !defined(PA_HAS_64_BITS_POINTERS)
 #endif  // BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT)
 
 #if BUILDFLAG(ENABLE_DANGLING_RAW_PTR_CHECKS)
diff --git a/base/allocator/partition_allocator/partition_root.cc b/base/allocator/partition_allocator/partition_root.cc
index 7d3d38e..f50b184 100644
--- a/base/allocator/partition_allocator/partition_root.cc
+++ b/base/allocator/partition_allocator/partition_root.cc
@@ -726,6 +726,43 @@
 }
 #endif  // defined(PA_ENABLE_MAC11_MALLOC_SIZE_HACK)
 
+#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) && \
+    !defined(PA_HAS_64_BITS_POINTERS)
+namespace {
+std::atomic<bool> g_reserve_brp_guard_region_called;
+// An address constructed by repeating `kQuarantinedByte` shouldn't never point
+// to valid memory. Preemptively reserve a memory region around that address and
+// make it inaccessible. Not needed for 64-bit platforms where the address is
+// guaranteed to be non-canonical. Safe to call multiple times.
+void ReserveBackupRefPtrGuardRegionIfNeeded() {
+  bool expected = false;
+  // No need to block execution for potential concurrent initialization, merely
+  // want to make sure this is only called once.
+  if (!g_reserve_brp_guard_region_called.compare_exchange_strong(expected,
+                                                                 true))
+    return;
+
+  size_t alignment = internal::PageAllocationGranularity();
+  uintptr_t requested_address;
+  memset(&requested_address, internal::kQuarantinedByte,
+         sizeof(requested_address));
+  requested_address = RoundDownToPageAllocationGranularity(requested_address);
+
+  // Request several pages so that even unreasonably large C++ objects stay
+  // within the inaccessible region. If some of the pages can't be reserved,
+  // it's still preferable to try and reserve the rest.
+  for (size_t i = 0; i < 4; ++i) {
+    [[maybe_unused]] uintptr_t allocated_address =
+        AllocPages(requested_address, alignment, alignment,
+                   PageAccessibilityConfiguration::kInaccessible,
+                   PageTag::kPartitionAlloc);
+    requested_address += alignment;
+  }
+}
+}  // namespace
+#endif  // BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) &&
+        // !defined(PA_HAS_64_BITS_POINTERS)
+
 template <bool thread_safe>
 void PartitionRoot<thread_safe>::Init(PartitionOptions opts) {
   {
@@ -757,6 +794,11 @@
     internal::PartitionAddressSpace::Init();
 #endif
 
+#if BUILDFLAG(ENABLE_BACKUP_REF_PTR_SUPPORT) && \
+    !defined(PA_HAS_64_BITS_POINTERS)
+    ReserveBackupRefPtrGuardRegionIfNeeded();
+#endif
+
     flags.allow_aligned_alloc =
         opts.aligned_alloc == PartitionOptions::AlignedAlloc::kAllowed;
     flags.allow_cookie = opts.cookie == PartitionOptions::Cookie::kAllowed;
diff --git a/base/cxx20_to_address.h b/base/cxx20_to_address.h
index 0010aec..b9158d2 100644
--- a/base/cxx20_to_address.h
+++ b/base/cxx20_to_address.h
@@ -5,10 +5,24 @@
 #ifndef BASE_CXX20_TO_ADDRESS_H_
 #define BASE_CXX20_TO_ADDRESS_H_
 
+#include <memory>
 #include <type_traits>
 
 namespace base {
 
+namespace {
+
+template <typename Ptr, typename = void>
+struct has_std_to_address : std::false_type {};
+
+template <typename Ptr>
+struct has_std_to_address<
+    Ptr,
+    std::void_t<decltype(std::pointer_traits<Ptr>::to_address(
+        std::declval<Ptr>()))>> : std::true_type {};
+
+}  // namespace
+
 // Implementation of C++20's std::to_address.
 // Note: This does consider specializations of pointer_traits<>::to_address,
 // even though it's a C++20 member function, because CheckedContiguousIterator
@@ -23,14 +37,12 @@
 }
 
 template <typename Ptr>
-constexpr auto to_address(const Ptr& p) noexcept
-    -> decltype(std::pointer_traits<Ptr>::to_address(p)) {
-  return std::pointer_traits<Ptr>::to_address(p);
-}
-
-template <typename Ptr, typename... None>
-constexpr auto to_address(const Ptr& p, None...) noexcept {
-  return base::to_address(p.operator->());
+constexpr auto to_address(const Ptr& p) noexcept {
+  if constexpr (has_std_to_address<Ptr>::value) {
+    return std::pointer_traits<Ptr>::to_address(p);
+  } else {
+    return base::to_address(p.operator->());
+  }
 }
 
 }  // namespace base
diff --git a/base/mac/launch_services_util.h b/base/mac/launch_services_util.h
index dfcf162..3db445cc 100644
--- a/base/mac/launch_services_util.h
+++ b/base/mac/launch_services_util.h
@@ -23,6 +23,18 @@
     const CommandLine& command_line,
     NSWorkspaceLaunchOptions launch_options);
 
+// Launches the application bundle at |bundle_path|, passing argv[1..] from
+// |command_line| as command line arguments if the app isn't already running,
+// and passing |urls| to the application as URLs to open.
+// |launch_options| are passed directly to
+// -[NSWorkspace openURLs:withApplicationAtURL:options:configuration:error:].
+// Returns a non-nil NSRunningApplication if the app was successfully launched.
+BASE_EXPORT NSRunningApplication* OpenApplicationWithPathAndURLs(
+    const FilePath& bundle_path,
+    const CommandLine& command_line,
+    const std::vector<std::string>& url_specs,
+    NSWorkspaceLaunchOptions launch_options);
+
 }  // namespace base::mac
 
 #endif  // BASE_MAC_LAUNCH_SERVICES_UTIL_H_
diff --git a/base/mac/launch_services_util.mm b/base/mac/launch_services_util.mm
index 772619b8..77241f8b 100644
--- a/base/mac/launch_services_util.mm
+++ b/base/mac/launch_services_util.mm
@@ -48,4 +48,48 @@
   return app;
 }
 
+NSRunningApplication* OpenApplicationWithPathAndURLs(
+    const base::FilePath& bundle_path,
+    const CommandLine& command_line,
+    const std::vector<std::string>& url_specs,
+    NSWorkspaceLaunchOptions launch_options) {
+  NSString* bundle_url_spec = base::SysUTF8ToNSString(bundle_path.value());
+  NSURL* bundle_url = [NSURL fileURLWithPath:bundle_url_spec isDirectory:YES];
+  DCHECK(bundle_url);
+  if (!bundle_url) {
+    return nil;
+  }
+
+  // NSWorkspace automatically adds the binary path as the first argument and
+  // it should not be included into the list.
+  std::vector<std::string> argv = command_line.argv();
+  size_t argc = argv.size();
+  NSMutableArray* launch_args = [NSMutableArray arrayWithCapacity:argc - 1];
+  for (size_t i = 1; i < argc; ++i) {
+    [launch_args addObject:base::SysUTF8ToNSString(argv[i])];
+  }
+
+  NSMutableArray* ns_urls = [NSMutableArray arrayWithCapacity:url_specs.size()];
+  for (const std::string& url_spec : url_specs) {
+    [ns_urls addObject:[NSURL URLWithString:base::SysUTF8ToNSString(url_spec)]];
+  }
+
+  NSDictionary* configuration = @{
+    NSWorkspaceLaunchConfigurationArguments : launch_args,
+  };
+  NSError* launch_error = nil;
+  NSRunningApplication* app =
+      [[NSWorkspace sharedWorkspace] openURLs:ns_urls
+                         withApplicationAtURL:bundle_url
+                                      options:launch_options
+                                configuration:configuration
+                                        error:&launch_error];
+  if (launch_error) {
+    LOG(ERROR) << base::SysNSStringToUTF8([launch_error localizedDescription]);
+    return nil;
+  }
+  DCHECK(app);
+  return app;
+}
+
 }  // namespace base::mac
diff --git a/base/profiler/libunwindstack_unwinder_android.cc b/base/profiler/libunwindstack_unwinder_android.cc
index 9be6624..55bdc3398 100644
--- a/base/profiler/libunwindstack_unwinder_android.cc
+++ b/base/profiler/libunwindstack_unwinder_android.cc
@@ -91,15 +91,9 @@
       "LibunwindstackUnwinderAndroid::LibunwindstackUnwinderAndroid");
 }
 
-LibunwindstackUnwinderAndroid::~LibunwindstackUnwinderAndroid() {
-  if (module_cache()) {
-    module_cache()->UnregisterAuxiliaryModuleProvider(this);
-  }
-}
+LibunwindstackUnwinderAndroid::~LibunwindstackUnwinderAndroid() = default;
 
-void LibunwindstackUnwinderAndroid::InitializeModules() {
-  module_cache()->RegisterAuxiliaryModuleProvider(this);
-}
+void LibunwindstackUnwinderAndroid::InitializeModules() {}
 
 bool LibunwindstackUnwinderAndroid::CanUnwindFrom(
     const Frame& current_frame) const {
@@ -187,10 +181,28 @@
   // Check the result of either the first or second unwind. If we were
   // successful transfer from libunwindstack format into base::Unwinder format.
   if (values.error_code == unwindstack::ERROR_NONE) {
+    // The list of frames provided by Libunwindstack's Unwind() contains the
+    // executing frame. The executing frame is also added by
+    // StackSamplerImpl::WalkStack(). Ignore the frame from the latter to avoid
+    // duplication. In case a java method was being interpreted libunwindstack
+    // adds a dummy frame for it and then writes the corresponding native frame.
+    // In such a scenario we want to prefer the frames produced by
+    // libunwindstack.
+    DCHECK_EQ(stack->size(), 1u);
+    // Since libunwindstack completed unwinding without errors, so the frames
+    // list shouldn't be empty.
+    DCHECK(!values.frames.empty());
+    stack->clear();
     for (const unwindstack::FrameData& frame : values.frames) {
-      stack->emplace_back(frame.pc,
-                          module_cache()->GetModuleForAddress(frame.pc),
-                          frame.function_name);
+      const ModuleCache::Module* module =
+          module_cache()->GetModuleForAddress(frame.pc);
+      if (module == nullptr && frame.map_info != nullptr) {
+        auto module_for_caching =
+            std::make_unique<NonElfModule>(frame.map_info.get());
+        module = module_for_caching.get();
+        module_cache()->AddCustomNativeModule(std::move(module_for_caching));
+      }
+      stack->emplace_back(frame.pc, module, frame.function_name);
     }
     return UnwindResult::kCompleted;
   }
@@ -200,14 +212,4 @@
                       values.frames.size());
   return UnwindResult::kAborted;
 }
-
-std::unique_ptr<const ModuleCache::Module>
-LibunwindstackUnwinderAndroid::TryCreateModuleForAddress(uintptr_t address) {
-  unwindstack::MapInfo* map_info = memory_regions_map_->Find(address).get();
-  if (map_info == nullptr || !(map_info->flags() & PROT_EXEC) ||
-      map_info->flags() & unwindstack::MAPS_FLAGS_DEVICE_MAP) {
-    return nullptr;
-  }
-  return std::make_unique<NonElfModule>(map_info);
-}
 }  // namespace base
diff --git a/base/profiler/libunwindstack_unwinder_android.h b/base/profiler/libunwindstack_unwinder_android.h
index 8b662134..db0031e6 100644
--- a/base/profiler/libunwindstack_unwinder_android.h
+++ b/base/profiler/libunwindstack_unwinder_android.h
@@ -9,7 +9,6 @@
 #include <vector>
 
 #include "base/profiler/unwinder.h"
-#include "base/time/time.h"
 #include "third_party/libunwindstack/src/libunwindstack/include/unwindstack/DexFiles.h"
 #include "third_party/libunwindstack/src/libunwindstack/include/unwindstack/JitDebug.h"
 #include "third_party/libunwindstack/src/libunwindstack/include/unwindstack/Maps.h"
@@ -23,9 +22,7 @@
 // causes some divergences from other base::Unwinder (this unwinder either fully
 // succeeds or fully fails). A good source for a compariative unwinder would be
 // traced_perf or heapprofd on android which uses the same API.
-class LibunwindstackUnwinderAndroid
-    : public Unwinder,
-      public ModuleCache::AuxiliaryModuleProvider {
+class LibunwindstackUnwinderAndroid : public Unwinder {
  public:
   LibunwindstackUnwinderAndroid();
   ~LibunwindstackUnwinderAndroid() override;
@@ -41,10 +38,6 @@
                          uintptr_t stack_top,
                          std::vector<Frame>* stack) override;
 
-  // ModuleCache::AuxiliaryModuleProvider
-  std::unique_ptr<const ModuleCache::Module> TryCreateModuleForAddress(
-      uintptr_t address) override;
-
  private:
   unwindstack::JitDebug* GetOrCreateJitDebug(unwindstack::ArchEnum arch);
   unwindstack::DexFiles* GetOrCreateDexFiles(unwindstack::ArchEnum arch);
diff --git a/base/task/single_thread_task_executor.cc b/base/task/single_thread_task_executor.cc
index 73e49422..be60ec9 100644
--- a/base/task/single_thread_task_executor.cc
+++ b/base/task/single_thread_task_executor.cc
@@ -33,7 +33,7 @@
               sequence_manager::QueueName::DEFAULT_TQ))),
       type_(type),
       simple_task_executor_(task_runner()) {
-  sequence_manager_->SetDefaultTaskRunner(default_task_queue_->task_runner());
+  sequence_manager_->SetDefaultTaskRunner(task_runner());
   sequence_manager_->BindToMessagePump(std::move(pump));
 }
 
diff --git a/base/task/thread_pool/task_tracker.cc b/base/task/thread_pool/task_tracker.cc
index b81bf463..0f54aae 100644
--- a/base/task/thread_pool/task_tracker.cc
+++ b/base/task/thread_pool/task_tracker.cc
@@ -319,7 +319,8 @@
     // ordering bug. This aims to catch those early.
     CheckedAutoLock auto_lock(shutdown_lock_);
     DCHECK(shutdown_event_);
-    DCHECK(!shutdown_event_->IsSignaled());
+    DCHECK(!shutdown_event_->IsSignaled())
+        << "posted_from: " << task->posted_from.ToString();
   }
 
   // TODO(scheduler-dev): Record the task traits here.
diff --git a/base/third_party/symbolize/README.chromium b/base/third_party/symbolize/README.chromium
index 82aa3a8..371bcaa 100644
--- a/base/third_party/symbolize/README.chromium
+++ b/base/third_party/symbolize/README.chromium
@@ -29,3 +29,5 @@
 - 006-use-sandbox-hook-for-open-object-file.patch: use the sandbox hook for
   the exposed helper for opening object files. This patch should be upstreamed.
 - 007-clang-format.patch: apply clang-format to make PRESUBMIT.py happy.
+- 008-sys-types-h.patch: include <sys/types.h> to get ssize_t on non-glibc
+  platforms
diff --git a/base/third_party/symbolize/patches/008-sys-types-h.patch b/base/third_party/symbolize/patches/008-sys-types-h.patch
new file mode 100644
index 0000000..cc47bd4
--- /dev/null
+++ b/base/third_party/symbolize/patches/008-sys-types-h.patch
@@ -0,0 +1,13 @@
+diff --git a/base/third_party/symbolize/symbolize.h b/base/third_party/symbolize/symbolize.h
+index 2a55c688aedfb..987569fdde67f 100644
+--- a/base/third_party/symbolize/symbolize.h
++++ b/base/third_party/symbolize/symbolize.h
+@@ -54,6 +54,8 @@
+ #ifndef BASE_SYMBOLIZE_H_
+ #define BASE_SYMBOLIZE_H_
+ 
++#include <sys/types.h>  // for ssize_t
++
+ #include "utilities.h"
+ #include "config.h"
+ #include "glog/logging.h"
diff --git a/base/third_party/symbolize/symbolize.h b/base/third_party/symbolize/symbolize.h
index 2a55c68..987569f 100644
--- a/base/third_party/symbolize/symbolize.h
+++ b/base/third_party/symbolize/symbolize.h
@@ -54,6 +54,8 @@
 #ifndef BASE_SYMBOLIZE_H_
 #define BASE_SYMBOLIZE_H_
 
+#include <sys/types.h>  // for ssize_t
+
 #include "utilities.h"
 #include "config.h"
 #include "glog/logging.h"
diff --git a/build/chromeos/test_runner.py b/build/chromeos/test_runner.py
index 0000f0e..89e36916 100755
--- a/build/chromeos/test_runner.py
+++ b/build/chromeos/test_runner.py
@@ -816,6 +816,10 @@
         '--public-image',
         action='store_true',
         help='Will flash a public "full" image to the device.')
+    parser.add_argument(
+        '--magic-vm-cache',
+        help='Path to the magic CrOS VM cache dir. See the comment above '
+             '"magic_cros_vm_cache" in mixins.pyl for more info.')
 
     vm_or_device_group = parser.add_mutually_exclusive_group()
     vm_or_device_group.add_argument(
@@ -927,20 +931,7 @@
       'cmd-line API, this will overwrite the value(s) of "--test" above.')
 
   add_common_args(gtest_parser, tast_test_parser, host_cmd_parser)
-
-  args = sys.argv[1:]
-  unknown_args = []
-  # If a '--' is present in the args, treat everything to the right of it as
-  # args to the test and everything to the left as args to this test runner.
-  # Otherwise treat all known args as args to this test runner and all unknown
-  # args as test args.
-  if '--' in args:
-    unknown_args = args[args.index('--') + 1:]
-    args = args[0:args.index('--')]
-  if unknown_args:
-    args = parser.parse_args(args=args)
-  else:
-    args, unknown_args = parser.parse_known_args()
+  args, unknown_args = parser.parse_known_args()
 
   logging.basicConfig(level=logging.DEBUG if args.verbose else logging.WARN)
 
@@ -968,6 +959,12 @@
     # unset in that case.
     os.environ.pop('BOTO_CONFIG', None)
 
+  if args.magic_vm_cache:
+    full_vm_cache_path = os.path.join(CHROMIUM_SRC_PATH, args.magic_vm_cache)
+    if os.path.exists(full_vm_cache_path):
+      with open(os.path.join(full_vm_cache_path, 'swarming.txt'), 'w') as f:
+        f.write('non-empty file to make swarming persist this cache')
+
   return args.func(args, unknown_args)
 
 
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index bf8269f..fe44404 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -598,7 +598,11 @@
     }
   } else if (is_win) {
     cflags_c += [ "/std:c11" ]
-    cflags_cc += [ "/std:c++20" ]
+    if (!is_clang && defined(msvc_use_cxx17) && msvc_use_cxx17) {
+      cflags_cc += [ "/std:c++17" ]
+    } else {
+      cflags_cc += [ "/std:c++20" ]
+    }
   } else if (!is_nacl) {
     # TODO(mcgrathr) - the NaCl GCC toolchain doesn't support either
     # gnu11/gnu++11 or c11/c++11; we technically don't need this toolchain any
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1
index c04839b..4e84100f 100644
--- a/build/fuchsia/linux_internal.sdk.sha1
+++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@
-10.20221101.1.1
+10.20221102.1.1
diff --git a/build/fuchsia/update_product_bundles.py b/build/fuchsia/update_product_bundles.py
index 5010624..a0ba86e 100755
--- a/build/fuchsia/update_product_bundles.py
+++ b/build/fuchsia/update_product_bundles.py
@@ -11,8 +11,8 @@
 import logging
 import os
 import sys
-import tempfile
 
+from contextlib import ExitStack
 import common
 import ffx_session
 import log_manager
@@ -83,73 +83,89 @@
   # Check whether there's Fuchsia support for this platform.
   common.GetHostOsFromPlatform()
 
-  signature_filename = os.path.join(common.PRODUCT_BUNDLE_SIGNATURE_FILE)
-  curr_signature = {}
-  if os.path.exists(signature_filename):
-    with open(signature_filename, 'r') as f:
-      curr_signature = json.load(f)
-
-  new_sdk_hash = get_hash_from_sdk()
-  new_signature = {'sdk_hash': new_sdk_hash}
-
   new_product_bundles = convert_to_product_bundle(
       args.product_bundles.split(','))
   for pb in new_product_bundles:
     if pb not in _PRODUCT_BUNDLES:
-      raise ValueError('%s is not part of the Fuchsia product bundle.' % pb)
+      raise ValueError(f'{pb} is not part of the Fuchsia product bundle.')
 
-  with tempfile.TemporaryDirectory() as tmpdirname:
+  if '*' in args.product_bundles:
+    raise ValueError('Wildcards are no longer supported, all product bundles '
+                     'need to be explicitly listed. The full list can be '
+                     'found in the DEPS file.')
+
+  with ExitStack() as stack:
     ffx_runner = ffx_session.FfxRunner(log_manager.LogManager(None))
-    with ffx_runner.scoped_config('pbms.storage.path', common.IMAGES_ROOT):
+    stack.enter_context(
+        ffx_runner.scoped_config('pbms.storage.path', common.IMAGES_ROOT))
 
-      # If SDK versions match, remove the product bundles that are no longer
-      # needed and download missing ones.
-      if curr_signature.get('sdk_hash') == new_sdk_hash:
-        curr_signature.get('sdk_hash')
-        new_signature['path'] = curr_signature.get('path')
-        new_product_bundle_hash = []
+    # TODO(crbug/1380807): Remove when product bundles can be downloaded
+    # for custom SDKs without editing metadata
+    override_file = os.path.join(os.path.dirname(__file__), 'sdk_override.txt')
+    if os.path.isfile(override_file):
+      with open(override_file) as f:
+        pb_metadata = f.read().split('\n')
+        pb_metadata.append('{sdk.root}/*.json')
+      stack.enter_context(
+          ffx_runner.scoped_config('pbms.metadata', json.dumps((pb_metadata))))
 
-        for image in curr_signature.get('images', []):
-          if image in new_product_bundles:
-            new_product_bundle_hash.append(image)
-          else:
-            logging.info('Removing no longer needed Fuchsia image %s' % image)
-            ffx_runner.run_ffx(('product-bundle', 'remove', '-f', image))
+    signature_filename = common.PRODUCT_BUNDLE_SIGNATURE_FILE
+    curr_signature = {}
+    if os.path.exists(signature_filename):
+      with open(signature_filename, 'r') as f:
+        curr_signature = json.load(f)
 
-        bundles_to_download = set(new_product_bundles) - \
-                              set(curr_signature.get('images', []))
-        for bundle in bundles_to_download:
-          download_product_bundle(bundle, ffx_runner)
-        new_product_bundle_hash.extend(bundles_to_download)
-        new_signature['images'] = new_product_bundle_hash
+    new_sdk_hash = get_hash_from_sdk()
+    new_signature = {'sdk_hash': new_sdk_hash}
 
-        with open(signature_filename, 'w') as f:
-          f.write(json.dumps(new_signature))
-        return 0
+    # If SDK versions match, remove the product bundles that are no longer
+    # needed and download missing ones.
+    if curr_signature.get('sdk_hash') == new_sdk_hash:
+      curr_signature.get('sdk_hash')
+      new_signature['path'] = curr_signature.get('path')
+      new_product_bundle_hash = []
 
-      # If SDK versions do not match, remove all existing product bundles
-      # and download the ones required.
-      for pb in curr_signature.get('images', []):
-        ffx_runner.run_ffx(('product-bundle', 'remove', '-f', pb))
+      for image in curr_signature.get('images', []):
+        if image in new_product_bundles:
+          new_product_bundle_hash.append(image)
+        else:
+          logging.info('Removing no longer needed Fuchsia image %s' % image)
+          ffx_runner.run_ffx(('product-bundle', 'remove', '-f', image))
 
-      curr_subdir = []
-      if os.path.exists(common.IMAGES_ROOT):
-        curr_subdir = os.listdir(common.IMAGES_ROOT)
-      common.MakeCleanDirectory(common.IMAGES_ROOT)
-
-      for pb in new_product_bundles:
-        download_product_bundle(pb, ffx_runner)
-      new_signature['images'] = new_product_bundles
-
-      new_subdir = os.listdir(common.IMAGES_ROOT)
-      subdir_diff = set(new_subdir) - set(curr_subdir)
-      if len(subdir_diff) != 1:
-        raise RuntimeError(f'Expected one new created subdirectory but got '
-                           '{subdir_diff} instead.')
-      new_signature['path'] = list(subdir_diff)[0]
+      bundles_to_download = set(new_product_bundles) - \
+                            set(curr_signature.get('images', []))
+      for bundle in bundles_to_download:
+        download_product_bundle(bundle, ffx_runner)
+      new_product_bundle_hash.extend(bundles_to_download)
+      new_signature['images'] = new_product_bundle_hash
 
       with open(signature_filename, 'w') as f:
         f.write(json.dumps(new_signature))
+      return 0
+
+    # If SDK versions do not match, remove all existing product bundles
+    # and download the ones required.
+    for pb in curr_signature.get('images', []):
+      ffx_runner.run_ffx(('product-bundle', 'remove', '-f', pb))
+
+    curr_subdir = []
+    if os.path.exists(common.IMAGES_ROOT):
+      curr_subdir = os.listdir(common.IMAGES_ROOT)
+    common.MakeCleanDirectory(common.IMAGES_ROOT)
+
+    for pb in new_product_bundles:
+      download_product_bundle(pb, ffx_runner)
+    new_signature['images'] = new_product_bundles
+
+    new_subdir = os.listdir(common.IMAGES_ROOT)
+    subdir_diff = set(new_subdir) - set(curr_subdir)
+    if len(subdir_diff) != 1:
+      raise RuntimeError(f'Expected one new created subdirectory but got '
+                         '{subdir_diff} instead.')
+    new_signature['path'] = list(subdir_diff)[0]
+
+    with open(signature_filename, 'w') as f:
+      f.write(json.dumps(new_signature))
   return 0
 
 
diff --git a/build_overrides/build.gni b/build_overrides/build.gni
index 1d490a3..a282e510 100644
--- a/build_overrides/build.gni
+++ b/build_overrides/build.gni
@@ -37,6 +37,10 @@
   # Allows googletest to pretty-print various absl types.  Disabled for nacl due
   # to lack of toolchain support.
   gtest_enable_absl_printers = !is_nacl
+
+  # Allows third-party repositories to use C++17 for MSVC builds
+  # TODO(crbug.com/1380553) Remove once ANGLE's MSVC C++20 build passes
+  msvc_use_cxx17 = false
 }
 
 # Allows different projects to specify their own suppression/ignore lists for
diff --git a/buildtools/deps_revisions.gni b/buildtools/deps_revisions.gni
index 3f8a1a5a..a2b0125 100644
--- a/buildtools/deps_revisions.gni
+++ b/buildtools/deps_revisions.gni
@@ -5,5 +5,5 @@
 declare_args() {
   # Used to cause full rebuilds on libc++ rolls. This should be kept in sync
   # with the libcxx_revision vars in //DEPS.
-  libcxx_revision = "f8571eaba606bde2eb8cd34b30104ca33e7c207e"
+  libcxx_revision = "fc6bbc5eb039769b5ed2de84444a3c6f9b45a598"
 }
diff --git a/chrome/VERSION b/chrome/VERSION
index b43f3ab..b843277 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=109
 MINOR=0
-BUILD=5397
+BUILD=5398
 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index 1b993ad..4624b87 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -1767,6 +1767,7 @@
       "//components/url_formatter/android:url_formatter_java",
       "//components/user_prefs/android:java",
       "//components/version_info/android:version_constants_java",
+      "//components/webapk:proto_java",
       "//components/webapk/android/libs/client:java",
       "//components/webapps/browser/android:java",
       "//components/webauthn/android:java",
diff --git a/chrome/android/expectations/monochrome_public_bundle__base.AndroidManifest.expected b/chrome/android/expectations/monochrome_public_bundle__base.AndroidManifest.expected
index 6a8a307..98c3b10 100644
--- a/chrome/android/expectations/monochrome_public_bundle__base.AndroidManifest.expected
+++ b/chrome/android/expectations/monochrome_public_bundle__base.AndroidManifest.expected
@@ -1170,7 +1170,7 @@
         android:name="org.chromium.android_webview.services.StartupFeatureMetadataHolder"
         android:enabled="false"
         android:exported="true">
-      <meta-data android:name="SET_DATA_DIRECTORY_SUFFIX:DEV" android:value="true"/>
+      <meta-data android:name="STARTUP_FEATURE_SET_DATA_DIRECTORY_SUFFIX" android:value="true"/>
     </service>  # DIFF-ANCHOR: c52936d7
     <service  # DIFF-ANCHOR: dc926e35
         android:name="org.chromium.android_webview.services.VariationsSeedServer"
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/pseudotab/PseudoTab.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/pseudotab/PseudoTab.java
index b8293e6..3ecfdae 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/pseudotab/PseudoTab.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/pseudotab/PseudoTab.java
@@ -331,8 +331,7 @@
     }
 
     private static void readAllPseudoTabsFromStateFile(Context context) {
-        assert ChromeFeatureList.sInstantStart.isEnabled()
-                || ChromeFeatureList.sPaintPreviewShowOnStartup.isEnabled();
+        assert ChromeFeatureList.sInstantStart.isEnabled();
         if (sReadStateFile) return;
         sReadStateFile = true;
 
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorSelectionAction.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorSelectionAction.java
index a664741e..5a245a9 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorSelectionAction.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSelectionEditorSelectionAction.java
@@ -68,6 +68,24 @@
         getPropertyModel().set(TabSelectionEditorActionProperties.SKIP_ICON_TINT, true);
         getPropertyModel().set(TabSelectionEditorActionProperties.SHOULD_DISMISS_MENU, false);
         updateState(ActionState.SELECT_ALL, isIncognito);
+        LayerDrawable layers =
+                (LayerDrawable) getPropertyModel().get(TabSelectionEditorActionProperties.ICON);
+        layers.setCallback(new Drawable.Callback() {
+            @Override
+            public void invalidateDrawable(Drawable who) {
+                // No-op.
+            }
+
+            @Override
+            public void scheduleDrawable(Drawable who, Runnable what, long when) {
+                who.invalidateSelf();
+            }
+
+            @Override
+            public void unscheduleDrawable(Drawable who, Runnable what) {
+                who.unscheduleSelf(what);
+            }
+        });
     }
 
     @Override
@@ -135,24 +153,18 @@
                     .setLevel(
                             mContext.getResources().getInteger(R.integer.list_item_level_default));
 
-            layers.setDrawable(CHECKMARK,
-                    AnimatedVectorDrawableCompat.create(
-                            mContext, R.drawable.ic_check_googblue_20dp_animated));
             layers.getDrawable(CHECKMARK).setAlpha(0);
             layers.getDrawable(CHECKMARK).setTint(Color.TRANSPARENT);
-            getPropertyModel().set(TabSelectionEditorActionProperties.ICON, layers);
+            layers.invalidateSelf();
         } else if (mActionState == ActionState.DESELECT_ALL) {
             layers.getDrawable(BACKGROUND)
                     .setLevel(
                             mContext.getResources().getInteger(R.integer.list_item_level_selected));
 
-            layers.setDrawable(CHECKMARK,
-                    AnimatedVectorDrawableCompat.create(
-                            mContext, R.drawable.ic_check_googblue_20dp_animated));
             layers.getDrawable(CHECKMARK).setAlpha(255);
             layers.getDrawable(CHECKMARK).setTint(
                     TabUiThemeProvider.getSelectionActionIconCheckedDrawableColor(mContext));
-            getPropertyModel().set(TabSelectionEditorActionProperties.ICON, layers);
+            layers.invalidateSelf();
             ((AnimatedVectorDrawableCompat) layers.getDrawable(CHECKMARK)).start();
         } else {
             assert false : "Invalid selection state";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
index f04af5f..1d13dded 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -24,8 +24,6 @@
 import org.chromium.chrome.browser.omnibox.OmniboxFeatures;
 import org.chromium.chrome.browser.optimization_guide.OptimizationGuidePushNotificationManager;
 import org.chromium.chrome.browser.page_annotations.PageAnnotationsServiceConfig;
-import org.chromium.chrome.browser.paint_preview.StartupPaintPreviewHelper;
-import org.chromium.chrome.browser.paint_preview.services.PaintPreviewTabService;
 import org.chromium.chrome.browser.tab.state.FilePersistedTabDataStorage;
 import org.chromium.chrome.browser.tabmodel.TabPersistentStore;
 import org.chromium.chrome.browser.tasks.ConditionalTabStripUtils;
@@ -118,7 +116,6 @@
                 add(ChromeFeatureList.sOptimizationGuidePushNotifications);
                 add(ChromeFeatureList.sOSKResizesVisualViewportByDefault);
                 add(ChromeFeatureList.sPaintPreviewDemo);
-                add(ChromeFeatureList.sPaintPreviewShowOnStartup);
                 add(ChromeFeatureList.sQueryTiles);
                 add(ChromeFeatureList.sQueryTilesOnStart);
                 add(ChromeFeatureList.sReadLater);
@@ -185,8 +182,6 @@
                         add(StartSurfaceConfiguration.SUPPORT_ACCESSIBILITY);
                         add(StartSurfaceConfiguration.TAB_COUNT_BUTTON_ON_START_SURFACE);
                         add(StartSurfaceConfiguration.USER_CLICK_THRESHOLD);
-                        add(StartupPaintPreviewHelper.ACCESSIBILITY_SUPPORT_PARAM);
-                        add(PaintPreviewTabService.ALLOW_SRP);
                         add(TabContentManager.ALLOW_TO_REFETCH_TAB_THUMBNAIL_VARIATION);
                         add(TabPersistentStore.CRITICAL_PERSISTED_TAB_DATA_SAVE_ONLY_PARAM);
                         add(TabUiFeatureUtilities.ENABLE_LAUNCH_BUG_FIX);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/resources/SystemResourcePreloads.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/resources/SystemResourcePreloads.java
index a97c8754..f95b8509 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/resources/SystemResourcePreloads.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/resources/SystemResourcePreloads.java
@@ -4,7 +4,7 @@
 
 package org.chromium.chrome.browser.compositor.resources;
 
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.toolbar.ToolbarFeatures;
 import org.chromium.ui.resources.SystemUIResourceType;
 
 /**
@@ -21,8 +21,6 @@
     }
 
     public static int[] getAsynchronousResources() {
-        return ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)
-                ? sAsynchronousResources
-                : sEmptyList;
+        return ToolbarFeatures.shouldSuppressCaptures() ? sAsynchronousResources : sEmptyList;
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
index e56d6c0..74b33b2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbar.java
@@ -639,7 +639,7 @@
     public CaptureReadinessResult isReadyForTextureCapture() {
         if (ToolbarFeatures.shouldBlockCapturesForAblation()) {
             return CaptureReadinessResult.notReady(TopToolbarBlockCaptureReason.SCROLL_ABLATION);
-        } else if (ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+        } else if (ToolbarFeatures.shouldSuppressCaptures()) {
             CaptureStateToken currentToken = generateCaptureStateToken();
             final @ToolbarSnapshotDifference int difference =
                     currentToken.getAnyDifference(mLastCaptureStateToken);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarAnimationDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarAnimationDelegate.java
index 44f4c47f..dc88818 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarAnimationDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarAnimationDelegate.java
@@ -15,9 +15,8 @@
 import androidx.annotation.DimenRes;
 import androidx.annotation.DrawableRes;
 
-import org.chromium.base.FeatureList;
 import org.chromium.chrome.R;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.toolbar.ToolbarFeatures;
 import org.chromium.components.omnibox.SecurityButtonAnimationDelegate;
 import org.chromium.ui.interpolators.BakedBezierInterpolator;
 
@@ -156,8 +155,7 @@
             mBrandingAnimationDelegate.updateDrawableResource(securityIconResource);
         } else {
             boolean isActualResourceChange = true;
-            if (FeatureList.isNativeInitialized()
-                    && ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+            if (ToolbarFeatures.shouldSuppressCaptures()) {
                 isActualResourceChange = securityIconResource != mSecurityIconRes;
             }
             mSecurityButtonAnimationDelegate.updateSecurityButton(securityIconResource,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java
index dba3ad6..bba9b4a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserControlsManager.java
@@ -20,7 +20,6 @@
 import org.chromium.base.ActivityState;
 import org.chromium.base.ApplicationStatus;
 import org.chromium.base.ApplicationStatus.ActivityStateListener;
-import org.chromium.base.FeatureList;
 import org.chromium.base.ObserverList;
 import org.chromium.base.TraceEvent;
 import org.chromium.base.supplier.ObservableSupplierImpl;
@@ -33,7 +32,6 @@
 import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
 import org.chromium.chrome.browser.browser_controls.BrowserControlsUtils;
 import org.chromium.chrome.browser.browser_controls.BrowserStateBrowserControlsVisibilityDelegate;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.tab.SadTab;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.TabBrowserControlsConstraintsHelper;
@@ -42,6 +40,7 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
 import org.chromium.chrome.browser.tabmodel.TabSwitchMetrics;
 import org.chromium.chrome.browser.toolbar.ControlContainer;
+import org.chromium.chrome.browser.toolbar.ToolbarFeatures;
 import org.chromium.chrome.browser.vr.VrModuleProvider;
 import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
@@ -131,8 +130,7 @@
                     || mControlContainer.getView().getVisibility() == visibility) {
                 return;
             } else if (visibility == View.VISIBLE && mContentViewScrolling
-                    && FeatureList.isInitialized()
-                    && ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+                    && ToolbarFeatures.shouldSuppressCaptures()) {
                 // Don't make the controls visible until scrolling has stopped to avoid
                 // doing it more often than we need to. onContentViewScrollingStateChanged will
                 // schedule us again when scrolling ceases.
@@ -142,9 +140,7 @@
             try (TraceEvent e = TraceEvent.scoped(
                          "BrowserControlsManager.onAndroidVisibilityChanged")) {
                 mControlContainer.getView().setVisibility(visibility);
-                if (FeatureList.isInitialized()
-                        && !ChromeFeatureList.isEnabled(
-                                ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+                if (!ToolbarFeatures.shouldSuppressCaptures()) {
                     // requestLayout is required to trigger a new gatherTransparentRegion(), which
                     // only occurs together with a layout and let's SurfaceFlinger trim overlays.
                     // This may be almost equivalent to using View.GONE, but we still use
@@ -248,8 +244,7 @@
 
             @Override
             public void onContentViewScrollingStateChanged(boolean scrolling) {
-                if (!scrolling && FeatureList.isInitialized()
-                        && ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)
+                if (!scrolling && ToolbarFeatures.shouldSuppressCaptures()
                         && shouldShowAndroidControls()
                         && mControlContainer.getView().getVisibility() != View.VISIBLE) {
                     scheduleVisibilityUpdate();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelper.java
index 4f4e3bb..aef6c9a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelper.java
@@ -11,8 +11,6 @@
 import org.chromium.base.ObserverList;
 import org.chromium.base.supplier.ObservableSupplier;
 import org.chromium.base.supplier.Supplier;
-import org.chromium.chrome.browser.flags.BooleanCachedFieldTrialParameter;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
 import org.chromium.chrome.browser.metrics.PageLoadMetrics;
 import org.chromium.chrome.browser.metrics.UmaUtils;
@@ -24,7 +22,6 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
 import org.chromium.chrome.browser.toolbar.load_progress.LoadProgressCoordinator;
-import org.chromium.chrome.browser.util.ChromeAccessibilityUtil;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.ui.base.WindowAndroid;
 
@@ -32,9 +29,6 @@
  * Glue code for the Paint Preview show-on-startup feature.
  */
 public class StartupPaintPreviewHelper {
-    public static final BooleanCachedFieldTrialParameter ACCESSIBILITY_SUPPORT_PARAM =
-            new BooleanCachedFieldTrialParameter(ChromeFeatureList.PAINT_PREVIEW_SHOW_ON_STARTUP,
-                    "has_accessibility_support", true);
     /**
      * Tracks whether a paint preview should be shown on tab restore. We use this to only attempt
      * to display a paint preview on the first tab restoration that happens on Chrome startup when
@@ -116,7 +110,7 @@
      * @return the feature availability
      */
     public static boolean isEnabled() {
-        return ChromeFeatureList.sPaintPreviewShowOnStartup.isEnabled();
+        return true;
     }
 
     /**
@@ -140,11 +134,6 @@
             return;
         }
 
-        if (ChromeAccessibilityUtil.get().isAccessibilityEnabled()
-                && !ACCESSIBILITY_SUPPORT_PARAM.getValue()) {
-            return;
-        }
-
         sShouldShowOnRestore = false;
         LoadProgressCoordinator loadProgressCoordinator =
                 paintPreviewHelper.mProgressBarCoordinatorSupplier.get();
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 396c535..ac7da4ba 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
@@ -29,7 +29,6 @@
 
 import org.chromium.base.Callback;
 import org.chromium.base.CallbackController;
-import org.chromium.base.FeatureList;
 import org.chromium.base.TraceEvent;
 import org.chromium.base.jank_tracker.JankTracker;
 import org.chromium.base.supplier.ObservableSupplier;
@@ -62,7 +61,6 @@
 import org.chromium.chrome.browser.feed.FeedFeatures;
 import org.chromium.chrome.browser.findinpage.FindToolbarManager;
 import org.chromium.chrome.browser.findinpage.FindToolbarObserver;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.fullscreen.FullscreenManager;
 import org.chromium.chrome.browser.fullscreen.FullscreenOptions;
 import org.chromium.chrome.browser.history.HistoryManagerUtils;
@@ -345,8 +343,7 @@
         private ObservableSupplier<Integer> mCurrentConstraintDelegate;
 
         void onTabSwitched(Tab newTab) {
-            if (!FeatureList.isInitialized()
-                    || !ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+            if (!ToolbarFeatures.shouldSuppressCaptures()) {
                 return;
             }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
index b0672d7..be3c073 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java
@@ -12,6 +12,8 @@
 import android.text.format.DateUtils;
 import android.util.Pair;
 
+import androidx.annotation.VisibleForTesting;
+
 import org.chromium.base.Callback;
 import org.chromium.base.CommandLine;
 import org.chromium.base.ContextUtils;
@@ -379,7 +381,8 @@
     }
 
     /** Schedules update for when WebAPK is not running. */
-    private void scheduleUpdate() {
+    @VisibleForTesting
+    protected void scheduleUpdate() {
         WebApkUmaRecorder.recordUpdateRequestQueued(UpdateRequestQueued.TWICE);
         TaskInfo updateTask;
         if (mStorage.shouldForceUpdate()) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelperTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelperTest.java
index de1f4a9..20d7b965 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelperTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreviewHelperTest.java
@@ -25,7 +25,6 @@
 import org.chromium.chrome.browser.paint_preview.services.PaintPreviewTabServiceFactory;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
-import org.chromium.chrome.test.util.browser.Features;
 import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 import java.util.concurrent.ExecutionException;
@@ -36,7 +35,6 @@
  * {@link ChromeActivity}.
  */
 @RunWith(StartupPaintPreviewHelperTestRunner.class)
-@Features.EnableFeatures({ChromeFeatureList.PAINT_PREVIEW_SHOW_ON_STARTUP})
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
 @ParameterizedCommandLineFlags({
     @Switches("disable-features=" + ChromeFeatureList.START_SURFACE_ANDROID + ","
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
index ceeb93c..0942d4c 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
@@ -4,6 +4,9 @@
 
 package org.chromium.chrome.browser.webapps;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 import android.content.Intent;
 
 import androidx.test.filters.MediumTest;
@@ -37,7 +40,9 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
+import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
 import org.chromium.chrome.test.util.browser.webapps.WebappTestPage;
+import org.chromium.components.webapk.proto.WebApkProto;
 import org.chromium.components.webapps.WebApkDistributor;
 import org.chromium.components.webapps.WebApkUpdateReason;
 import org.chromium.components.webapps.WebappsIconUtils;
@@ -48,6 +53,7 @@
 import org.chromium.ui.modaldialog.DialogDismissalCause;
 import org.chromium.ui.modaldialog.ModalDialogManager;
 
+import java.io.FileInputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -62,6 +68,7 @@
 @ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class)
 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
         ChromeSwitches.CHECK_FOR_WEB_MANIFEST_UPDATE_ON_STARTUP})
+@EnableFeatures(ChromeFeatureList.WEB_APK_UNIQUE_ID)
 public class WebApkUpdateManagerTest {
     @Rule
     public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
@@ -114,6 +121,7 @@
     private FeatureList.TestValues mTestValues;
 
     private List<Integer> mLastUpdateReasons;
+    private String mUpdateRequestPath;
 
     // Whether the dialog, to warn about icon/names changing, was shown.
     private boolean mIconOrNameUpdateDialogShown;
@@ -127,13 +135,17 @@
      */
     private class TestWebApkUpdateManager extends WebApkUpdateManager {
         private CallbackHelper mWaiter;
+        private CallbackHelper mCompleteCallback;
         private boolean mAcceptDialogIfAppears;
 
-        public TestWebApkUpdateManager(CallbackHelper waiter, ActivityTabProvider tabProvider,
-                ActivityLifecycleDispatcher lifecycleDispatcher, boolean acceptDialogIfAppears) {
+        public TestWebApkUpdateManager(CallbackHelper waiter, CallbackHelper complete,
+                ActivityTabProvider tabProvider, ActivityLifecycleDispatcher lifecycleDispatcher,
+                boolean acceptDialogIfAppears) {
             super(tabProvider, lifecycleDispatcher);
             mWaiter = waiter;
+            mCompleteCallback = complete;
             mLastUpdateReasons = new ArrayList<>();
+            mUpdateRequestPath = null;
             mAcceptDialogIfAppears = acceptDialogIfAppears;
         }
 
@@ -150,6 +162,9 @@
                 boolean isAppIdentityUpdateSupported, List<Integer> updateReasons,
                 Callback<Boolean> callback) {
             mLastUpdateReasons = updateReasons;
+            mUpdateRequestPath = updateRequestPath;
+            super.encodeIconsInBackground(updateRequestPath, info, primaryIconUrl, splashIconUrl,
+                    isManifestStale, isAppIdentityUpdateSupported, updateReasons, callback);
         }
 
         @Override
@@ -169,6 +184,11 @@
             mUpdateRequested = dismissalCause == DialogDismissalCause.POSITIVE_BUTTON_CLICKED;
             super.onUserApprovedUpdate(dismissalCause);
         }
+
+        @Override
+        protected void scheduleUpdate() {
+            if (mCompleteCallback != null) mCompleteCallback.notifyCalled();
+        }
     }
 
     private static class CreationData {
@@ -231,12 +251,17 @@
      /** Checks whether a WebAPK update is needed. */
     private boolean checkUpdateNeeded(
             final CreationData creationData, boolean acceptDialogIfAppears) throws Exception {
+        return checkUpdateNeeded(creationData, null, acceptDialogIfAppears);
+    }
+
+    private boolean checkUpdateNeeded(final CreationData creationData,
+            CallbackHelper completeCallback, boolean acceptDialogIfAppears) throws Exception {
         CallbackHelper waiter = new CallbackHelper();
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            TestWebApkUpdateManager updateManager =
-                    new TestWebApkUpdateManager(waiter, mActivity.getActivityTabProvider(),
-                            mActivity.getLifecycleDispatcher(), acceptDialogIfAppears);
+            TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(waiter,
+                    completeCallback, mActivity.getActivityTabProvider(),
+                    mActivity.getLifecycleDispatcher(), acceptDialogIfAppears);
             WebappDataStorage storage =
                     WebappRegistry.getInstance().getWebappDataStorage(WEBAPK_ID);
             BrowserServicesIntentDataProvider intentDataProvider =
@@ -257,10 +282,23 @@
         return !mLastUpdateReasons.isEmpty();
     }
 
+    /* Check that an update is needed and wait for it to complete. */
+    private void waitForUpdate(final CreationData creationData) throws Exception {
+        CallbackHelper waiter = new CallbackHelper();
+        Assert.assertTrue(
+                checkUpdateNeeded(creationData, waiter, true /* acceptDialogIfAppears */));
+        waiter.waitForCallback(0);
+    }
+
     private void assertUpdateReasonsEqual(@WebApkUpdateReason Integer... reasons) {
         Assert.assertEquals(Arrays.asList(reasons), mLastUpdateReasons);
     }
 
+    private WebApkProto.WebApk parseRequestProto(String path) throws Exception {
+        FileInputStream requestFile = new FileInputStream(path);
+        return WebApkProto.WebApk.parseFrom(requestFile);
+    }
+
     private void enableUpdateDialogForIcon(boolean enabled) {
         mTestValues.addFeatureFlagOverride(ChromeFeatureList.PWA_UPDATE_DIALOG_FOR_ICON, enabled);
         FeatureList.setTestValues(mTestValues);
@@ -626,4 +664,43 @@
 
         Assert.assertFalse(checkUpdateNeeded(creationData, /* acceptDialogIfAppears= */ false));
     }
+
+    @Test
+    @MediumTest
+    @Feature({"WebApk"})
+    public void testUniqueIdUpdateFromLegacyApp() throws Exception {
+        CreationData legacyWebApkData = defaultCreationData();
+        legacyWebApkData.manifestId = null;
+        legacyWebApkData.backgroundColor -= 1;
+
+        WebappTestPage.navigateToServiceWorkerPageWithManifest(
+                mTestServer, mTab, WEBAPK_MANIFEST_URL);
+        waitForUpdate(legacyWebApkData);
+
+        assertNotNull(mUpdateRequestPath);
+        WebApkProto.WebApk proto = parseRequestProto(mUpdateRequestPath);
+
+        assertEquals(proto.getAppKey(), mTestServer.getURL(WEBAPK_MANIFEST_URL));
+        assertEquals(proto.getManifest().getId(), mTestServer.getURL(WEBAPK_START_URL));
+    }
+
+    @Test
+    @MediumTest
+    @Feature({"WebApk"})
+    public void testUniqueIdUpdateKeepId() throws Exception {
+        CreationData creationData = defaultCreationData();
+        creationData.manifestId = mTestServer.getURL(WEBAPK_START_URL);
+        creationData.appKey = mTestServer.getURL("/appKey");
+        creationData.backgroundColor -= 1;
+
+        WebappTestPage.navigateToServiceWorkerPageWithManifest(
+                mTestServer, mTab, WEBAPK_MANIFEST_URL);
+        waitForUpdate(creationData);
+
+        assertNotNull(mUpdateRequestPath);
+        WebApkProto.WebApk proto = parseRequestProto(mUpdateRequestPath);
+
+        assertEquals(proto.getAppKey(), creationData.appKey);
+        assertEquals(proto.getManifest().getId(), creationData.manifestId);
+    }
 }
diff --git a/chrome/android/webapk/shell_apk/junit/src/org/chromium/webapk/shell_apk/h2o/LaunchTest.java b/chrome/android/webapk/shell_apk/junit/src/org/chromium/webapk/shell_apk/h2o/LaunchTest.java
index 0540a271..98e03eb 100644
--- a/chrome/android/webapk/shell_apk/junit/src/org/chromium/webapk/shell_apk/h2o/LaunchTest.java
+++ b/chrome/android/webapk/shell_apk/junit/src/org/chromium/webapk/shell_apk/h2o/LaunchTest.java
@@ -20,7 +20,6 @@
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutManager;
 import android.net.Uri;
-import android.os.Build;
 import android.os.Bundle;
 
 import org.junit.Assert;
@@ -87,32 +86,6 @@
     }
 
     /**
-     * Test launching via a deep link on pre-N Android.
-     * Check:
-     * 1) That the host browser was launched.
-     * 2) That no activities have been enabled/disabled.
-     */
-    @Test
-    @Config(sdk = Build.VERSION_CODES.M)
-    public void testDeepLinkPreN() {
-        registerWebApk(true /* isNewStyleWebApk */);
-
-        final String deepLinkUrl = "https://pwa.rocks/deep.html";
-
-        Intent launchIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(deepLinkUrl));
-        launchIntent.setPackage(sWebApkPackageName);
-
-        ArrayList<Intent> launchedIntents =
-                launchAndCheckBrowserLaunched(false /* opaqueMainActivityInitiallyEnabled */,
-                        launchIntent, H2OTransparentLauncherActivity.class,
-                        HostBrowserUtils.MINIMUM_REQUIRED_CHROMIUM_VERSION_NEW_SPLASH);
-        Assert.assertEquals(1, launchedIntents.size());
-        assertIntentIsForBrowserLaunch(launchedIntents.get(0), deepLinkUrl);
-
-        assertOnlyEnabledMainIntentHandler(H2OMainActivity.class);
-    }
-
-    /**
      * Test launching via a deep link on Android N+.
      * Check:
      * 1) That the host browser was launched.
@@ -120,8 +93,7 @@
      * the intent and the host browser getting launched.
      */
     @Test
-    @Config(sdk = Build.VERSION_CODES.N_MR1)
-    public void testDeepLinkN() {
+    public void testDeepLink() {
         registerWebApk(true /* isNewStyleWebApk */);
 
         final String deepLinkUrl = "https://pwa.rocks/deep.html";
@@ -422,46 +394,9 @@
     /**
      * Test {@link H2OOpaqueMainActivity#checkComponentEnabled()} when:
      * - Component enabled setting is default
-     * AND
-     * - Android API level < N
      */
     @Test
-    @Config(sdk = Build.VERSION_CODES.M)
-    public void testCheckH2OOpaqueMainActivityEnabledPreN() {
-        changeWebApkActivityEnabledSetting(mPackageManager, H2OOpaqueMainActivity.class,
-                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
-        Assert.assertFalse(H2OOpaqueMainActivity.checkComponentEnabled(
-                RuntimeEnvironment.application, false /* isNewStyleWebApk */));
-        Assert.assertFalse(H2OOpaqueMainActivity.checkComponentEnabled(
-                RuntimeEnvironment.application, true /* isNewStyleWebApk */));
-    }
-
-    /**
-     * Test {@link H2OMainActivity#checkComponentEnabled()} when:
-     * - Component enabled setting is default
-     * AND
-     * - Android API level < N
-     */
-    @Test
-    @Config(sdk = Build.VERSION_CODES.M)
-    public void testCheckH2oMainActivityEnabledPreN() {
-        changeWebApkActivityEnabledSetting(mPackageManager, H2OMainActivity.class,
-                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
-        Assert.assertTrue(H2OMainActivity.checkComponentEnabled(
-                RuntimeEnvironment.application, false /* isNewStyleWebApk */));
-        Assert.assertTrue(H2OMainActivity.checkComponentEnabled(
-                RuntimeEnvironment.application, true /* isNewStyleWebApk */));
-    }
-
-    /**
-     * Test {@link H2OOpaqueMainActivity#checkComponentEnabled()} when:
-     * - Component enabled setting is default
-     * AND
-     * - Android API level >= N
-     */
-    @Test
-    @Config(sdk = Build.VERSION_CODES.N_MR1)
-    public void testCheckH2OOpaqueMainActivityEnabledN() {
+    public void testCheckH2OOpaqueMainActivityEnabled() {
         changeWebApkActivityEnabledSetting(mPackageManager, H2OOpaqueMainActivity.class,
                 PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
         Assert.assertFalse(H2OOpaqueMainActivity.checkComponentEnabled(
@@ -473,12 +408,9 @@
     /**
      * Test {@link H2OMainActivity#checkComponentEnabled()} when:
      * - Component enabled setting is default
-     * AND
-     * - Android API level >= N
      */
     @Test
-    @Config(sdk = Build.VERSION_CODES.N_MR1)
-    public void testCheckH2OMainActivityEnabledN() {
+    public void testCheckH2OMainActivityEnabled() {
         changeWebApkActivityEnabledSetting(mPackageManager, H2OMainActivity.class,
                 PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
         Assert.assertTrue(H2OMainActivity.checkComponentEnabled(
@@ -492,7 +424,6 @@
      * opaque main activity is enabled and when it is not enabled.
      */
     @Test
-    @Config(sdk = Build.VERSION_CODES.N_MR1)
     public void testAddsSiteSettings() {
         registerApkForSiteSettings(true /*enableInMetadata*/, true /*addCategory*/);
 
@@ -516,7 +447,6 @@
      * Tests that no shortcut is added if the current version of Chrome does not support it.
      */
     @Test
-    @Config(sdk = Build.VERSION_CODES.N_MR1)
     public void testDoesNotAddSiteSettingsIfCategoryMissing() {
         registerApkForSiteSettings(true /*enableInMetadata*/, false /*addCategory*/);
 
@@ -534,7 +464,6 @@
      * Tests that no shortcut is added if the feature is disabled in the metadata of the WebAPK.
      */
     @Test
-    @Config(sdk = Build.VERSION_CODES.N_MR1)
     public void testDoesNotAddSiteSettingsIfDisabledInMetadata() {
         registerApkForSiteSettings(false /*enableInMetadata*/, true /*addCategory*/);
 
@@ -548,22 +477,6 @@
         assertFalse(containsSiteSettingsDynamicShortcut(shortcutManager));
     }
 
-    /** Tests that we do not attempt to add a shortcut on Android versions lower than N. */
-    @Test
-    @Config(sdk = Build.VERSION_CODES.M)
-    public void testDoesNotAddSiteSettingsWhenSdkLow() {
-        registerApkForSiteSettings(true /*enableInMetadata*/, true /*addCategory*/);
-
-        Intent launchIntent = new Intent(Intent.ACTION_MAIN);
-        launchIntent.setPackage(sWebApkPackageName);
-
-        launchAndCheckBrowserLaunched(false /* opaqueMainActivityInitiallyEnabled */, launchIntent,
-                H2OMainActivity.class, SITE_SETTINGS_COMPATIBLE_BROWSER_VERSION);
-
-        // There is no shortcut manager in Android L. Therefore if
-        // this test passes, then we did not attempt to add the shortcut.
-    }
-
     private static boolean containsSiteSettingsDynamicShortcut(ShortcutManager shortcutManager) {
         List<String> shortcutIDs = shortcutManager.getDynamicShortcuts()
                                            .stream()
@@ -741,8 +654,6 @@
     }
 
     private static void setAppTaskTopActivity(int taskId, Activity topActivity) {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return;
-
         ActivityManager.RecentTaskInfo recentTaskInfo = new ActivityManager.RecentTaskInfo();
         recentTaskInfo.id = taskId;
         recentTaskInfo.topActivity = topActivity.getComponentName();
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb
index cb96afe..ebf31a0 100644
--- a/chrome/app/resources/chromium_strings_iw.xtb
+++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -62,6 +62,7 @@
 <translation id="2560420686485554789">‏Chromium זקוק לגישה לאחסון כדי להוריד קבצים</translation>
 <translation id="2572494885440352020">Chromium Helper</translation>
 <translation id="2583187216237139145">‏המנהל של פרופיל העבודה יכול להסיר נתוני Chromium שמופקים בזמן השימוש בפרופיל (כמו יצירת סימניות, היסטוריה, סיסמאות והגדרות נוספות). <ph name="LEARN_MORE" /></translation>
+<translation id="2592940277904433508">‏המשך השימוש ב-Chromium</translation>
 <translation id="2648074677641340862">‏במהלך ההתקנה ארעה שגיאה של מערכת ההפעלה. יש להוריד שוב את Chromium.</translation>
 <translation id="2661879430930417727">‏אם משתפים מכשיר, חברים ובני משפחה יכולים לגלוש בנפרד ולהגדיר את Chromium בדיוק כפי שהם רוצים</translation>
 <translation id="2669853942967761236">‏קובץ הארכיון הזה נחסם על ידי Chromium כי הוא עלול להסתיר תוכנה זדונית</translation>
@@ -101,6 +102,7 @@
 <translation id="3387527074123400161">ChromiumOS</translation>
 <translation id="3406848076815591792">‏לעבור לפרופיל קיים של Chromium?</translation>
 <translation id="3412460710772753638">עדכון במנהל הסיסמאות במכשיר הזה</translation>
+<translation id="3420193029125244288">{COUNT,plural, =1{‏בהתאם להגדרה של האדמין, Chromium ייסגר אם הוא לא פעיל במשך יותר מדקה.}two{‏בהתאם להגדרה של האדמין, Chromium ייסגר אם הוא לא פעיל במשך יותר מ-# דקות.}many{‏בהתאם להגדרה של האדמין, Chromium ייסגר אם הוא לא פעיל במשך יותר מ-# דקות.}other{‏בהתאם להגדרה של האדמין, Chromium ייסגר אם הוא לא פעיל במשך יותר מ-# דקות.}}</translation>
 <translation id="3430503420100763906">‏באמצעות פרופילים ב-Chromium, מפרידים את כל הפריטים ב-Chromium. יוצרים פרופילים המיועדים לחברים ולבני משפחה או פרופילים נפרדים לעבודה ולבילויים בשעות הפנאי.</translation>
 <translation id="347328004046849135">‏אם מערכת Chromium תזהה שנכנסת עם סיסמה שנחשפה, היא תתריע לך על כך</translation>
 <translation id="3474745554856756813">‏פעולה זו תמחק <ph name="ITEMS_COUNT" /> פריטים מהמכשיר. כדי לשחזר את הנתונים מאוחר יותר, יש להיכנס אל Chromium עם <ph name="USER_EMAIL" />.</translation>
@@ -182,6 +184,7 @@
 <translation id="538767207339317086">‏התרת כניסה אל Chromium</translation>
 <translation id="5398878173008909840">‏גרסה חדשה של Chromium זמינה כעת.</translation>
 <translation id="5405650547142096840">‏להסיר מ-‏Chromium‏</translation>
+<translation id="5421879995290576427">{0,plural, =0{‏Chromium נסגר עכשיו.}=1{‏Chromium ייסגר בעוד שנייה.}two{‏Chromium ייסגר בעוד # שניות.}many{‏Chromium ייסגר בעוד # שניות.}other{‏Chromium ייסגר בעוד # שניות.}}</translation>
 <translation id="5427571867875391349">‏הגדרת Chromium כדפדפן ברירת המחדל שלך</translation>
 <translation id="5438241569118040789">‏<ph name="PAGE_TITLE" /> - Chromium בגרסת בטא</translation>
 <translation id="5473971139929175403">‏יכול להיות ש-Chromium לא יפעל כראוי כי הוא כבר לא נתמך בגרסה הזו של Linux</translation>
@@ -270,6 +273,7 @@
 <translation id="6940431691900807093">‏לאחר מכן, אתר שבו ביקרת יכול לשלוח בקשה ל-Chromium כדי לגלות מהם תחומי העניין שלך ולהתאים אישית את המודעות שמוצגות לך. Chromium יכול לשתף עד 3 תחומי עניין.</translation>
 <translation id="6964305034639999644">‏פתיחת הקישור בחלון &amp;אנונימי של Chromium</translation>
 <translation id="6978145336957848883">‏קל לנחש סיסמאות חלשות. באמצעות Chromium אפשר <ph name="BEGIN_LINK" />ליצור ולזכור סיסמאות חזקות<ph name="END_LINK" />.</translation>
+<translation id="6984667024406244807">‏Chromium לא פעיל</translation>
 <translation id="6985329841647292029">‏התנאים לשימוש ב-ChromiumOS</translation>
 <translation id="6990124437352146030">‏Chromium זקוק להרשאת גישה למיקרופון בשביל האתר הזה</translation>
 <translation id="7025789849649390912">ההתקנה נעצרה.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index eb7ab920..7214d568 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -239,6 +239,7 @@
 <translation id="121384500095351701">Hierdie lêer kan nie veilig afgelaai word nie</translation>
 <translation id="1215411991991485844">Nuwe agtergrondprogram bygevoeg</translation>
 <translation id="1216542092748365687">Verwyder vingerafdruk</translation>
+<translation id="1216891999012841486">Kom meer te wete oor hoe om opdateringfoute reg te maak</translation>
 <translation id="1217114730239853757">Wil jy ChromeVox, Chrome OS Flex se ingeboude skermleser, aktiveer? Indien wel, druk die spasiebalk.</translation>
 <translation id="1217483152325416304">Jou plaaslike data sal binnekort uitgevee word</translation>
 <translation id="1217668622537098248">Stel ná handeling terug na linksklik</translation>
@@ -920,7 +921,6 @@
 <translation id="1819721979226826163">Tik op Programkennisgewings &gt; Google Play Dienste.</translation>
 <translation id="1820028137326691631">Voer wagwoord wat deur admin goedgekeur is, in</translation>
 <translation id="1822140782238030981">Reeds 'n Chrome-gebruiker? Meld aan</translation>
-<translation id="1823098433522728610">Hierdie dokument het sensitiewe inhoud.</translation>
 <translation id="18245044880483936">Rugsteundata sal nie deel vorm van jou kind se Drive-bergingkwota nie.</translation>
 <translation id="1825565032302550710">Poort moet tussen 1024 en 65535 wees</translation>
 <translation id="182577151972096764">resepte wat onlangs bekyk is</translation>
@@ -1956,8 +1956,8 @@
 <translation id="274318651891194348">Soek tans vir sleutelbord</translation>
 <translation id="2743301740238894839">Begin</translation>
 <translation id="2743387203779672305">Kopieer na knipbord</translation>
+<translation id="274362947316498129">’n Program probeer om toegang tot <ph name="DEVICE_NAME" /> kry. Skakel <ph name="DEVICE_NAME" /> se privaatheidskakelaar af om toegang te gee.</translation>
 <translation id="2745080116229976798">Microsoft se gekwalifiseerde ondergeskiktheid</translation>
-<translation id="2747266560080989517">Hierdie lêer het sensitiewe of gevaarlike inhoud. Vra sy eienaar om dit reg te stel.</translation>
 <translation id="2749756011735116528">Meld by <ph name="PRODUCT_NAME" /> aan</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Gaan grammatika saam met spelling na</translation>
@@ -2553,7 +2553,6 @@
 <translation id="3317459757438853210">Tweekantig</translation>
 <translation id="3317678681329786349">Kamera en mikrofoon word geblokkeer</translation>
 <translation id="3320630259304269485">Veiligblaai (beskerming teen gevaarlike werwe) en ander sekuriteitinstellings</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Hierdie data het sensitiewe of gevaarlike inhoud. Verwyder hierdie inhoud en probeer weer.}=1{Hierdie lêer het sensitiewe of gevaarlike inhoud. Verwyder hierdie inhoud en probeer weer.}other{Hierdie lêers het sensitiewe of gevaarlike inhoud. Verwyder hierdie inhoud en probeer weer.}}</translation>
 <translation id="3323521181261657960">Bonus! Jy het meer skermtyd gekry</translation>
 <translation id="3323577066981719144">Veranderinge wat jy hier maak, word net op Chrome-blaaier toegepas. Maak Lacros Chrome-blaaier oop en gaan na instellings om veranderinge aan jou Lacros Chrome-blaaierinstellings te maak.</translation>
 <translation id="3325804108816646710">Soek tans beskikbare profiele …</translation>
@@ -2687,7 +2686,6 @@
 <translation id="3445925074670675829">USB C-toestel</translation>
 <translation id="3446274660183028131">Begin Parallels Desktop om Windows te installeer.</translation>
 <translation id="344630545793878684">Lees jou data op 'n aantal webwerwe</translation>
-<translation id="3446650212859500694">Hierdie lêer het sensitiewe inhoud</translation>
 <translation id="3447644283769633681">Blokkeer alle derdepartywebkoekies</translation>
 <translation id="3448492834076427715">Dateer rekening op</translation>
 <translation id="3449393517661170867">Nuwe oortjievenster</translation>
@@ -3129,6 +3127,7 @@
 <translation id="385051799172605136">Terug</translation>
 <translation id="3851428669031642514">Laai onveilige skripte</translation>
 <translation id="3852215160863921508">Invoerbystand</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> is aangeskakel</translation>
 <translation id="3854599674806204102">Kies 'n opsie</translation>
 <translation id="3854967233147778866">Aanbieding om webwerwe in ander tale te vertaal</translation>
 <translation id="3854976556788175030">Uitvoerlaai is vol</translation>
@@ -3462,6 +3461,7 @@
 <translation id="4163560723127662357">Onbekende sleutelbord</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> behoort nie aan 'n geldige organisasie nie. Kontak jou administrateur. As jy 'n administrateur is, kan jy jou organisasie opstel deur te gaan na: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Werfinstellings</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> probeer om toegang tot <ph name="DEVICE_NAME" /> te kry. Skakel <ph name="DEVICE_NAME" /> se privaatheidskakelaar af om toegang te gee.</translation>
 <translation id="4167393659000039775">Google is nie vir enige verlies aan data verantwoordelik nie en <ph name="DEVICE_OS" /> sal dalk nie op ongesertifiseerde modelle werk nie. Kom meer te wete by g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Werwe gebruik gewoonlik JavaScript om interaktiewe kenmerke te wys, soos vidoespeletjies of webvorms</translation>
 <translation id="4168015872538332605">Sommige instellings wat aan <ph name="PRIMARY_EMAIL" /> behoort, word met jou gedeel. Hierdie instellings affekteer net jou rekening wanneer jy veelvuldige aanmelding gebruik.</translation>
@@ -3920,11 +3920,11 @@
 <translation id="4602466770786743961">Laat <ph name="HOST" /> altyd toe om by jou kamera en mikrofoon in te gaan</translation>
 <translation id="4606551464649945562">Moenie werwe toelaat om 'n 3D-kaart van jou omgewing te skep of kameraposisie na te spoor nie</translation>
 <translation id="4608500690299898628">Vind …</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> het sensitiewe inhoud</translation>
 <translation id="4609987916561367134">Mag JavaScript gebruik</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> het 'n fout ondervind</translation>
 <translation id="4610637590575890427">Het jy bedoel om na <ph name="SITE" /> te gaan?</translation>
 <translation id="4611114513649582138">Dataverbinding beskikbaar</translation>
+<translation id="4612841084470706111">Gee toegang aan alle werwe wat gevra het.</translation>
 <translation id="4613144866899789710">Kanselleer tans Linux-installering …</translation>
 <translation id="4613271546271159013">'n Uitbreiding het die bladsy verander wat wys wanneer jy 'n nuwe oortjie oopmaak.</translation>
 <translation id="4615586811063744755">geen webkoekie is gekies nie</translation>
@@ -4999,6 +4999,7 @@
 <translation id="5632059346822207074">Toestemming is versoek; druk Ctrl + Forward om te antwoord</translation>
 <translation id="5632566673632479864">Jou rekening <ph name="EMAIL" /> word nie meer as die primêre rekening toegelaat nie. Omdat hierdie rekening deur <ph name="DOMAIN" /> bestuur word, sal jou boekmerke, geskiedenis, wagwoorde en ander instellings op hierdie toestel uitgevee word.</translation>
 <translation id="5632592977009207922">Laai tans af; <ph name="PERCENT_REMAINING" />% oor</translation>
+<translation id="5633149627228920745">Kom meer te wete oor stelselvereistes</translation>
 <translation id="563371367637259496">Mobiel</translation>
 <translation id="5634446357546764049">Sien herinneringe aan jou onlangse reise en meer</translation>
 <translation id="5635312199252507107">Laat op spesifieke werwe toe</translation>
@@ -5692,6 +5693,7 @@
 <translation id="6291949900244949761">Vra wanneer 'n werf toegang tot USB-toestelle wil hê (aanbeveel)</translation>
 <translation id="6291953229176937411">Wys in vinder</translation>
 <translation id="6292699686837272722">Oortjies krimp na medium breedte</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> is afgeskakel</translation>
 <translation id="6294759976468837022">Outoskanderingspoed</translation>
 <translation id="6295158916970320988">Alle werwe</translation>
 <translation id="6295855836753816081">Stoor tans …</translation>
@@ -5897,7 +5899,6 @@
 <translation id="6492396476180293140">Interne kamera is deur hardewareskakelaar gedeaktiveer</translation>
 <translation id="6494327278868541139">Wys besonderhede oor gevorderde beskerming</translation>
 <translation id="6494445798847293442">Nie 'n Sertifiseringoutoriteit nie</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Hierdie data het sensitiewe of gevaarlike inhoud}=1{Hierdie lêer het sensitiewe of gevaarlike inhoud}other{Hierdie lêers het sensitiewe of gevaarlike inhoud}}</translation>
 <translation id="6497548114956205206">Kom meer te wete oor energiebespaarder</translation>
 <translation id="6497784818439587832">Verander skermgrootte om items op jou skerm groter of kleiner te maak</translation>
 <translation id="6497789971060331894">Muis – omgekeerde rollees</translation>
@@ -6043,7 +6044,6 @@
 <translation id="6621391692573306628">Om hierdie oortjie na ’n ander toestel toe te stuur, moet jy op albei toestelle by Chrome aanmeld</translation>
 <translation id="6622980291894852883">Hou aan om prente te blokkeer</translation>
 <translation id="6624036901798307345">Tik in tabletmodus op die oortjietellernutsbalkknoppie om die nuwe oortjiestrook oop te maak wat miniprente van elke oortjie wys.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> het sensitiewe of gevaarlike inhoud. Vra sy eienaar om dit reg te stel.</translation>
 <translation id="6624687053722465643">Soetigheid</translation>
 <translation id="6628328486509726751">Het <ph name="WEBRTC_LOG_UPLOAD_TIME" /> opgelaai</translation>
 <translation id="6630117778953264026">Sterker sekuriteit</translation>
@@ -8348,6 +8348,7 @@
 <translation id="8785622406424941542">Stilus</translation>
 <translation id="8786824282808281903">Wanneer jou kind hierdie ikoon sien, kan 'n vingerafdruk gebruik word vir identifisering of om aankope goed te keur.</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{Naamlose groep – 1 oortjie}other{Naamlose groep – # oortjies}}</translation>
+<translation id="8791157330927639737">Kom meer te wete oor opdatering</translation>
 <translation id="8791534160414513928">Stuur 'n "Moenie naspoor nie"-versoek saam met jou blaaiverkeer.</translation>
 <translation id="879413103056696865">Terwyl die warmkol aan is, sal jou <ph name="PHONE_NAME" />:</translation>
 <translation id="8795916974678578410">Nuwe venster</translation>
@@ -8503,6 +8504,7 @@
 <translation id="8940081510938872932">Jou rekenaar doen tans te veel dinge. Probeer later weer.</translation>
 <translation id="8940381019874223173">Van jou Google Foto's af</translation>
 <translation id="8941173171815156065">Herroep die toestemming "<ph name="PERMISSION" />"</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> is af</translation>
 <translation id="894191600409472540">Skep sterk wagwoorde</translation>
 <translation id="894360074127026135">Netscape Internasionale Opstap</translation>
 <translation id="8944099748578356325">Gebruik die battery vinniger (tans <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index afc39db..8a68d2da 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -915,7 +915,6 @@
 <translation id="1819721979226826163">የመተግበሪያ ማሳወቂያዎች &gt; Google Play አገልግሎቶችን መታ ያድርጉ።</translation>
 <translation id="1820028137326691631">በአስተዳዳሪ የቀረበውን የይለፍ ቃል ያስገቡ</translation>
 <translation id="1822140782238030981">አስቀድመው የChrome ተጠቃሚ ነዎት? በመለያ ይግቡ</translation>
-<translation id="1823098433522728610">ይህ ሰነድ አደገኛ ይዘት አለው።</translation>
 <translation id="18245044880483936">የምትኬ ውሂብ በልጅዎ የDrive ማከማቻ ኮታ ላይ አይቆጠርም።</translation>
 <translation id="1825565032302550710">ወደብ በ1024 እና 65535 መካከል መሆን አለበት</translation>
 <translation id="182577151972096764">በቅርቡ የታዩ የምግብ አዘገጃጀቶች</translation>
@@ -1950,7 +1949,6 @@
 <translation id="2743387203779672305">ወደ ቅንጥብ ሰሌዳ ገልብጥ</translation>
 <translation id="274362947316498129">አንድ መተግበሪያ <ph name="DEVICE_NAME" />ን ለመድረስ እየሞከረ ነው። መዳረሻን ለመፍቀድ የ<ph name="DEVICE_NAME" /> የግላዊነት መቀያየሪያን ያጥፉ።</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">ይህ ፋይል ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ባለቤቱ እንዲያስተካክሉት ይጠይቋቸው።</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> ውስጥ ይግቡ</translation>
 <translation id="2749836841884031656">ሲም</translation>
 <translation id="2749881179542288782">ሰዋሰው እና ሆሄ አርም</translation>
@@ -2545,7 +2543,6 @@
 <translation id="3317459757438853210">ፊትና ጀርባ</translation>
 <translation id="3317678681329786349">ካሜራ እና ማይክሮፎን ታግደዋል</translation>
 <translation id="3320630259304269485">የጥንቃቄ አሰሳ (ከአደገኛ ጣቢያዎች መጠበቅ) እና ሌሎች የደህንነት ቅንብሮች</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ይህ ውሂብ ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}=1{ይህ ፋይል ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}one{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}other{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ይህን ይዘት ያስወግዱትና እንደገና ይሞክሩ።}}</translation>
 <translation id="3323521181261657960">ጉርሻ! ተጨማሪ የማያ ገጽ ጊዜ አለዎት</translation>
 <translation id="3323577066981719144">እዚህ የሚያደርጓቸው ለውጦች በChrome አሳሽ ላይ ብቻ ይተገበራሉ። በእርስዎ የLacros Chrome አሳሽ ቅንብሮች ላይ ለውጦችን ለማድረግ የLacros Chrome አሳሽ ይክፈቱ እና ወደ ቅንብሮች ይሂዱ።</translation>
 <translation id="3325804108816646710">የሚገኙ መገለጫዎችን በመፈለግ ላይ...</translation>
@@ -2679,7 +2676,6 @@
 <translation id="3445925074670675829">USB-C መሣሪያ</translation>
 <translation id="3446274660183028131">Windowsን ለመጫን እባክዎ Parallels ዴስክቶፕን ያስጀምሩ።</translation>
 <translation id="344630545793878684">የእርስዎን ውሂብ በበርካታ የድር ጣቢያዎች ላይ ያንብቡ</translation>
-<translation id="3446650212859500694">ይህ ፋይል ሚስጥራዊነት ይያለው ይዘት አለው</translation>
 <translation id="3447644283769633681">ሁሉንም የሶስተኛ ወገን ኩኪዎችን አግድ</translation>
 <translation id="3448492834076427715">መለያን አዘምን</translation>
 <translation id="3449393517661170867">አዲስ የትር መስኮት</translation>
@@ -3911,7 +3907,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> ሁልጊዜ ካሜራዎን እና ማይክሮፎንዎን እንዲደርስባቸው ይፍቀዱ</translation>
 <translation id="4606551464649945562">ጣቢያዎች የዙሪያዎ የ3ል ካርታ እንዳይፈጥሩ ወይም የካሜራ ቦታን እንዳይከታተሉ ይከልክሉ</translation>
 <translation id="4608500690299898628">&amp;አግኝ…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> ሚስጥራዊነት ያለው ይዘት አለው</translation>
 <translation id="4609987916561367134">ጃቫስክሪፕትን እንዲጠቀም ተፈቅዷል</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> አንድ ስህተት አጋጥሞታል</translation>
 <translation id="4610637590575890427"><ph name="SITE" />ን ማለትዎ ይሆን?</translation>
@@ -5886,7 +5881,6 @@
 <translation id="6492396476180293140">የውስጣዊ ካሜራ በሃርድዌር መቀያየሪያ ቦዝኗል</translation>
 <translation id="6494327278868541139">የበለጸጉ የጥበቃ ዝርዝሮችን አሳይ</translation>
 <translation id="6494445798847293442">የእውቅና ማረጋገጫ ባለሥልጣን አይደለም</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ይህ ውሂብ ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}=1{ይህ ፋይል ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}one{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}other{እነዚህ ፋይሎች ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው}}</translation>
 <translation id="6497548114956205206">ስለ ኃይል ቆጣቢ የበለጠ ይወቁ</translation>
 <translation id="6497784818439587832">በማያ ገጽዎ ላይ ያሉ ንጥሎችን ለማሳነስ ወይም ለማተለቅ የማሳያ መጠንን ይቀንሱ</translation>
 <translation id="6497789971060331894">የመዳፊት ኋሊዮሽ በሽብለላ ላይ</translation>
@@ -6034,7 +6028,6 @@
 <translation id="6621391692573306628">ይህን ትር ወደ ሌላ መሣሪያ ለመላክ ሁለቱም መሣሪያዎች ላይ ወደ Chrome ይግቡ</translation>
 <translation id="6622980291894852883">ምስሎችን ማገድ ቀጥል</translation>
 <translation id="6624036901798307345">በጡባዊ ሁኔታ ላይ የእያንዳንዱ ትር ድንክዬዎችን የሚያሳየው አዲሱን የትር ድርድር ለመክፈት የትሩ ቆጣሪ መሣሪያ አሞሌ አዝራርን መታ ያድርጉ።</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> ሚስጥራዊነት ያለው ወይም አደገኛ ይዘት አለው። ባለቤቱ እንዲያስተካክሉት ይጠይቋቸው።</translation>
 <translation id="6624687053722465643">Sweetness</translation>
 <translation id="6628328486509726751">የተሰቀለው በ<ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">ይበልጥ ጠንካራ ደህንነት</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index ec2cea5..0e57dbe 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -910,7 +910,6 @@
 <translation id="1819721979226826163">‏يُرجى النقر على "إشعارات التطبيق" &gt; خدمات Google Play.</translation>
 <translation id="1820028137326691631">إدخال كلمة المرور التي قدمها المشرف</translation>
 <translation id="1822140782238030981">‏هل تستخدم Chrome بالفعل؟ يُرجى تسجيل الدخول</translation>
-<translation id="1823098433522728610">هذا المستند به محتوى حسّاس.</translation>
 <translation id="18245044880483936">‏لن يتم احتساب البيانات التي تتضمنها النسخة الاحتياطية ضمنَ حصة التخزين في Drive داخل حسابك الفرعي.</translation>
 <translation id="1825565032302550710">يجب أن يكون رقم المنفذ بين 1024 و65535.</translation>
 <translation id="182577151972096764">وصفات الطعام التي تم الاطّلاع عليها مؤخرًا</translation>
@@ -1944,7 +1943,6 @@
 <translation id="2743301740238894839">البدء</translation>
 <translation id="2743387203779672305">نسخ إلى الحافظة</translation>
 <translation id="2745080116229976798">‏إخضاع مؤهل لـ Microsoft</translation>
-<translation id="2747266560080989517">يشتمل هذا الملف على محتوى حسّاس أو خطير. يُرجى طلب إصلاحه من المالك.</translation>
 <translation id="2749756011735116528">تسجيل الدخول إلى <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">‏شريحة SIM</translation>
 <translation id="2749881179542288782">تحقق من التدقيق النحوي مع التدقيق الإملائي</translation>
@@ -2540,7 +2538,6 @@
 <translation id="3317459757438853210">طباعة على الجانبين</translation>
 <translation id="3317678681329786349">تم حظر استخدام الكاميرا والميكروفون</translation>
 <translation id="3320630259304269485">التصفُّح الآمن (يوفّر حماية من المواقع الإلكترونية الضارة) وإعدادات الأمان الأخرى</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{تشتمل هذه البيانات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}=1{يشتمل هذا الملف على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}two{يشتمل هذان الملفان على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}few{تشتمل هذه الملفات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}many{تشتمل هذه الملفات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}other{تشتمل هذه الملفات على محتوى حسّاس أو خطير. يُرجى إزالة هذا المحتوى وإعادة المحاولة.}}</translation>
 <translation id="3323521181261657960">إليك مكافأة. ستحظى بالمزيد من وقت النظر إلى الشاشة.</translation>
 <translation id="3323577066981719144">‏يتم تطبيق التغييرات التي تجريها هنا على متصفّح Chrome فقط. ولإجراء تغييرات على إعدادات متصفّح Chrome في Lacros، افتح متصفّح Chrome في Lacros ثم انتقِل إلى الإعدادات.</translation>
 <translation id="3325804108816646710">جارٍ البحث عن ملفات شخصية متوفّرة...</translation>
@@ -2674,7 +2671,6 @@
 <translation id="3445925074670675829">‏جهاز USB-C</translation>
 <translation id="3446274660183028131">‏يُرجى تشغيل نظام Parallels Desktop لتثبيت نظام التشغيل Windows.</translation>
 <translation id="344630545793878684">قراءة بياناتك على عدد من المواقع الإلكترونية</translation>
-<translation id="3446650212859500694">هذا الملف به محتوى حسّاس.</translation>
 <translation id="3447644283769633681">حظر جميع ملفات تعريف الارتباط للأطراف الثالثة</translation>
 <translation id="3448492834076427715">تعديل الحساب</translation>
 <translation id="3449393517661170867">نافذة ذات علامات تبويب جديدة</translation>
@@ -3904,7 +3900,6 @@
 <translation id="4602466770786743961">إتاحة دخول <ph name="HOST" /> دومًا إلى الكاميرا والميكروفون التابعين لك</translation>
 <translation id="4606551464649945562">عدم السماح للمواقع الإلكترونية بإنشاء خريطة ثلاثية الأبعاد للبيئة المحيطة بك أو تتبُّع موضع الكاميرا</translation>
 <translation id="4608500690299898628">&amp;بحث...</translation>
-<translation id="4608703838363792434">الملف <ph name="FILE_NAME" /> به محتوى حسّاس.</translation>
 <translation id="4609987916561367134">‏المواقع الإلكترونية التي يُسمح لها باستخدام JavaScript</translation>
 <translation id="4610162781778310380">حدث خطأ في <ph name="PLUGIN_NAME" />.</translation>
 <translation id="4610637590575890427">هل تقصد الانتقال إلى <ph name="SITE" />؟</translation>
@@ -5877,7 +5872,6 @@
 <translation id="6492396476180293140">تم إيقاف الكاميرا الداخلية باستخدام مفتاح التشغيل/الإيقاف في الجهاز.</translation>
 <translation id="6494327278868541139">عرض تفاصيل الحماية المُحسَّنة</translation>
 <translation id="6494445798847293442">ليست مرجعًا مصدقًا</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{تشتمل هذه البيانات على محتوى حسّاس أو خطير.}=1{يشتمل هذا الملف على محتوى حسّاس أو خطير.}two{يشتمل هذان الملفان على محتوى حسّاس أو خطير.}few{تشتمل هذه الملفات على محتوى حسّاس أو خطير.}many{تشتمل هذه الملفات على محتوى حسّاس أو خطير.}other{تشتمل هذه الملفات على محتوى حسّاس أو خطير.}}</translation>
 <translation id="6497548114956205206">مزيد من المعلومات حول وضع "توفير الطاقة"</translation>
 <translation id="6497784818439587832">يمكنك تغيير حجم العرض لتصغير حجم العناصر التي تظهر على الشاشة أو تكبيرها.</translation>
 <translation id="6497789971060331894">التمرير العكسي عبر الماوس</translation>
@@ -6031,7 +6025,6 @@
 <translation id="6621391692573306628">‏لإرسال علامة التبويب هذه إلى جهاز آخر، عليك تسجيل الدخول إلى Chrome على كلا الجهازين.</translation>
 <translation id="6622980291894852883">متابعة منع عرض الصور</translation>
 <translation id="6624036901798307345">في وضع الجهاز اللوحي، انقر على زر شريط أدوات عدّاد علامات التبويب لفتح شريط علامات التبويب الجديد الذي يعرض الصور المصغّرة لكل علامة تبويب.</translation>
-<translation id="6624535038674360844">الملف <ph name="FILE_NAME" /> به محتوى حسّاس أو خطير. يُرجى طلب إصلاحه من المالك.</translation>
 <translation id="6624687053722465643">الطعم اللذيذ</translation>
 <translation id="6628328486509726751">تم التحميل في <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">مستوى أمان معزّز</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 9deaead..0c41253 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -916,7 +916,6 @@
 <translation id="1819721979226826163">এপৰ জাননী &gt; Google Play সেৱা-ত টিপক।</translation>
 <translation id="1820028137326691631">প্ৰশাসক প্ৰদত্ত পাছৱৰ্ড দিয়ক</translation>
 <translation id="1822140782238030981">আপুনি ইতিমধ্যেই Chromeৰ ব্যৱহাৰকাৰী নেকি? ছাইন ইন কৰক</translation>
-<translation id="1823098433522728610">এই নথিখনত সংবেদনশীল সমল আছে।</translation>
 <translation id="18245044880483936">আপোনাৰ শিশুৰ Driveৰ ষ্ট'ৰেজত থকা নির্ধাৰিত ঠাইত বেক আপ ডেটা গণনা কৰা নহ’ব।</translation>
 <translation id="1825565032302550710">প’ৰ্টটো ১০২৪ আৰু ৬৫৫৩৫ৰ ভিতৰত হ’বই লাগিব</translation>
 <translation id="182577151972096764">শেহতীয়াকৈ চোৱা ৰন্ধনবিধি</translation>
@@ -1953,7 +1952,6 @@
 <translation id="2743301740238894839">আৰম্ভ কৰক</translation>
 <translation id="2743387203779672305">ক্লিপব'ৰ্ডত প্ৰতিলিপি কৰক</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">এই ফাইলটোত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এইটোৰ গৰাকীক সমাধান কৰিবলৈ কওক।</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />ত ছাইন ইন কৰক</translation>
 <translation id="2749836841884031656">ছিম</translation>
 <translation id="2749881179542288782">বানান আৰু ব্যাকৰণত থকা ভুলবোৰ চাওক</translation>
@@ -2548,7 +2546,6 @@
 <translation id="3317459757438853210">পৃষ্ঠাখনৰ দুয়োফালে</translation>
 <translation id="3317678681329786349">কেমেৰা আৰু মাইক্ৰ’ফ’নৰ ব্যৱহাৰ অৱৰোধ কৰা হৈছে</translation>
 <translation id="3320630259304269485">সুৰক্ষিত ব্ৰাউজিং (বিপজ্জনক ছাইটসমূহৰ পৰা সুৰক্ষা) আৰু অন্য সুৰক্ষা সম্পর্কীয় ছেটিংসমূহ</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{এই ডেটাখিনিত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}=1{এই ফাইলটোত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}one{এই ফাইলসমূহত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}other{এই ফাইলসমূহত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}}</translation>
 <translation id="3323521181261657960">ব’নাছ! আপুনি আৰু বেছি স্ক্ৰীন টাইম পাইছে</translation>
 <translation id="3323577066981719144">আপুনি ইয়াত কৰা সালসলনিসমূহ কেৱল Chrome ব্ৰাউজাৰত প্ৰযোজ্য হয়। আপোনাৰ Lacros Chrome ব্ৰাউজাৰৰ ছেটিঙত সালসলনিসমূহ কৰিবলৈ, Lacros Chrome ব্ৰাউজাৰ খোলক আৰু ছেটিঙলৈ যাওক।</translation>
 <translation id="3325804108816646710">উপলব্ধ প্ৰ’ফাইল বিচাৰি থকা হৈছে...</translation>
@@ -2682,7 +2679,6 @@
 <translation id="3445925074670675829">ইউএছবি চি ডিভাইচ</translation>
 <translation id="3446274660183028131">Windows ইনষ্টল কৰিবলৈ অনুগ্ৰহ কৰি Parallels Desktop লঞ্চ কৰক।</translation>
 <translation id="344630545793878684">আপোনাৰ ডেটা ৱেবছাইটসমূহত পঢ়ে</translation>
-<translation id="3446650212859500694">এই ফাইলটোত সংবেদনশীল সমল আছে</translation>
 <translation id="3447644283769633681">আটাইবোৰ তৃতীয় পক্ষৰ কুকি অৱৰোধ কৰক</translation>
 <translation id="3448492834076427715">একাউণ্ট আপডে'ট কৰক</translation>
 <translation id="3449393517661170867">টিপা নতুন ৱিণ্ড’</translation>
@@ -3913,7 +3909,6 @@
 <translation id="4602466770786743961">আপোনাৰ কেমেৰা আৰু মাইক্ৰ’ফ’নলৈ সদায় <ph name="HOST" />ক এক্সেছ দিয়ক</translation>
 <translation id="4606551464649945562">ছাইটসমূহক আপোনাৰ চৌপাশৰ এখন 3D মেপ সৃষ্টি কৰাৰ অথবা কেমেৰাৰ স্থান ট্ৰেক কৰাৰ অনুমতি নিদিব</translation>
 <translation id="4608500690299898628">&amp;বিচাৰক…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" />ত সংবেদনশীল সমল আছে</translation>
 <translation id="4609987916561367134">JavaScript ব্যৱহাৰ কৰাৰ অনুমতি আছে</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />এ কিবা আসোঁৱাহ পাইছে</translation>
 <translation id="4610637590575890427">আপুনি <ph name="SITE" />লৈ যাব বিচাৰিছিল নেকি?</translation>
@@ -5886,7 +5881,6 @@
 <translation id="6492396476180293140">হাৰ্ডৱেৰৰ ছুইচে অভ্যন্তৰীণ কেমেৰা অক্ষম কৰিছে</translation>
 <translation id="6494327278868541139">বৰ্ধিত সুৰক্ষাৰ সবিশেষ দেখুৱাওক</translation>
 <translation id="6494445798847293442">কোনো প্ৰমাণপত্ৰ প্ৰদানকাৰী কৰ্তৃপক্ষ নহয়</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{এই ডেটাখিনিত সংবেদনশীল অথবা বিপজ্জনক সমল আছে}=1{এই ফাইলটোত সংবেদনশীল অথবা বিপজ্জনক সমল আছে}one{এই ফাইলসমূহত সংবেদনশীল অথবা বিপজ্জনক সমল আছে}other{এই ফাইলসমূহত সংবেদনশীল অথবা বিপজ্জনক সমল আছে}}</translation>
 <translation id="6497548114956205206">শক্তি সঞ্চয়কাৰীৰ বিষয়ে অধিক জানক</translation>
 <translation id="6497784818439587832">আপোনাৰ স্ক্ৰীনত থকা বস্তুবোৰ সৰু অথবা ডাঙৰ কৰিবলৈ ডিছপ্লে’ৰ আকাৰ সলনি কৰক</translation>
 <translation id="6497789971060331894">মাউছ ওলোটাকৈ স্ক্র’ল কৰাৰ সুবিধা</translation>
@@ -6034,7 +6028,6 @@
 <translation id="6621391692573306628">অন্য এটা ডিভাইচলৈ এই টেবটো পঠিয়াবলৈ, দুয়োটা ডিভাইচতে Chromeত ছাইন ইন কৰক</translation>
 <translation id="6622980291894852883">প্ৰতিচ্ছবি অৱৰোধ কৰাটো অব্যাহত ৰাখক</translation>
 <translation id="6624036901798307345">টেবলেট ম’ডত, প্ৰতিটো টেবৰ বাবে থাম্বনেইল দেখুওৱা নতুন টেবৰ ষ্ট্ৰিপটো খুলিবলৈ টেব কাউণ্টাৰৰ টুলবাৰৰ বুটামটোত টিপক।</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" />ত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এইটোৰ গৰাকীক সমাধান কৰিবলৈ কওক।</translation>
 <translation id="6624687053722465643">মিষ্টতা</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" />এ আপল’ড কৰা হৈছে</translation>
 <translation id="6630117778953264026">অধিক শক্তিশালী সুৰক্ষা</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index 048842db..7bf49ab 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -903,7 +903,6 @@
 <translation id="1819721979226826163">Tətbiq bildirişlər &gt; Google Play xidmətləri seçiminə klikləyin.</translation>
 <translation id="1820028137326691631">Adminin yaratdığı parolu daxil edin</translation>
 <translation id="1822140782238030981">Artıq Chrome istifadəçisiniz? Giriş edin</translation>
-<translation id="1823098433522728610">Bu sənəd həssas məzmun ehtiva edir.</translation>
 <translation id="18245044880483936">Yedəkləmə datası uşağınızın Disk yaddaşı kvotasına aid edilmir.</translation>
 <translation id="1825565032302550710">Port 1024 və 65535 arasında olmalıdır</translation>
 <translation id="182577151972096764">bu yaxınlarda baxılan reseptlər</translation>
@@ -1939,7 +1938,6 @@
 <translation id="2743301740238894839">Başladın</translation>
 <translation id="2743387203779672305">Buferə kopyalayın</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">Bu fayl həssas və ya təhlükəli məzmun ehtiva edir. Sahibindən onu düzəltməsini istəyin.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> məhsuluna daxil olun</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Qrammatikanı Orfoqrafiya ilə yoxlayın</translation>
@@ -2534,7 +2532,6 @@
 <translation id="3317459757438853210">İkitərəfli</translation>
 <translation id="3317678681329786349">Kamera və mikrofon blok edildi</translation>
 <translation id="3320630259304269485">Təhlükəsiz Baxış (təhlükəli saytlardan qoruma) və digər güvənlik ayarları</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Bu data həssas və ya təhlükəli məzmun ehtiva edir. Bu məzmunu silin və yenidən cəhd edin.}=1{Bu fayl həssas və ya təhlükəli məzmun ehtiva edir. Bu məzmunu silin və yenidən cəhd edin.}other{Bu fayllar həssas və ya təhlükəli məzmun ehtiva edir. Bu məzmunu silin və yenidən cəhd edin.}}</translation>
 <translation id="3323521181261657960">Bonus! Daha çox ekran vaxtı əldə etdiniz</translation>
 <translation id="3323577066981719144">Burada etdiyiniz dəyişikliklər yalnız Chrome Brauzerinə aiddir. Lacros Chrome Brauzer ayarlarınızda dəyişiklik etmək üçün Lacros Chrome Brauzerini açın və ayarlara keçin.</translation>
 <translation id="3325804108816646710">Əlçatan profillər axtarılır...</translation>
@@ -2668,7 +2665,6 @@
 <translation id="3445925074670675829">USB-C cihazı</translation>
 <translation id="3446274660183028131">Windows'u quraşdırmaq üçün Parallels Desktop'u işə salın.</translation>
 <translation id="344630545793878684">Datanızı çoxsaylı vebsaytda oxuyun</translation>
-<translation id="3446650212859500694">Bu fayl həssas məzmun ehtiva edir</translation>
 <translation id="3447644283769633681">Bütün üçüncü tərəf kukilərini bloklayın</translation>
 <translation id="3448492834076427715">Hesabı yeniləyin</translation>
 <translation id="3449393517661170867">Yeni tablı pəncərə</translation>
@@ -3898,7 +3894,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> hostuna kameranıza və mikrofonunuza həmişə girməsinə imkan verin</translation>
 <translation id="4606551464649945562">Saytların ətrafınızdakı sahələrin 3D xəritəsini yaratmasına və ya kamera mövqeyini izləməsinə icazə verməyin</translation>
 <translation id="4608500690299898628">Tapın...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> həssas məzmun ehtiva edir</translation>
 <translation id="4609987916561367134">Javascript'dən istifadəyə icazə verilib</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ilə bağlı xəta oldu</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> saytına keçməyi nəzərdə tuturdunuz?</translation>
@@ -5869,7 +5864,6 @@
 <translation id="6492396476180293140">Daxili kamera avadanlıq açarı ilə deaktiv edilib</translation>
 <translation id="6494327278868541139">Geniş qoruma detallarını göstərin</translation>
 <translation id="6494445798847293442">Sertifikatlaşdırma Təşkilatı deyil</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Bu data həssas və ya təhlükəli məzmun ehtiva edir}=1{Bu fayl həssas və ya təhlükəli məzmun ehtiva edir}other{Bu fayllar həssas və ya təhlükəli məzmun ehtiva edir}}</translation>
 <translation id="6497548114956205206">Enerjiyə qənaət haqqında ətraflı məlumat</translation>
 <translation id="6497784818439587832">Ekranınızdakı elementləri kiçiltmək və ya böyütmək üçün ekran ölçüsünü dəyişdirin</translation>
 <translation id="6497789971060331894">Siçanın geri sürüşdürməsi</translation>
@@ -6015,7 +6009,6 @@
 <translation id="6621391692573306628">Bu tabı başqa cihaza göndərmək üçün hər iki cihazda Chrome'a daxil olun</translation>
 <translation id="6622980291894852883">Təsvirləri blok etməyə davam edin</translation>
 <translation id="6624036901798307345">Planşet rejimində hər tabın miniatürlərini göstərən yeni tab zolağını açmaq üçün tab sayğacı alətlər paneli düyməsinə toxunun.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> həssas və ya təhlükəli məzmun ehtiva edir. Sahibindən onu düzəltməsini istəyin.</translation>
 <translation id="6624687053722465643">Şirinlik</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> yüklənib</translation>
 <translation id="6630117778953264026">Güclü güvənlik</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index 3803d61..4dad6fa 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -910,7 +910,6 @@
 <translation id="1819721979226826163">Націсніце "Апавяшчэнні праграм &gt; Сэрвісы Google Play".</translation>
 <translation id="1820028137326691631">Увядзіце пароль ад адміністратара</translation>
 <translation id="1822140782238030981">Ужо выкарыстоўваеце Chrome? Увайсці</translation>
-<translation id="1823098433522728610">У гэтым дакуменце ёсць канфідэнцыяльнае змесціва.</translation>
 <translation id="18245044880483936">Даныя рэзервовай копіі не будуць улічвацца ў квоце сховішча вашага дзіцяці на Дыску.</translation>
 <translation id="1825565032302550710">Значэнне для порта павінна быць зададзена ў выглядзе ліку ад 1024 да 65535</translation>
 <translation id="182577151972096764">нядаўна прагледжаныя рэцэпты</translation>
@@ -1943,7 +1942,6 @@
 <translation id="2743301740238894839">Пачаць</translation>
 <translation id="2743387203779672305">Скапіраваць у буфер абмену</translation>
 <translation id="2745080116229976798">Кваліфікаваная падпарадкаванасць Microsoft</translation>
-<translation id="2747266560080989517">Гэты файл змяшчае канфідэнцыяльнае або небяспечнае змесціва. Папрасіце ўладальніка файла вырашыць гэту праблему.</translation>
 <translation id="2749756011735116528">Увайсці ва ўліковы запіс <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM-карта</translation>
 <translation id="2749881179542288782">Праверыць граматыку і правапіс</translation>
@@ -2538,7 +2536,6 @@
 <translation id="3317459757438853210">Двухбаковы</translation>
 <translation id="3317678681329786349">Камера і мікрафон заблакіраваны</translation>
 <translation id="3320630259304269485">Бяспечны прагляд (абарона ад небяспечных сайтаў) і іншыя налады бяспекі</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Гэтыя даныя змяшчаюць канфідэнцыяльнае або небяспечнае змесціва. Выдаліце гэта змесціва і паўтарыце спробу.}=1{Гэты файл змяшчае канфідэнцыяльнае або небяспечнае змесціва. Выдаліце гэта змесціва і паўтарыце спробу.}one{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва. Выдаліце гэта змесціва і паўтарыце спробу.}few{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва. Выдаліце гэта змесціва і паўтарыце спробу.}many{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва. Выдаліце гэта змесціва і паўтарыце спробу.}other{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва. Выдаліце гэта змесціва і паўтарыце спробу.}}</translation>
 <translation id="3323521181261657960">Бонус! Час карыстання павялічыўся</translation>
 <translation id="3323577066981719144">Унесеныя тут змены будуць прыменены толькі ў браўзеры Chrome. Каб змяніць налады браўзера Lacros Chrome, адкрыйце яго і перайдзіце ў налады.</translation>
 <translation id="3325804108816646710">Ідзе пошук даступных профіляў...</translation>
@@ -2672,7 +2669,6 @@
 <translation id="3445925074670675829">Прылада USB-C</translation>
 <translation id="3446274660183028131">Каб усталяваць Windows, запусціце Parallels Desktop.</translation>
 <translation id="344630545793878684">Прагляд вашых даных на шэрагу вэб-сайтаў</translation>
-<translation id="3446650212859500694">Гэты файл змяшчае канфідэнцыяльнае змесціва.</translation>
 <translation id="3447644283769633681">Блакіроўка ўсіх старонніх файлаў cookie</translation>
 <translation id="3448492834076427715">Абнавіць уліковы запіс</translation>
 <translation id="3449393517661170867">Новае акно ва ўкладцы</translation>
@@ -3903,7 +3899,6 @@
 <translation id="4602466770786743961">Заўсёды даваць сайту <ph name="HOST" /> доступ да камеры і мікрафона</translation>
 <translation id="4606551464649945562">Не дазваляць сайтам ствараць 3D-карту вашага асяроддзя і адсочваць становішча камеры</translation>
 <translation id="4608500690299898628">&amp;Пошук...</translation>
-<translation id="4608703838363792434">Файл "<ph name="FILE_NAME" />" змяшчае канфідэнцыяльнае змесціва</translation>
 <translation id="4609987916561367134">Дазволена выкарыстоўваць змесціва JavaScript</translation>
 <translation id="4610162781778310380">У <ph name="PLUGIN_NAME" /> выяўлена памылка</translation>
 <translation id="4610637590575890427">Магчыма, вы хацелі перайсці на <ph name="SITE" />?</translation>
@@ -5876,7 +5871,6 @@
 <translation id="6492396476180293140">Унутраная камера выключана апаратным пераключальнікам</translation>
 <translation id="6494327278868541139">Паказаць падрабязныя звесткі аб палепшанай абароне</translation>
 <translation id="6494445798847293442">Не з'яўляецца цэнтрам сертыфікацыі</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Гэтыя даныя змяшчаюць канфідэнцыяльнае або небяспечнае змесціва}=1{Гэты файл змяшчае канфідэнцыяльнае або небяспечнае змесціва}one{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва}few{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва}many{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва}other{Гэтыя файлы змяшчаюць канфідэнцыяльнае або небяспечнае змесціва}}</translation>
 <translation id="6497548114956205206">Даведацца больш пра рэжым "Эканомія энергіі"</translation>
 <translation id="6497784818439587832">Змяняйце маштаб дысплэя, каб паменшыць або павялічыць памеры аб'ектаў на экране</translation>
 <translation id="6497789971060331894">Адваротная прагортка мышшу</translation>
@@ -6028,7 +6022,6 @@
 <translation id="6621391692573306628">Каб адправіць гэту ўкладку на іншую прыладу, увайдзіце ў Chrome з абедзвюх прылад</translation>
 <translation id="6622980291894852883">Працягнуць блакіраваць відарысы</translation>
 <translation id="6624036901798307345">Планшэтны рэжым: кнопка лічыльніка ўкладак на панэлі інструментаў адкрывае новую панэль укладак з мініяцюрамі кожнай укладкі.</translation>
-<translation id="6624535038674360844">Файл "<ph name="FILE_NAME" />" змяшчае канфідэнцыяльнае або небяспечнае змесціва. Папрасіце ўладальніка файла вырашыць гэту праблему.</translation>
 <translation id="6624687053722465643">Ласунак</translation>
 <translation id="6628328486509726751">Запампавана: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Павышаная бяспека</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index 711a5e3d..833c0946 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -914,7 +914,6 @@
 <translation id="1819721979226826163">Докоснете „Известия за прилож.“ &gt; Услуги за Google Play.</translation>
 <translation id="1820028137326691631">Въведете паролата, предоставена от администратора</translation>
 <translation id="1822140782238030981">Вече сте потребител на Chrome? Влезте в профила си</translation>
-<translation id="1823098433522728610">В този документ има поверително съдържание.</translation>
 <translation id="18245044880483936">Данните в резервното копие не се отчитат в квотата на хранилището на детето ви в Диск.</translation>
 <translation id="1825565032302550710">Портът трябва да е число между 1024 и 65535</translation>
 <translation id="182577151972096764">наскоро прегледаните рецепти</translation>
@@ -1950,8 +1949,8 @@
 <translation id="274318651891194348">Търси се клавиатура</translation>
 <translation id="2743301740238894839">Стартиране</translation>
 <translation id="2743387203779672305">Копиране в буферната памет</translation>
+<translation id="274362947316498129">Приложение се опитва да осъществи достъп до <ph name="DEVICE_NAME" />. За да разрешите достъп, изключете превключвателя за поверителност на <ph name="DEVICE_NAME" />.</translation>
 <translation id="2745080116229976798">Удостоверена субординация от Microsoft</translation>
-<translation id="2747266560080989517">В този файл има деликатно или опасно съдържание. Помолете собственика му да отстрани проблема.</translation>
 <translation id="2749756011735116528">Вход в <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM карта</translation>
 <translation id="2749881179542288782">Проверка на граматиката заедно с правописа</translation>
@@ -2546,7 +2545,6 @@
 <translation id="3317459757438853210">Двустранно</translation>
 <translation id="3317678681329786349">Достъпът до камерата и микрофона е блокиран</translation>
 <translation id="3320630259304269485">Безопасно сърфиране (защита от опасни сайтове) и други настройки за сигурността</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{В тези данни има деликатно или опасно съдържание. Премахнете го и опитайте отново.}=1{В този файл има деликатно или опасно съдържание. Премахнете съответното съдържание и опитайте отново.}other{В тези файлове има деликатно или опасно съдържание. Премахнете го и опитайте отново.}}</translation>
 <translation id="3323521181261657960">Бонус! Получихте още време на ползване</translation>
 <translation id="3323577066981719144">Промените тук важат само за браузъра Chrome. За да промените настройките на браузъра Lacros Chrome, отворете ги в този браузър.</translation>
 <translation id="3325804108816646710">Търсят се налични профили...</translation>
@@ -2680,7 +2678,6 @@
 <translation id="3445925074670675829">USB-C устройство</translation>
 <translation id="3446274660183028131">Моля, стартирайте Parallels Desktop, за да инсталирате Windows.</translation>
 <translation id="344630545793878684">Четене на данните ви от редица уебсайтове</translation>
-<translation id="3446650212859500694">В този файл има деликатно съдържание</translation>
 <translation id="3447644283769633681">Блокиране на всички „бисквитки“ на трети страни</translation>
 <translation id="3448492834076427715">Актуализиране на профила</translation>
 <translation id="3449393517661170867">Нов прозорец с раздели</translation>
@@ -3123,6 +3120,7 @@
 <translation id="385051799172605136">Назад</translation>
 <translation id="3851428669031642514">Зареждане на опасните скриптове</translation>
 <translation id="3852215160863921508">Съдействие при въвеждане</translation>
+<translation id="3853549894831560772">Устройството <ph name="DEVICE_NAME" /> е включено</translation>
 <translation id="3854599674806204102">Изберете опция</translation>
 <translation id="3854967233147778866">Извеждане на предложения за превод на уебсайтовете, написани на други езици</translation>
 <translation id="3854976556788175030">Изходната тава е пълна</translation>
@@ -3456,6 +3454,7 @@
 <translation id="4163560723127662357">Неизвестна клавиатура</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> не принадлежи на валидна организация. Обърнете се към администратора си. Ако вие сте администратор, можете да настроите организацията си на адрес: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Настройки за сайта</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> се опитва да осъществи достъп до <ph name="DEVICE_NAME" />. За да разрешите достъп, изключете превключвателя за поверителност на <ph name="DEVICE_NAME" />.</translation>
 <translation id="4167393659000039775">Google не носи отговорност за евентуална загуба на данни. Възможно е <ph name="DEVICE_OS" /> да не работи на несертифицирани модели. Научете повече на адрес g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Сайтовете обикновено използват JavaScript за показване на интерактивни функции, като например видеоигри или уеб формуляри</translation>
 <translation id="4168015872538332605">Някои от настройките на <ph name="PRIMARY_EMAIL" /> се споделят с вас. Те засягат профила ви само когато използвате централизиран вход.</translation>
@@ -3914,11 +3913,11 @@
 <translation id="4602466770786743961">Достъпът на <ph name="HOST" /> до камерата и микрофона ви да е разрешен винаги</translation>
 <translation id="4606551464649945562">Да не се разрешава на сайтовете да създават триизмерна карта на заобикалящата ви среда или да следят позицията на камерата</translation>
 <translation id="4608500690299898628">&amp;Търсене...</translation>
-<translation id="4608703838363792434">Във файла <ph name="FILE_NAME" /> има деликатно съдържание</translation>
 <translation id="4609987916561367134">Сайтове с разрешение за използване на JavaScript</translation>
 <translation id="4610162781778310380">Възникна грешка в приставката <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Може би искахте да отворите <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Налице е връзка за пренос на данни</translation>
+<translation id="4612841084470706111">Предоставяне на достъп до всички заявени сайтове.</translation>
 <translation id="4613144866899789710">Инсталирането на Linux се анулира...</translation>
 <translation id="4613271546271159013">Разширение промени страницата, която се показва при отваряне на нов раздел.</translation>
 <translation id="4615586811063744755">няма избрана „бисквитка“</translation>
@@ -5683,6 +5682,7 @@
 <translation id="6291949900244949761">Извеждане на запитване, когато сайт иска достъп до USB устройства (препоръчително)</translation>
 <translation id="6291953229176937411">&amp;Показване във Finder</translation>
 <translation id="6292699686837272722">Разделите се свиват до размер със средна ширина</translation>
+<translation id="6293862149782163840">Устройството <ph name="DEVICE_NAME" /> е изключено</translation>
 <translation id="6294759976468837022">Скорост на автоматичното сканиране</translation>
 <translation id="6295158916970320988">Всички сайтове</translation>
 <translation id="6295855836753816081">Запазва се...</translation>
@@ -5888,7 +5888,6 @@
 <translation id="6492396476180293140">Вътрешната камера е деактивирана чрез хардуерния превключвател</translation>
 <translation id="6494327278868541139">Показване на подробности за подобрената защита</translation>
 <translation id="6494445798847293442">Не е сертифициращ орган</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{В тези данни има деликатно или опасно съдържание}=1{В този файл има деликатно или опасно съдържание}other{В тези файлове има деликатно или опасно съдържание}}</translation>
 <translation id="6497548114956205206">Научете повече за режима за икономия на енергия</translation>
 <translation id="6497784818439587832">С промяната на размера на елементите на екрана ги смалявате или увеличавате</translation>
 <translation id="6497789971060331894">Обратно превъртане с мишката</translation>
@@ -6034,7 +6033,6 @@
 <translation id="6621391692573306628">За да изпратите този раздел до друго устройство, влезте в профила си в Chrome и на двете устройства</translation>
 <translation id="6622980291894852883">Блокирането на изображения да продължи</translation>
 <translation id="6624036901798307345">В режим на таблет докоснете бутона в лентата с инструменти за броя на разделите, за да отворите новата лента с раздели, показваща миниизображения за всеки от тях.</translation>
-<translation id="6624535038674360844">Във файла <ph name="FILE_NAME" /> има деликатно или опасно съдържание. Помолете собственика му да отстрани проблема.</translation>
 <translation id="6624687053722465643">Сладкиш</translation>
 <translation id="6628328486509726751">Качено: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">По-голяма сигурност</translation>
@@ -8494,6 +8492,7 @@
 <translation id="8940081510938872932">Компютърът ви извършва твърде много неща в момента.  Опитайте отново по-късно.</translation>
 <translation id="8940381019874223173">От снимките ви в Google Снимки</translation>
 <translation id="8941173171815156065">Отмяна на разрешението „<ph name="PERMISSION" />“</translation>
+<translation id="8941688920560496412">Устройството <ph name="DEVICE_NAME" /> е изключено</translation>
 <translation id="894191600409472540">Създавайте надеждни пароли</translation>
 <translation id="894360074127026135">Международно повишаване на сигурността от Netscape</translation>
 <translation id="8944099748578356325">използва батерията по-бързо (понастоящем тя е <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 6b6bb97..7727e8c 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -919,7 +919,6 @@
 <translation id="1819721979226826163">অ্যাপ বিজ্ঞপ্তি &gt; Google Play পরিষেবা ট্যাপ করুন।</translation>
 <translation id="1820028137326691631">অ্যাডমিনের দেওয়া পাসওয়ার্ড লিখুন</translation>
 <translation id="1822140782238030981">আপনি কি আগে থেকেই Chrome ব্যবহার করছেন? সাইন-ইন করুন</translation>
-<translation id="1823098433522728610">এই ডকুমেন্টে সংবেদনশীল কন্টেন্ট আছে।</translation>
 <translation id="18245044880483936">ব্যাক-আপ ডেটা, আপনার সন্তানের Drive স্টোরেজ কোটার মধ্যে ধরা হয় না।</translation>
 <translation id="1825565032302550710">পোর্ট অবশ্যই ১০২৪ ও ৬৫৫৩৫-এর মধ্যে থাকতে হবে</translation>
 <translation id="182577151972096764">সম্প্রতি দেখা রেসিপি</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2743301740238894839">শুরু করুন</translation>
 <translation id="2743387203779672305">ক্লিপবোর্ডে কপি করুন</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">এই ফাইলে সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে। ফাইলের মালিককে সেটি ঠিক করতে বলুন।</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />এ সাইন-ইন করুন</translation>
 <translation id="2749836841884031656">সিম (SIM)</translation>
 <translation id="2749881179542288782">বানান সহ ব্যাকরণ চেক করুন</translation>
@@ -2551,7 +2549,6 @@
 <translation id="3317459757438853210">দ্বি-পার্শ্বযুক্ত</translation>
 <translation id="3317678681329786349">ক্যামেরা এবং মাইক্রোফোনের ব্যবহার ব্লক করা হয়েছে</translation>
 <translation id="3320630259304269485">Safe Browsing (ক্ষতিকারক সাইট থেকে সুরক্ষা) এবং অন্যান্য নিরাপত্তা সংক্রান্ত সেটিংস</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{এই ডেটায় সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে। এই কন্টেন্ট সরিয়ে আবার চেষ্টা করুন।}=1{এই ফাইলে সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে। এই কন্টেন্ট সরিয়ে আবার চেষ্টা করুন।}one{এই ফাইলগুলিতে সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে। এই কন্টেন্ট সরিয়ে আবার চেষ্টা করুন।}other{এই ফাইলগুলিতে সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে। এই কন্টেন্ট সরিয়ে আবার চেষ্টা করুন।}}</translation>
 <translation id="3323521181261657960">বোনাস! তোমাকে আরও স্ক্রিন টাইম দেওয়া হয়েছে</translation>
 <translation id="3323577066981719144">এখানে আপনি যে পরিবর্তন করবেন সেটি শুধু Chrome ব্রাউজারে প্রয়োগ করা হবে। Lacros Chrome ব্রাউজার সেটিংসে পরিবর্তন করতে, আপনার Lacros Chrome ব্রাউজার খুলে সেটিংসে যান।</translation>
 <translation id="3325804108816646710">উপলভ্য প্রোফাইল খুঁজে দেখা হচ্ছে...</translation>
@@ -2685,7 +2682,6 @@
 <translation id="3445925074670675829">USB-C ডিভাইস</translation>
 <translation id="3446274660183028131">Windows ইনস্টল করতে Parallels Desktop চালু করুন।</translation>
 <translation id="344630545793878684">কতগুলি ওয়েবসাইটে আপনার ডেটা পড়ে</translation>
-<translation id="3446650212859500694">এই ফাইলে সংবেদনশীল কন্টেন্ট আছে</translation>
 <translation id="3447644283769633681">সমস্ত তৃতীয়-পক্ষ কুকি অবরোধ করুন</translation>
 <translation id="3448492834076427715">অ্যাকাউন্ট আপডেট করুন</translation>
 <translation id="3449393517661170867">ট্যাবযুক্ত মোডে নতুন উইন্ডো</translation>
@@ -3918,7 +3914,6 @@
 <translation id="4602466770786743961">আপনার ক্যামেরা এবং মাইক্রোফোন যেকোনো সময় অ্যাক্সেস করতে <ph name="HOST" /> কে মঞ্জুরি দেয়</translation>
 <translation id="4606551464649945562">কোনও সাইটকে আপনার আশেপাশের এলাকার একটি 3D ম্যাপ তৈরি করতে বা ক্যামেরার অবস্থান ট্র্যাক করতে দেবেন না</translation>
 <translation id="4608500690299898628">&amp;সন্ধান করুন...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" />-এ সংবেদনশীল কন্টেন্ট আছে</translation>
 <translation id="4609987916561367134">জাভাস্ক্রিপ্ট ব্যবহার করার অনুমতি দেওয়া হয়েছে</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> এ সমস্যা হয়েছে</translation>
 <translation id="4610637590575890427">আপনি <ph name="SITE" />-এ যাওয়ার কথা বলছেন কি?</translation>
@@ -5894,7 +5889,6 @@
 <translation id="6492396476180293140">হার্ডওয়্যার সুইচের সাহায্যে ইন্টার্নাল ক্যামেরা বন্ধ করা হয়েছে</translation>
 <translation id="6494327278868541139">উন্নত সুরক্ষা সংক্রান্ত বিবরণ দেখুন</translation>
 <translation id="6494445798847293442">কোনো শংসাকরণ কর্তৃপক্ষ নয়</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{এই ডেটায় সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে}=1{এই ফাইলে সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে}one{এই ফাইলগুলিতে সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে}other{এই ফাইলগুলিতে সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে}}</translation>
 <translation id="6497548114956205206">পাওয়ার সেভার সম্পর্কে আরও জানুন</translation>
 <translation id="6497784818439587832">স্ক্রিনে কোনও আইটেম বড় বা ছোট করে দেখার জন্য ডিসপ্লে সাইজ পরিবর্তন করা</translation>
 <translation id="6497789971060331894">মাউস উল্টো দিকে স্ক্রল করা</translation>
@@ -6042,7 +6036,6 @@
 <translation id="6621391692573306628">এই ট্যাবটিকে অন্য ডিভাইসে পাঠাতে, উভয় ডিভাইসেই Chrome-এ সাইন-ইন করুন</translation>
 <translation id="6622980291894852883">চিত্রগুলিকে ব্লক করা চালিয়ে যান</translation>
 <translation id="6624036901798307345">ট্যাবলেট মোডে প্রতিটি ট্যাবে থাম্বনেল দেখানো হয় এমন ট্যাব বার খোলার জন্য ট্যাব কাউন্টার টুলবার বোতামে ট্যাপ করুন।</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" />-এ সংবেদনশীল বা বিপজ্জনক কন্টেন্ট আছে। ফাইলের মালিককে সেটি ঠিক করতে বলুন।</translation>
 <translation id="6624687053722465643">মিষ্ঠতা</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> এ আপলোড করা হয়েছে</translation>
 <translation id="6630117778953264026">শক্তিশালী সুরক্ষা</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index bc555e32..bf52e4b 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -241,6 +241,7 @@
 <translation id="121384500095351701">Nije moguće sigurno preuzeti fajl</translation>
 <translation id="1215411991991485844">Dodana je nova aplikacija u pozadini</translation>
 <translation id="1216542092748365687">Ukloni otisak prsta</translation>
+<translation id="1216891999012841486">Saznajte više o ispravljanju pogrešaka pri ažuriranju</translation>
 <translation id="1217114730239853757">Želite li aktivirati ChromeVox, ugrađeni čitač ekrana za ChromeOS Flex? Ako želite, pritisnite tipku za razmak.</translation>
 <translation id="1217483152325416304">Vaši lokalni podaci će se uskoro izbrisati</translation>
 <translation id="1217668622537098248">Vraćanje na lijevi klik nakon radnje</translation>
@@ -411,6 +412,7 @@
 <translation id="1388253969141979417">Dozvoljeno je korištenje vašeg mikrofona</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> će se ponovo pokrenuti kada se završe ažuriranja.</translation>
 <translation id="1389601498324964367">Pohrana kojom se upravlja kvotom</translation>
+<translation id="1390113502208199250">Uređaj ćete morati vratiti na tvorničke postavke kako biste mogli upotrebljavali značajke Nadogradnje za Chrome za obrazovanje.</translation>
 <translation id="139013308650923562">Dozvoljeno je koristiti fontove instalirane na uređaju</translation>
 <translation id="1390548061267426325">Otvori kao običnu karticu</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> nema ovlaštenje da štampa na štampaču <ph name="PRINTER_NAME" />. Kontaktirajte administratora.</translation>
@@ -481,6 +483,7 @@
 <translation id="1436784010935106834">Uklonjeno</translation>
 <translation id="1437986450143295708">Detaljno opišite problem</translation>
 <translation id="1439671507542716852">dugoročna podrška</translation>
+<translation id="1440090277117135316">Upis u školu je dovršen</translation>
 <translation id="144283815522798837">Odabrano <ph name="NUMBER_OF_ITEMS_SELECTED" /></translation>
 <translation id="1442851588227551435">Postavi aktivni tiket za Kerberos</translation>
 <translation id="1444628761356461360">Ovom postavkom upravlja vlasnik uređaja, <ph name="OWNER_EMAIL" />.</translation>
@@ -917,7 +920,6 @@
 <translation id="1819721979226826163">Dodirnite Obavještenja iz aplikacija &gt; Google Play usluge.</translation>
 <translation id="1820028137326691631">Unesite lozinku koju vam je dao administrator</translation>
 <translation id="1822140782238030981">Postojeći ste korisnik Chromea? Prijava</translation>
-<translation id="1823098433522728610">Ovaj dokument ima osjetljivi sadržaj.</translation>
 <translation id="18245044880483936">Podaci sigurnosne kopije se neće računati u kvotu pohrane na Disku vašeg djeteta.</translation>
 <translation id="1825565032302550710">Priključak mora biti između 1024 i 65535</translation>
 <translation id="182577151972096764">nedavno pregledani recepti</translation>
@@ -1953,8 +1955,8 @@
 <translation id="274318651891194348">Traženje tastature</translation>
 <translation id="2743301740238894839">Pokreni</translation>
 <translation id="2743387203779672305">Kopiraj u međumemoriju</translation>
+<translation id="274362947316498129">Aplikacija pokušava pristupiti uređaju <ph name="DEVICE_NAME" />. Da biste omogućili pristup, isključite prekidač za privatnost uređaja <ph name="DEVICE_NAME" />.</translation>
 <translation id="2745080116229976798">Entitet kvalificiran za saradnju s Microsoftom</translation>
-<translation id="2747266560080989517">U ovom fajlu postoji osjetljiv ili opasan sadržaj. Zatražite od vlasnika da ispravi grešku.</translation>
 <translation id="2749756011735116528">Prijava na uslugu <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Provjera gramatike i pravopisa</translation>
@@ -2410,6 +2412,7 @@
 <translation id="3170072451822350649">Također možete preskočiti prijavu i <ph name="LINK_START" />pretraživati kao gost<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Nova kartica s lijeve strane</translation>
 <translation id="3177909033752230686">Jezik stranice:</translation>
+<translation id="3177914167275935955">Vaš uređaj uključuje Nadogradnju za Chrome za obrazovanje, no vaše korisničko ime nije povezano s računom za Google for Education. Izradite račun za Google for Education na sekundarnom uređaju na stranici g.co/workspace/edusignup.</translation>
 <translation id="3179982752812949580">Font teksta</translation>
 <translation id="3181954750937456830">Sigurno pregledavanje (štiti vas i vaš uređaj od opasnih web-lokacija)</translation>
 <translation id="3182749001423093222">Provjera pravopisa</translation>
@@ -2549,7 +2552,6 @@
 <translation id="3317459757438853210">Obostrano</translation>
 <translation id="3317678681329786349">Kamera i mikrofon su blokirani</translation>
 <translation id="3320630259304269485">Sigurno pregledanje (zaštita od opasnih web lokacija) i druge sigurnosne postavke</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{U ovim podacima postoji osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}=1{U ovom fajlu postoji osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}one{U ovim fajlovima postoji osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}few{U ovim fajlovima postoji osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}other{U ovim fajlovima postoji osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}}</translation>
 <translation id="3323521181261657960">Bonus! Vrijeme korištenja uređaja ti je produženo</translation>
 <translation id="3323577066981719144">Izmjene koje izvršite ovdje se primjenjuju samo na preglednik Chrome. Da izvršite izmjene preglednika Lacros Chrome, otvorite Lacros Chrome i idite u postavke.</translation>
 <translation id="3325804108816646710">Traženje dostupnih profila...</translation>
@@ -2683,7 +2685,6 @@
 <translation id="3445925074670675829">USB-C uređaj</translation>
 <translation id="3446274660183028131">Pokrenite Parallels Desktop da instalirate Windows.</translation>
 <translation id="344630545793878684">Čitati vaše podatke na nizu web lokacija</translation>
-<translation id="3446650212859500694">U ovom fajlu postoji osjetljiv sadržaj</translation>
 <translation id="3447644283769633681">Blokiraj sve kolačiće trećih strana</translation>
 <translation id="3448492834076427715">Ažuriraj račun</translation>
 <translation id="3449393517661170867">Novi prozor u kartici</translation>
@@ -3125,6 +3126,7 @@
 <translation id="385051799172605136">Nazad</translation>
 <translation id="3851428669031642514">Učitaj nesigurne skripte</translation>
 <translation id="3852215160863921508">Pomoć prilikom unosa</translation>
+<translation id="3853549894831560772">Uređaj <ph name="DEVICE_NAME" /> je uključen</translation>
 <translation id="3854599674806204102">Izaberite opciju</translation>
 <translation id="3854967233147778866">Ponudi prevođenje web lokacija na drugim jezicima</translation>
 <translation id="3854976556788175030">Ladica za izlaz papira je puna</translation>
@@ -3458,6 +3460,7 @@
 <translation id="4163560723127662357">Nepoznata tastatura</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> ne pripada važećoj organizaciji. Kontaktirajte administratora. Ako ste administrator, možete postaviti organizaciju ako posjetite: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Postavke web-lokacije</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> pokušava pristupiti uređaju <ph name="DEVICE_NAME" />. Da biste omogućili pristup, isključite prekidač za privatnost uređaja <ph name="DEVICE_NAME" />.</translation>
 <translation id="4167393659000039775">Google nije odgovoran za bilo kakve gubitke podataka i ne garantira da će <ph name="DEVICE_OS" /> funkcionirati na modelima koji nisu certificirani. Saznajte više na g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Web lokacije obično koriste JavaScript za prikaz interaktivnih funkcija, kao što su video igre ili web obrasci</translation>
 <translation id="4168015872538332605">Neke postavke koje pripadaju korisniku <ph name="PRIMARY_EMAIL" /> se dijele s vama. Ove postavke se odnose samo na vaš račun dok koristite višestruku prijavu.</translation>
@@ -3916,11 +3919,11 @@
 <translation id="4602466770786743961">Uvijek omogući da <ph name="HOST" /> pristupa kameri i mikrofonu</translation>
 <translation id="4606551464649945562">Onemogući web lokacijama kreiranje 3D mape okruženja ili praćenje položaja kamere</translation>
 <translation id="4608500690299898628">&amp;Traži...</translation>
-<translation id="4608703838363792434">U fajlu <ph name="FILE_NAME" /> postoji osjetljiv sadržaj</translation>
 <translation id="4609987916561367134">Dozvoljeno je korištenje Javascripta</translation>
 <translation id="4610162781778310380">Dodatak <ph name="PLUGIN_NAME" /> naišao je na pogrešku</translation>
 <translation id="4610637590575890427">Htjeli ste ići na <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Veza za prijenos podataka je dostupna</translation>
+<translation id="4612841084470706111">Odobrite pristup svim zatraženim web-lokacijama.</translation>
 <translation id="4613144866899789710">Otkazivanje instaliranja Linuxa...</translation>
 <translation id="4613271546271159013">Ekstenzija je promijenila sadržaj koji se prikazuje na ekranu kada otvorite novu karticu.</translation>
 <translation id="4615586811063744755">nije izabran kolačić</translation>
@@ -4080,6 +4083,7 @@
 <translation id="4762489666082647806">Boja pokazivača</translation>
 <translation id="4762718786438001384">Količina prostora na disku uređaja je kritično mala</translation>
 <translation id="4763408175235639573">Sljedeći kolačići su postavljeni kada ste pregledali ovu stranicu</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> nije važeći račun za Google for Education. Obratite se administratoru. Ako ste administrator, možete postaviti organizaciju tako da posjetite: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Ovaj uređaj će biti sačuvan 1 mjesec i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}one{Ovaj uređaj će biti sačuvan {MONTHS} mjesec i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}few{Ovaj uređaj će biti sačuvan {MONTHS} mjeseca i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}other{Ovaj uređaj će biti sačuvan {MONTHS} mjeseci i sljedeći put se možete povezati bez koda. Ovo je postavio vaš administrator.}}</translation>
 <translation id="4765582662863429759">Omogućava aplikaciji Android Messages da šalje SMS-ove s vašeg telefona na vaš Chromebook</translation>
 <translation id="4766598565665644999">Sve ekstenzije mogu čitati i mijenjati <ph name="HOST" /></translation>
@@ -4741,6 +4745,7 @@
 <translation id="5407167491482639988">Nerazumljivo</translation>
 <translation id="5408750356094797285">Zumiranje: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">S vašeg Google računa</translation>
+<translation id="5411022484772257615">Nije moguće dovršiti upis u školu</translation>
 <translation id="5413640305322530561">Saznajte više o podacima o dijagnostici i korištenju</translation>
 <translation id="5414198321558177633">Osvježavanje liste profila. To može potrajati nekoliko minuta.</translation>
 <translation id="5414566801737831689">Očitavati ikone web lokacija koje posjetite</translation>
@@ -4992,6 +4997,7 @@
 <translation id="5632059346822207074">Zatraženo je odobrenje. Pritisnite Ctrl + naprijed da odgovorite</translation>
 <translation id="5632566673632479864">Vaš račun <ph name="EMAIL" /> više nije odobren kao primarni račun. S obzirom na to da ovim računom upravlja <ph name="DOMAIN" />, vaše oznake, historija, lozinke i drugi nizovi će se obrisati s ovog uređaja.</translation>
 <translation id="5632592977009207922">Preuzimanje, preostalo još <ph name="PERCENT_REMAINING" />%</translation>
+<translation id="5633149627228920745">Saznajte više o zahtjevima sustava</translation>
 <translation id="563371367637259496">Mobilna mreža</translation>
 <translation id="5634446357546764049">Pregledajte uspomene s nedavnih putovanja i još mnogo toga</translation>
 <translation id="5635312199252507107">Dozvoli na određenim web lokacijama</translation>
@@ -5526,6 +5532,7 @@
 <translation id="6129953537138746214">Tipka za razmak</translation>
 <translation id="6130692320435119637">Dodaj WiFi</translation>
 <translation id="6130887916931372608">Tipka tastature</translation>
+<translation id="6132714462430777655">Želite li preskočiti upis u školu?</translation>
 <translation id="6135823405800500595">Provjerite je li telefon blizu, otključan te jesu li uključeni Bluetooth i WiFi</translation>
 <translation id="6135826623269483856">Nije im dozvoljeno da upravljaju prozorima na svim vašim ekranima</translation>
 <translation id="6136114942382973861">Zatvori traku preuzetih fajlova</translation>
@@ -5684,6 +5691,7 @@
 <translation id="6291949900244949761">Pitaj kada web lokacija želi pristupiti USB uređajima (preporučeno)</translation>
 <translation id="6291953229176937411">&amp;Prikaži u Tražiocu</translation>
 <translation id="6292699686837272722">Kartice će se smanjiti na srednju širinu</translation>
+<translation id="6293862149782163840">Uređaj <ph name="DEVICE_NAME" /> se isključuje</translation>
 <translation id="6294759976468837022">Brzina automatskog skeniranja</translation>
 <translation id="6295158916970320988">Sve web-lokacije</translation>
 <translation id="6295855836753816081">Pohranjivanje…</translation>
@@ -5889,7 +5897,6 @@
 <translation id="6492396476180293140">Unutrašnja kamera se deaktivira hardverskim prekidačem</translation>
 <translation id="6494327278868541139">Prikaži detalje o poboljšanoj zaštiti</translation>
 <translation id="6494445798847293442">Nije tijelo za izdavanje potvrda</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{U ovim podacima postoji osjetljiv ili opasan sadržaj}=1{U ovom fajlu postoji osjetljiv ili opasan sadržaj}one{U ovim fajlovima postoji osjetljiv ili opasan sadržaj}few{U ovim fajlovima postoji osjetljiv ili opasan sadržaj}other{U ovim fajlovima postoji osjetljiv ili opasan sadržaj}}</translation>
 <translation id="6497548114956205206">Više informacija o uštedi energije</translation>
 <translation id="6497784818439587832">Promijenite veličinu prikaza da smanjite ili povećate stavke na ekranu</translation>
 <translation id="6497789971060331894">Obrnuto klizanje miša</translation>
@@ -6039,7 +6046,6 @@
 <translation id="6621391692573306628">Da pošaljete ovu karticu na drugi uređaj, prijavite se na Chrome na oba uređaja</translation>
 <translation id="6622980291894852883">Nastavi blokirati slike</translation>
 <translation id="6624036901798307345">U načinu rada tableta dodirnite dugme alatne trake brojača kartica da otvorite novu traku kartice koja prikazuje sličice svake kartice.</translation>
-<translation id="6624535038674360844">U fajlu <ph name="FILE_NAME" /> postoji osjetljiv ili opasan sadržaj. Zatražite od vlasnika da ispravi grešku.</translation>
 <translation id="6624687053722465643">Slatkoća</translation>
 <translation id="6628328486509726751">Otpremljeno <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Jača sigurnost</translation>
@@ -6751,6 +6757,7 @@
 <translation id="7310598146671372464">Prijava nije uspjela. Server ne podržava određene vrste Kerberos enkripcije. Kontaktirajte svog administratora.</translation>
 <translation id="7311089766378749632">Zahtijevanje čitanja i promjene web lokacije <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">Vaš administrator vraća vaš eSIM na zadano. To može potrajati nekoliko minuta.</translation>
+<translation id="7317831949569936035">Upis u školu</translation>
 <translation id="7320213904474460808">Zadana mreža</translation>
 <translation id="7321545336522791733">Server je nedostupan</translation>
 <translation id="7323315405936922211">Veličina područja kursora</translation>
@@ -8346,6 +8353,7 @@
 <translation id="8785622406424941542">Digitalna olovka</translation>
 <translation id="8786824282808281903">Kada vaše dijete vidi ovu ikonu, moguće je koristiti otisak prsta za identifikaciju ili odobravanje kupovina.</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{Neimenovana grupa – 1 kartica}one{Neimenovana grupa – # kartica}few{Neimenovana grupa – # kartice}other{Neimenovana grupa – # kartica}}</translation>
+<translation id="8791157330927639737">Saznajte više o ažuriranju</translation>
 <translation id="8791534160414513928">Pošalji zahtjev "Bez praćenja" uz saobraćaj pregledanja</translation>
 <translation id="879413103056696865">Dok je pristupna tačka uključena, telefon <ph name="PHONE_NAME" /> će:</translation>
 <translation id="8795916974678578410">Novi prozor</translation>
@@ -8501,6 +8509,7 @@
 <translation id="8940081510938872932">Vaš računar trenutno obavlja previše poslova.  Pokušajte ponovo kasnije.</translation>
 <translation id="8940381019874223173">Iz vaših Google Fotografija</translation>
 <translation id="8941173171815156065">Opozovi odobrenje "<ph name="PERMISSION" />"</translation>
+<translation id="8941688920560496412">Uređaj <ph name="DEVICE_NAME" /> je isključen</translation>
 <translation id="894191600409472540">Kreirajte jake lozinke</translation>
 <translation id="894360074127026135">Netscape međunarodna nadogradnja</translation>
 <translation id="8944099748578356325">Brže troši bateriju (trenutno je na <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 0174465..9491540 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -907,7 +907,6 @@
 <translation id="1819721979226826163">Toca Notificacions d'aplicacions &gt; Serveis de Google Play.</translation>
 <translation id="1820028137326691631">Introdueix la contrasenya proporcionada per l'administrador</translation>
 <translation id="1822140782238030981">Ja tens un compte a Chrome? Inicia la sessió</translation>
-<translation id="1823098433522728610">Aquest document inclou contingut sensible.</translation>
 <translation id="18245044880483936">Les dades de la còpia de seguretat no ocupen espai de la quota d'emmagatzematge de Drive del teu fill.</translation>
 <translation id="1825565032302550710">El port ha d'estar entre 1024 i 65535</translation>
 <translation id="182577151972096764">receptes vistes recentment</translation>
@@ -1939,8 +1938,8 @@
 <translation id="274318651891194348">S'està cercant el teclat</translation>
 <translation id="2743301740238894839">Inicia</translation>
 <translation id="2743387203779672305">Copia al porta-retalls</translation>
+<translation id="274362947316498129">Una aplicació està provant d'accedir a <ph name="DEVICE_NAME" />. Desactiva l'interruptor de privadesa de <ph name="DEVICE_NAME" /> per permetre l'accés.</translation>
 <translation id="2745080116229976798">Subordinació qualificada de Microsoft</translation>
-<translation id="2747266560080989517">Aquest fitxer inclou contingut sensible o perillós. Demana al propietari que el corregeixi.</translation>
 <translation id="2749756011735116528">Inicia la sessió a <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Comprova la gramàtica amb l'ortografia</translation>
@@ -2535,7 +2534,6 @@
 <translation id="3317459757438853210">A dues cares</translation>
 <translation id="3317678681329786349">La càmera i el micròfon estan bloquejats</translation>
 <translation id="3320630259304269485">Configuració de la navegació segura (protecció contra llocs web perillosos) i altres opcions de configuració de seguretat</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Aquestes dades inclouen contingut sensible o perillós. Suprimeix aquest contingut i torna-ho a provar.}=1{Aquest fitxer inclou contingut sensible o perillós. Suprimeix aquest contingut i torna-ho a provar.}other{Aquests fitxers inclouen contingut sensible o perillós. Suprimeix aquest contingut i torna-ho a provar.}}</translation>
 <translation id="3323521181261657960">Has obtingut més temps de connexió!</translation>
 <translation id="3323577066981719144">Els canvis que facis aquí només s'apliquen al navegador Chrome. Per fer canvis a la configuració del navegador Chrome de Lacros, obre'l i ves a la configuració.</translation>
 <translation id="3325804108816646710">S'estan cercant perfils disponibles...</translation>
@@ -2669,7 +2667,6 @@
 <translation id="3445925074670675829">Dispositiu USB-C</translation>
 <translation id="3446274660183028131">Inicia Parallels Desktop per instal·lar Windows.</translation>
 <translation id="344630545793878684">Llegir les dades d'una sèrie de llocs web</translation>
-<translation id="3446650212859500694">Aquest fitxer inclou contingut sensible</translation>
 <translation id="3447644283769633681">Bloqueja totes les galetes de tercers</translation>
 <translation id="3448492834076427715">Actualitza el compte</translation>
 <translation id="3449393517661170867">Finestra amb pestanyes nova</translation>
@@ -3111,6 +3108,7 @@
 <translation id="385051799172605136">Enrere</translation>
 <translation id="3851428669031642514">Carrega els scripts insegurs</translation>
 <translation id="3852215160863921508">Assistència per a introducció de text</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> està activada</translation>
 <translation id="3854599674806204102">Tria una opció</translation>
 <translation id="3854967233147778866">Proposa traduir els llocs web en altres idiomes</translation>
 <translation id="3854976556788175030">La safata de sortida està plena</translation>
@@ -3443,6 +3441,7 @@
 <translation id="4163560723127662357">Teclat desconegut</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> no pertany a una organització vàlida. Contacta amb l'administrador. Si ets administrador, pots configurar la teva organització a g.co/ChromeEnterpriseAccount.</translation>
 <translation id="4165986682804962316">Configuració del lloc web</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> està provant d'accedir a <ph name="DEVICE_NAME" />. Desactiva l'interruptor de privadesa de <ph name="DEVICE_NAME" /> per permetre l'accés.</translation>
 <translation id="4167393659000039775">Google no es fa responsable de cap pèrdua de dades i és possible que <ph name="DEVICE_OS" /> no funcioni en models no certificats. Obtén més informació a g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Els llocs web solen utilitzar JavaScript per mostrar funcions interactives, com ara els videojocs o els formularis web</translation>
 <translation id="4168015872538332605">Alguns paràmetres de configuració que pertanyen a <ph name="PRIMARY_EMAIL" /> es comparteixen amb l'usuari. Aquests paràmetres només afecten el vostre compte quan s'utilitza l'inici de sessió múltiple.</translation>
@@ -3900,11 +3899,11 @@
 <translation id="4602466770786743961">Permet sempre que <ph name="HOST" /> accedeixi a la càmera i al micròfon</translation>
 <translation id="4606551464649945562">No permetis que els llocs web creïn un mapa en 3D del meu entorn ni que facin un seguiment de la posició de la càmera</translation>
 <translation id="4608500690299898628">&amp;Cerca...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> inclou contingut sensible</translation>
 <translation id="4609987916561367134">Amb permís per utilitzar JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ha detectat un error</translation>
 <translation id="4610637590575890427">Volíeu anar a <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Connexió de dades disponible</translation>
+<translation id="4612841084470706111">Concedeix accés a tots els llocs web sol·licitats.</translation>
 <translation id="4613144866899789710">S'està cancel·lant la instal·lació de Linux...</translation>
 <translation id="4613271546271159013">Una extensió ha canviat la pàgina que es mostra en obrir una pestanya nova.</translation>
 <translation id="4615586811063744755">cap galeta seleccionada</translation>
@@ -5667,6 +5666,7 @@
 <translation id="6291949900244949761">Pregunta'm quan un lloc web vulgui accedir a dispositius USB (opció recomanada)</translation>
 <translation id="6291953229176937411">&amp;Mostra a Finder</translation>
 <translation id="6292699686837272722">Les pestanyes es redueixen a una amplada mitjana</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> està desactivada</translation>
 <translation id="6294759976468837022">Velocitat de cerca automàtica</translation>
 <translation id="6295158916970320988">Tots els llocs web</translation>
 <translation id="6295855836753816081">S'està desant…</translation>
@@ -5872,7 +5872,6 @@
 <translation id="6492396476180293140">Càmera interna desactivada per l'interruptor de maquinari</translation>
 <translation id="6494327278868541139">Mostra els detalls de la protecció millorada</translation>
 <translation id="6494445798847293442">No és una entitat emissora de certificats</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Aquestes dades inclouen contingut sensible o perillós}=1{Aquest fitxer inclou contingut sensible o perillós}other{Aquests fitxers inclouen contingut sensible o perillós}}</translation>
 <translation id="6497548114956205206">Més informació sobre l'estalvi d'energia</translation>
 <translation id="6497784818439587832">Canvia la mida de visualització per ampliar o reduir els elements de la pantalla</translation>
 <translation id="6497789971060331894">Desplaçament invers del ratolí</translation>
@@ -6018,7 +6017,6 @@
 <translation id="6621391692573306628">Per enviar aquesta pestanya a un altre dispositiu, inicia la sessió a Chrome als dos dispositius</translation>
 <translation id="6622980291894852883">Continua bloquejant les imatges</translation>
 <translation id="6624036901798307345">En mode de tauleta, toca el botó de la barra d'eines corresponent al comptador de pestanyes per obrir la nova barra de pestanyes en què es mostra una miniatura de cada pestanya.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> inclou contingut sensible o perillós. Demana al propietari que el corregeixi.</translation>
 <translation id="6624687053722465643">Pastisset</translation>
 <translation id="6628328486509726751">Data i hora de la pujada: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Més seguretat</translation>
@@ -8479,6 +8477,7 @@
 <translation id="8940081510938872932">L'equip està fent massa coses en aquests moments. Torneu-ho a provar més tard.</translation>
 <translation id="8940381019874223173">De Google Fotos</translation>
 <translation id="8941173171815156065">Revoca el permís <ph name="PERMISSION" /></translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> està desactivada</translation>
 <translation id="894191600409472540">Crea contrasenyes segures</translation>
 <translation id="894360074127026135">Entrada progressiva internacional de Netscape</translation>
 <translation id="8944099748578356325">Consumirà la bateria més ràpidament (actualment està al <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 9344365..81dfa80 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -910,7 +910,6 @@
 <translation id="1819721979226826163">Klepněte na Oznámení z aplikací &gt; Služby Google Play.</translation>
 <translation id="1820028137326691631">Zadejte heslo poskytnuté administrátorem</translation>
 <translation id="1822140782238030981">Už uživatelský profil Chromu máte? Přihlaste se</translation>
-<translation id="1823098433522728610">Tento dokument má citlivý obsah.</translation>
 <translation id="18245044880483936">Zálohovaná data se nezapočítávají do kvóty úložiště na Disku dítěte.</translation>
 <translation id="1825565032302550710">Číslo portu musí být mezi 1024 a 65535</translation>
 <translation id="182577151972096764">nedávno zobrazené recepty</translation>
@@ -1943,7 +1942,6 @@
 <translation id="2743301740238894839">Spustit</translation>
 <translation id="2743387203779672305">Zkopírovat do schránky</translation>
 <translation id="2745080116229976798">Kvalifikované podřízení Microsoft</translation>
-<translation id="2747266560080989517">Obsah tohoto souboru je citlivý nebo nebezpečný. Požádejte vlastníka o nápravu.</translation>
 <translation id="2749756011735116528">Přihlásit se do prohlížeče <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Zkontrolovat pravopis a gramatiku</translation>
@@ -2538,7 +2536,6 @@
 <translation id="3317459757438853210">Oboustranně</translation>
 <translation id="3317678681329786349">Kamera a mikrofon jsou blokovány</translation>
 <translation id="3320630259304269485">Bezpečné prohlížení (ochrana před nebezpečnými weby) a další nastavení zabezpečení</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Obsah těchto dat je citlivý nebo nebezpečný. Odstraňte tento obsah a zkuste to znovu.}=1{Obsah tohoto souboru je citlivý nebo nebezpečný. Odstraňte tento obsah a zkuste to znovu.}few{Obsah těchto souborů je citlivý nebo nebezpečný. Odstraňte tento obsah a zkuste to znovu.}many{Obsah těchto souborů je citlivý nebo nebezpečný. Odstraňte tento obsah a zkuste to znovu.}other{Obsah těchto souborů je citlivý nebo nebezpečný. Odstraňte tento obsah a zkuste to znovu.}}</translation>
 <translation id="3323521181261657960">Bonus! Získáváš víc času na zařízení</translation>
 <translation id="3323577066981719144">Zde provedené změny se vztahují pouze na prohlížeč Chrome. Pokud chcete provést změny nastavení prohlížeče Chrome Lacros, otevřete prohlížeč Chrome Lacros a přejděte na nastavení.</translation>
 <translation id="3325804108816646710">Vyhledávání dostupných profilů…</translation>
@@ -2672,7 +2669,6 @@
 <translation id="3445925074670675829">Zařízení USB Type-C</translation>
 <translation id="3446274660183028131">Pokud chcete nainstalovat systém Windows, spusťte nástroj Parallels Desktop.</translation>
 <translation id="344630545793878684">Čtení vašich dat na mnoha webech</translation>
-<translation id="3446650212859500694">Obsah tohoto souboru je citlivý</translation>
 <translation id="3447644283769633681">Blokovat všechny soubory cookie třetích stran</translation>
 <translation id="3448492834076427715">Aktualizovat účet</translation>
 <translation id="3449393517661170867">Nové okno na kartě</translation>
@@ -3903,7 +3899,6 @@
 <translation id="4602466770786743961">Vždy povolit webu <ph name="HOST" /> přístup k webové kameře a mikrofonu</translation>
 <translation id="4606551464649945562">Nepovolovat webům vytvořit 3D mapu okolí ani sledovat polohu kamery</translation>
 <translation id="4608500690299898628">&amp;Najít...</translation>
-<translation id="4608703838363792434">Obsah souboru <ph name="FILE_NAME" /> je citlivý</translation>
 <translation id="4609987916561367134">Povolení používat JavaScript</translation>
 <translation id="4610162781778310380">Plugin <ph name="PLUGIN_NAME" /> narazil na chybu</translation>
 <translation id="4610637590575890427">Chtěli jste přejít na <ph name="SITE" />?</translation>
@@ -5874,7 +5869,6 @@
 <translation id="6492396476180293140">Interní kamera deaktivována hardwarovým přepínačem</translation>
 <translation id="6494327278868541139">Zobrazit podrobnosti vylepšené ochrany</translation>
 <translation id="6494445798847293442">Není certifikační autorita</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Obsah těchto dat je citlivý nebo nebezpečný}=1{Obsah tohoto souboru je citlivý nebo nebezpečný}few{Obsah těchto souborů je citlivý nebo nebezpečný}many{Obsah těchto souborů je citlivý nebo nebezpečný}other{Obsah těchto souborů je citlivý nebo nebezpečný}}</translation>
 <translation id="6497548114956205206">Další informace o spořiči energie</translation>
 <translation id="6497784818439587832">Změnit velikost zobrazení, aby položky na obrazovce byly menší nebo větší</translation>
 <translation id="6497789971060331894">Opačné posouvání myší</translation>
@@ -6024,7 +6018,6 @@
 <translation id="6621391692573306628">Pokud tuto kartu chcete odeslat do jiného zařízení, na obou zařízeních se přihlaste do Chromu</translation>
 <translation id="6622980291894852883">Pokračovat v blokování obrázků</translation>
 <translation id="6624036901798307345">V režimu tabletu klepnutím na tlačítko počítadla karet na liště otevřete novou lištu karet, která zobrazuje miniatury jednotlivých karet.</translation>
-<translation id="6624535038674360844">Obsah souboru <ph name="FILE_NAME" /> je citlivý nebo nebezpečný. Požádejte vlastníka o nápravu.</translation>
 <translation id="6624687053722465643">Zákusek</translation>
 <translation id="6628328486509726751">Nahráno <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Silnější zabezpečení</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index 0abe817..cc812a7 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -413,6 +413,7 @@
 <translation id="1388253969141979417">Caniateir i ddefnyddio'ch meicroffon</translation>
 <translation id="1388728792929436380">Bydd <ph name="DEVICE_TYPE" /> yn ailgychwyn pan fydd y diweddariadau wedi'u cwblhau.</translation>
 <translation id="1389601498324964367">Storfa a reolir gan gwota</translation>
+<translation id="1390113502208199250">Bydd rhaid i chi ailosod y ddyfais hon i'r gosodiadau ffatri i ddefnyddio nodweddion Uwchraddiad Chrome Education.</translation>
 <translation id="139013308650923562">Caniateir i ddefnyddio ffontiau sydd wedi'u gosod ar eich dyfais</translation>
 <translation id="1390548061267426325">Agor fel Tab Rheolaidd</translation>
 <translation id="1390907927270446471">Nid yw <ph name="PROFILE_USERNAME" /> wedi'i awdurdodi i argraffu i <ph name="PRINTER_NAME" />. Cysylltwch â'ch gweinyddwr.</translation>
@@ -483,6 +484,7 @@
 <translation id="1436784010935106834">Tynnwyd</translation>
 <translation id="1437986450143295708">Disgrifiwch y broblem yn fanwl</translation>
 <translation id="1439671507542716852">cymorth hirdymor</translation>
+<translation id="1440090277117135316">Cofrestru ysgol wedi'i gwblhau</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> wedi'i ddewis</translation>
 <translation id="1442851588227551435">Gosod tocyn Kerberos gweithredol</translation>
 <translation id="1444628761356461360">Rheolir y gosodiad hwn gan berchennog y ddyfais, <ph name="OWNER_EMAIL" />.</translation>
@@ -921,7 +923,6 @@
 <translation id="1819721979226826163">Tapiwch Hysbysiadau Ap &gt; Gwasanaethau Google Play.</translation>
 <translation id="1820028137326691631">Rhowch y cyfrinair a roddwyd gan weinyddwr</translation>
 <translation id="1822140782238030981">Eisoes yn ddefnyddiwr Chrome? Mewngofnodi</translation>
-<translation id="1823098433522728610">Mae gan y ddogfen hon gynnwys sensitif.</translation>
 <translation id="18245044880483936">Ni fydd data wrth gefn yn cyfrif tuag at gwota storfa Drive eich plentyn.</translation>
 <translation id="1825565032302550710">Rhaid i'r porth fod rhwng 1024 a 65535</translation>
 <translation id="182577151972096764">ryseitiau a welwyd yn ddiweddar</translation>
@@ -1958,7 +1959,6 @@
 <translation id="2743301740238894839">Dechrau</translation>
 <translation id="2743387203779672305">Copïo i'r clipfwrdd</translation>
 <translation id="2745080116229976798">Cydlynu Cymwysedig Microsoft</translation>
-<translation id="2747266560080989517">Mae cynnwys sensitif neu beryglus yn y ffeil hon. Gofynnwch i'w berchennog ei drwsio.</translation>
 <translation id="2749756011735116528">Mewngofnodi i <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Gwirio Gramadeg Gyda Sillafu</translation>
@@ -2414,6 +2414,7 @@
 <translation id="3170072451822350649">Gallwch hefyd hepgor mewngofnodi a <ph name="LINK_START" />phori fel Gwestai<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Tab newydd i'r chwith</translation>
 <translation id="3177909033752230686">Iaith y Dudalen:</translation>
+<translation id="3177914167275935955">Mae eich dyfais yn cynnwys Uwchraddiad Chrome Education, ond nid yw eich enw defnyddiwr wedi'i gysylltu â chyfrif Google for Education. Crëwch gyfrif Google for Education trwy fynd i g.co/workspace/edusignup ar ddyfais eilaidd.</translation>
 <translation id="3179982752812949580">Ffont testun</translation>
 <translation id="3181954750937456830">Pori'n Ddiogel (yn eich amddiffyn chi a'ch dyfais rhag gwefannau peryglus)</translation>
 <translation id="3182749001423093222">Gwirio sillafu</translation>
@@ -2553,7 +2554,6 @@
 <translation id="3317459757438853210">Dwy ochr</translation>
 <translation id="3317678681329786349">Rwystrir y camera a'r meicroffon</translation>
 <translation id="3320630259304269485">Pori'n Ddiogel (amddiffyniad rhag gwefannau peryglus) a gosodiadau diogelwch eraill</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Mae cynnwys sensitif neu beryglus yn y data hyn. Tynnwch y cynnwys hwn a rhowch gynnig arall arni.}=1{Mae cynnwys sensitif neu beryglus yn y ffeil hon. Tynnwch y cynnwys hwn a rhowch gynnig arall arni.}two{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn. Tynnwch y cynnwys hwn a rhowch gynnig arall arni.}few{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn. Tynnwch y cynnwys hwn a rhowch gynnig arall arni.}many{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn. Tynnwch y cynnwys hwn a rhowch gynnig arall arni.}other{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn. Tynnwch y cynnwys hwn a rhowch gynnig arall arni.}}</translation>
 <translation id="3323521181261657960">Bonws! Cei di fwy o amser sgrîn</translation>
 <translation id="3323577066981719144">Mae newidiadau a wnewch yma yn berthnasol i'r Porwr Chrome yn unig. I wneud newidiadau yn eich gosodiadau Lacros Porwr Chrome, agorwch Lacros Porwr Chrome ac ewch i'r gosodiadau.</translation>
 <translation id="3325804108816646710">Wrthi'n chwilio am broffiliau sydd ar gael...</translation>
@@ -2687,7 +2687,6 @@
 <translation id="3445925074670675829">Dyfais USB-C</translation>
 <translation id="3446274660183028131">Lansiwch Fwrdd Gwaith Parallels i osod Windows.</translation>
 <translation id="344630545793878684">Darllen eich data ar nifer o wefannau</translation>
-<translation id="3446650212859500694">Mae gan y ffeil hon gynnwys sensitif</translation>
 <translation id="3447644283769633681">Rhwystro pob cwci trydydd parti</translation>
 <translation id="3448492834076427715">Diweddaru'r cyfrif</translation>
 <translation id="3449393517661170867">ffenestr sydd mewn tab newydd</translation>
@@ -3919,7 +3918,6 @@
 <translation id="4602466770786743961">Rhoi mynediad i <ph name="HOST" /> ddefnyddio eich camera a'ch meicroffon bob tro</translation>
 <translation id="4606551464649945562">Peidiwch â chaniatáu i wefannau greu map 3D o'ch amgylchoedd neu olrhain safle'r camera</translation>
 <translation id="4608500690299898628">&amp;Chwilio...</translation>
-<translation id="4608703838363792434">Mae gan <ph name="FILE_NAME" /> gynnwys sensitif</translation>
 <translation id="4609987916561367134">Caniateir defnyddio JavaScript</translation>
 <translation id="4610162781778310380">Mae <ph name="PLUGIN_NAME" /> wedi dod ar draws gwall</translation>
 <translation id="4610637590575890427">Oeddech chi'n bwriadu mynd i <ph name="SITE" />?</translation>
@@ -4083,6 +4081,7 @@
 <translation id="4762489666082647806">Lliw'r pwyntydd</translation>
 <translation id="4762718786438001384">Mae le disg ar y ddyfais yn isel iawn</translation>
 <translation id="4763408175235639573">Cafodd y cwcis canlynol eu gosod pan wnaethoch ymweld â'r dudalen hon</translation>
+<translation id="4763757134413542119">Nid yw <ph name="USER_EMAIL" /> yn gyfrif Google for Education dilys. Cysylltwch â'ch gweinyddwr. Os ydych yn weinyddwr, gallwch osod eich sefydliad drwy fynd i: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Bydd y ddyfais hon yn cael ei chadw am 1 mis a gallwch gysylltu heb god y tro nesaf. Mae hyn yn cael ei osod gan eich gweinyddwr.}zero{Bydd y ddyfais hon yn cael ei chadw am {MONTHS} mis a gallwch gysylltu heb god y tro nesaf. Mae hyn yn cael ei osod gan eich gweinyddwr.}two{Bydd y ddyfais hon yn cael ei chadw am {MONTHS} fis a gallwch gysylltu heb god y tro nesaf. Mae hyn yn cael ei osod gan eich gweinyddwr.}few{Bydd y ddyfais hon yn cael ei chadw am {MONTHS} mis a gallwch gysylltu heb god y tro nesaf. Mae hyn yn cael ei osod gan eich gweinyddwr.}many{Bydd y ddyfais hon yn cael ei chadw am {MONTHS} mis a gallwch gysylltu heb god y tro nesaf. Mae hyn yn cael ei osod gan eich gweinyddwr.}other{Bydd y ddyfais hon yn cael ei chadw am {MONTHS} mis a gallwch gysylltu heb god y tro nesaf. Mae hyn yn cael ei osod gan eich gweinyddwr.}}</translation>
 <translation id="4765582662863429759">Yn caniatáu i Negeseuon Android drosglwyddo testunau o'ch ffôn i'ch Chromebook</translation>
 <translation id="4766598565665644999">Gall pob estyniad ddarllen a newid <ph name="HOST" /></translation>
@@ -4744,6 +4743,7 @@
 <translation id="5407167491482639988">Annealladwy</translation>
 <translation id="5408750356094797285">Chwyddo: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">O'ch Cyfrif Google</translation>
+<translation id="5411022484772257615">Methu â chwblhau cofrestru ysgol</translation>
 <translation id="5413640305322530561">Dysgu rhagor am ddata defnydd a diagnostig</translation>
 <translation id="5414198321558177633">Wrthi'n ail-lwytho'r rhestr proffiliau. Gallai hyn gymryd ychydig funudau.</translation>
 <translation id="5414566801737831689">Darllen eiconau'r gwefannau rydych yn ymweld â nhw</translation>
@@ -5529,6 +5529,7 @@
 <translation id="6129953537138746214">Bwlch</translation>
 <translation id="6130692320435119637">Ychwanegu Wi-Fi</translation>
 <translation id="6130887916931372608">Bysell bysellfwrdd</translation>
+<translation id="6132714462430777655">Hepgor cofrestru ysgol?</translation>
 <translation id="6135823405800500595">Gwnewch yn siŵr bod eich ffôn gerllaw, wedi'i ddatgloi a bod Bluetooth a Wi-Fi ymlaen</translation>
 <translation id="6135826623269483856">Ni chaniateir i reoli ffenestri ar eich holl sgriniau</translation>
 <translation id="6136114942382973861">Cau'r bar lawrlwythiadau</translation>
@@ -5892,7 +5893,6 @@
 <translation id="6492396476180293140">Cafodd y camera mewnol ei ddadweithredu gan switsh caledwedd</translation>
 <translation id="6494327278868541139">Dangos manylion gwell amddiffyniad</translation>
 <translation id="6494445798847293442">Nid yw'n Awdurdod Ardystio</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Mae cynnwys sensitif neu beryglus yn y data hyn}=1{Mae cynnwys sensitif neu beryglus yn y ffeil hon}two{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn}few{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn}many{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn}other{Mae cynnwys sensitif neu beryglus yn y ffeiliau hyn}}</translation>
 <translation id="6497548114956205206">Dysgu rhagor am yr arbedwr ynni</translation>
 <translation id="6497784818439587832">Newidiwch y maint dangos i wneud eitemau ar eich sgrîn yn llai neu'n fwy</translation>
 <translation id="6497789971060331894">Sgrolio tuag yn ôl gyda'r llygoden</translation>
@@ -6046,7 +6046,6 @@
 <translation id="6621391692573306628">I anfon y tab hwn i ddyfais arall, mewngofnodwch i Chrome ar y ddwy ddyfais</translation>
 <translation id="6622980291894852883">Parhau i rwystro lluniau</translation>
 <translation id="6624036901798307345">Yn y modd tabled, tapiwch y botwm bar offer rhifydd tabiau i agor y stribed tabiau newydd sy'n dangos mân-luniau pob tab.</translation>
-<translation id="6624535038674360844">Mae gan <ph name="FILE_NAME" /> gynnwys sensitif neu beryglus. Gofynnwch i'w berchennog drwsio.</translation>
 <translation id="6624687053722465643">Sweetness</translation>
 <translation id="6628328486509726751">Uwchlwythwyd <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Diogelwch cryfach</translation>
@@ -6758,6 +6757,7 @@
 <translation id="7310598146671372464">Wedi methu â mewngofnodi Nid yw'r gweinydd yn cefnogi mathau amgryptio Kerberos a nodwyd. Cysylltwch â'ch gweinyddwr.</translation>
 <translation id="7311089766378749632">Wrthi'n gofyn i ddarllen a newid <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">Mae eich gweinyddwr yn ailosod eich eSIM. Gallai hyn gymryd ychydig funudau.</translation>
+<translation id="7317831949569936035">Cofrestru ysgol</translation>
 <translation id="7320213904474460808">Gwneud y rhwydwaith yn ddiofyn</translation>
 <translation id="7321545336522791733">Methu â chyrraedd y gweinydd</translation>
 <translation id="7323315405936922211">Maint ardal cyrchwr</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index ba29e984..436b8de 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -919,7 +919,6 @@
 <translation id="1819721979226826163">Tryk på Appnotifikationer &gt; Google Play-tjenester.</translation>
 <translation id="1820028137326691631">Angiv adgangskode fra administrator</translation>
 <translation id="1822140782238030981">Er du allerede Chrome-bruger? Log ind</translation>
-<translation id="1823098433522728610">Dette dokument har følsomt indhold.</translation>
 <translation id="18245044880483936">Backupdata tæller ikke med i dit barns kvote for Drev-lagerplads.</translation>
 <translation id="1825565032302550710">Porten skal være mellem 1024 og 65535</translation>
 <translation id="182577151972096764">opskrifter, du har set for nylig</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2743301740238894839">Start</translation>
 <translation id="2743387203779672305">Kopiér til udklipsholderen</translation>
 <translation id="2745080116229976798">Microsoft-kvalificeret delegering</translation>
-<translation id="2747266560080989517">Denne fil har følsomt eller farligt indhold. Bed ejeren af filen om at rette dette.</translation>
 <translation id="2749756011735116528">Log ind på <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Kontrollér grammatik med stavning</translation>
@@ -2551,7 +2549,6 @@
 <translation id="3317459757438853210">Tosidet</translation>
 <translation id="3317678681329786349">Der er blokeret for adgang til kameraet og mikrofonen</translation>
 <translation id="3320630259304269485">Beskyttet browsing (beskyttelse mod farlige websites) og andre sikkerhedsindstillinger</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Disse data har følsomt eller farligt indhold. Fjern indholdet, og prøv igen.}=1{Denne fil har følsomt eller farligt indhold. Fjern indholdet, og prøv igen.}one{Denne fil har følsomt eller farligt indhold. Fjern indholdet, og prøv igen.}other{Disse filer har følsomt eller farligt indhold. Fjern indholdet, og prøv igen.}}</translation>
 <translation id="3323521181261657960">Ekstra tid! Du har fået mere skærmtid</translation>
 <translation id="3323577066981719144">De ændringer, du foretager her, anvendes kun i Chrome-browseren. Hvis du vil skifte indstillinger for din Lacros Chrome-browser, skal du åbne Lacros Chrome-browseren og gå til indstillingerne.</translation>
 <translation id="3325804108816646710">Søger efter tilgængelige profiler…</translation>
@@ -2685,7 +2682,6 @@
 <translation id="3445925074670675829">USB-C-enhed</translation>
 <translation id="3446274660183028131">Start Parallels Desktop for at installere Windows.</translation>
 <translation id="344630545793878684">Læs dine data på en række websites</translation>
-<translation id="3446650212859500694">Denne fil har følsomt indhold</translation>
 <translation id="3447644283769633681">Bloker alle cookies fra tredjeparter</translation>
 <translation id="3448492834076427715">Opdater konto</translation>
 <translation id="3449393517661170867">Nyt fanevindue</translation>
@@ -3918,7 +3914,6 @@
 <translation id="4602466770786743961">Tillad altid, at <ph name="HOST" /> har adgang til dit kamera og din mikrofon</translation>
 <translation id="4606551464649945562">Tillad ikke, at websites opretter et 3D-kort over dine omgivelser eller registrerer kamerapositionen</translation>
 <translation id="4608500690299898628">&amp;Find...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> har følsomt indhold</translation>
 <translation id="4609987916561367134">Har tilladelse til at bruge JavaScript</translation>
 <translation id="4610162781778310380">Der opstod en fejl i <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Ville du gå til <ph name="SITE" />?</translation>
@@ -5891,7 +5886,6 @@
 <translation id="6492396476180293140">Det interne kamera blev deaktiveret af hardwarekontakten</translation>
 <translation id="6494327278868541139">Vis oplysninger om forbedret beskyttelse</translation>
 <translation id="6494445798847293442">Ikke et nøglecenter</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Disse data har følsomt eller farligt indhold}=1{Denne fil har følsomt eller farligt indhold}one{Denne fil har følsomt eller farligt indhold}other{Disse filer har følsomt eller farligt indhold}}</translation>
 <translation id="6497548114956205206">Få flere oplysninger om energisparefunktionen</translation>
 <translation id="6497784818439587832">Skift visningsstørrelse for at gøre elementer på skærmen mindre eller større</translation>
 <translation id="6497789971060331894">Omvendt rulning på mus</translation>
@@ -6039,7 +6033,6 @@
 <translation id="6621391692573306628">Hvis du vil sende denne fane til en anden enhed, skal du logge ind på Chrome på begge enheder</translation>
 <translation id="6622980291894852883">Fortsæt blokering af billeder</translation>
 <translation id="6624036901798307345">I tablettilstand skal du trykke på knappen til faneoptælling på værktøjslinjen for at åbne den nye fanelinje, der viser miniaturebilleder af hver fane.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> har følsomt eller farligt indhold. Bed ejeren af filen om at rette dette.</translation>
 <translation id="6624687053722465643">Sukkersød</translation>
 <translation id="6628328486509726751">Uploadet <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Større sikkerhed</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index a412600..ff4afd42 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -904,7 +904,6 @@
 <translation id="1819721979226826163">Tippe auf „App-Benachrichtigungen“ &gt; „Google Play-Dienste“.</translation>
 <translation id="1820028137326691631">Vom Administrator vergebenes Passwort eingeben</translation>
 <translation id="1822140782238030981">Bist du bereits Chrome-Nutzer? Anmelden</translation>
-<translation id="1823098433522728610">Dieses Dokument enthält sensible Inhalte.</translation>
 <translation id="18245044880483936">Sicherungsdaten werden nicht auf das Google Drive-Speicherkontingent deines Kindes angerechnet.</translation>
 <translation id="1825565032302550710">Port muss zwischen 1024 und 65535 liegen</translation>
 <translation id="182577151972096764">Kürzlich angesehene Rezepte</translation>
@@ -1937,7 +1936,6 @@
 <translation id="2743301740238894839">Starten</translation>
 <translation id="2743387203779672305">In Zwischenablage kopieren</translation>
 <translation id="2745080116229976798">Microsoft - Qualifizierte Unterordnung</translation>
-<translation id="2747266560080989517">Diese Datei enthält vertrauliche oder schädliche Inhalte. Bitte den Inhaber, das Problem zu beheben.</translation>
 <translation id="2749756011735116528">In <ph name="PRODUCT_NAME" /> anmelden</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Grammatik zusammen mit Rechtschreibung prüfen</translation>
@@ -2532,7 +2530,6 @@
 <translation id="3317459757438853210">Beidseitig</translation>
 <translation id="3317678681329786349">Kamera und Mikrofon blockiert</translation>
 <translation id="3320630259304269485">Safe Browsing (Schutz vor schädlichen Websites) und andere Sicherheitseinstellungen</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Diese Daten enthalten vertrauliche oder schädliche Inhalte. Entferne diese Inhalte und versuche es noch einmal.}=1{Diese Datei enthält vertrauliche oder schädliche Inhalte. Entferne diese Inhalte und versuche es noch einmal.}other{Diese Dateien enthalten vertrauliche oder schädliche Inhalte. Entferne diese Inhalte und versuche es noch einmal.}}</translation>
 <translation id="3323521181261657960">Bonus! Gerätenutzungsdauer verlängert</translation>
 <translation id="3323577066981719144">Änderungen, die du hier vornimmst, werden nur auf den Chrome-Browser angewendet. Wenn du die Einstellungen des Lacros Chrome-Browsers ändern möchtest, öffne den Lacros Chrome-Browser und rufe die Einstellungen auf.</translation>
 <translation id="3325804108816646710">Es wird nach verfügbaren Profilen gesucht…</translation>
@@ -2666,7 +2663,6 @@
 <translation id="3445925074670675829">USB-C-Gerät</translation>
 <translation id="3446274660183028131">Bitte Parallels Desktop starten, um Windows zu installieren.</translation>
 <translation id="344630545793878684">Deine Daten auf verschiedenen Websites lesen</translation>
-<translation id="3446650212859500694">Diese Datei enthält vertrauliche Inhalte</translation>
 <translation id="3447644283769633681">Alle Drittanbieter-Cookies blockieren</translation>
 <translation id="3448492834076427715">Konto aktualisieren</translation>
 <translation id="3449393517661170867">Neues Tab-Fenster</translation>
@@ -3898,7 +3894,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> immer Zugriff auf Kamera und Mikrofon gestatten</translation>
 <translation id="4606551464649945562">Websites nicht erlauben, eine 3D-Karte meiner Umgebung zu erstellen oder die Kameraposition zu verfolgen</translation>
 <translation id="4608500690299898628">&amp;Suchen...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> enthält vertrauliche Inhalte</translation>
 <translation id="4609987916561367134">Dürfen JavaScript verwenden</translation>
 <translation id="4610162781778310380">Bei <ph name="PLUGIN_NAME" /> ist ein Fehler aufgetreten</translation>
 <translation id="4610637590575890427">Wolltest du <ph name="SITE" /> aufrufen?</translation>
@@ -5868,7 +5863,6 @@
 <translation id="6492396476180293140">Interne Kamera wurde per Hardwareschalter deaktiviert</translation>
 <translation id="6494327278868541139">Details zum erweiterten Schutz anzeigen</translation>
 <translation id="6494445798847293442">Keine Zertifizierungsstelle</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Diese Daten enthalten vertrauliche oder schädliche Inhalte}=1{Diese Datei enthält vertrauliche oder schädliche Inhalte}other{Diese Dateien enthalten vertrauliche oder schädliche Inhalte}}</translation>
 <translation id="6497548114956205206">Weitere Informationen zum Energiesparmodus</translation>
 <translation id="6497784818439587832">Du kannst die Bildschirmgröße ändern, um Elemente auf dem Bildschirm zu verkleinern oder zu vergrößern</translation>
 <translation id="6497789971060331894">Gegenläufiges Scrollen für Maus</translation>
@@ -6014,7 +6008,6 @@
 <translation id="6621391692573306628">Wenn du diesen Tab an ein anderes Gerät senden möchtest, melde dich auf beiden Geräten in Chrome an</translation>
 <translation id="6622980291894852883">Bilder weiterhin blockieren</translation>
 <translation id="6624036901798307345">Tippe im Tablet-Modus auf die Tab-Zähler-Schaltfläche in der Symbolleiste, um die neue Tableiste zu öffnen, die Miniaturansichten der einzelnen Tabs anzeigt.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> enthält vertrauliche oder schädliche Inhalte. Bitte den Inhaber, das Problem zu beheben.</translation>
 <translation id="6624687053722465643">Törtchen</translation>
 <translation id="6628328486509726751">Hochgeladen am <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Erhöhte Sicherheit</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index baab4eb..7414a9b 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -239,6 +239,7 @@
 <translation id="121384500095351701">Δεν είναι δυνατή η λήψη αυτού του αρχείου με ασφάλεια</translation>
 <translation id="1215411991991485844">Προστέθηκε νέα εφαρμογή παρασκηνίου</translation>
 <translation id="1216542092748365687">Κατάργηση δακτυλικού αποτυπώματος</translation>
+<translation id="1216891999012841486">Μάθετε περισσότερα σχετικά με τη διόρθωση σφαλμάτων ενημέρωσης</translation>
 <translation id="1217114730239853757">Θέλετε να ενεργοποιήσετε το ChromeVox, τον ενσωματωμένο αναγνώστη οθόνης για το ChromeOS Flex; Εφόσον το επιθυμείτε, πατήστε το πλήκτρο διαστήματος.</translation>
 <translation id="1217483152325416304">Τα τοπικά δεδομένα σας θα διαγραφούν σύντομα.</translation>
 <translation id="1217668622537098248">Επαναφορά σε αριστερό κλικ μετά από κάποια ενέργεια</translation>
@@ -918,7 +919,6 @@
 <translation id="1819721979226826163">Πατήστε Ειδοποιήσεις εφαρμογών &gt; Υπηρεσίες Google Play.</translation>
 <translation id="1820028137326691631">Καταχωρίστε τον κωδικό πρόσβασης που παρασχέθηκε από τον διαχειριστή</translation>
 <translation id="1822140782238030981">Είστε ήδη χρήστης του Chrome; Συνδεθείτε</translation>
-<translation id="1823098433522728610">Αυτό το έγγραφο έχει ευαίσθητο περιεχόμενο.</translation>
 <translation id="18245044880483936">Τα δεδομένα αντιγράφων ασφαλείας δεν υπολογίζονται στο όριο του αποθηκευτικού χώρου του παιδιού σας στο Drive.</translation>
 <translation id="1825565032302550710">Η θύρα πρέπει να οριστεί μεταξύ 1024 και 65535</translation>
 <translation id="182577151972096764">συνταγές που προβλήθηκαν πρόσφατα</translation>
@@ -1956,7 +1956,6 @@
 <translation id="2743387203779672305">Αντιγραφή στο πρόχειρο</translation>
 <translation id="274362947316498129">Μια εφαρμογή προσπαθεί να αποκτήσει πρόσβαση στη συσκευή <ph name="DEVICE_NAME" />. Απενεργοποιήστε τον διακόπτη απορρήτου της συσκευής <ph name="DEVICE_NAME" /> για να επιτρέψετε την πρόσβαση.</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">Αυτό το αρχείο έχει ευαίσθητο ή επικίνδυνο περιεχόμενο. Ζητήστε από τον κάτοχο να το διορθώσει.</translation>
 <translation id="2749756011735116528">Συνδεθείτε στο <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Γραμματικός Έλεγχος Μαζί με τον Ορθογραφικό</translation>
@@ -2551,7 +2550,6 @@
 <translation id="3317459757438853210">Διπλής όψης</translation>
 <translation id="3317678681329786349">Η κάμερα και το μικρόφωνο έχουν αποκλειστεί</translation>
 <translation id="3320630259304269485">Ασφαλής περιήγηση (προστασία από επικίνδυνους ιστοτόπους) και άλλες ρυθμίσεις ασφαλείας</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Αυτά τα δεδομένα έχουν ευαίσθητο ή επικίνδυνο περιεχόμενο. Καταργήστε αυτό το περιεχόμενο και προσπαθήστε ξανά.}=1{Αυτό το αρχείο έχει ευαίσθητο ή επικίνδυνο περιεχόμενο. Καταργήστε αυτό το περιεχόμενο και προσπαθήστε ξανά.}other{Αυτά τα αρχεία έχουν ευαίσθητο ή επικίνδυνο περιεχόμενο. Καταργήστε αυτό το περιεχόμενο και προσπαθήστε ξανά.}}</translation>
 <translation id="3323521181261657960">Μπόνους! Έχεις περισσότερο χρόνο χρήσης στη διάθεσή σου.</translation>
 <translation id="3323577066981719144">Οι αλλαγές που πραγματοποιείτε εδώ ισχύουν μόνο στο Πρόγραμμα περιήγησης Chrome. Για να κάνετε αλλαγές στις ρυθμίσεις του προγράμματος περιήγησης Chrome Lacros, ανοίξτε το πρόγραμμα περιήγησης Chrome Lacros και μεταβείτε στις ρυθμίσεις.</translation>
 <translation id="3325804108816646710">Αναζήτηση για διαθέσιμα προφίλ…</translation>
@@ -2685,7 +2683,6 @@
 <translation id="3445925074670675829">Συσκευή USB-C</translation>
 <translation id="3446274660183028131">Εκκινήστε το Parallels Desktop για να εγκαταστήσετε τα Windows.</translation>
 <translation id="344630545793878684">Ανάγνωση των δεδομένων σας σε ορισμένους ιστότοπους</translation>
-<translation id="3446650212859500694">Αυτό το αρχείο έχει ευαίσθητο περιεχόμενο.</translation>
 <translation id="3447644283769633681">Αποκλεισμός όλων των cookie τρίτου μέρους</translation>
 <translation id="3448492834076427715">Ενημέρωση λογαριασμού</translation>
 <translation id="3449393517661170867">Νέο παράθυρο με καρτέλες</translation>
@@ -3920,7 +3917,6 @@
 <translation id="4602466770786743961">Να επιτρέπεται πάντα στο <ph name="HOST" /> η πρόσβαση στην κάμερα και στο μικρόφωνό σας</translation>
 <translation id="4606551464649945562">Να μην επιτρέπεται σε ιστοτόπους η δημιουργία τρισδιάστατου χάρτη του περιβάλλοντα χώρου σας και η παρακολούθηση της θέσης της κάμερας</translation>
 <translation id="4608500690299898628">&amp;Εύρεση...</translation>
-<translation id="4608703838363792434">Το αρχείο <ph name="FILE_NAME" /> έχει ευαίσθητο περιεχόμενο.</translation>
 <translation id="4609987916561367134">Επιτρέπεται να χρησιμοποιούν JavaScript</translation>
 <translation id="4610162781778310380">Η προσθήκη <ph name="PLUGIN_NAME" /> παρουσίασε κάποιο σφάλμα</translation>
 <translation id="4610637590575890427">Μήπως θέλετε να μεταβείτε στο <ph name="SITE" />;</translation>
@@ -4998,6 +4994,7 @@
 <translation id="5632059346822207074">Ζητήθηκε άδεια, πατήστε Ctrl + Εμπρός για απάντηση.</translation>
 <translation id="5632566673632479864">Δεν είναι πλέον δυνατή η χρήση του λογαριασμού σας <ph name="EMAIL" /> ως κύριου λογαριασμού. Επειδή ο λογαριασμός είναι διαχειριζόμενος από τον τομέα <ph name="DOMAIN" />, οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις σας θα διαγραφούν από αυτήν τη συσκευή.</translation>
 <translation id="5632592977009207922">Πραγματοποιείται λήψη, απομένει το <ph name="PERCENT_REMAINING" />%</translation>
+<translation id="5633149627228920745">Μάθετε περισσότερα σχετικά με τις απαιτήσεις συστήματος</translation>
 <translation id="563371367637259496">Κινητό</translation>
 <translation id="5634446357546764049">Δείτε αναμνήσεις από πρόσφατα ταξίδια και άλλα</translation>
 <translation id="5635312199252507107">Να επιτρέπεται σε συγκεκριμένους ιστοτόπους</translation>
@@ -5896,7 +5893,6 @@
 <translation id="6492396476180293140">Η εσωτερική κάμερα απενεργοποιήθηκε από τον διακόπτη εξοπλισμού</translation>
 <translation id="6494327278868541139">Εμφάνιση λεπτομερειών βελτιωμένης ασφάλειας</translation>
 <translation id="6494445798847293442">Δεν είναι Αρχή πιστοποίησης</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Αυτά τα δεδομένα έχουν ευαίσθητο ή επικίνδυνο περιεχόμενο.}=1{Αυτό το αρχείο έχει ευαίσθητο ή επικίνδυνο περιεχόμενο.}other{Αυτά τα αρχεία έχουν ευαίσθητο ή επικίνδυνο περιεχόμενο.}}</translation>
 <translation id="6497548114956205206">Μάθετε περισσότερα σχετικά με την εξοικονόμηση ενέργειας</translation>
 <translation id="6497784818439587832">Αλλάξτε το μέγεθος προβολής για να κάνετε τα στοιχεία στην οθόνη σας μικρότερα ή μεγαλύτερα</translation>
 <translation id="6497789971060331894">Αντίστροφη κύλιση ποντικιού</translation>
@@ -6042,7 +6038,6 @@
 <translation id="6621391692573306628">Για να στείλετε αυτήν την καρτέλα σε άλλη συσκευή, συνδεθείτε στο Chrome και στις δύο συσκευές</translation>
 <translation id="6622980291894852883">Συνέχιση αποκλεισμού εικόνων</translation>
 <translation id="6624036901798307345">Σε λειτουργία tablet, πατήστε στο κουμπί μετρητή καρτελών της γραμμής εργαλείων για να ανοίξετε τη νέα γραμμή καρτελών που εμφανίζει μικρογραφίες κάθε καρτέλας.</translation>
-<translation id="6624535038674360844">Το αρχείο <ph name="FILE_NAME" /> έχει ευαίσθητο ή επικίνδυνο περιεχόμενο. Ζητήστε από τον κάτοχο να το διορθώσει.</translation>
 <translation id="6624687053722465643">Γλυκό</translation>
 <translation id="6628328486509726751">Ανέβηκε <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Ισχυρότερη ασφάλεια</translation>
@@ -8345,6 +8340,7 @@
 <translation id="8785622406424941542">Γραφίδα</translation>
 <translation id="8786824282808281903">Όταν το παιδί σας βλέπει αυτό το εικονίδιο, θα μπορεί να χρησιμοποιηθεί δακτυλικό αποτύπωμα για ταυτοποίηση ή εγκρίσεις αγορών.</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{Ομάδα χωρίς όνομα - 1 καρτέλα}other{Ομάδα χωρίς όνομα - # καρτέλες}}</translation>
+<translation id="8791157330927639737">Μάθετε περισσότερα σχετικά με τις ενημερώσεις</translation>
 <translation id="8791534160414513928">Να αποστέλλεται ένα αίτημα "Να μην γίνεται εντοπισμός" με την επισκεψιμότητα της περιήγησής σας</translation>
 <translation id="879413103056696865">Ενώ το σημείο πρόσβασης Wi-Fi είναι ενεργό, το τηλέφωνο <ph name="PHONE_NAME" /> θα:</translation>
 <translation id="8795916974678578410">Νέο Παράθυρο</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 062a37a..0ae6e8e 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -921,7 +921,6 @@
 <translation id="1819721979226826163">Tap App notifications &gt; Google Play services.</translation>
 <translation id="1820028137326691631">Enter admin-provided password</translation>
 <translation id="1822140782238030981">Already a Chrome user? Sign in</translation>
-<translation id="1823098433522728610">This document has sensitive content.</translation>
 <translation id="18245044880483936">Backup data will not count toward your child's Drive storage quota.</translation>
 <translation id="1825565032302550710">Port must be between 1024 and 65535</translation>
 <translation id="182577151972096764">recently viewed recipes</translation>
@@ -1959,7 +1958,6 @@
 <translation id="2743387203779672305">Copy to clipboard</translation>
 <translation id="274362947316498129">An app is trying to access <ph name="DEVICE_NAME" />. Turn off <ph name="DEVICE_NAME" /> privacy switch to allow access.</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">This file has sensitive or dangerous content. Ask its owner to fix it.</translation>
 <translation id="2749756011735116528">Sign in to <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Check Grammar With Spelling</translation>
@@ -2555,7 +2553,6 @@
 <translation id="3317459757438853210">Two-sided</translation>
 <translation id="3317678681329786349">Camera and microphone blocked</translation>
 <translation id="3320630259304269485">Safe Browsing (protection from dangerous sites) and other security settings</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{This data has sensitive or dangerous content. Remove this content and try again.}=1{This file has sensitive or dangerous content. Remove this content and try again.}other{These files have sensitive or dangerous content. Remove this content and try again.}}</translation>
 <translation id="3323521181261657960">Bonus! You got more screen time</translation>
 <translation id="3323577066981719144">Changes that you make here apply only to Chrome Browser. To make changes to your Lacros Chrome Browser settings, open Lacros Chrome Browser and go to settings.</translation>
 <translation id="3325804108816646710">Looking for available profiles…</translation>
@@ -2689,7 +2686,6 @@
 <translation id="3445925074670675829">USB-C device</translation>
 <translation id="3446274660183028131">Please launch Parallels Desktop to install Windows.</translation>
 <translation id="344630545793878684">Read your data on a number of websites</translation>
-<translation id="3446650212859500694">This file has sensitive content</translation>
 <translation id="3447644283769633681">Block all third-party cookies</translation>
 <translation id="3448492834076427715">Update account</translation>
 <translation id="3449393517661170867">New tabbed window</translation>
@@ -3924,7 +3920,6 @@
 <translation id="4602466770786743961">Always allow <ph name="HOST" /> to access your camera and microphone</translation>
 <translation id="4606551464649945562">Do not allow sites to create a 3D map of your surroundings or track camera position</translation>
 <translation id="4608500690299898628">&amp;Find...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> has sensitive content</translation>
 <translation id="4609987916561367134">Allowed to use JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> has encountered an error</translation>
 <translation id="4610637590575890427">Did you mean to go to <ph name="SITE" />?</translation>
@@ -5903,7 +5898,6 @@
 <translation id="6492396476180293140">Internal camera deactivated by hardware switch</translation>
 <translation id="6494327278868541139">Show enhanced protection details</translation>
 <translation id="6494445798847293442">Not a Certification Authority</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{This data has sensitive or dangerous content}=1{This file has sensitive or dangerous content}other{These files have sensitive or dangerous content}}</translation>
 <translation id="6497548114956205206">Learn more about energy saver</translation>
 <translation id="6497784818439587832">Change display size to make items on your screen smaller or larger</translation>
 <translation id="6497789971060331894">Mouse reverse scrolling</translation>
@@ -6049,7 +6043,6 @@
 <translation id="6621391692573306628">To send this tab to another device, sign in to Chrome on both devices</translation>
 <translation id="6622980291894852883">Continue blocking images</translation>
 <translation id="6624036901798307345">In tablet mode, tap on the tab counter toolbar button to open the new tab strip that shows thumbnails of each tab.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> has sensitive or dangerous content. Ask its owner to fix it.</translation>
 <translation id="6624687053722465643">Sweetness</translation>
 <translation id="6628328486509726751">Uploaded <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Stronger security</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index a5c862f..56424905 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -904,7 +904,6 @@
 <translation id="1819721979226826163">Presiona Notificaciones de apps &gt; Servicios de Google Play.</translation>
 <translation id="1820028137326691631">Ingresar la contraseña que proporcionó el administrador</translation>
 <translation id="1822140782238030981">¿Ya eres usuario de Chrome? Acceder</translation>
-<translation id="1823098433522728610">Este documento tiene contenido sensible.</translation>
 <translation id="18245044880483936">Los datos de la copia de seguridad no inciden en la cuota de almacenamiento en Drive de tu hijo.</translation>
 <translation id="1825565032302550710">El número de puerto debe estar entre 1024 y 65535</translation>
 <translation id="182577151972096764">las recetas que viste recientemente</translation>
@@ -1937,7 +1936,6 @@
 <translation id="2743301740238894839">Iniciar</translation>
 <translation id="2743387203779672305">Copiar al portapapeles</translation>
 <translation id="2745080116229976798">Subordinación certificada de Microsoft</translation>
-<translation id="2747266560080989517">Este archivo incluye contenido sensible o peligroso. Pídele al propietario que solucione el problema.</translation>
 <translation id="2749756011735116528">Iniciar sesión en <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Controlar la gramática con la ortografía</translation>
@@ -2532,7 +2530,6 @@
 <translation id="3317459757438853210">Doble cara</translation>
 <translation id="3317678681329786349">Cámara y micrófono bloqueados</translation>
 <translation id="3320630259304269485">Navegación segura (protección contra sitios peligrosos) y otras opciones de configuración de seguridad</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Estos datos incluyen contenido sensible o peligroso. Quita el contenido correspondiente y vuelve a intentarlo.}=1{Este archivo incluye contenido sensible o peligroso. Quita el contenido correspondiente y vuelve a intentarlo.}other{Estos archivos incluyen contenido sensible o peligroso. Quita el contenido correspondiente y vuelve a intentarlo.}}</translation>
 <translation id="3323521181261657960">Bonus: Disfruta de más tiempo de uso</translation>
 <translation id="3323577066981719144">Los cambios que realices aquí solo se aplicarán en el navegador Chrome. Para realizar cambios en la configuración de tu navegador Chrome Lacros, abre el navegador y ve a la configuración.</translation>
 <translation id="3325804108816646710">Buscando perfiles disponibles…</translation>
@@ -2666,7 +2663,6 @@
 <translation id="3445925074670675829">Dispositivo USB-C</translation>
 <translation id="3446274660183028131">Inicia Parallels Desktop para instalar Windows.</translation>
 <translation id="344630545793878684">Leer los datos en un número de sitios web</translation>
-<translation id="3446650212859500694">Este archivo incluye contenido sensible</translation>
 <translation id="3447644283769633681">Bloquear todas las cookies de terceros</translation>
 <translation id="3448492834076427715">Actualizar cuenta</translation>
 <translation id="3449393517661170867">Nueva ventana con pestañas</translation>
@@ -3898,7 +3894,6 @@
 <translation id="4602466770786743961">Siempre permitir que <ph name="HOST" /> acceda a la cámara y al micrófono</translation>
 <translation id="4606551464649945562">No permitir que los sitios creen un mapa 3D de tu entorno ni hagan un seguimiento de la posición de la cámara</translation>
 <translation id="4608500690299898628">&amp;Buscar</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> incluye contenido sensible</translation>
 <translation id="4609987916561367134">Puede usar JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> detectó un error</translation>
 <translation id="4610637590575890427">¿Tal vez quieres ir a <ph name="SITE" />?</translation>
@@ -5871,7 +5866,6 @@
 <translation id="6492396476180293140">El interruptor de hardware desactivó la cámara interna</translation>
 <translation id="6494327278868541139">Mostrar detalles de la protección mejorada</translation>
 <translation id="6494445798847293442">No es una entidad de certificación</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Estos datos incluyen contenido sensible o peligroso}=1{Este archivo incluye contenido sensible o peligroso}other{Estos archivos incluyen contenido sensible o peligroso}}</translation>
 <translation id="6497548114956205206">Más información sobre el ahorro de energía</translation>
 <translation id="6497784818439587832">Cambia el tamaño de la pantalla para agrandar o achicar los elementos que aparecen en pantalla.</translation>
 <translation id="6497789971060331894">Desplazamiento invertido del mouse</translation>
@@ -6017,7 +6011,6 @@
 <translation id="6621391692573306628">Para enviar esta pestaña a otro dispositivo, accede a Chrome en ambos dispositivos.</translation>
 <translation id="6622980291894852883">Continuar con el bloqueo de imágenes</translation>
 <translation id="6624036901798307345">En el modo tablet, presiona el botón de la barra de herramientas del contador de pestañas para abrir la nueva barra de pestañas que muestra miniaturas de cada pestaña.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> incluye contenido sensible o peligroso. Pídele al propietario que solucione el problema.</translation>
 <translation id="6624687053722465643">Dulzura</translation>
 <translation id="6628328486509726751">Fecha y hora de carga: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Mayor seguridad</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 149e15f..eedf6fee 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -907,7 +907,6 @@
 <translation id="1819721979226826163">Toca Notificaciones de aplicaciones &gt; Servicios de Google Play.</translation>
 <translation id="1820028137326691631">Introduce la contraseña proporcionada por el administrador</translation>
 <translation id="1822140782238030981">¿Ya utilizas Chrome? Inicia sesión</translation>
-<translation id="1823098433522728610">Este documento incluye contenido sensible.</translation>
 <translation id="18245044880483936">Los datos de la copia de seguridad no se tienen en cuenta para calcular el espacio de Almacenamiento en Drive de tu hijo.</translation>
 <translation id="1825565032302550710">El número de puerto debe estar entre 1024 y 65535</translation>
 <translation id="182577151972096764">recetas vistas recientemente</translation>
@@ -1941,7 +1940,6 @@
 <translation id="2743301740238894839">Iniciar</translation>
 <translation id="2743387203779672305">Copiar en portapapeles</translation>
 <translation id="2745080116229976798">Subordinación completa de Microsoft</translation>
-<translation id="2747266560080989517">Este archivo incluye contenido sensible o peligroso. Pídele al propietario que lo corrija.</translation>
 <translation id="2749756011735116528">Iniciar sesión en <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Comprobar la ortografía y la gramática</translation>
@@ -2536,7 +2534,6 @@
 <translation id="3317459757438853210">Doble cara</translation>
 <translation id="3317678681329786349">Cámara y micrófono bloqueados</translation>
 <translation id="3320630259304269485">Navegación segura (protección frente a sitios peligrosos) y otros ajustes de seguridad</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Estos datos incluyen contenido sensible o peligroso. Elimina ese contenido e inténtalo de nuevo.}=1{Este archivo incluye contenido sensible o peligroso. Elimina ese contenido e inténtalo de nuevo.}other{Estos archivos incluyen contenido sensible o peligroso. Elimina ese contenido e inténtalo de nuevo.}}</translation>
 <translation id="3323521181261657960">¡Extra! Has conseguido más tiempo de pantalla</translation>
 <translation id="3323577066981719144">Los cambios que hagas aquí se aplican solo al navegador Chrome. Para hacer cambios en tu configuración del navegador Lacros, abre el navegador Lacros y ve a los ajustes.</translation>
 <translation id="3325804108816646710">Buscando perfiles disponibles...</translation>
@@ -2670,7 +2667,6 @@
 <translation id="3445925074670675829">Dispositivo USB-C</translation>
 <translation id="3446274660183028131">Abre Parallels Desktop para instalar Windows.</translation>
 <translation id="344630545793878684">Leer tus datos en varios sitios web</translation>
-<translation id="3446650212859500694">Este archivo incluye contenido sensible</translation>
 <translation id="3447644283769633681">Bloquear todas las cookies de terceros</translation>
 <translation id="3448492834076427715">Actualizar cuenta</translation>
 <translation id="3449393517661170867">Nueva ventana con pestañas</translation>
@@ -3901,7 +3897,6 @@
 <translation id="4602466770786743961">Permitir que <ph name="HOST" /> acceda siempre a la cámara y al micrófono</translation>
 <translation id="4606551464649945562">No permitir a los sitios crear un mapa 3D de tu entorno ni hacer un seguimiento de la posición de la cámara</translation>
 <translation id="4608500690299898628">&amp;Buscar...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> incluye contenido sensible</translation>
 <translation id="4609987916561367134">Pueden usar JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ha detectado un error</translation>
 <translation id="4610637590575890427">¿Tal vez quieres ir a <ph name="SITE" />?</translation>
@@ -5874,7 +5869,6 @@
 <translation id="6492396476180293140">Cámara interna desactivada mediante interruptor de hardware</translation>
 <translation id="6494327278868541139">Mostrar detalles de la protección mejorada</translation>
 <translation id="6494445798847293442">No es una entidad emisora de certificados</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Estos datos incluyen contenido sensible o peligroso}=1{Este archivo incluye contenido sensible o peligroso}other{Estos archivos incluyen contenido sensible o peligroso}}</translation>
 <translation id="6497548114956205206">Más información sobre el ahorro de energía</translation>
 <translation id="6497784818439587832">Cambia el tamaño de la pantalla para ampliar o reducir el tamaño de los elementos que aparecen</translation>
 <translation id="6497789971060331894">Desplazamiento inverso del ratón</translation>
@@ -6020,7 +6014,6 @@
 <translation id="6621391692573306628">Para enviar esta pestaña a otro dispositivo, inicia sesión en Chrome en ambos dispositivos</translation>
 <translation id="6622980291894852883">Seguir bloqueando imágenes</translation>
 <translation id="6624036901798307345">En modo tablet, toca el botón del contador de pestañas situado en la barra de herramientas para abrir la nueva barra de pestañas donde se muestran miniaturas de cada pestaña.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> incluye contenido sensible o peligroso. Pídele al propietario que lo corrija.</translation>
 <translation id="6624687053722465643">Dulzura</translation>
 <translation id="6628328486509726751">Fecha y hora de subida: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Mayor seguridad</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index b16b373e..3aab7236 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -910,7 +910,6 @@
 <translation id="1819721979226826163">Puudutage valikuid Rakenduse märguanded &gt; Google Play teenused.</translation>
 <translation id="1820028137326691631">Sisestage administraatorilt saadud parool</translation>
 <translation id="1822140782238030981">Kas olete juba Chrome'i kasutaja? Logige sisse</translation>
-<translation id="1823098433522728610">See dokument sisaldab tundlikku sisu.</translation>
 <translation id="18245044880483936">Varundatud andmeid ei arvestata teie lapse Drive'i salvestuskvoodi hulka.</translation>
 <translation id="1825565032302550710">Port peab olema vahemikus 1024 ja 65535</translation>
 <translation id="182577151972096764">hiljuti vaadatud retseptid</translation>
@@ -1946,7 +1945,6 @@
 <translation id="2743301740238894839">Alusta</translation>
 <translation id="2743387203779672305">Kopeeri lõikelauale</translation>
 <translation id="2745080116229976798">Microsofti piiratud subordinatsioon</translation>
-<translation id="2747266560080989517">See fail sisaldab tundlikku või ohtlikku sisu. Paluge omanikul see parandada.</translation>
 <translation id="2749756011735116528">Logi sisse teenusesse <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Kontrolli grammatikat õigekirjakontrolliga</translation>
@@ -2541,7 +2539,6 @@
 <translation id="3317459757438853210">Kahepoolne</translation>
 <translation id="3317678681329786349">Kaamera ja mikrofon on blokeeritud</translation>
 <translation id="3320630259304269485">Google'i ohutu sirvimine (kaitse ohtlike saitide eest) ja muud turvaseaded</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Need andmed sisaldavad tundlikku või ohtlikku sisu. Eemaldage see sisu ja proovige uuesti.}=1{See fail sisaldab tundlikku või ohtlikku sisu. Eemaldage see sisu ja proovige uuesti.}other{Need failid sisaldavad tundlikku või ohtlikku sisu. Eemaldage see sisu ja proovige uuesti.}}</translation>
 <translation id="3323521181261657960">Boonus! Said ekraaniaega juurde</translation>
 <translation id="3323577066981719144">Siin tehtavad muudatused rakenduvad ainult Chrome'i brauserile. Lacrosi Chrome'i brauseri seadete muutmiseks avage Lacrosi Chrome'i brauseri menüü Seaded.</translation>
 <translation id="3325804108816646710">Olemasolevate profiilide otsimine …</translation>
@@ -2675,7 +2672,6 @@
 <translation id="3445925074670675829">C-tüüpi USB-seade</translation>
 <translation id="3446274660183028131">Käivitage Windowsi installimiseks Parallels Desktop.</translation>
 <translation id="344630545793878684">Lugege oma andmeid mitmel veebisaidil</translation>
-<translation id="3446650212859500694">See fail sisaldab tundlikku sisu</translation>
 <translation id="3447644283769633681">Kõikide kolmanda osapoole küpsiste blokeerimine</translation>
 <translation id="3448492834076427715">Värskenda kontot</translation>
 <translation id="3449393517661170867">Uus vahelehestatud aken</translation>
@@ -3907,7 +3903,6 @@
 <translation id="4602466770786743961">Luba hostile <ph name="HOST" /> alati juurdepääs kaamerale ja mikrofonile</translation>
 <translation id="4606551464649945562">Ära luba saitidel luua mind ümbritsevast 3D-kaarti ega jälgida kaamera asendit</translation>
 <translation id="4608500690299898628">&amp;Otsi...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> sisaldab tundlikku sisu</translation>
 <translation id="4609987916561367134">JavaScripti kasutamine on lubatud</translation>
 <translation id="4610162781778310380">Pistikprogrammis <ph name="PLUGIN_NAME" /> ilmnes viga</translation>
 <translation id="4610637590575890427">Kas soovisite minna aadressile <ph name="SITE" />?</translation>
@@ -5880,7 +5875,6 @@
 <translation id="6492396476180293140">Riistvara lüliti inaktiveeris sisekaamera</translation>
 <translation id="6494327278868541139">Kuva täiustatud kaitse üksikasjad</translation>
 <translation id="6494445798847293442">Pole sertifitseerimisorgan</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Need andmed sisaldavad tundlikku või ohtlikku sisu}=1{See fail sisaldab tundlikku või ohtlikku sisu}other{Need failid sisaldavad tundlikku või ohtlikku sisu}}</translation>
 <translation id="6497548114956205206">Lisateave energiasäästja kohta</translation>
 <translation id="6497784818439587832">Muutke kuvamissuurust, et ekraanil kuvatud üksused väiksemaks või suuremaks teha</translation>
 <translation id="6497789971060331894">Hiirega tagurpidi kerimine</translation>
@@ -6026,7 +6020,6 @@
 <translation id="6621391692573306628">Selle vahelehe saatmiseks teise seadmesse logige mõlemas seadmes Chrome'i sisse</translation>
 <translation id="6622980291894852883">Jätka piltide blokeerimist</translation>
 <translation id="6624036901798307345">Puudutage tahvelarvuti režiimis vahelehtede loenduri tööriistariba nuppu, et avada uus vahelehtede riba, mis näitab iga vahelehe pisipilte.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> sisaldab tundlikku või ohtlikku sisu. Paluge omanikul see parandada.</translation>
 <translation id="6624687053722465643">Magus</translation>
 <translation id="6628328486509726751">Üles laaditud: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Tugevaim turvalisus</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index 148036a..39d2345 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -908,7 +908,6 @@
 <translation id="1819721979226826163">Sakatu Aplikazioen jakinarazpenak &gt; Google Play Services.</translation>
 <translation id="1820028137326691631">Idatzi administratzaileak emandako pasahitza</translation>
 <translation id="1822140782238030981">Chrome erabiltzen duzu dagoeneko? Hasi saioa</translation>
-<translation id="1823098433522728610">Dokumentuak kontuzko edukia dauka.</translation>
 <translation id="18245044880483936">Babeskopiek ez dute hartzen tokirik haurraren Drive-ko biltegian.</translation>
 <translation id="1825565032302550710">Atakako zenbakia 1024 eta 65535 artekoa izan behar da</translation>
 <translation id="182577151972096764">ikusitako azken errezetak</translation>
@@ -1941,7 +1940,6 @@
 <translation id="2743301740238894839">Hasi</translation>
 <translation id="2743387203779672305">Kopiatu arbelean</translation>
 <translation id="2745080116229976798">Microsoft menderakuntza mugatua</translation>
-<translation id="2747266560080989517">Fitxategiak kontuzko edukia edo eduki arriskutsua dauka. Eskatu jabeari arazoa konpontzeko.</translation>
 <translation id="2749756011735116528">Hasi saioa <ph name="PRODUCT_NAME" />-n</translation>
 <translation id="2749836841884031656">SIM txartela</translation>
 <translation id="2749881179542288782">Zuzendu gramatika eta ortografia</translation>
@@ -2536,7 +2534,6 @@
 <translation id="3317459757438853210">Bi aldetan</translation>
 <translation id="3317678681329786349">Kamera eta mikrofonoa blokeatuta daude</translation>
 <translation id="3320630259304269485">Arakatze segurua (webgune kaltegarrien aurreko babesa) eta bestelako segurtasun-ezarpenak</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Datuek kontuzko edukia edo eduki arriskutsua daukate. Kendu edukia eta saiatu berriro.}=1{Fitxategiak kontuzko edukia edo eduki arriskutsua dauka. Kendu edukia eta saiatu berriro.}other{Fitxategiek kontuzko edukia edo eduki arriskutsua daukate. Kendu edukia eta saiatu berriro.}}</translation>
 <translation id="3323521181261657960">Erabilera-denbora gehiago eman dizute!</translation>
 <translation id="3323577066981719144">Chrome arakatzailean soilik aplikatuko dira hemen egiten dituzun aldaketak. Lacros darabilen Chrome arakatzailearen ezarpenetan aldaketak egiteko, ireki Lacros darabilen Chrome arakatzailea eta joan ezarpenetara.</translation>
 <translation id="3325804108816646710">Eskuragarri dauden profilak bilatzen…</translation>
@@ -2670,7 +2667,6 @@
 <translation id="3445925074670675829">USB-C gailua</translation>
 <translation id="3446274660183028131">Windows instalatzeko, abiarazi Parallels Desktop.</translation>
 <translation id="344630545793878684">Irakurri zenbait webgunetan dituzun datuak</translation>
-<translation id="3446650212859500694">Fitxategiak kontuzko edukia dauka</translation>
 <translation id="3447644283769633681">Blokeatu hirugarrenen cookie guztiak</translation>
 <translation id="3448492834076427715">Eguneratu kontua</translation>
 <translation id="3449393517661170867">Leiho fitxadun berria</translation>
@@ -3902,7 +3898,6 @@
 <translation id="4602466770786743961">Eman beti kamera eta mikrofonoa erabiltzeko baimena <ph name="HOST" /> webguneari</translation>
 <translation id="4606551464649945562">Ez utzi inongo webguneri inguruaren 3D-ko mapa bat sortzen edo kameraren posizioaren jarraipena egiten</translation>
 <translation id="4608500690299898628">&amp;Bilatu…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> fitxategiak kontuzko edukia dauka</translation>
 <translation id="4609987916561367134">JavaScript erabil dezake</translation>
 <translation id="4610162781778310380">Errore bat gertatu da <ph name="PLUGIN_NAME" /> pluginarekin</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> webgunera joan nahi al zenuen?</translation>
@@ -5873,7 +5868,6 @@
 <translation id="6492396476180293140">Hardwareko etengailuaren bidez desaktibatu da barneko kamera</translation>
 <translation id="6494327278868541139">Erakutsi babes hobetuaren xehetasunak</translation>
 <translation id="6494445798847293442">Ez da autoritate ziurtagiri-emailea</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Datuek kontuzko edukia edo eduki arriskutsua daukate}=1{Fitxategiak kontuzko edukia edo eduki arriskutsua dauka}other{Fitxategiek kontuzko edukia edo eduki arriskutsua daukate}}</translation>
 <translation id="6497548114956205206">Lortu energia-aurreztaileari buruzko informazio gehiago</translation>
 <translation id="6497784818439587832">Aldatu bistaratzeko tamaina pantailako elementuak handitu edo txikitzeko</translation>
 <translation id="6497789971060331894">Saguarekin gora eta behera alderantziz egiteko aukera</translation>
@@ -6019,7 +6013,6 @@
 <translation id="6621391692573306628">Fitxa beste gailu batera bidaltzeko, hasi saioa Chrome-n bi gailuetan</translation>
 <translation id="6622980291894852883">Jarraitu irudiak blokeatzen</translation>
 <translation id="6624036901798307345">Tableta moduan, sakatu tresna-barran dagoen fitxa-zenbatzailearen botoia, fitxa bakoitzaren irudi txikiak dituen fitxen zinta berria irekitzeko.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> fitxategiak kontuzko edukia edo eduki arriskutsua dauka. Eskatu jabeari arazoa konpontzeko.</translation>
 <translation id="6624687053722465643">Gozoa</translation>
 <translation id="6628328486509726751">Kargatze-denbora: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Segurtasun handiagoa</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index e2dcd79..45fc830 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -410,6 +410,7 @@
 <translation id="1388253969141979417">اجازه دارد از میکروفون استفاده کند</translation>
 <translation id="1388728792929436380">وقتی به‌روزرسانی‌ها تمام شد، <ph name="DEVICE_TYPE" /> بازراه‌اندازی می‌شود.</translation>
 <translation id="1389601498324964367">فضای ذخیره‌سازی سهمیه‌بندی‌شده</translation>
+<translation id="1390113502208199250">‏برای استفاده از ویژگی‌های Chrome Education Upgrade، باید این دستگاه را بازنشانی کارخانه‌ای کنید.</translation>
 <translation id="139013308650923562">اجازه دارد از قلم‌های نصب‌شده در دستگاه استفاده کند</translation>
 <translation id="1390548061267426325">بازکردن به‌عنوان برگه عادی</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> اجازه ندارد با <ph name="PRINTER_NAME" /> چاپ کند. لطفاً با سرپرست تماس بگیرید.</translation>
@@ -480,6 +481,7 @@
 <translation id="1436784010935106834">حذف شد</translation>
 <translation id="1437986450143295708">مشکل را با ذکر جزئیات شرح دهید</translation>
 <translation id="1439671507542716852">پشتیبانی بلندمدت</translation>
+<translation id="1440090277117135316">ثبت‌نام مدرسه کامل شد</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> انتخاب شد</translation>
 <translation id="1442851588227551435">‏تنظیم کردن بلیت فعال Kerberos</translation>
 <translation id="1444628761356461360">این تنظیم توسط مالک دستگاه مدیریت می‌شود، <ph name="OWNER_EMAIL" />.</translation>
@@ -916,7 +918,6 @@
 <translation id="1819721979226826163">‏روی «اعلان‌های برنامه &gt; خدمات Google Play» ضربه بزنید.</translation>
 <translation id="1820028137326691631">گذرواژه ارائه‌شده توسط سرپرست را وارد کنید</translation>
 <translation id="1822140782238030981">‏قبلاً کاربر Chrome بوده‌اید؟ به سیستم وارد شوید</translation>
-<translation id="1823098433522728610">این سند محتوای حساس دارد.</translation>
 <translation id="18245044880483936">‏داده‌های پشتیبان‌گیری‌شده جزو سهمیه فضای ذخیره‌سازی Drive فرزندتان حساب نمی‌شود.</translation>
 <translation id="1825565032302550710">درگاه باید از ۱۰۲۴ تا ۶۵۵۳۵ نویسه داشته باشد</translation>
 <translation id="182577151972096764">دستورهای پخت اخیراً مشاهده‌شده</translation>
@@ -1952,7 +1953,6 @@
 <translation id="2743301740238894839">شروع</translation>
 <translation id="2743387203779672305">کپی در بریده‌دان</translation>
 <translation id="2745080116229976798">‏وابستگی مشروط Microsoft</translation>
-<translation id="2747266560080989517">این فایل محتوای حساس یا خطرناک دارد. از مالک بخواهید مشکل را برطرف کند.</translation>
 <translation id="2749756011735116528">ورود به سیستم <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">سیم‌کارت</translation>
 <translation id="2749881179542288782">بررسی گرامر با املا</translation>
@@ -2408,6 +2408,7 @@
 <translation id="3170072451822350649">همچنین می‌توانید از ورود به سیستم صرف‌نظر کرده، <ph name="LINK_START" />به عنوان مهمان مرور کنید<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">برگه جدید در سمت چپ</translation>
 <translation id="3177909033752230686">زبان صفحه:</translation>
+<translation id="3177914167275935955">‏Chrome Education Upgrade در دستگاهتان وجود دارد، اما نام کاربری شما با هیچ حساب Google for Education مرتبط نیست. لطفاً با رفتن به نشانی زیر در دستگاهی دیگر، حساب Google for Education بسازید: g.co/workspace/edusignup.</translation>
 <translation id="3179982752812949580">قلم نوشتار</translation>
 <translation id="3181954750937456830">مرور ایمن (از شما و دستگاهتان درمقابل سایت‌های خطرناک محافظت می‌کند)</translation>
 <translation id="3182749001423093222">غلط‌یاب املایی</translation>
@@ -2547,7 +2548,6 @@
 <translation id="3317459757438853210">دو طرفه</translation>
 <translation id="3317678681329786349">دوربین و میکروفون مسدود شده‌اند</translation>
 <translation id="3320630259304269485">«مرور ایمن» (محافظت در برابر سایت‌های خطرناک) و دیگر تنظیمات امنیتی</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{این داده محتوای حساس یا خطرناک دارد. این محتوا را حذف کنید و دوباره امتحان کنید.}=1{این فایل محتوای حساس یا خطرناک دارد. این محتوا را حذف کنید و دوباره امتحان کنید.}one{این فایل‌ها محتوای حساس یا خطرناک دارند. این محتوا را حذف کنید و دوباره امتحان کنید.}other{این فایل‌ها محتوای حساس یا خطرناک دارند. این محتوا را حذف کنید و دوباره امتحان کنید.}}</translation>
 <translation id="3323521181261657960">پاداش! وقت تماشای صفحه بیشتر شد</translation>
 <translation id="3323577066981719144">‏تغییراتی که اینجا ایجاد می‌کنید فقط در «مرورگر Chrome» اعمال می‌شود. برای ایجاد تغییرات در تنظیمات «مرورگر Lacros Chrome»، «مرورگر Lacros Chrome» را باز کنید و به تنظیمات بروید.</translation>
 <translation id="3325804108816646710">درحال جستجوی نمایه‌های دردسترس…</translation>
@@ -2681,7 +2681,6 @@
 <translation id="3445925074670675829">‏دستگاه USB-C</translation>
 <translation id="3446274660183028131">‏لطفاً برای نصب Windows، ‏Parallels Desktop را راه‌اندازی کنید.</translation>
 <translation id="344630545793878684">خواندن داده‌های شما در تعدادی از وب‌سایت‌ها</translation>
-<translation id="3446650212859500694">این فایل محتوای حساس دارد</translation>
 <translation id="3447644283769633681">مسدود کردن همه کوکی‌های شخص ثالث</translation>
 <translation id="3448492834076427715">به‌روزرسانی حساب</translation>
 <translation id="3449393517661170867">پنجره برگه‌دار جدید</translation>
@@ -3914,7 +3913,6 @@
 <translation id="4602466770786743961">همیشه به <ph name="HOST" /> اجازه داده شود به دوربین و میکروفون شما دسترسی داشته باشد</translation>
 <translation id="4606551464649945562">به سایت‌ها اجازه داده نشود نقشه سه‌بعدی از محیط ایجاد کنند یا موقعیت دوربین را ردیابی کنند</translation>
 <translation id="4608500690299898628">&amp;یافتن...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> محتوای حساس دارد</translation>
 <translation id="4609987916561367134">اجازه دارد از جاوا اسکریپت استفاده کند</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> با خطایی مواجه شده است</translation>
 <translation id="4610637590575890427">آیا می‌خواستید به <ph name="SITE" /> بروید؟</translation>
@@ -4078,6 +4076,7 @@
 <translation id="4762489666082647806">رنگ اشاره‌گر</translation>
 <translation id="4762718786438001384">فضای دیسک دستگاه بسیار کم است</translation>
 <translation id="4763408175235639573">وقتی این صفحه را مشاهده کردید، کوکی‌های زیر تنظیم شدند</translation>
+<translation id="4763757134413542119">‏<ph name="USER_EMAIL" /> حساب Google for Education معتبری نیست. با سرپرست تماس بگیرید. اگر سرپرست هستید، می‌توانید با رفتن به نشانی زیر، سازمانتان را راه‌اندازی کنید: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{این دستگاه به‌مدت یک ماه ذخیره خواهد شد و دفعه بعد می‌توانید بدون کد متصل شوید. سرپرستتان این مورد را تنظیم کرده است.}one{این دستگاه به‌مدت {MONTHS} ماه ذخیره خواهد شد و دفعه بعد می‌توانید بدون کد متصل شوید. سرپرستتان این مورد را تنظیم کرده است.}other{این دستگاه به‌مدت {MONTHS} ماه ذخیره خواهد شد و دفعه بعد می‌توانید بدون کد متصل شوید. سرپرستتان این مورد را تنظیم کرده است.}}</translation>
 <translation id="4765582662863429759">‏به «پیام‌های Android» اجازه دهید پیام‌های متنی را از تلفن در Chromebook بازپخش کند</translation>
 <translation id="4766598565665644999">همه افزونه‌ها می‌توانند <ph name="HOST" /> را بخوانند و تغییر دهند</translation>
@@ -4739,6 +4738,7 @@
 <translation id="5407167491482639988">نامفهوم</translation>
 <translation id="5408750356094797285">بزرگ‌نمایی: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">‏از «حساب Google» شما.</translation>
+<translation id="5411022484772257615">ثبت‌نام مدرسه کامل نشد</translation>
 <translation id="5413640305322530561">درباره داده‌های استفاده و عیب‌یابی بیشتر بدانید</translation>
 <translation id="5414198321558177633">درحال بازآوری فهرست نمایه. ممکن است چند دقیقه طول بکشد.</translation>
 <translation id="5414566801737831689">خواندن نمادهای وب‌سایت‌هایی که بازدید می‌کنید</translation>
@@ -5524,6 +5524,7 @@
 <translation id="6129953537138746214">فاصله</translation>
 <translation id="6130692320435119637">‏افزودن Wi-Fi</translation>
 <translation id="6130887916931372608">کلید صفحه‌کلید</translation>
+<translation id="6132714462430777655">ثبت‌نام مدرسه رد شود؟</translation>
 <translation id="6135823405800500595">‏مطمئن شوید تلفنتان نزدیک باشد، قفل آن باز باشد، و بلوتوث و Wi-Fi روشن باشند</translation>
 <translation id="6135826623269483856">اجازه ندارند پنجره‌های همه نمایشگرهایتان را مدیریت کنند</translation>
 <translation id="6136114942382973861">بستن نوار بارگیری</translation>
@@ -5887,7 +5888,6 @@
 <translation id="6492396476180293140">با تغییروضعیت سخت‌افزار، دوربین داخلی غیرفعال شد</translation>
 <translation id="6494327278868541139">نمایش جزئیات محافظت بهبودیافته</translation>
 <translation id="6494445798847293442">یک ارائه‌دهنده مجوز نیست</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{این داده محتوای حساس یا خطرناک دارد}=1{این فایل محتوای حساس یا خطرناک دارد}one{این فایل‌ها محتوای حساس یا خطرناک دارند}other{این فایل‌ها محتوای حساس یا خطرناک دارند}}</translation>
 <translation id="6497548114956205206">درباره بهینه‌سازی انرژی بیشتر بدانید</translation>
 <translation id="6497784818439587832">تغییر اندازه نمایش برای کوچک‌تر کردن یا بزرگ‌تر کردن موارد روی صفحه‌نمایش</translation>
 <translation id="6497789971060331894">پیمایش معکوس موشواره</translation>
@@ -6035,7 +6035,6 @@
 <translation id="6621391692573306628">‏برای ارسال این برگه به دستگاهی دیگر، در هردو دستگاه به سیستم Chrome وارد شوید</translation>
 <translation id="6622980291894852883">ادامه مسدودکردن تصاویر</translation>
 <translation id="6624036901798307345">در حالت رایانه لوحی، روی دکمه شمارنده برگه در نوارابزار ضربه بزنید تا نوار برگه جدید که تصویر کوچک هر برگه را نشان می‌دهد باز شود.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> محتوای حساس یا خطرناک دارد. از مالک بخواهید مشکل را برطرف کند.</translation>
 <translation id="6624687053722465643">شیرین</translation>
 <translation id="6628328486509726751">زمان بارگذاری <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">امنیت قوی‌تر</translation>
@@ -6747,6 +6746,7 @@
 <translation id="7310598146671372464">‏ورود به سیستم انجام نشد. این سرور از رمزگذاری‌های Kerberos مشخص‌شده پشتیبانی نمی‌کند. لطفاً با سرپرست سیستم تماس بگیرید.</translation>
 <translation id="7311089766378749632">درخواست خواندن و تغییر دادن <ph name="SITE_NAME" /> را ارائه داده است</translation>
 <translation id="7312210124139670355">سرپرستتان درحال بازنشاندن سیم‌کارت داخلی شما است. ممکن است چند دقیقه طول بکشد.</translation>
+<translation id="7317831949569936035">ثبت‌نام مدرسه</translation>
 <translation id="7320213904474460808">شبکه پیش‌فرض</translation>
 <translation id="7321545336522791733">سرور غیرقابل دسترسی است</translation>
 <translation id="7323315405936922211">اندازه ناحیه نشانگر</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 09ff8b3..2368128b 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -917,7 +917,6 @@
 <translation id="1819721979226826163">Valitse Sovellusilmoitukset &gt; Google Play Palvelut.</translation>
 <translation id="1820028137326691631">Anna ylläpitäjältä saatu salasana</translation>
 <translation id="1822140782238030981">Oletko jo Chrome-käyttäjä? Kirjaudu sisään</translation>
-<translation id="1823098433522728610">Dokumentti sisältää arkaluontoista sisältöä.</translation>
 <translation id="18245044880483936">Varmuuskopioitu data ei kuluta lapsen Drive-tallennuskiintiötä.</translation>
 <translation id="1825565032302550710">Portin on oltava välillä 1024–65535</translation>
 <translation id="182577151972096764">äskettäin katsotut reseptit</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2743301740238894839">Aloita</translation>
 <translation id="2743387203779672305">Kopioi leikepöydälle</translation>
 <translation id="2745080116229976798">Microsoftin kelpaava alistaminen</translation>
-<translation id="2747266560080989517">Tämä tiedosto sisältää arkaluontoista tai vaarallista sisältöä. Pyydä sen omistajaa korjaamaan asia.</translation>
 <translation id="2749756011735116528">Kirjaudu sisään tuotteeseen <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Tarkista kielioppi oikeinkirjoituksen yhteydessä</translation>
@@ -2549,7 +2547,6 @@
 <translation id="3317459757438853210">Kaksipuolinen</translation>
 <translation id="3317678681329786349">Kamera ja mikrofoni estetty</translation>
 <translation id="3320630259304269485">Selaussuoja (suojaus vaarallisilta sivustoilta) ja muut suojausasetukset</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Tämä data sisältää arkaluontoista tai vaarallista sisältöä. Poista tämä sisältö ja yritä uudelleen.}=1{Tämä tiedosto sisältää arkaluontoista tai vaarallista sisältöä. Poista tämä sisältö ja yritä uudelleen.}other{Nämä tiedostot sisältävät arkaluontoista tai vaarallista sisältöä. Poista tämä sisältö ja yritä uudelleen.}}</translation>
 <translation id="3323521181261657960">Bonus! Sait lisää käyttöaikaa</translation>
 <translation id="3323577066981719144">Tässä tekemäsi muutokset koskevat vain Chrome-selainta. Jos haluat muuttaa Lacros Chrome ‑selaimesi asetuksia, avaa Lacros Chrome ‑selain ja siirry asetuksiin.</translation>
 <translation id="3325804108816646710">Etsitään käytettävissä olevia profiileja…</translation>
@@ -2683,7 +2680,6 @@
 <translation id="3445925074670675829">C-tyypin USB-laite</translation>
 <translation id="3446274660183028131">Käynnistä Parallels Desktop Windowsin asentamista varten.</translation>
 <translation id="344630545793878684">Lukea tietojasi useissa sivustoissa</translation>
-<translation id="3446650212859500694">Tämä tiedosto sisältää arkaluontoista sisältöä</translation>
 <translation id="3447644283769633681">Estä kaikki kolmannen osapuolen evästeet</translation>
 <translation id="3448492834076427715">Päivitä tili</translation>
 <translation id="3449393517661170867">Uusi välilehdellinen ikkuna</translation>
@@ -3913,7 +3909,6 @@
 <translation id="4602466770786743961">Anna sivuston <ph name="HOST" /> aina käyttää kameraasi ja mikrofoniasi</translation>
 <translation id="4606551464649945562">Älä salli sivustojen luoda 3D-karttaa ympäristöstäsi tai seurata kameran asentoa</translation>
 <translation id="4608500690299898628">&amp;Haku...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> sisältää arkaluontoista sisältöä</translation>
 <translation id="4609987916561367134">JavaScriptin käyttö sallittu</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> on havainnut virheen.</translation>
 <translation id="4610637590575890427">Halusitko siirtyä osoitteeseen <ph name="SITE" />?</translation>
@@ -5886,7 +5881,6 @@
 <translation id="6492396476180293140">Sisäinen kamera poistettu käytöstä laitteiston kytkimellä</translation>
 <translation id="6494327278868541139">Näytä tiedot parannetusta suojauksesta</translation>
 <translation id="6494445798847293442">Ei varmenteen myöntäjä</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Tämä data sisältää arkaluontoista tai vaarallista sisältöä}=1{Tämä tiedosto sisältää arkaluontoista tai vaarallista sisältöä}other{Nämä tiedostot sisältävät arkaluontoista tai vaarallista sisältöä}}</translation>
 <translation id="6497548114956205206">Lue lisää virransäästöstä</translation>
 <translation id="6497784818439587832">Voit pienentää tai suurentaa näytöllä olevia kohteita muuttamalla näytön kokoa</translation>
 <translation id="6497789971060331894">Hiiren käänteinen vieritys</translation>
@@ -6032,7 +6026,6 @@
 <translation id="6621391692573306628">Jos haluat lähettää välilehden toiselle laitteelle, kirjaudu Chromeen molemmilla laitteilla</translation>
 <translation id="6622980291894852883">Estä kuvat edelleen</translation>
 <translation id="6624036901798307345">Kun laite on tablettitilassa, napauta välilehtilaskurin työkalupalkkikuvaketta. Tämä avaa uuden välilehtirivin, jossa näkyy kunkin välilehden pikkukuva.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> sisältää arkaluontoista tai vaarallista sisältöä. Pyydä sen omistajaa korjaamaan asia.</translation>
 <translation id="6624687053722465643">Herkku</translation>
 <translation id="6628328486509726751">Lähetetty <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Vahvempi suojaus</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index 8bdba25..4c9c83d 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -919,7 +919,6 @@
 <translation id="1819721979226826163">I-tap ang Mga notification ng app &gt; Mga serbisyo ng Google Play.</translation>
 <translation id="1820028137326691631">Maglagay ng password na ibinigay ng admin</translation>
 <translation id="1822140782238030981">Chrome user ka na ba? Mag-sign in</translation>
-<translation id="1823098433522728610">May sensitibong content ang dokumentong ito.</translation>
 <translation id="18245044880483936">Hindi mabibilang ang data ng backup sa quota sa storage ng Drive ng iyong anak.</translation>
 <translation id="1825565032302550710">Dapat ay nasa pagitan ng 1024 at 65535 ang port</translation>
 <translation id="182577151972096764">mga kamakailang tiningnang recipe</translation>
@@ -1957,7 +1956,6 @@
 <translation id="2743387203779672305">Kopyahin sa clipboard</translation>
 <translation id="274362947316498129">May app na sumusubok na i-access ang <ph name="DEVICE_NAME" />. I-off ang switch ng privacy ng <ph name="DEVICE_NAME" /> para payagan ang access.</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">May sensitibo o mapanganib na content ang file na ito. Hilingin sa may-ari nitong ayusin ito.</translation>
 <translation id="2749756011735116528">Mag-sign in sa <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Check Grammar With Spelling</translation>
@@ -2552,7 +2550,6 @@
 <translation id="3317459757438853210">Magkabilaan</translation>
 <translation id="3317678681329786349">Naka-block ang camera at mikropono</translation>
 <translation id="3320630259304269485">Ligtas na Pag-browse (proteksyon mula sa mga mapanganib na site) at iba pang setting ng seguridad</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{May sensitibo o mapanganib na content ang data na ito. Alisin ang content na ito at subukan ulit.}=1{May sensitibo o mapanganib na content ang file na ito. Alisin ang content na ito at subukan ulit.}one{May sensitibo o mapanganib na content ang mga file na ito. Alisin ang content na ito at subukan ulit.}other{May sensitibo o mapanganib na content ang mga file na ito. Alisin ang content na ito at subukan ulit.}}</translation>
 <translation id="3323521181261657960">Bonus! Nadagdagan ang tagal ng paggamit</translation>
 <translation id="3323577066981719144">Malalapat lang sa Chrome Browser ang mga pagbabagong gagawin mo rito. Para gumawa ng mga pagbabago sa mga setting ng iyong Lacros na Chrome Browser, buksan ang Lacros na Chrome Browser at pumunta sa mga setting.</translation>
 <translation id="3325804108816646710">Naghahanap ng mga available na profile...</translation>
@@ -2686,7 +2683,6 @@
 <translation id="3445925074670675829">USB-C device</translation>
 <translation id="3446274660183028131">Pakilunsad ang Parallels Desktop para ma-install ang Windows.</translation>
 <translation id="344630545793878684">Basahin ang iyong data sa ilang website</translation>
-<translation id="3446650212859500694">May sensitibong content ang file na ito</translation>
 <translation id="3447644283769633681">I-block ang lahat ng cookies ng third-party</translation>
 <translation id="3448492834076427715">I-update ang account</translation>
 <translation id="3449393517661170867">Bagong naka-tab na window</translation>
@@ -3921,7 +3917,6 @@
 <translation id="4602466770786743961">Palaging payagan ang <ph name="HOST" /> na i-access ang iyong camera at mikropono</translation>
 <translation id="4606551464649945562">Huwag payagan ang mga site na gumawa ng 3D na mapa ng iyong kapaligiran o subaybayan ang posisyon ng camera</translation>
 <translation id="4608500690299898628">&amp;Hanapin...</translation>
-<translation id="4608703838363792434">May sensitibong content ang <ph name="FILE_NAME" /></translation>
 <translation id="4609987916561367134">Pinapayagang gumamit ng Javascript</translation>
 <translation id="4610162781778310380">Nagkaroon ng error ang <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Ibig mo bang sabihin ay pumunta sa <ph name="SITE" />?</translation>
@@ -5896,7 +5891,6 @@
 <translation id="6492396476180293140">Na-deactivate ang internal na camera sa pamamagitan ng switch ng hardware</translation>
 <translation id="6494327278868541139">Ipakita ang mga detalye ng pinahusay na proteksyon</translation>
 <translation id="6494445798847293442">Hindi Certification Authority</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{May sensitibo o mapanganib na content ang data na ito}=1{May sensitibo o mapanganib na content ang file na ito}one{May sensitibo o mapanganib na content ang mga file na ito}other{May sensitibo o mapanganib na content ang mga file na ito}}</translation>
 <translation id="6497548114956205206">Matuto pa tungkol sa pantipid ng kuryente</translation>
 <translation id="6497784818439587832">Baguhin ang laki ng display para paliitin o palakihin ang mga item sa iyong screen</translation>
 <translation id="6497789971060331894">Reverse na pag-scroll gamit ang mouse</translation>
@@ -6044,7 +6038,6 @@
 <translation id="6621391692573306628">Para ipadala ang tab na ito sa ibang device, mag-sign in sa Chrome sa dalawang device</translation>
 <translation id="6622980291894852883">Magpatuloy sa paghaharang ng mga larawan</translation>
 <translation id="6624036901798307345">Sa tablet mode, i-tap ang button ng toolbar para sa pagbibilang ng tab para mabuksan ang bagong tabstrip na nagpapakita ng mga thumbnail ng bawat tab.</translation>
-<translation id="6624535038674360844">May sensitibo o mapanganib na content ang <ph name="FILE_NAME" />. Hilingin sa may-ari nitong ayusin ito.</translation>
 <translation id="6624687053722465643">Cupcake</translation>
 <translation id="6628328486509726751">Na-upload noong <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Mas pinaigting na seguridad</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index 61dc242..355fcbc0 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -238,6 +238,7 @@
 <translation id="121384500095351701">Ce fichier ne peut pas être téléchargé de manière sécuritaire</translation>
 <translation id="1215411991991485844">Nouvelle application en arrière-plan ajoutée</translation>
 <translation id="1216542092748365687">Supprimer l'empreinte digitale</translation>
+<translation id="1216891999012841486">En savoir plus sur la résolution des erreurs de mise à jour</translation>
 <translation id="1217114730239853757">Voulez-vous activer ChromeVox, le lecteur d'écran intégré de Chrome OS Flex? Le cas échéant, appuyez sur la barre d'espacement.</translation>
 <translation id="1217483152325416304">Vos données locales seront bientôt supprimées</translation>
 <translation id="1217668622537098248">Rétablir le clic gauche après l'action</translation>
@@ -908,7 +909,6 @@
 <translation id="1819721979226826163">Touchez Notifications de l'application &gt; Services Google Play.</translation>
 <translation id="1820028137326691631">Entrez le mot de passe fourni par l'administrateur</translation>
 <translation id="1822140782238030981">Vous utilisez déjà Chrome? Connectez-vous à votre compte</translation>
-<translation id="1823098433522728610">Le contenu de ce document est confidentiel.</translation>
 <translation id="18245044880483936">Les données des sauvegardes ne sont pas prises en compte dans le quota de stockage Google Disque de votre enfant.</translation>
 <translation id="1825565032302550710">Le numéro de port doit se trouver entre 1 024 et 65 535</translation>
 <translation id="182577151972096764">recettes récemment consultées</translation>
@@ -1941,8 +1941,8 @@
 <translation id="274318651891194348">Recherche du clavier en cours…</translation>
 <translation id="2743301740238894839">Démarrer</translation>
 <translation id="2743387203779672305">Copier dans le presse-papiers</translation>
+<translation id="274362947316498129">Une application tente d'accéder à <ph name="DEVICE_NAME" />. Désactivez le commutateur de confidentialité de <ph name="DEVICE_NAME" /> pour autoriser l'accès.</translation>
 <translation id="2745080116229976798">Subordination qualifiée de Microsoft</translation>
-<translation id="2747266560080989517">Le contenu de ce fichier est délicat ou dangereux. Demandez à son propriétaire de résoudre ce problème.</translation>
 <translation id="2749756011735116528">Se connecter à <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">Carte SIM</translation>
 <translation id="2749881179542288782">Vérifier la grammaire et l'orthographe</translation>
@@ -2537,7 +2537,6 @@
 <translation id="3317459757438853210">Recto verso</translation>
 <translation id="3317678681329786349">La caméra et le microphone sont bloqués</translation>
 <translation id="3320630259304269485">Navigation sécurisée (protection contre les sites dangereux) et autres paramètres de sécurité</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Le contenu de ces données est délicat ou dangereux. Supprimez-le et réessayez.}=1{Le contenu de ce fichier est délicat ou dangereux. Supprimez-le et réessayez.}one{Le contenu de ce fichier est délicat ou dangereux. Supprimez-le et réessayez.}other{Le contenu de ces fichiers est délicat ou dangereux. Supprimez-le et réessayez.}}</translation>
 <translation id="3323521181261657960">Hé hé! Ton temps d'écran a été prolongé!</translation>
 <translation id="3323577066981719144">Les modifications que vous apportez ici s'appliquent uniquement au navigateur Chrome. Pour modifier les paramètres de votre navigateur Chrome utilisant l'architecture Lacros, ouvrez celui-ci et accédez aux paramètres.</translation>
 <translation id="3325804108816646710">Recherche des profils accessibles en cours…</translation>
@@ -2671,7 +2670,6 @@
 <translation id="3445925074670675829">Appareil USB-C</translation>
 <translation id="3446274660183028131">Veuillez lancer Parallels Desktop pour installer Windows.</translation>
 <translation id="344630545793878684">Lire vos données sur un nombre défini de sites Web</translation>
-<translation id="3446650212859500694">Le contenu de ce fichier est délicat</translation>
 <translation id="3447644283769633681">Bloquez tous les témoins tiers</translation>
 <translation id="3448492834076427715">Mettre à jour le compte</translation>
 <translation id="3449393517661170867">Nouvelle fenêtre à onglets</translation>
@@ -3113,6 +3111,7 @@
 <translation id="385051799172605136">Retour</translation>
 <translation id="3851428669031642514">Charger des scripts non sécurisés</translation>
 <translation id="3852215160863921508">Assistance d'entrée</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> est activé</translation>
 <translation id="3854599674806204102">Choisir une option</translation>
 <translation id="3854967233147778866">Proposer des traductions de sites Web dans d'autres langues</translation>
 <translation id="3854976556788175030">Le plateau de sortie est plein</translation>
@@ -3446,6 +3445,7 @@
 <translation id="4163560723127662357">Clavier inconnu</translation>
 <translation id="4165942112764990069">L'adresse courriel <ph name="USER_EMAIL" /> n'appartient pas à une organisation valide. Communiquez avec votre administrateur. Si vous êtes un administrateur, vous pouvez configurer votre organisation à l'adresse suivante : g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Paramètres du site</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> essaie d'accéder à <ph name="DEVICE_NAME" />. Désactivez le commutateur de confidentialité de <ph name="DEVICE_NAME" /> pour autoriser l'accès.</translation>
 <translation id="4167393659000039775">Google n'est pas responsable des pertes de données; <ph name="DEVICE_OS" /> peut ne pas fonctionner sur les modèles non certifiés. Apprenez-en plus à la page g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Les sites utilisent généralement JavaScript pour proposer des fonctionnalités interactives, comme des jeux vidéo ou des formulaires Web</translation>
 <translation id="4168015872538332605">Certains paramètres appartenant à <ph name="PRIMARY_EMAIL" /> sont partagés avec vous. Ces paramètres n'influent sur votre compte que lors de l'utilisation de connexions multicomptes.</translation>
@@ -3903,11 +3903,11 @@
 <translation id="4602466770786743961">Toujours autoriser <ph name="HOST" /> à accéder à votre caméra et à votre microphone</translation>
 <translation id="4606551464649945562">Ne pas autoriser les sites à créer une carte 3D de votre environnement ni à faire le suivi de la position de l'appareil photo</translation>
 <translation id="4608500690299898628">Rec&amp;hercher...</translation>
-<translation id="4608703838363792434">Le contenu du fichier <ph name="FILE_NAME" /> est délicat</translation>
 <translation id="4609987916561367134">Autorisés à utiliser JavaScript</translation>
 <translation id="4610162781778310380">Le plugiciel <ph name="PLUGIN_NAME" /> a rencontré une erreur</translation>
 <translation id="4610637590575890427">Vouliez-vous accéder à <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Connexion de données possible</translation>
+<translation id="4612841084470706111">Accordez l'accès à tous les sites demandés.</translation>
 <translation id="4613144866899789710">Annulation de l'installation Linux en cours…</translation>
 <translation id="4613271546271159013">Une extension a changé la page qui s'affiche lorsque vous ouvrez un nouvel onglet.</translation>
 <translation id="4615586811063744755">aucun témoin sélectionné</translation>
@@ -4979,6 +4979,7 @@
 <translation id="5632059346822207074">Autorisation demandée, appuyez sur Ctrl+Suivant pour répondre</translation>
 <translation id="5632566673632479864">Votre compte <ph name="EMAIL" /> n'est plus autorisé en tant que compte principal. Comme ce compte est géré par <ph name="DOMAIN" />, vos favoris, votre historique, vos mots de passe et d'autres paramètres seront effacés de cet appareil.</translation>
 <translation id="5632592977009207922">Téléchargement en cours, il reste <ph name="PERCENT_REMAINING" /> %…</translation>
+<translation id="5633149627228920745">En savoir plus sur la configuration système requise</translation>
 <translation id="563371367637259496">Cellulaire</translation>
 <translation id="5634446357546764049">Découvrez des souvenirs de vos voyages récents et plus encore</translation>
 <translation id="5635312199252507107">Autoriser sur des sites particuliers</translation>
@@ -5671,6 +5672,7 @@
 <translation id="6291949900244949761">Demander une autorisation lorsqu'un site veut accéder à des appareils USB (recommandé)</translation>
 <translation id="6291953229176937411">&amp;Afficher dans le Finder</translation>
 <translation id="6292699686837272722">Les onglets sont réduits à une largeur moyenne</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> est désactivé</translation>
 <translation id="6294759976468837022">Vitesse du balayage automatique</translation>
 <translation id="6295158916970320988">Tous les sites</translation>
 <translation id="6295855836753816081">Enregistrement en cours...</translation>
@@ -5876,7 +5878,6 @@
 <translation id="6492396476180293140">Caméra interne désactivée par le commutateur matériel</translation>
 <translation id="6494327278868541139">Afficher les renseignements sur la protection renforcée</translation>
 <translation id="6494445798847293442">N'est pas une autorité de certification</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Le contenu de ces données est délicat ou dangereux}=1{Le contenu de ce fichier est délicat ou dangereux}one{Le contenu de ce fichier est délicat ou dangereux}other{Le contenu de ces fichiers est délicat ou dangereux}}</translation>
 <translation id="6497548114956205206">En savoir plus à propos de l'économiseur d'énergie</translation>
 <translation id="6497784818439587832">Modifier la taille d'affichage pour rétrécir ou agrandir les éléments sur votre écran</translation>
 <translation id="6497789971060331894">Défilement inversé de la souris</translation>
@@ -6024,7 +6025,6 @@
 <translation id="6621391692573306628">Pour envoyer cet onglet vers un autre appareil, connectez-vous à Chrome sur les deux appareils</translation>
 <translation id="6622980291894852883">Continuer à bloquer les images</translation>
 <translation id="6624036901798307345">En mode tablette, touchez le bouton de la barre d'outils du compteur d'onglets pour ouvrir la nouvelle bande d'onglets qui affiche les miniatures de chaque onglet.</translation>
-<translation id="6624535038674360844">Le contenu du fichier <ph name="FILE_NAME" /> est délicat ou dangereux. Demandez à son propriétaire de résoudre ce problème.</translation>
 <translation id="6624687053722465643">Douceur</translation>
 <translation id="6628328486509726751">Téléversement : <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Sécurité renforcée</translation>
@@ -8329,6 +8329,7 @@
 <translation id="8785622406424941542">Stylet</translation>
 <translation id="8786824282808281903">Lorsque votre enfant voit cette icône, il peut utiliser son empreinte digitale pour s'identifier ou pour autoriser des achats.</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{Groupe sans nom : 1 onglet}one{Groupe sans nom : # onglet}other{Groupe sans nom : # onglets}}</translation>
+<translation id="8791157330927639737">En savoir plus sur la mise à jour</translation>
 <translation id="8791534160414513928">Envoyer une demande d'interdiction de suivi avec les transferts liés à votre navigation</translation>
 <translation id="879413103056696865">Lors de l'utilisation du point d'accès, votre <ph name="PHONE_NAME" /> :</translation>
 <translation id="8795916974678578410">Nouvelle fenêtre</translation>
@@ -8484,6 +8485,7 @@
 <translation id="8940081510938872932">Votre ordinateur traite actuellement trop de tâches en même temps. Veuillez réessayer plus tard.</translation>
 <translation id="8940381019874223173">À partir de Google Photos</translation>
 <translation id="8941173171815156065">Révoquer l'autorisation « <ph name="PERMISSION" /> »</translation>
+<translation id="8941688920560496412">Le réseau <ph name="DEVICE_NAME" /> est désactivé</translation>
 <translation id="894191600409472540">Créer des mots de passe forts</translation>
 <translation id="894360074127026135">Fonction d'optimisation internationale Netscape</translation>
 <translation id="8944099748578356325">Épuisera plus rapidement la pile (actuellement à <ph name="BATTERY_PERCENTAGE" /> %)</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index d56106e..2852deda 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -908,7 +908,6 @@
 <translation id="1819721979226826163">Appuyez sur Notifications des applications &gt; Services Google Play.</translation>
 <translation id="1820028137326691631">Saisissez le mot de passe fourni par l'administrateur</translation>
 <translation id="1822140782238030981">Vous utilisez déjà Chrome ? Connexion</translation>
-<translation id="1823098433522728610">Le contenu de ce document est sensible.</translation>
 <translation id="18245044880483936">Les données sauvegardées ne sont pas comptabilisées dans le quota de stockage Drive de votre enfant.</translation>
 <translation id="1825565032302550710">Vous devez saisir un numéro de port compris entre 1024 et 65535</translation>
 <translation id="182577151972096764">recettes consultées récemment</translation>
@@ -1942,7 +1941,6 @@
 <translation id="2743387203779672305">Copier dans le presse-papiers</translation>
 <translation id="274362947316498129">Une appli tente d'accéder à la <ph name="DEVICE_NAME" />. Désactivez l'option de confidentialité de la <ph name="DEVICE_NAME" /> pour accorder l'accès.</translation>
 <translation id="2745080116229976798">Subordination qualifiée Microsoft</translation>
-<translation id="2747266560080989517">Le contenu de ce fichier est sensible ou dangereux. Demandez à son propriétaire de résoudre ce problème.</translation>
 <translation id="2749756011735116528">Connexion à <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Vérifier la grammaire et l'orthographe</translation>
@@ -2537,7 +2535,6 @@
 <translation id="3317459757438853210">Recto verso</translation>
 <translation id="3317678681329786349">Caméra et micro bloqués</translation>
 <translation id="3320630259304269485">Navigation sécurisée (protection contre les sites dangereux) et autres paramètres de sécurité</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Le contenu de ces données est sensible ou dangereux. Supprimez-le et réessayez.}=1{Le contenu de ce fichier est sensible ou dangereux. Supprimez-le et réessayez.}one{Le contenu de ce fichier est sensible ou dangereux. Supprimez-le et réessayez.}other{Le contenu de ces fichiers est sensible ou dangereux. Supprimez-le et réessayez.}}</translation>
 <translation id="3323521181261657960">Super ! Tu as plus de temps d'utilisation</translation>
 <translation id="3323577066981719144">Les modifications que vous apportez ici ne concernent que le navigateur Chrome. Pour changer les paramètres du navigateur Chrome Lacros, ouvrez Chrome Lacros et accédez aux paramètres.</translation>
 <translation id="3325804108816646710">Recherche de profils disponibles…</translation>
@@ -2671,7 +2668,6 @@
 <translation id="3445925074670675829">Appareil USB de type C</translation>
 <translation id="3446274660183028131">Veuillez lancer Parallels Desktop pour installer Windows.</translation>
 <translation id="344630545793878684">Lire vos données sur plusieurs sites web</translation>
-<translation id="3446650212859500694">Le contenu de ce fichier est sensible</translation>
 <translation id="3447644283769633681">Bloquer tous les cookies tiers</translation>
 <translation id="3448492834076427715">Mettre à jour le compte</translation>
 <translation id="3449393517661170867">Nouvelle fenêtre à onglets</translation>
@@ -3905,7 +3901,6 @@
 <translation id="4602466770786743961">Toujours autoriser <ph name="HOST" /> à accéder à votre caméra et à votre micro</translation>
 <translation id="4606551464649945562">Interdire aux sites de créer un plan 3D de votre environnement ou de suivre la position de la caméra</translation>
 <translation id="4608500690299898628">&amp;Rechercher...</translation>
-<translation id="4608703838363792434">Le contenu du fichier "<ph name="FILE_NAME" />" est sensible</translation>
 <translation id="4609987916561367134">Autorisé à utiliser JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> a rencontré une erreur</translation>
 <translation id="4610637590575890427">Vouliez-vous accéder à <ph name="SITE" /> ?</translation>
@@ -5881,7 +5876,6 @@
 <translation id="6492396476180293140">Caméra interne désactivée par le contacteur matériel</translation>
 <translation id="6494327278868541139">Afficher les détails de la protection renforcée</translation>
 <translation id="6494445798847293442">N'est pas une autorité de certification</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Le contenu de ces données est sensible ou dangereux}=1{Le contenu de ce fichier est sensible ou dangereux}one{Le contenu de ce fichier est sensible ou dangereux}other{Le contenu de ces fichiers est sensible ou dangereux}}</translation>
 <translation id="6497548114956205206">En savoir plus sur l'économiseur d'énergie</translation>
 <translation id="6497784818439587832">Agrandissez ou réduisez la taille des éléments à l'écran</translation>
 <translation id="6497789971060331894">Défilement inversé avec la souris</translation>
@@ -6029,7 +6023,6 @@
 <translation id="6621391692573306628">Pour envoyer cet onglet sur un autre appareil, connectez-vous à Chrome sur cet autre appareil et celui-ci</translation>
 <translation id="6622980291894852883">Continuer à bloquer les images</translation>
 <translation id="6624036901798307345">En mode tablette, appuyez sur le bouton de la barre d'outils du compteur d'onglets pour ouvrir la nouvelle barre d'onglets qui affiche une vignette de chaque onglet.</translation>
-<translation id="6624535038674360844">Le contenu du fichier "<ph name="FILE_NAME" />" est sensible ou dangereux. Demandez à son propriétaire de résoudre ce problème.</translation>
 <translation id="6624687053722465643">Cupcake</translation>
 <translation id="6628328486509726751">Date et heure d'importation : <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Sécurité renforcée</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index 36c61f9..d969d423 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -906,7 +906,6 @@
 <translation id="1819721979226826163">Toca Notificacións da aplicación &gt; Servizos de Google Play.</translation>
 <translation id="1820028137326691631">Introducir o contrasinal indicado polo administrador</translation>
 <translation id="1822140782238030981">Xa es usuario de Chrome? Inicia sesión</translation>
-<translation id="1823098433522728610">Este documento ten contido confidencial.</translation>
 <translation id="18245044880483936">Os datos da copia de seguranza non contarán na cota de almacenamento de Drive do teu fillo.</translation>
 <translation id="1825565032302550710">O porto debe estar comprendido entre o 1024 e o 65535</translation>
 <translation id="182577151972096764">receitas vistas recentemente</translation>
@@ -1939,7 +1938,6 @@
 <translation id="2743301740238894839">Iniciar</translation>
 <translation id="2743387203779672305">Copiar no portapapeis</translation>
 <translation id="2745080116229976798">Subordinación certificada de Microsoft</translation>
-<translation id="2747266560080989517">Este ficheiro inclúe contido confidencial ou perigoso. Pídelle ao seu propietario que o corrixa.</translation>
 <translation id="2749756011735116528">Iniciar sesión en <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Comprobar a gramática e a ortografía</translation>
@@ -2534,7 +2532,6 @@
 <translation id="3317459757438853210">Dobre cara</translation>
 <translation id="3317678681329786349">Bloqueáronse a cámara e o micrófono</translation>
 <translation id="3320630259304269485">Navegación segura (protección contra os sitios perigosos) e outras opcións de configuración de seguranza</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Estes datos inclúen contido confidencial ou perigoso. Quita ese contido e téntao de novo.}=1{Este ficheiro inclúe contido confidencial ou perigoso. Quita ese contido e téntao de novo.}other{Estes ficheiros inclúen contido confidencial ou perigoso. Quita ese contido e téntao de novo.}}</translation>
 <translation id="3323521181261657960">Xenial! Máis tempo diante da pantalla</translation>
 <translation id="3323577066981719144">Os cambios que fagas aquí aplícanse só ao navegador Chrome. Para facer cambios na configuración do navegador Chrome Lacros, abre o navegador mencionado e vai á configuración.</translation>
 <translation id="3325804108816646710">Buscando perfís dispoñibles...</translation>
@@ -2668,7 +2665,6 @@
 <translation id="3445925074670675829">Dispositivo USB‑C</translation>
 <translation id="3446274660183028131">Inicia Parallels Desktop para instalar Windows.</translation>
 <translation id="344630545793878684">Lectura dos teus datos nun determinado número de sitios web</translation>
-<translation id="3446650212859500694">Este ficheiro inclúe contido confidencial</translation>
 <translation id="3447644283769633681">Bloquea todas as cookies de terceiros</translation>
 <translation id="3448492834076427715">Actualizar conta</translation>
 <translation id="3449393517661170867">Nova ventá con pestanas</translation>
@@ -3900,7 +3896,6 @@
 <translation id="4602466770786743961">Permitir sempre a <ph name="HOST" /> acceder á túa cámara e micrófono</translation>
 <translation id="4606551464649945562">Non permitir que os sitios creen un mapa 3D do que te rodea e fagan un seguimento da posición da cámara</translation>
 <translation id="4608500690299898628">&amp;Buscar...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> inclúe contido confidencial</translation>
 <translation id="4609987916561367134">Sitios que poden usar JavaScript</translation>
 <translation id="4610162781778310380">O complemento <ph name="PLUGIN_NAME" /> detectou un erro</translation>
 <translation id="4610637590575890427">Talvez querías acceder a <ph name="SITE" />?</translation>
@@ -5870,7 +5865,6 @@
 <translation id="6492396476180293140">A cámara interna desactivouse ao premer o interruptor de hardware</translation>
 <translation id="6494327278868541139">Mostrar detalles de protección mellorada</translation>
 <translation id="6494445798847293442">Non é unha autoridade de certificación</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Estes datos inclúen contido confidencial ou perigoso}=1{Este ficheiro inclúe contido confidencial ou perigoso}other{Estes ficheiros inclúen contido confidencial ou perigoso}}</translation>
 <translation id="6497548114956205206">Máis información sobre Aforro de enerxía</translation>
 <translation id="6497784818439587832">Cambia o tamaño da pantalla para que os elementos que se mostran nela sexan máis pequenos ou máis grandes</translation>
 <translation id="6497789971060331894">Desprazamento inverso do rato</translation>
@@ -6016,7 +6010,6 @@
 <translation id="6621391692573306628">Para enviar esta pestana a outro dispositivo, inicia sesión en Chrome nos dous dispositivos</translation>
 <translation id="6622980291894852883">Continuar bloqueando as imaxes</translation>
 <translation id="6624036901798307345">No modo de tableta, toca o botón do contador de pestanas que se atopa na barra de ferramentas para abrir a nova franxa de pestanas na que se mostra cadansúa miniatura.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> inclúe contido confidencial ou perigoso. Pídelle ao seu propietario que o corrixa.</translation>
 <translation id="6624687053722465643">Dozura</translation>
 <translation id="6628328486509726751">Data da carga: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Máis seguranza</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 1ec793f..c3293e98 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -904,7 +904,6 @@
 <translation id="1819721979226826163">ઍપ નોટિફિકેશન &gt; Google Play સેવાઓને ટૅપ કરો.</translation>
 <translation id="1820028137326691631">વ્યવસ્થાપક દ્વારા અપાયેલો પાસવર્ડ દાખલ કરો</translation>
 <translation id="1822140782238030981">પહેલેથી જ Chrome વપરાશકર્તા છો? સાઇન ઇન કરો</translation>
-<translation id="1823098433522728610">આ દસ્તાવેજમાં સંવેદનશીલ કન્ટેન્ટ છે.</translation>
 <translation id="18245044880483936">બૅકઅપ ડેટાની ગણતરી તમારા બાળકના ડ્રાઇવ સ્ટોરેજના ક્વોટામાં કરવામાં નહીં આવે.</translation>
 <translation id="1825565032302550710">પોર્ટ 1024 અને 65535ની વચ્ચે હોવું આવશ્યક છે</translation>
 <translation id="182577151972096764">તાજેતરમાં જોવાયેલી રૅસિપિ</translation>
@@ -1938,7 +1937,6 @@
 <translation id="2743301740238894839">શરૂ કરો</translation>
 <translation id="2743387203779672305">ક્લિપબોર્ડ પર કૉપિ કરો</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">આ ફાઇલમાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે. તેના માલિકને તેને સુધારવાનું કહો.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> પર સાઇન ઇન કરો</translation>
 <translation id="2749836841884031656">સિમ</translation>
 <translation id="2749881179542288782">જોડણી સાથે વ્યાકરણ તપાસો</translation>
@@ -2533,7 +2531,6 @@
 <translation id="3317459757438853210">બંને બાજુ</translation>
 <translation id="3317678681329786349">કૅમેરા અને માઇક્રોફોન બ્લૉક કર્યા</translation>
 <translation id="3320630259304269485">Safe Browsing (જોખમકારક સાઇટથી સુરક્ષા) અને અન્ય સુરક્ષા સેટિંગ</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{આ ડેટામાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે. આ કન્ટેન્ટ કાઢી નાખો અને ફરી પ્રયાસ કરો.}=1{આ ફાઇલમાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે. આ કન્ટેન્ટ કાઢી નાખો અને ફરી પ્રયાસ કરો.}one{આ ફાઇલમાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે. આ કન્ટેન્ટ કાઢી નાખો અને ફરી પ્રયાસ કરો.}other{આ ફાઇલોમાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે. આ કન્ટેન્ટ કાઢી નાખો અને ફરી પ્રયાસ કરો.}}</translation>
 <translation id="3323521181261657960">બોનસ! તમને હજી વધુ સ્ક્રીન સમય મળ્યો છે</translation>
 <translation id="3323577066981719144">તમે અહીં કરો છો તે ફેરફારો માત્ર Chrome બ્રાઉઝરમાં લાગુ કરવામાં આવે છે. તમારા Lacros Chrome બ્રાઉઝરના સેટિંગમાં ફેરફારો કરવા માટે, Lacros Chrome બ્રાઉઝર ખોલો અને સેટિંગમાં જાઓ.</translation>
 <translation id="3325804108816646710">ઉપલબ્ધ પ્રોફાઇલ શોધી રહ્યાં છીએ…</translation>
@@ -2667,7 +2664,6 @@
 <translation id="3445925074670675829">USB-C ઉપકરણ</translation>
 <translation id="3446274660183028131">Windows ઇન્સ્ટૉલ કરવા માટે કૃપા કરીને Parallels ડેસ્કટૉપ લૉન્ચ કરો.</translation>
 <translation id="344630545793878684">ઘણી વેબસાઇટ્સ પર તમારો ડેટા વાંચી શકે છે</translation>
-<translation id="3446650212859500694">આ ફાઇલમાં સંવેદનશીલ કન્ટેન્ટ છે.</translation>
 <translation id="3447644283769633681">તમામ તૃતીય-પક્ષની કૂકીઝને અવરોધિત કરો</translation>
 <translation id="3448492834076427715">એકાઉન્ટ અપડેટ કરો</translation>
 <translation id="3449393517661170867">નવી ટૅબવાળી વિંડો</translation>
@@ -3899,7 +3895,6 @@
 <translation id="4602466770786743961">તમારા કૅમેરા અને માઇક્રોફોનને ઍક્સેસ કરવા માટે હંમેશાં <ph name="HOST" />ને મંજૂરી આપો</translation>
 <translation id="4606551464649945562">કોઈ સાઇટને તમારી આજુબાજુનો 3D નકશો બનાવવાની અથવા કૅમેરાનું સ્ટેટસ ટ્રૅક કરવાની મંજૂરી આપશો નહીં</translation>
 <translation id="4608500690299898628">&amp;શોધો...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" />માં સંવેદનશીલ કન્ટેન્ટ છે</translation>
 <translation id="4609987916561367134">Javascriptનો ઉપયોગ કરવાની મંજૂરી આપી છે</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />માં એક ભૂલ આવી છે</translation>
 <translation id="4610637590575890427">શું તમારી ઈચ્છા <ph name="SITE" /> પર જવાની હતી?</translation>
@@ -5874,7 +5869,6 @@
 <translation id="6492396476180293140">હાર્ડવેર સ્વિચ દબાવીને આંતરિક કૅમેરા બંધ કર્યો</translation>
 <translation id="6494327278868541139">વધારાની સુરક્ષાની વિગતો બતાવો</translation>
 <translation id="6494445798847293442">કોઈ પ્રમાણન અધિકારી નથી</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{આ ડેટામાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે}=1{આ ફાઇલમાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે}one{આ ફાઇલમાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે}other{આ ફાઇલોમાં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે}}</translation>
 <translation id="6497548114956205206">એનર્જી સેવર મોડ વિશે વધુ જાણો</translation>
 <translation id="6497784818439587832">તમારી સ્ક્રીન પરની આઇટમને વધુ નાની અથવા વધુ મોટી કરવા માટે ડિસ્પ્લેનું કદ બદલો</translation>
 <translation id="6497789971060331894">માઉસનું રિવર્સ સ્ક્રોલિંગ</translation>
@@ -6022,7 +6016,6 @@
 <translation id="6621391692573306628">આ ટૅબને અન્ય ડિવાઇસ પર મોકલવા માટે, બન્ને ડિવાઇસ પર Chromeમાં સાઇન ઇન કરો</translation>
 <translation id="6622980291894852883">છબીઓને બ્લૉક કરવાનું ચાલુ રાખો</translation>
 <translation id="6624036901798307345">ટૅબ્લેટ મોડમાં, નવી ટૅબ સ્ટ્રિપ ખોલવા માટે ટૅબ કાઉન્ટર પરનું ટૂલબાર બટન પર ટૅપ કરો, જે પ્રત્યેક ટૅબની થંબનેલ બતાવે છે.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" />માં સંવેદનશીલ અથવા જોખમી કન્ટેન્ટ છે. તેના માલિકને તેને સુધારવાનું કહો.</translation>
 <translation id="6624687053722465643">મીઠાશ</translation>
 <translation id="6628328486509726751">અપલોડ કર્યું <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">વધુ પ્રબળ સુરક્ષા</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 6fe0bdc8..d5adbe62 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -919,7 +919,6 @@
 <translation id="1819721979226826163">ऐप्लिकेशन सूचनाएं &gt; Google Play सेवाएं पर टैप करें.</translation>
 <translation id="1820028137326691631">एडमिन का दिया हुआ पासवर्ड डालें</translation>
 <translation id="1822140782238030981">पहले से Chrome इस्तेमाल कर रहे हैं? तो साइन इन करें</translation>
-<translation id="1823098433522728610">इस दस्तावेज़ में संवेदनशील कॉन्टेंट है.</translation>
 <translation id="18245044880483936">बैकअप लिया गया डेटा, आपके बच्चे की डिस्क मेमोरी में नहीं गिना जाएगा.</translation>
 <translation id="1825565032302550710">पोर्ट, 1024 और 65535 के बीच का ही हो</translation>
 <translation id="182577151972096764">हाल में देखी गई रेसिपी</translation>
@@ -1955,8 +1954,8 @@
 <translation id="274318651891194348">कीबोर्ड खोजा जा रहा है</translation>
 <translation id="2743301740238894839">शुरू करें</translation>
 <translation id="2743387203779672305">क्लिपबोर्ड में कॉपी करें</translation>
+<translation id="274362947316498129">कोई ऐप्लिकेशन आपके <ph name="DEVICE_NAME" /> को ऐक्सेस करने की कोशिश कर रहा है. ऐक्सेस करने की अनुमति देने के लिए, <ph name="DEVICE_NAME" /> के प्राइवसी स्विच को बंद करें.</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">इस फ़ाइल में संवेदनशील या खतरनाक सामग्री है. इसके मालिक से इसे ठीक करने के लिए कहें.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> में साइन इन करें</translation>
 <translation id="2749836841884031656">सिम</translation>
 <translation id="2749881179542288782">वर्तनी के साथ व्याकरण की जाँच करें</translation>
@@ -2551,7 +2550,6 @@
 <translation id="3317459757438853210">दोतरफा</translation>
 <translation id="3317678681329786349">कैमरा और माइक्रोफ़ोन ब्लॉक किए गए हैं</translation>
 <translation id="3320630259304269485">सुरक्षित ब्राउज़िंग (नुकसान पहुंचाने वाली साइटों से सुरक्षा) और दूसरी सुरक्षा सेटिंग</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{इस डेटा में संवेदनशील या खतरनाक सामग्री है. इस सामग्री को हटाएं और फिर से कोशिश करें.}=1{इस फ़ाइल में संवेदनशील या खतरनाक सामग्री है. इस सामग्री को हटाएं और फिर से कोशिश करें.}one{इस फ़ाइल में संवेदनशील या खतरनाक सामग्री है. इस सामग्री को हटाएं और फिर से कोशिश करें.}other{इन फ़ाइलों में संवेदनशील या खतरनाक सामग्री है. इस सामग्री को हटाएं और फिर से कोशिश करें.}}</translation>
 <translation id="3323521181261657960">बोनस! आप और देर तक डिवाइस इस्तेमाल कर सकते हैं</translation>
 <translation id="3323577066981719144">यहां किए गए बदलाव सिर्फ़ Chrome ब्राउज़र पर लागू होते हैं. अपने Lacros Chrome ब्राउज़र की सेटिंग में बदलाव करने के लिए, Lacros Chrome ब्राउज़र खोलें और सेटिंग में जाएं.</translation>
 <translation id="3325804108816646710">प्रोफ़ाइलें खोजी जा रही हैं...</translation>
@@ -2685,7 +2683,6 @@
 <translation id="3445925074670675829">USB-C डिवाइस</translation>
 <translation id="3446274660183028131">Windows को इंस्टॉल करने के लिए कृपया Parallels Desktop को लॉन्च करें.</translation>
 <translation id="344630545793878684">अपना डेटा कई वेबसाइटों पर पढ़ें</translation>
-<translation id="3446650212859500694">इस फ़ाइल में संवेदनशील सामग्री है</translation>
 <translation id="3447644283769633681">सभी तृतीय पक्ष कुकी अवरोधित करें</translation>
 <translation id="3448492834076427715">खाता अपडेट करें</translation>
 <translation id="3449393517661170867">टैब की गई नई विंडो</translation>
@@ -3127,6 +3124,7 @@
 <translation id="385051799172605136">वापस जाएं</translation>
 <translation id="3851428669031642514">असुरक्षित स्‍क्रिप्‍ट लोड करें</translation>
 <translation id="3852215160863921508">इनपुट से जुड़ी सहायता</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> चालू हो गया है</translation>
 <translation id="3854599674806204102">कोई विकल्प चुनें</translation>
 <translation id="3854967233147778866">दूसरी भाषाओं में वेबसाइटों का अनुवाद करने की सुविधा दें</translation>
 <translation id="3854976556788175030">आउटपुट ट्रे भरी हुई है</translation>
@@ -3459,6 +3457,7 @@
 <translation id="4163560723127662357">अज्ञात कीबोर्ड</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> किसी मान्य संगठन से जुड़ा हुआ नहीं है. अपने एडमिन से संपर्क करें. अगर आप एडमिन हैं, तो यहां जाकर आप अपना संगठन सेट अप कर सकते हैं: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">साइट सेटिंग</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" />, <ph name="DEVICE_NAME" /> को ऐक्सेस करने की कोशिश कर रहा है. ऐक्सेस करने की अनुमति देने के लिए, <ph name="DEVICE_NAME" /> के प्राइवसी स्विच को बंद करें.</translation>
 <translation id="4167393659000039775">किसी भी तरह के डेटा का नुकसान होने पर, Google ज़िम्मेदार नहीं होगा. <ph name="DEVICE_OS" /> शायद ऐसे मॉडल पर काम न करे जो सर्टिफ़ाइड नहीं हैं. ज़्यादा जानने के लिए, g.co/flex/InstallGuide पर जाएं.</translation>
 <translation id="4167686856635546851">आम तौर पर, साइटें, JavaScript का इस्तेमाल इंटरैक्टिव सुविधाओं को दिखाने के लिए करती हैं. जैसे कि वीडियो गेम या वेब फ़ॉर्म</translation>
 <translation id="4168015872538332605"><ph name="PRIMARY_EMAIL" /> से संबंधित कुछ सेटिंग आपके साथ शेयर की जा रही हैं. ये सेटिंग आपके खाते को सिर्फ़ तभी प्रभावित करते हैं जब एक से ज़्यादा साइन-इन का इस्तेमाल किया जाता है.</translation>
@@ -3917,11 +3916,11 @@
 <translation id="4602466770786743961"><ph name="HOST" /> को अपना कैमरा और माइक्रोफ़ोन हमेशा एक्सेस करने दें</translation>
 <translation id="4606551464649945562">साइटों को अपने आस-पास की जगह का 3D मैप बनाने या कैमरे की स्थिति ट्रैक करने की अनुमति न दें</translation>
 <translation id="4608500690299898628">&amp;ढूंढें...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> में संवेदनशील सामग्री है</translation>
 <translation id="4609987916561367134">JavaScript का इस्तेमाल करने की अनुमति है</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> में कोई गड़बड़ी आई</translation>
 <translation id="4610637590575890427">क्या आपका मतलब <ph name="SITE" /> पर जाने से है ?</translation>
 <translation id="4611114513649582138">डेटा कनेक्शन उपलब्ध है</translation>
+<translation id="4612841084470706111">उन सभी साइटों का ऐक्सेस दें जिनके लिए अनुरोध किया गया है.</translation>
 <translation id="4613144866899789710">Linux को इंस्टॉल करना रद्द किया जा रहा है...</translation>
 <translation id="4613271546271159013">  नया टैब खोले जाने पर, दिखाई देने वाले पेज का एक्सटेंशन बदल दिया गया है.</translation>
 <translation id="4615586811063744755">कोई कुकी नहीं चुनी गई है</translation>
@@ -5685,6 +5684,7 @@
 <translation id="6291949900244949761">जब कोई साइट USB डिवाइस एक्सेस करना चाहे, तो इसके लिए पूछें (सुझाया गया)</translation>
 <translation id="6291953229176937411">खोजकर्ता में &amp;दिखाएं</translation>
 <translation id="6292699686837272722">टैब की चौड़ाई मध्यम हो जाती है</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> बंद हो गया है</translation>
 <translation id="6294759976468837022">अपने-आप स्कैन होने की रफ़्तार</translation>
 <translation id="6295158916970320988">सभी साइटें</translation>
 <translation id="6295855836753816081">सहेज रहा है...</translation>
@@ -5890,7 +5890,6 @@
 <translation id="6492396476180293140">हार्डवेयर स्विच की मदद से, डिवाइस में मौजूद कैमरा बंद किया गया</translation>
 <translation id="6494327278868541139">बेहतर सुरक्षा की जानकारी देखें</translation>
 <translation id="6494445798847293442">यह प्रमाणन प्राधिकरण नहीं हैै</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{इस डेटा में संवेदनशील या खतरनाक सामग्री है}=1{इस फ़ाइल में संवेदनशील या खतरनाक सामग्री है}one{इस फ़ाइल में संवेदनशील या खतरनाक सामग्री है}other{इन फ़ाइलों में संवेदनशील या खतरनाक सामग्री है}}</translation>
 <translation id="6497548114956205206">एनर्जी सेवर के बारे में ज़्यादा जानें</translation>
 <translation id="6497784818439587832">अपनी स्क्रीन पर मौजूद आइटम को छोटा या बड़ा करने के लिए, डिसप्ले का साइज़ बदलें</translation>
 <translation id="6497789971060331894">माउस से उल्टा स्क्रोल करने की रफ़्तार</translation>
@@ -6038,7 +6037,6 @@
 <translation id="6621391692573306628">इस टैब को किसी दूसरे डिवाइस पर भेजने के लिए, दोनों डिवाइसों पर Chrome में साइन इन करें</translation>
 <translation id="6622980291894852883">छवियों को अवरोधित करना जारी रखें</translation>
 <translation id="6624036901798307345">टैबलेट मोड में, हर टैब के थंबनेल दिखाने वाला नया टैब बार खोलने के लिए, टैब काउंटर टूलबार बटन पर टैप करें.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> में संवेदनशील या खतरनाक सामग्री है. इसके मालिक से इसे ठीक करने के लिए कहें.</translation>
 <translation id="6624687053722465643">स्वीटनेस</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> पर अपलोड किया गया</translation>
 <translation id="6630117778953264026">बेहतर सुरक्षा</translation>
@@ -8498,6 +8496,7 @@
 <translation id="8940081510938872932">आपका कंप्‍यूटर इस समय बहुत सी चीज़ें कर रहा है.  बाद में फिर से प्रयास करें.</translation>
 <translation id="8940381019874223173">आपके Google Photos से</translation>
 <translation id="8941173171815156065">अनुमति '<ph name="PERMISSION" />' को निरस्‍त करें</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> बंद है</translation>
 <translation id="894191600409472540">मज़बूत पासवर्ड बनाएं</translation>
 <translation id="894360074127026135">Netscape अंतर्राष्ट्रीय स्टेप-अप</translation>
 <translation id="8944099748578356325">बैटरी का उपयोग ज़्यादा तेज़ी से करेंं (इस समय <ph name="BATTERY_PERCENTAGE" />% है)</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index cdf4ab3f..16fc59316 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -239,6 +239,7 @@
 <translation id="121384500095351701">Ta se datoteka ne može sigurno preuzeti</translation>
 <translation id="1215411991991485844">Dodana je nova pozadinska aplikacija</translation>
 <translation id="1216542092748365687">Uklanjanje otiska prsta</translation>
+<translation id="1216891999012841486">Saznajte više o ispravljanju pogrešaka pri ažuriranju</translation>
 <translation id="1217114730239853757">Želite li aktivirati ChromeVox, ugrađeni čitač zaslona za ChromeOS Flex? Ako želite, pritisnite razmaknicu.</translation>
 <translation id="1217483152325416304">Vaši lokalni podaci uskoro će se izbrisati</translation>
 <translation id="1217668622537098248">Vrati na lijevi klik nakon radnje</translation>
@@ -409,6 +410,7 @@
 <translation id="1388253969141979417">Dopuštena je upotreba mikrofona</translation>
 <translation id="1388728792929436380">Uređaj <ph name="DEVICE_TYPE" /> ponovo će se pokrenuti kad ažuriranje završi.</translation>
 <translation id="1389601498324964367">Pohrana s upravljanom kvotom</translation>
+<translation id="1390113502208199250">Uređaj ćete morati vratiti na tvorničke postavke kako biste mogli upotrebljavali značajke Nadogradnje za Chrome za obrazovanje.</translation>
 <translation id="139013308650923562">Web-lokacije kojima je dopušteno korištenje fontova instaliranih na uređaju</translation>
 <translation id="1390548061267426325">Otvori kao uobičajenu karticu</translation>
 <translation id="1390907927270446471">Korisnik <ph name="PROFILE_USERNAME" /> nije ovlašten za ispis na pisaču <ph name="PRINTER_NAME" />. Obratite se administratoru.</translation>
@@ -479,6 +481,7 @@
 <translation id="1436784010935106834">Uklonjeno</translation>
 <translation id="1437986450143295708">Detaljno opišite poteškoću</translation>
 <translation id="1439671507542716852">s dugoročnom podrškom</translation>
+<translation id="1440090277117135316">Upis u školu je dovršen</translation>
 <translation id="144283815522798837">Broj odabranih stavki: <ph name="NUMBER_OF_ITEMS_SELECTED" /></translation>
 <translation id="1442851588227551435">Postavljanje aktivnog Kerberosovog tiketa</translation>
 <translation id="1444628761356461360">Ovom postavkom upravlja vlasnik uređaja, <ph name="OWNER_EMAIL" />.</translation>
@@ -909,7 +912,6 @@
 <translation id="1819721979226826163">Dodirnite Obavijesti aplikacije &gt; Google Play usluge.</translation>
 <translation id="1820028137326691631">Unesite zaporku koju ste dobili od administratora</translation>
 <translation id="1822140782238030981">Već jeste Chromeov korisnik? Prijavite se</translation>
-<translation id="1823098433522728610">Taj dokument ima osjetljiv sadržaj.</translation>
 <translation id="18245044880483936">Podaci sigurnosne kopije neće se ubrajati u kvotu pohrane na Disku za vaše dijete.</translation>
 <translation id="1825565032302550710">Priključak mora biti između 1024 i 65535</translation>
 <translation id="182577151972096764">nedavno pregledani recepti</translation>
@@ -1942,8 +1944,8 @@
 <translation id="274318651891194348">Traženje tipkovnice</translation>
 <translation id="2743301740238894839">Početak</translation>
 <translation id="2743387203779672305">Kopiraj u međuspremnik</translation>
+<translation id="274362947316498129">Aplikacija pokušava pristupiti uređaju <ph name="DEVICE_NAME" />. Da biste omogućili pristup, isključite prekidač za privatnost uređaja <ph name="DEVICE_NAME" />.</translation>
 <translation id="2745080116229976798">Microsoftova kvalificirana podređenost</translation>
-<translation id="2747266560080989517">Ova datoteka ima osjetljiv ili opasan sadržaj. Recite vlasniku da ispravi pogrešku.</translation>
 <translation id="2749756011735116528">Prijava na uslugu <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Uz pravopis provjeri i gramatiku</translation>
@@ -2399,6 +2401,7 @@
 <translation id="3170072451822350649">Možete također preskočiti prijavu i <ph name="LINK_START" />pregledavati kao gost<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Nova kartica s lijeve strane</translation>
 <translation id="3177909033752230686">Jezik stranice:</translation>
+<translation id="3177914167275935955">Vaš uređaj uključuje Nadogradnju za Chrome za obrazovanje, no vaše korisničko ime nije povezano s računom za Google for Education. Izradite račun za Google for Education na sekundarnom uređaju na stranici g.co/workspace/edusignup.</translation>
 <translation id="3179982752812949580">Font teksta</translation>
 <translation id="3181954750937456830">Sigurno pregledavanje (štiti vas i vaš uređaj od opasnih web-lokacija)</translation>
 <translation id="3182749001423093222">Provjera pravopisa</translation>
@@ -2538,7 +2541,6 @@
 <translation id="3317459757438853210">Obostrano</translation>
 <translation id="3317678681329786349">Blokirani su kamera i mikrofon</translation>
 <translation id="3320630259304269485">Sigurno pregledavanje (zaštita od opasnih web-lokacija) i druge sigurnosne postavke</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Ovi podaci imaju osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}=1{Ova datoteka ima osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}one{Ove datoteke imaju osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}few{Ove datoteke imaju osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}other{Ove datoteke imaju osjetljiv ili opasan sadržaj. Uklonite taj sadržaj i pokušajte ponovo.}}</translation>
 <translation id="3323521181261657960">Bonus! Vrijeme upotrebe ti je produženo</translation>
 <translation id="3323577066981719144">Promjene koje unesete ovdje primjenjuju se samo na preglednik Chrome. Da biste promijenili postavke preglednika Chrome Lacros, otvorite preglednik Chrome Lacros, a zatim postavke.</translation>
 <translation id="3325804108816646710">Tražimo dostupne profile...</translation>
@@ -2672,7 +2674,6 @@
 <translation id="3445925074670675829">USB-C uređaj</translation>
 <translation id="3446274660183028131">Pokrenite Parallels Desktop da biste instalirali Windows.</translation>
 <translation id="344630545793878684">čitati vaše podatke s raznih web-lokacija</translation>
-<translation id="3446650212859500694">Ova datoteka ima osjetljiv sadržaj</translation>
 <translation id="3447644283769633681">Blokiraj sve kolačiće trećih strana</translation>
 <translation id="3448492834076427715">Ažuriraj račun</translation>
 <translation id="3449393517661170867">Novi prozor s karticama</translation>
@@ -3114,6 +3115,7 @@
 <translation id="385051799172605136">Natrag</translation>
 <translation id="3851428669031642514">Učitaj nesigurne skripte</translation>
 <translation id="3852215160863921508">Pomoć prilikom unosa</translation>
+<translation id="3853549894831560772">Uređaj <ph name="DEVICE_NAME" /> je uključen</translation>
 <translation id="3854599674806204102">Odaberite opciju</translation>
 <translation id="3854967233147778866">Ponudi prevođenje web-lokacija na druge jezike</translation>
 <translation id="3854976556788175030">Izlazna je ladica puna</translation>
@@ -3447,6 +3449,7 @@
 <translation id="4163560723127662357">Nepoznata tipkovnica</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> ne pripada važećoj organizaciji. Obratite se administratoru. Ako ste administrator, možete postaviti organizaciju tako da posjetite: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Postavke web-lokacije</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> pokušava pristupiti uređaju <ph name="DEVICE_NAME" />. Da biste omogućili pristup, isključite prekidač za privatnost uređaja <ph name="DEVICE_NAME" />.</translation>
 <translation id="4167393659000039775">Google nije odgovoran ni za kakav gubitak podataka i <ph name="DEVICE_OS" /> možda neće funkcionirati na necertificiranim modelima. Saznajte više na stranici g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Web-lokacije obično upotrebljavaju JavaScript za prikaz interaktivnih značajki, primjerice videoigara ili web-obrazaca</translation>
 <translation id="4168015872538332605">Neke postavke korisnika <ph name="PRIMARY_EMAIL" /> dijele se s vama. Te postavke utječu na vaš račun samo kad upotrebljavate višestruku prijavu.</translation>
@@ -3904,11 +3907,11 @@
 <translation id="4602466770786743961">Uvijek dopusti hostu <ph name="HOST" /> pristup kameri i mikrofonu</translation>
 <translation id="4606551464649945562">Onemogućite web-lokacijama da izrađuju 3D karte vašeg okruženja ili prate položaj kamere</translation>
 <translation id="4608500690299898628">&amp;Traži...</translation>
-<translation id="4608703838363792434">Datoteka <ph name="FILE_NAME" /> ima osjetljiv sadržaj</translation>
 <translation id="4609987916561367134">Dopuštena je upotreba JavaScripta</translation>
 <translation id="4610162781778310380">Dodatak <ph name="PLUGIN_NAME" /> naišao je na pogrešku</translation>
 <translation id="4610637590575890427">Jeste li mislili <ph name="SITE" /></translation>
 <translation id="4611114513649582138">Dostupna je podatkovna veza</translation>
+<translation id="4612841084470706111">Odobrite pristup svim zatraženim web-lokacijama.</translation>
 <translation id="4613144866899789710">Otkazivanje instalacije Linuxa...</translation>
 <translation id="4613271546271159013">Proširenje je promijenilo stranicu koja se prikazuje kada otvorite novu karticu.</translation>
 <translation id="4615586811063744755">nije odabran nijedan kolačić</translation>
@@ -4068,6 +4071,7 @@
 <translation id="4762489666082647806">Boja pokazivača</translation>
 <translation id="4762718786438001384">Količina prostora na disku uređaja kritično je mala</translation>
 <translation id="4763408175235639573">Prilikom pregledavanja ove stranice postavljeni su sljedeći kolačići</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> nije važeći račun za Google for Education. Obratite se administratoru. Ako ste administrator, možete postaviti organizaciju tako da posjetite: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Uređaj će biti spremljen jedan mjesec te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}one{Uređaj će biti spremljen {MONTHS} mjesec te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}few{Uređaj će biti spremljen {MONTHS} mjeseca te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}other{Uređaj će biti spremljen {MONTHS} mjeseci te se sljedeći put možete povezati bez koda. To postavlja vaš administrator.}}</translation>
 <translation id="4765582662863429759">Omogućuje Android porukama prijenos tekstnih poruka s vašeg telefona na Chromebook</translation>
 <translation id="4766598565665644999">Sva proširenja mogu čitati i mijenjati <ph name="HOST" /></translation>
@@ -4729,6 +4733,7 @@
 <translation id="5407167491482639988">Sadržaj nije razumljiv</translation>
 <translation id="5408750356094797285">Zumiranje: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">S vašeg Google računa</translation>
+<translation id="5411022484772257615">Nije moguće dovršiti upis u školu</translation>
 <translation id="5413640305322530561">Saznajte više o podacima o upotrebi i dijagnostici</translation>
 <translation id="5414198321558177633">Osvježava se popis profila. To može potrajati nekoliko minuta.</translation>
 <translation id="5414566801737831689">čitati ikone posjećenih web-lokacija</translation>
@@ -4978,6 +4983,7 @@
 <translation id="5632059346822207074">Zatraženo je dopuštenje. Da biste odgovorili, pritisnite Ctrl + naprijed</translation>
 <translation id="5632566673632479864">Vaš račun <ph name="EMAIL" /> više nije dopušten kao primarni račun. Budući da tim računom upravlja <ph name="DOMAIN" />, vaše oznake, povijest, zaporke i druge postavke izbrisat će se s ovog uređaja.</translation>
 <translation id="5632592977009207922">Preuzimanje, preostalo je <ph name="PERCENT_REMAINING" />%</translation>
+<translation id="5633149627228920745">Saznajte više o zahtjevima sustava</translation>
 <translation id="563371367637259496">Mobilna mreža</translation>
 <translation id="5634446357546764049">Prikaz uspomena s vaših omiljenih putovanja i još više</translation>
 <translation id="5635312199252507107">Dopusti na određenim web-lokacijama</translation>
@@ -5511,6 +5517,7 @@
 <translation id="6129953537138746214">Razmak</translation>
 <translation id="6130692320435119637">Dodaj Wi-Fi</translation>
 <translation id="6130887916931372608">Tipka tipkovnice</translation>
+<translation id="6132714462430777655">Želite li preskočiti upis u školu?</translation>
 <translation id="6135823405800500595">Telefon vam treba biti blizu, otključan, a Bluetooth i Wi-Fi uključeni.</translation>
 <translation id="6135826623269483856">Nije dopušteno upravljanje prozorima na svim zaslonima</translation>
 <translation id="6136114942382973861">Zatvori traku preuzimanja</translation>
@@ -5669,6 +5676,7 @@
 <translation id="6291949900244949761">Kada web-lokacija želi pristupiti USB uređajima, prikaži upit (preporučeno)</translation>
 <translation id="6291953229176937411">&amp;Prikaži u programu Finder</translation>
 <translation id="6292699686837272722">Kartice se smanjuju na srednju širinu</translation>
+<translation id="6293862149782163840">Uređaj <ph name="DEVICE_NAME" /> se isključuje</translation>
 <translation id="6294759976468837022">Brzina automatskog traženja</translation>
 <translation id="6295158916970320988">Sve web-lokacije</translation>
 <translation id="6295855836753816081">Spremanje...</translation>
@@ -5874,7 +5882,6 @@
 <translation id="6492396476180293140">Interni fotoaparat deaktiviran je hardverskim prekidačem</translation>
 <translation id="6494327278868541139">Prikaži pojedinosti o poboljšanoj zaštiti</translation>
 <translation id="6494445798847293442">Nije tijelo za izdavanje certifikata</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Ovi podaci imaju osjetljiv ili opasan sadržaj}=1{Ova datoteka ima osjetljiv ili opasan sadržaj}one{Ove datoteke imaju osjetljiv ili opasan sadržaj}few{Ove datoteke imaju osjetljiv ili opasan sadržaj}other{Ove datoteke imaju osjetljiv ili opasan sadržaj}}</translation>
 <translation id="6497548114956205206">Saznajte više o štednji energije</translation>
 <translation id="6497784818439587832">Promijenite veličinu prikaza kako bi stavke na zaslonu bile manje ili veće</translation>
 <translation id="6497789971060331894">Obrnuto pomicanje pomoću miša</translation>
@@ -6024,7 +6031,6 @@
 <translation id="6621391692573306628">Da biste poslali ovu karticu na drugi uređaj, prijavite se na Chrome na oba uređaja</translation>
 <translation id="6622980291894852883">Nastavi blokirati slike</translation>
 <translation id="6624036901798307345">U načinu rada tableta dodirnite na gumb alatne trake brojača kartica da biste otvorili novu vrpcu kartica koja prikazuje minijature svake kartice.</translation>
-<translation id="6624535038674360844">Datoteka <ph name="FILE_NAME" /> ima osjetljiv ili opasan sadržaj. Recite vlasniku da ispravi pogrešku.</translation>
 <translation id="6624687053722465643">Slastica</translation>
 <translation id="6628328486509726751">Preneseno u <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Snažnija zaštita</translation>
@@ -6736,6 +6742,7 @@
 <translation id="7310598146671372464">Prijava nije uspjela. Poslužitelj ne podržava navedene vrste enkripcije Kerberos. Obratite se administratoru.</translation>
 <translation id="7311089766378749632">Zahtijevanje čitanja i promjene web-lokacije <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">Vaš administrator vraća vaš eSIM na zadano. To može potrajati nekoliko minuta.</translation>
+<translation id="7317831949569936035">Upis u školu</translation>
 <translation id="7320213904474460808">Postavljanje mreže kao zadane</translation>
 <translation id="7321545336522791733">Poslužitelj nije dostupan</translation>
 <translation id="7323315405936922211">Veličina područja pokazivača</translation>
@@ -8331,6 +8338,7 @@
 <translation id="8785622406424941542">Pisaljka</translation>
 <translation id="8786824282808281903">Kada vaše dijete vidi tu ikonu, otiskom prsta moći će potvrditi svoj identitet ili odobriti kupnje.</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{Neimenovana grupa – 1 kartica}one{Neimenovana grupa – # kartica}few{Neimenovana grupa – # kartice}other{Neimenovana grupa – # kartica}}</translation>
+<translation id="8791157330927639737">Saznajte više o ažuriranju</translation>
 <translation id="8791534160414513928">Pošalji zahtjev "Nemoj pratiti" uz promet pregledavanja</translation>
 <translation id="879413103056696865">Dok je žarišna točka uključena, vaš će <ph name="PHONE_NAME" />:</translation>
 <translation id="8795916974678578410">Novi prozor</translation>
@@ -8486,6 +8494,7 @@
 <translation id="8940081510938872932">Vaše računalo trenutačno radi previše stvari. Pokušajte ponovo kasnije.</translation>
 <translation id="8940381019874223173">S vaših Google fotografija</translation>
 <translation id="8941173171815156065">Opoziv dopuštenja "<ph name="PERMISSION" />"</translation>
+<translation id="8941688920560496412">Uređaj <ph name="DEVICE_NAME" /> je isključen</translation>
 <translation id="894191600409472540">Izradite snažne zaporke</translation>
 <translation id="894360074127026135">Netscape međunarodni iskorak</translation>
 <translation id="8944099748578356325">brže trošiti bateriju (trenutačno <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index 14c760d..4e2fcecc 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -918,7 +918,6 @@
 <translation id="1819721979226826163">Koppintson az Alkalmazásértesítések &gt; Google Play-szolgáltatások menüpontra.</translation>
 <translation id="1820028137326691631">Adja meg a rendszergazdától kapott jelszót</translation>
 <translation id="1822140782238030981">Már Chrome-felhasználó? Jelentkezzen be</translation>
-<translation id="1823098433522728610">Ebben a dokumentumban bizalmas tartalom található.</translation>
 <translation id="18245044880483936">A biztonsági másolat adatmennyisége nem számít bele gyermeke Drive-tárhelykvótájába.</translation>
 <translation id="1825565032302550710">A port számának 1024 és 65535 között kell lennie</translation>
 <translation id="182577151972096764">nemrégiben megtekintett receptek</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2743301740238894839">Kezdés</translation>
 <translation id="2743387203779672305">Másolás a vágólapra</translation>
 <translation id="2745080116229976798">Microsoft minősített altanúsítvány-kibocsátók</translation>
-<translation id="2747266560080989517">Ebben a fájlban bizalmas vagy veszélyes tartalom található. Kérje meg a tulajdonost, hogy küszöbölje ki ezt a problémát.</translation>
 <translation id="2749756011735116528">Bejelentkezés a <ph name="PRODUCT_NAME" />-ba</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Nyelvhelyesség és helyesírás ellenőrzése</translation>
@@ -2549,7 +2547,6 @@
 <translation id="3317459757438853210">Kétoldalas</translation>
 <translation id="3317678681329786349">Kamera és mikrofon letiltva</translation>
 <translation id="3320630259304269485">Biztonságos Böngészés (védelem a veszélyes webhelyekkel szemben) és más biztonsági beállítások.</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Ezekben az adatokban bizalmas vagy veszélyes tartalom található. Távolítsa el ezt a tartalmat, majd próbálkozzon újra.}=1{Ebben a fájlban bizalmas vagy veszélyes tartalom található. Távolítsa el ezt a tartalmat, majd próbálkozzon újra.}other{Ezekben a fájlokban bizalmas vagy veszélyes tartalom található. Távolítsa el ezt a tartalmat, majd próbálkozzon újra.}}</translation>
 <translation id="3323521181261657960">Jutalom! Több ideig használhatod az eszközt</translation>
 <translation id="3323577066981719144">Az itt végrehajtott módosítások csak a Chrome böngészőt érintik. A Lacros Chrome böngésző beállításainak módosításához a Lacros Chrome böngészőt nyissa meg, majd lépjen a beállításokra.</translation>
 <translation id="3325804108816646710">Rendelkezésre álló profilok keresése…</translation>
@@ -2683,7 +2680,6 @@
 <translation id="3445925074670675829">C típusú USB-vel kompatibilis eszköz</translation>
 <translation id="3446274660183028131">A Windows telepítéséhez indítsa el a Parallels Desktop alkalmazást.</translation>
 <translation id="344630545793878684">Adatok beolvasása számos webhelyen</translation>
-<translation id="3446650212859500694">Ebben a fájlban bizalmas tartalom található.</translation>
 <translation id="3447644283769633681">Az összes harmadik féltől származó cookie tiltása</translation>
 <translation id="3448492834076427715">Fiók frissítése</translation>
 <translation id="3449393517661170867">Új ablak lapokkal</translation>
@@ -3915,7 +3911,6 @@
 <translation id="4602466770786743961">A(z) <ph name="HOST" /> mindig hozzáférhet a kamerához és mikrofonhoz</translation>
 <translation id="4606551464649945562">A webhelyek nem készíthetnek 3D-s térképet az Ön környezetéről, valamint nem követhetik a kamera pozícióját</translation>
 <translation id="4608500690299898628">&amp;Keresés...</translation>
-<translation id="4608703838363792434">A(z) <ph name="FILE_NAME" /> fájlban bizalmas tartalom található.</translation>
 <translation id="4609987916561367134">Használhatják a JavaScriptet</translation>
 <translation id="4610162781778310380">A(z) <ph name="PLUGIN_NAME" /> hibába ütközött</translation>
 <translation id="4610637590575890427">Valójában ide szeretett volna menni: <ph name="SITE" />?</translation>
@@ -5890,7 +5885,6 @@
 <translation id="6492396476180293140">A belső kamerát inaktiválta a hardveres kapcsoló</translation>
 <translation id="6494327278868541139">Speciális védelem részleteinek megjelenítése</translation>
 <translation id="6494445798847293442">Nem tanúsítványkibocsátó</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Ezekben az adatokban bizalmas vagy veszélyes tartalom található.}=1{Ebben a fájlban bizalmas vagy veszélyes tartalom található.}other{Ezekben a fájlokban bizalmas vagy veszélyes tartalom található.}}</translation>
 <translation id="6497548114956205206">További információ az Energiatakarékos módról</translation>
 <translation id="6497784818439587832">Módosíthatja a megjelenítési méretet, ha azt szeretné, hogy kisebbek vagy nagyobbak legyenek a képernyőn megjelenő elemek.</translation>
 <translation id="6497789971060331894">Fordított görgetés az egérrel</translation>
@@ -6036,7 +6030,6 @@
 <translation id="6621391692573306628">A lap másik eszközre való elküldéséhez jelentkezzen be a Chrome-ba mindkét eszközön</translation>
 <translation id="6622980291894852883">Képek letiltásának fenntartása</translation>
 <translation id="6624036901798307345">Táblagép módban kattintson az eszköztár lapszámláló gombjára: ekkor az egyes lapok indexképeit megjelenítő új lapsor nyílik meg.</translation>
-<translation id="6624535038674360844">A(z) <ph name="FILE_NAME" /> fájlban bizalmas vagy veszélyes tartalom található. Kérje meg a tulajdonost, hogy küszöbölje ki ezt a problémát.</translation>
 <translation id="6624687053722465643">Édesség</translation>
 <translation id="6628328486509726751">Feltöltve ekkor: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Nagyobb biztonság</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index b07bc8e..ae8fdd6 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -909,7 +909,6 @@
 <translation id="1819721979226826163">Հպեք Հավելվածների ծանուցումներ &gt; Google Play ծառայություններ։</translation>
 <translation id="1820028137326691631">Մուտքագրեք ադմինիստրատորի տրամադրած գաղտնաբառը</translation>
 <translation id="1822140782238030981">Արդեն օգտվո՞ւմ եք Chrome-ից։ Մուտք գործեք հաշիվ։</translation>
-<translation id="1823098433522728610">Այս փաստաթուղթը պարունակում է գաղտնի բովանդակություն։</translation>
 <translation id="18245044880483936">Պահուստավորված տվյալները տեղ չեն զբաղեցնում ձեր երեխայի Google Drive-ի տարածքում։</translation>
 <translation id="1825565032302550710">Միացքը պետք է լինի 1024 – 65535 միջակայքում</translation>
 <translation id="182577151972096764">վերջերս դիտված բաղադրատոմսեր</translation>
@@ -1942,7 +1941,6 @@
 <translation id="2743301740238894839">Սկսել</translation>
 <translation id="2743387203779672305">Պատճենել սեղմատախտակին</translation>
 <translation id="2745080116229976798">Microsoft որակավորված ստորակարգություն</translation>
-<translation id="2747266560080989517">Այս ֆայլը պարունակում է խիստ անձնական կամ վտանգավոր բովանդակություն։ Խնդրեք սեփականատիրոջը շտկել այդ խնդիրը։</translation>
 <translation id="2749756011735116528">Մուտք գործել <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Check Grammar With Spelling</translation>
@@ -2537,7 +2535,6 @@
 <translation id="3317459757438853210">Երկկողմանի</translation>
 <translation id="3317678681329786349">Տեսախցիկի ու խոսափողի օգտագործումն արգելված է</translation>
 <translation id="3320630259304269485">Ապահով դիտարկում (պաշտպանություն վտանգավոր կայքերից) և անվտանգության այլ կարգավորումներ։</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Այս տվյալները պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն։ Հեռացրեք այս բովանդակությունն ու նորից փորձեք։}=1{Այս ֆայլը պարունակում է խիստ անձնական կամ վտանգավոր բովանդակություն։ Հեռացրեք այս բովանդակությունն ու նորից փորձեք։}one{Այս ֆայլերը պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն։ Հեռացրեք այս բովանդակությունն ու նորից փորձեք։}other{Այս ֆայլերը պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն։ Հեռացրեք այս բովանդակությունն ու նորից փորձեք։}}</translation>
 <translation id="3323521181261657960">Սարքի օգտագործման ժամանակն ավելացվել է</translation>
 <translation id="3323577066981719144">Այստեղ արված փոփոխությունները կիրառվում են միայն Chrome դիտարկիչում։ Lacros Chrome դիտարկիչի կարգավորումները փոխելու համար բացեք Lacros Chrome-ը և անցեք կարգավորումներ։</translation>
 <translation id="3325804108816646710">Հասանելի պրոֆիլների որոնում…</translation>
@@ -2671,7 +2668,6 @@
 <translation id="3445925074670675829">USB-C սարք</translation>
 <translation id="3446274660183028131">Windows-ը տեղադրելու համար գործարկեք Parallels Desktop-ը։</translation>
 <translation id="344630545793878684">Կարդալ ձեր տվյալները մի շարք կայքերում</translation>
-<translation id="3446650212859500694">Այս ֆայլը պարունակում է խիստ անձնական բովանդակություն</translation>
 <translation id="3447644283769633681">Բոլոր կողմնակի քուքիների արգելափակում</translation>
 <translation id="3448492834076427715">Թարմացնել հաշիվը</translation>
 <translation id="3449393517661170867">Նոր ներդիրով պատուհան</translation>
@@ -3903,7 +3899,6 @@
 <translation id="4602466770786743961">Միշտ թույլ տալ <ph name="HOST" />-ին օգտագործել ձեր խոսափողը</translation>
 <translation id="4606551464649945562">Թույլ չտալ կայքերին ստեղծել շրջակայքի եռաչափ քարտեզը և հետագծել տեսախցիկի դիրքը</translation>
 <translation id="4608500690299898628">&amp;Գտնել…</translation>
-<translation id="4608703838363792434">«<ph name="FILE_NAME" />» ֆայլը պարունակում է խիստ անձնական բովանդակություն</translation>
 <translation id="4609987916561367134">Թույլատրվում է օգտագործել JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> փլագինում սխալ է առաջացել</translation>
 <translation id="4610637590575890427">Արդյո՞ք ուզում էիք այցելել <ph name="SITE" /> կայքը:</translation>
@@ -5876,7 +5871,6 @@
 <translation id="6492396476180293140">Ներքին տեսախցիկն ապակտիվացվել է սարքակազմի փոխանջատիչի միջոցով</translation>
 <translation id="6494327278868541139">Ցույց տալ լրացուցիչ պաշտպանության մանրամասն նկարագրությունը</translation>
 <translation id="6494445798847293442">Հավաստագրման կենտրոն չէ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Այս տվյալները պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն}=1{Այս ֆայլը պարունակում է խիստ անձնական կամ վտանգավոր բովանդակություն}one{Այս ֆայլերը պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն}other{Այս ֆայլերը պարունակում են խիստ անձնական կամ վտանգավոր բովանդակություն}}</translation>
 <translation id="6497548114956205206">Իմանալ ավելին էներգիայի տնտեսման մասին</translation>
 <translation id="6497784818439587832">Փոխեք էկրանի չափը՝ տարրերը ավելի մեծ կամ ավելի փոքր դարձնելու համար</translation>
 <translation id="6497789971060331894">Մկնիկով հետադարձ ոլորում</translation>
@@ -6024,7 +6018,6 @@
 <translation id="6621391692573306628">Այս ներդիրը մեկ այլ սարք ուղարկելու համար մուտք գործեք Chrome երկու սարքերում էլ</translation>
 <translation id="6622980291894852883">Շարունակել պատկերների արգելափակումը</translation>
 <translation id="6624036901798307345">Պլանշետի ռեժիմում սեղմեք ներդիրների հաշվիչի կոճակը գործիքագոտում՝ բացելու նոր ներդիրների հատվածը, որը ցույց է տալիս բոլոր ներդիրների մանրապատկերները։</translation>
-<translation id="6624535038674360844">«<ph name="FILE_NAME" />» ֆայլը պարունակում է խիստ անձնական կամ վտանգավոր բովանդակություն։ Խնդրեք սեփականատիրոջը շտկել այդ խնդիրը։</translation>
 <translation id="6624687053722465643">Քաղցրավենիք</translation>
 <translation id="6628328486509726751">Վերբեռնված է` <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Ուժեղացված պաշտպանություն</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 5417490..c788722 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -918,7 +918,6 @@
 <translation id="1819721979226826163">Ketuk Notifikasi aplikasi &gt; Layanan Google Play.</translation>
 <translation id="1820028137326691631">Masukkan sandi yang disediakan admin</translation>
 <translation id="1822140782238030981">Sudah menjadi pengguna Chrome? Login</translation>
-<translation id="1823098433522728610">Dokumen ini berisi konten sensitif.</translation>
 <translation id="18245044880483936">Data cadangan tidak akan mengurangi kuota penyimpanan Drive anak Anda.</translation>
 <translation id="1825565032302550710">Port harus antara 1024 dan 65535</translation>
 <translation id="182577151972096764">resep yang dilihat baru-baru ini</translation>
@@ -1955,7 +1954,6 @@
 <translation id="2743301740238894839">Mulai</translation>
 <translation id="2743387203779672305">Salin ke papan klip</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">File ini berisi konten sensitif atau berbahaya. Minta pemiliknya untuk memperbaiki.</translation>
 <translation id="2749756011735116528">Login ke <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Periksa Grammar Dengan Ejaaan</translation>
@@ -2550,7 +2548,6 @@
 <translation id="3317459757438853210">Dua sisi</translation>
 <translation id="3317678681329786349">Kamera dan mikrofon diblokir</translation>
 <translation id="3320630259304269485">Safe Browsing (perlindungan dari situs berbahaya) dan setelan keamanan lainnya</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Data ini berisi konten sensitif atau berbahaya. Hapus konten ini dan coba lagi.}=1{File ini berisi konten sensitif atau berbahaya. Hapus konten ini dan coba lagi.}other{File ini berisi konten sensitif atau berbahaya. Hapus konten ini dan coba lagi.}}</translation>
 <translation id="3323521181261657960">Bonus! Kamu boleh memakainya lebih lama</translation>
 <translation id="3323577066981719144">Perubahan yang Anda buat di sini hanya akan diterapkan ke Browser Chrome. Untuk membuat perubahan ke setelan Browser Chrome Lacros, buka Browser Chrome Lacros lalu buka setelan.</translation>
 <translation id="3325804108816646710">Mencari profil yang tersedia ...</translation>
@@ -2684,7 +2681,6 @@
 <translation id="3445925074670675829">Perangkat USB-C</translation>
 <translation id="3446274660183028131">Luncurkan Parallels Desktop untuk menginstal Windows.</translation>
 <translation id="344630545793878684">Membaca data Anda di sejumlah situs</translation>
-<translation id="3446650212859500694">File ini berisi konten sensitif</translation>
 <translation id="3447644283769633681">Cekal semua cookie pihak ketiga</translation>
 <translation id="3448492834076427715">Perbarui akun</translation>
 <translation id="3449393517661170867">Jendela dengan tab baru</translation>
@@ -3917,7 +3913,6 @@
 <translation id="4602466770786743961">Selalu izinkan <ph name="HOST" /> mengakses kamera dan mikrofon Anda</translation>
 <translation id="4606551464649945562">Jangan izinkan situs membuat peta 3D untuk area di sekeliling Anda atau melacak posisi kamera</translation>
 <translation id="4608500690299898628">&amp;Temukan...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> berisi konten sensitif</translation>
 <translation id="4609987916561367134">Diizinkan menggunakan JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> telah mengalami error</translation>
 <translation id="4610637590575890427">Apakah maksud Anda ingin mengunjungi <ph name="SITE" />?</translation>
@@ -5890,7 +5885,6 @@
 <translation id="6492396476180293140">Kamera internal dinonaktifkan oleh tombol hardware</translation>
 <translation id="6494327278868541139">Tampilkan detail perlindungan yang ditingkatkan</translation>
 <translation id="6494445798847293442">Bukan Otoritas Sertifikasi</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Data ini berisi konten sensitif atau berbahaya}=1{File ini berisi konten sensitif atau berbahaya}other{File ini berisi konten sensitif atau berbahaya}}</translation>
 <translation id="6497548114956205206">Pelajari penghemat energi lebih lanjut</translation>
 <translation id="6497784818439587832">Ubah ukuran layar untuk membuat item di layar menjadi lebih besar atau lebih kecil</translation>
 <translation id="6497789971060331894">Scroll terbalik mouse</translation>
@@ -6036,7 +6030,6 @@
 <translation id="6621391692573306628">Untuk mengirim tab ini ke perangkat lain, login ke Chrome di kedua perangkat</translation>
 <translation id="6622980291894852883">Lanjutkan mencekal gambar</translation>
 <translation id="6624036901798307345">Dalam mode tablet, ketuk tombol toolbar penghitung tab untuk membuka tab setrip baru yang menampilkan thumbnail setiap tab.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> berisi konten sensitif atau berbahaya. Minta pemiliknya untuk memperbaiki.</translation>
 <translation id="6624687053722465643">Legit</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> yang diupload</translation>
 <translation id="6630117778953264026">Keamanan yang lebih kuat</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 66366f00..5b62f92 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -919,7 +919,6 @@
 <translation id="1819721979226826163">Ýttu á Forritatilkynningar &gt; Þjónusta Google Play.</translation>
 <translation id="1820028137326691631">Sláðu inn aðgangsorð frá kerfisstjóra</translation>
 <translation id="1822140782238030981">Ertu nú þegar að nota Chrome? Skráðu þig inn</translation>
-<translation id="1823098433522728610">Þetta skjal inniheldur viðkvæmt efni.</translation>
 <translation id="18245044880483936">Afrituð gögn eru ekki talin með í geymsluplássi barnsins á Drive.</translation>
 <translation id="1825565032302550710">Gátt verður að vera á milli 1024 og 65535</translation>
 <translation id="182577151972096764">nýlega skoðaðar uppskriftir</translation>
@@ -1955,8 +1954,8 @@
 <translation id="274318651891194348">Leitar að lyklaborði</translation>
 <translation id="2743301740238894839">Hefja</translation>
 <translation id="2743387203779672305">Afrita á klippiborð</translation>
+<translation id="274362947316498129">Forrit er að reyna að opna <ph name="DEVICE_NAME" />. Slökktu á persónuverndarrofa fyrir <ph name="DEVICE_NAME" /> til að veita aðgang.</translation>
 <translation id="2745080116229976798">Microsoft-vottuð skipan</translation>
-<translation id="2747266560080989517">Þessi skrá inniheldur viðkvæmt eða hættulegt efni. Biddu eiganda hennar um að laga vandamálið.</translation>
 <translation id="2749756011735116528">Skráðu þig inn á <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Athuga málfræði og stafsetningu</translation>
@@ -2551,7 +2550,6 @@
 <translation id="3317459757438853210">Tvíhliða</translation>
 <translation id="3317678681329786349">Lokað á myndavél og hljóðnema</translation>
 <translation id="3320630259304269485">Örugg vefskoðun (vörn gegn hættulegum vefsvæðum) og aðrar öryggisstillingar</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Þessi gögn innihalda viðkvæmt eða hættulegt efni. Fjarlægðu þetta efni og reyndu aftur.}=1{Þessi skrá inniheldur viðkvæmt eða hættulegt efni. Fjarlægðu þetta efni og reyndu aftur.}one{Þessar skrár innihalda viðkvæmt eða hættulegt efni. Fjarlægðu þetta efni og reyndu aftur.}other{Þessar skrár innihalda viðkvæmt eða hættulegt efni. Fjarlægðu þetta efni og reyndu aftur.}}</translation>
 <translation id="3323521181261657960">Bónus! Þú fékkst meiri skjátíma</translation>
 <translation id="3323577066981719144">Breytingar sem þú gerir hér eiga eingöngu við um Chrome vafra. Opnaðu Lacros Chrome vafrann og farðu í stillingar til að breyta stillingum Lacros Chrome vafrans.</translation>
 <translation id="3325804108816646710">Leitar að tiltækum prófílum...</translation>
@@ -2685,7 +2683,6 @@
 <translation id="3445925074670675829">USB-C-tæki</translation>
 <translation id="3446274660183028131">Ræstu Parallels Desktop til að setja upp Windows.</translation>
 <translation id="344630545793878684">Lesa gögnin þín á fjölda vefsvæða</translation>
-<translation id="3446650212859500694">Skráin inniheldur viðkvæmt efni</translation>
 <translation id="3447644283769633681">Útiloka öll fótspor þriðju aðila</translation>
 <translation id="3448492834076427715">Uppfæra reikning</translation>
 <translation id="3449393517661170867">Nýr flipagluggi</translation>
@@ -3127,6 +3124,7 @@
 <translation id="385051799172605136">Til baka</translation>
 <translation id="3851428669031642514">Hlaða ótraustar skriftur</translation>
 <translation id="3852215160863921508">Innsláttaraðstoð</translation>
+<translation id="3853549894831560772">Kveikt er á <ph name="DEVICE_NAME" /></translation>
 <translation id="3854599674806204102">Veldu valkost</translation>
 <translation id="3854967233147778866">Bjóðast til að þýða vefsvæði yfir á önnur tungumál</translation>
 <translation id="3854976556788175030">Prentbakkinn er fullur</translation>
@@ -3460,6 +3458,7 @@
 <translation id="4163560723127662357">Óþekkt lyklaborð</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> tilheyrir ekki gildu fyrirtæki. Hafðu samband við kerfisstjórann þinn. Ef þú ert kerfisstjóri geturðu sett upp fyrirtækið þitt á: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Vefsvæðastillingar</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> er að reyna að opna <ph name="DEVICE_NAME" />. Slökktu á persónuverndarrofa fyrir <ph name="DEVICE_NAME" /> til að veita aðgang.</translation>
 <translation id="4167393659000039775">Google ber enga ábyrgð á gagnatapi af nokkrum toga og <ph name="DEVICE_OS" /> virkar hugsanlega ekki í óvottuðum tækjum. Nánar á g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Vefsvæði nota yfirleitt JavaScript til að sýna gagnvirka eiginleika eins og tölvuleiki eða vefeyðublöð</translation>
 <translation id="4168015872538332605">Verið er að deila með þér einhverjum stillingum sem tilheyra <ph name="PRIMARY_EMAIL" />. Þessar stillingar hafa einungis áhrif á reikninginn þinn þegar innskráning á marga reikninga er notuð.</translation>
@@ -3918,11 +3917,11 @@
 <translation id="4602466770786743961">Veita <ph name="HOST" /> alltaf aðgang að myndavélinni og hljóðnemanum</translation>
 <translation id="4606551464649945562">Ekki leyfa vefsvæðum að búa til þrívíddarkort af umhverfinu eða rekja staðsetningu myndavélarinnar</translation>
 <translation id="4608500690299898628">&amp;Finna...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> inniheldur viðkvæmt efni</translation>
 <translation id="4609987916561367134">Mega nota JavaScript</translation>
 <translation id="4610162781778310380">Villa kom upp í <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Ætlaðirðu að fara á <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Gagnatenging í boði</translation>
+<translation id="4612841084470706111">Veita aðgang að öllum umbeðnum vefsvæðum.</translation>
 <translation id="4613144866899789710">Hættir við Linux-uppsetningu...</translation>
 <translation id="4613271546271159013">Viðbót hefur breytt því hvaða síða birtist þegar þú opnar nýjan flipa.</translation>
 <translation id="4615586811063744755">ekkert fótspor valið</translation>
@@ -5686,6 +5685,7 @@
 <translation id="6291949900244949761">Spyrja þegar vefsvæði vill opna USB-tæki (ráðlagt)</translation>
 <translation id="6291953229176937411">&amp;Sýna í Finder</translation>
 <translation id="6292699686837272722">Flipar minnka í miðlungsbreidd</translation>
+<translation id="6293862149782163840">Slökkt er á <ph name="DEVICE_NAME" /></translation>
 <translation id="6294759976468837022">Hraði sjálfvirkrar skönnunar</translation>
 <translation id="6295158916970320988">Öll vefsvæði</translation>
 <translation id="6295855836753816081">Vistar...</translation>
@@ -5891,7 +5891,6 @@
 <translation id="6492396476180293140">Innbyggð myndavél gerð óvirk með vélbúnaðarrofa</translation>
 <translation id="6494327278868541139">Sýna upplýsingar um aukna vernd</translation>
 <translation id="6494445798847293442">Ekki vottunarstöð</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Þessi gögn innihalda viðkvæmt eða hættulegt efni}=1{Þessi skrá inniheldur viðkvæmt eða hættulegt efni}one{Þessar skrár innihalda viðkvæmt eða hættulegt efni}other{Þessar skrár innihalda viðkvæmt eða hættulegt efni}}</translation>
 <translation id="6497548114956205206">Nánar um orkusparnað</translation>
 <translation id="6497784818439587832">Breyta skjástærð til að minnka eða stækka atriði á skjánum</translation>
 <translation id="6497789971060331894">Öfug fletting músar</translation>
@@ -6039,7 +6038,6 @@
 <translation id="6621391692573306628">Til að senda þennan flipa í annað tæki þarftu að skrá þig inn í Chrome í báðum tækjum</translation>
 <translation id="6622980291894852883">Halda áfram að útiloka myndir</translation>
 <translation id="6624036901798307345">Í spjaldtölvustillingu skaltu ýta á tækjastikuhnapp flipateljara til að opna nýja fliparæmu sem birtir smámyndir af hverjum flipa.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> inniheldur viðkvæmt eða hættulegt efni. Biddu eiganda hennar um að laga vandamálið.</translation>
 <translation id="6624687053722465643">Sætabrauð</translation>
 <translation id="6628328486509726751">Hlaðið inn <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Sterkara öryggi</translation>
@@ -8499,6 +8497,7 @@
 <translation id="8940081510938872932">Tölvan er að gera of margt í einu sem stendur. Reyndu aftur síðar.</translation>
 <translation id="8940381019874223173">Úr Google myndum</translation>
 <translation id="8941173171815156065">Afturkalla heimildina „<ph name="PERMISSION" />“'</translation>
+<translation id="8941688920560496412">Slökkt er á <ph name="DEVICE_NAME" /></translation>
 <translation id="894191600409472540">Búðu til traust aðgangsorð</translation>
 <translation id="894360074127026135">Alþjóðleg uppreiknun Netscape</translation>
 <translation id="8944099748578356325">Nota rafhlöðu hraðar (<ph name="BATTERY_PERCENTAGE" />% að svo stöddu)</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 2d28910..74d73e31 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -907,7 +907,6 @@
 <translation id="1819721979226826163">Tocca Notifiche app &gt; Google Play Services.</translation>
 <translation id="1820028137326691631">Inserisci la password fornita dall'amministratore</translation>
 <translation id="1822140782238030981">Sei già un utente di Chrome? Accedi</translation>
-<translation id="1823098433522728610">Questo documento include contenuti sensibili.</translation>
 <translation id="18245044880483936">I dati di backup non incidono sulla quota di spazio di archiviazione di Drive di tuo figlio.</translation>
 <translation id="1825565032302550710">La porta deve avere un valore compreso tra 1024 e 65535</translation>
 <translation id="182577151972096764">ricette visualizzate di recente</translation>
@@ -1115,7 +1114,7 @@
 <translation id="2019718679933488176">&amp;Apri audio in un'altra scheda</translation>
 <translation id="2020183425253392403">Mostra impostazioni indirizzi di rete</translation>
 <translation id="2020225359413970060">Esegui la scansione del file</translation>
-<translation id="2023167225947895179">Il PIN potrebbe essere facile da scoprire</translation>
+<translation id="2023167225947895179">Il PIN potrebbe essere facile da indovinare</translation>
 <translation id="202352106777823113">Il download stava richiedendo troppo tempo ed è stato interrotto dalla rete.</translation>
 <translation id="2024195579772565064">Elimina motore di ricerca</translation>
 <translation id="2025632980034333559">Arresto anomalo di <ph name="APP_NAME" />. Fai clic su questo fumetto per riavviare l'estensione.</translation>
@@ -1940,7 +1939,6 @@
 <translation id="2743301740238894839">Inizia</translation>
 <translation id="2743387203779672305">Copia negli appunti</translation>
 <translation id="2745080116229976798">Subordinazione qualificata Microsoft</translation>
-<translation id="2747266560080989517">Questo file include contenuti sensibili o pericolosi. Chiedi al proprietario di risolvere il problema.</translation>
 <translation id="2749756011735116528">Accedi a <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Controllo ortografia e grammatica</translation>
@@ -2535,7 +2533,6 @@
 <translation id="3317459757438853210">Fronte retro</translation>
 <translation id="3317678681329786349">Videocamera e microfono bloccati</translation>
 <translation id="3320630259304269485">Impostazioni di Navigazione sicura (protezione da siti pericolosi) e altre impostazioni di sicurezza</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Questi dati includono contenuti sensibili o pericolosi. Rimuovi questi contenuti e riprova.}=1{Questo file include contenuti sensibili o pericolosi. Rimuovi questi contenuti e riprova.}other{Questi file includono contenuti sensibili o pericolosi. Rimuovi questi contenuti e riprova.}}</translation>
 <translation id="3323521181261657960">Premio! Hai più tempo di utilizzo</translation>
 <translation id="3323577066981719144">Le modifiche che apporti qui vengono applicate soltanto al browser Chrome. Per apportare modifiche alle impostazioni del browser Lacros, aprilo e vai alle impostazioni.</translation>
 <translation id="3325804108816646710">Ricerca di profili disponibili in corso…</translation>
@@ -2669,7 +2666,6 @@
 <translation id="3445925074670675829">Dispositivo USB-C</translation>
 <translation id="3446274660183028131">Avvia Parallels Desktop per installare Windows.</translation>
 <translation id="344630545793878684">Lettura dei dati su una serie di siti web</translation>
-<translation id="3446650212859500694">Questo file include contenuti sensibili</translation>
 <translation id="3447644283769633681">Blocca tutti i cookie di terze parti</translation>
 <translation id="3448492834076427715">Aggiorna account</translation>
 <translation id="3449393517661170867">Nuova finestra a schede</translation>
@@ -3901,7 +3897,6 @@
 <translation id="4602466770786743961">Consenti sempre a <ph name="HOST" /> di accedere alla webcam e al microfono</translation>
 <translation id="4606551464649945562">Non consentire ai siti di creare una mappa 3D dell'ambiente circostante o di monitorare la posizione della fotocamera</translation>
 <translation id="4608500690299898628">&amp;Trova...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> include contenuti sensibili</translation>
 <translation id="4609987916561367134">Possono utilizzare JavaScript</translation>
 <translation id="4610162781778310380">Si è verificato un errore in <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Forse intendevi accedere a <ph name="SITE" />?</translation>
@@ -5871,7 +5866,6 @@
 <translation id="6492396476180293140">Fotocamera interna disattivata tramite interruttore hardware</translation>
 <translation id="6494327278868541139">Mostra dettagli della protezione avanzata</translation>
 <translation id="6494445798847293442">Non è un'autorità di certificazione</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Questi dati includono contenuti sensibili o pericolosi}=1{Questo file include contenuti sensibili o pericolosi}other{Questi file includono contenuti sensibili o pericolosi}}</translation>
 <translation id="6497548114956205206">Scopri di più sulla modalità Risparmio energetico</translation>
 <translation id="6497784818439587832">Modifica le dimensioni del display per ingrandire o ridurre gli elementi visualizzati sullo schermo</translation>
 <translation id="6497789971060331894">Scorrimento invertito del mouse</translation>
@@ -6017,7 +6011,6 @@
 <translation id="6621391692573306628">Per inviare questa scheda a un altro dispositivo, accedi a Chrome su entrambi i dispositivi</translation>
 <translation id="6622980291894852883">Continua a bloccare le immagini</translation>
 <translation id="6624036901798307345">In modalità tablet, tocca il pulsante della barra degli strumenti del contatore di schede per aprire una nuova tabstrip che mostra le miniature di ogni scheda.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> include contenuti sensibili o pericolosi. Chiedi al proprietario di risolvere il problema.</translation>
 <translation id="6624687053722465643">Dolcezza</translation>
 <translation id="6628328486509726751">Data/ora caricamento: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Sicurezza maggiore</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index b5c8cf48..4231c6e 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -459,6 +459,7 @@
            • תמחק קובצי cookie ונתוני אתר זמניים אחרים
             <ph name="LINE_BREAKS" />
            סימניות, היסטוריה וסיסמאות שמורות לא יושפעו.</translation>
+<translation id="1425040197660226913">‏לא ניתן להעלות את הקובץ. גודל התמונה צריך להיות פחות מ-20MB.</translation>
 <translation id="1426410128494586442">כן</translation>
 <translation id="142655739075382478">האפליקציה <ph name="APP_NAME" /> חסומה</translation>
 <translation id="1426870617281699524">יש ללחוץ על 'ניסיון נוסף' ולאשר את הבקשה במחשב.</translation>
@@ -583,6 +584,7 @@
 <translation id="1545177026077493356">מצב קיוסק אוטומטי</translation>
 <translation id="1545749641540134597">‏סריקת קוד QR</translation>
 <translation id="1545775234664667895">נושא שהותקן "<ph name="THEME_NAME" />"</translation>
+<translation id="1546031833947068368">{COUNT,plural, =1{החלון הפרטי לא ייפתח מחדש.}two{# החלונות הפרטיים לא ייפתחו מחדש.}many{# החלונות הפרטיים לא ייפתחו מחדש.}other{# החלונות הפרטיים לא ייפתחו מחדש.}}</translation>
 <translation id="1546280085599573572">התוסף הזה שינה את הדף שמוצג כשלוחצים על הלחצן 'דף הבית'.</translation>
 <translation id="1546452108651444655"><ph name="CHILD_NAME" /> רוצה להתקין <ph name="EXTENSION_TYPE" /> שיכול:</translation>
 <translation id="1547808936554660006">‏ברור לי שפרופילי ה-eSIM שהותקנו לא יוסרו על ידי Powerwash</translation>
@@ -912,7 +914,6 @@
 <translation id="1819721979226826163">‏מקישים על 'הודעות אפליקציה' &gt; 'שירותי Google Play'.</translation>
 <translation id="1820028137326691631">הזנת סיסמה שהתקבלה ממנהל המערכת</translation>
 <translation id="1822140782238030981">‏כבר נרשמת ל-Chrome? אפשר להיכנס לחשבון</translation>
-<translation id="1823098433522728610">המסמך הזה מכיל תוכן רגיש.</translation>
 <translation id="18245044880483936">‏נתוני הגיבוי לא נחשבים כחלק ממכסת האחסון של הילד או הילדה ב-Drive.</translation>
 <translation id="1825565032302550710">היציאה חייבת להיות בין 1024 ל-65535</translation>
 <translation id="182577151972096764">מתכונים שצפית בהם לאחרונה</translation>
@@ -1013,6 +1014,7 @@
 <translation id="1908591798274282246">פתיחה מחדש של קבוצה שנסגרה</translation>
 <translation id="1909880997794698664">ברצונך באמת להשאיר מכשיר זה במצב קיוסק באופן קבוע?</translation>
 <translation id="1910721550319506122">ברוכים הבאים!</translation>
+<translation id="1910736334623230603">אי אפשר לחפש מספר תמונות. צריך להוסיף תמונה אחת בכל פעם.</translation>
 <translation id="1915073950770830761">Canary</translation>
 <translation id="1915307458270490472">ניתוק</translation>
 <translation id="1916502483199172559">דמות ברירת מחדל אדומה</translation>
@@ -1776,6 +1778,7 @@
 <translation id="2591895621127187078">יש לבדוק את האימייל כדי לבחור סיסמה חדשה</translation>
 <translation id="2593499352046705383">‏לפני שמתחילים, צריך לוודא שיש גיבוי של הנתונים. התקנת <ph name="DEVICE_OS" /> תחליף את כל הנתונים שבכונן הקשיח שלך. מידע נוסף זמין בכתובת g.co/flex/InstallGuide.</translation>
 <translation id="2594999711683503743">זה המקום לחפש את מה שמעניין או להקליד כתובת של אתר ספציפי</translation>
+<translation id="25957578727513093">‏כדי להגיע לכאן מהר יותר, ניתן להוסיף קיצור דרך ל'מנהל הסיסמאות של Google'</translation>
 <translation id="2599048253926156421">שם המשתמש הועתק ללוח</translation>
 <translation id="2602501489742255173">יש להחליק כלפי מעלה כדי להתחיל</translation>
 <translation id="2603115962224169880">ניקוי המחשב</translation>
@@ -1946,7 +1949,6 @@
 <translation id="2743301740238894839">התחלה</translation>
 <translation id="2743387203779672305">העתקה ללוח</translation>
 <translation id="2745080116229976798">‏שעבוד מוגדר של Microsoft</translation>
-<translation id="2747266560080989517">הקובץ הזה מכיל תוכן רגיש או מסוכן. עליך לבקש מהבעלים שלו לתקן אותו.</translation>
 <translation id="2749756011735116528">כניסה אל <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">בדיקת דקדוק עם איות</translation>
@@ -2540,7 +2542,6 @@
 <translation id="3317459757438853210">דו-צדדי</translation>
 <translation id="3317678681329786349">לא ניתן להשתמש בדף זה במצלמה ובמיקרופון</translation>
 <translation id="3320630259304269485">גלישה בטוחה (הגנה מאתרים מסוכנים) והגדרות אבטחה אחרות</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{הנתונים האלה מכילים תוכן רגיש או מסוכן. צריך להסיר את התוכן הזה ולנסות שוב.}=1{הקובץ הזה מכיל תוכן רגיש או מסוכן. צריך להסיר את התוכן הזה ולנסות שוב.}two{הקבצים האלה מכילים תוכן רגיש או מסוכן. צריך להסיר את התוכן הזה ולנסות שוב.}many{הקבצים האלה מכילים תוכן רגיש או מסוכן. צריך להסיר את התוכן הזה ולנסות שוב.}other{הקבצים האלה מכילים תוכן רגיש או מסוכן. צריך להסיר את התוכן הזה ולנסות שוב.}}</translation>
 <translation id="3323521181261657960">בונוס! קיבלת עוד זמן מסך</translation>
 <translation id="3323577066981719144">‏שינויים שיבוצעו כאן יחולו רק בדפדפן Chrome. כדי לבצע שינויים בהגדרות של דפדפן Chrome Lacros, עליך לפתוח את דפדפן Chrome Lacros ולעבור להגדרות.</translation>
 <translation id="3325804108816646710">מתבצע חיפוש של פרופילים זמינים…</translation>
@@ -2674,7 +2675,6 @@
 <translation id="3445925074670675829">‏מכשיר עם יציאת USB-C</translation>
 <translation id="3446274660183028131">‏יש להפעיל את Parallels Desktop כדי להתקין את Windows.</translation>
 <translation id="344630545793878684">קריאת הנתונים שלך במספר אתרים</translation>
-<translation id="3446650212859500694">הקובץ הזה מכיל תוכן רגיש</translation>
 <translation id="3447644283769633681">‏חסום את כל קובצי ה-Cookie של צד שלישי</translation>
 <translation id="3448492834076427715">עדכון חשבון</translation>
 <translation id="3449393517661170867">חלון מרובה כרטיסיות חדש</translation>
@@ -2882,6 +2882,7 @@
 <translation id="3642699533549879077">תתקבל התראה כשמישהו אחר מסתכל על המסך שלך ותוכן ההתראה יוסתר.</translation>
 <translation id="3643962751030964445">המכשיר הזה מנוהל על ידי <ph name="DEVICE_MANAGER" />. יצירת פרופיל חדש לחשבון <ph name="USER_EMAIL_ADDRESS" /> נדרשת על ידי <ph name="DEVICE_MANAGER" />.</translation>
 <translation id="3645372836428131288">יש להזיז קצת את האצבע כדי לסרוק חלק אחר של טביעת האצבע.</translation>
+<translation id="3647654707956482440">אי אפשר להשתמש בקישור הזה. יש לבדוק אם הקישור מכיל שגיאות הקלדה או להשתמש בקישור אחר ולנסות שוב.</translation>
 <translation id="3647998456578545569">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> התקבל מהמכשיר <ph name="DEVICE_NAME" />}two{<ph name="ATTACHMENTS" /> התקבלו מהמכשיר <ph name="DEVICE_NAME" />}many{<ph name="ATTACHMENTS" /> התקבלו מהמכשיר <ph name="DEVICE_NAME" />}other{<ph name="ATTACHMENTS" /> התקבלו מהמכשיר <ph name="DEVICE_NAME" />}}</translation>
 <translation id="3648348069317717750">המערכת זיהתה את <ph name="USB_DEVICE_NAME" /></translation>
 <translation id="3650753875413052677">שגיאה בהרשמה</translation>
@@ -3903,7 +3904,6 @@
 <translation id="4602466770786743961">אני רוצה תמיד להרשות ל-<ph name="HOST" /> לגשת למצלמה ולמיקרופון</translation>
 <translation id="4606551464649945562">אתרים לא יוכלו ליצור מפה בתלת ממד של הסביבה שלך או לעקוב אחר מיקום המצלמה</translation>
 <translation id="4608500690299898628">&amp;חיפוש...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> מכיל תוכן רגיש</translation>
 <translation id="4609987916561367134">‏מורשים להשתמש ב-JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> נתקל בשגיאה</translation>
 <translation id="4610637590575890427">האם התכוונת לעבור אל <ph name="SITE" />?</translation>
@@ -4184,7 +4184,7 @@
 <translation id="4871568871368204250">כיבוי הסינכרון</translation>
 <translation id="4871719318659334896">סגירת הקבוצה</translation>
 <translation id="4872192066608821120">‏כדי לייבא סיסמאות, צריך לבחור קובץ CSV</translation>
-<translation id="4872212987539553601">איך מגדירים הצפנה במכשיר</translation>
+<translation id="4872212987539553601">הגדרה של הצפנה במכשיר</translation>
 <translation id="4873312501243535625">בודק קובצי המדיה</translation>
 <translation id="4876273079589074638">רוצה לעזור למהנדסים שלנו לחקור את הקריסה הזו ולתקן אותה? מומלץ לרשום את השלבים בצורה כמה שיותר מדויקת, גם הפרטים הקטנים ביותר יכולים לעזור.</translation>
 <translation id="4876895919560854374">נעילה ושחרור של המסך</translation>
@@ -5871,7 +5871,6 @@
 <translation id="6492396476180293140">המצלמה הפנימית הושבתה על ידי מתג החומרה</translation>
 <translation id="6494327278868541139">הצגה של פרטי האבטחה המשופרת</translation>
 <translation id="6494445798847293442">לא רשות אישורים</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{הנתונים האלה מכילים תוכן רגיש או מסוכן}=1{הקובץ הזה מכיל תוכן רגיש או מסוכן}two{הקבצים האלה מכילים תוכן רגיש או מסוכן}many{הקבצים האלה מכילים תוכן רגיש או מסוכן}other{הקבצים האלה מכילים תוכן רגיש או מסוכן}}</translation>
 <translation id="6497548114956205206">מידע נוסף על מצב חיסכון באנרגיה</translation>
 <translation id="6497784818439587832">שינוי גודל התצוגה כדי להקטין או להגדיל את הפריטים שמופיעים במסך</translation>
 <translation id="6497789971060331894">גלילה הפוכה עם העכבר</translation>
@@ -6020,7 +6019,6 @@
 <translation id="6621391692573306628">‏כדי לשלוח את הכרטיסייה הזו למכשיר אחר, צריך להיכנס ל-Chrome בשני המכשירים</translation>
 <translation id="6622980291894852883">המשך לחסום תמונות</translation>
 <translation id="6624036901798307345">במצב טאבלט, מקישים על הלחצן בסרגל הכלים של מונה הכרטיסיות כדי לפתוח שורת כרטיסיות חדשה עם תצוגה המכילה תמונות ממוזערות של כל כרטיסייה.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> מכיל תוכן רגיש או מסוכן. עליך לבקש מהבעלים שלו לתקן אותו.</translation>
 <translation id="6624687053722465643">מתוקי</translation>
 <translation id="6628328486509726751">הועלה בתאריך <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">רמת אבטחה גבוהה יותר</translation>
@@ -6789,6 +6787,7 @@
 <translation id="7371490947952970241">‏כדי לכבות את המיקום, אפשר להשבית את ההגדרה הראשית של המיקום במכשיר הזה. בהגדרות המיקום אפשר גם להשבית את האפשרות להסתמך על Wi-Fi, רשתות סלולריות וחיישנים כדי לקבוע את המיקום.</translation>
 <translation id="7371917887111892735">הכרטיסיות יתכווצו לרוחב של כרטיסייה מוצמדת</translation>
 <translation id="7374376573160927383">‏ניהול התקני USB</translation>
+<translation id="7376124766545122644">‏אי אפשר להשתמש בקישור הזה. יש לבדוק אם הקישור מתחיל ב-'http://‎' או ב-'https://‎' ולנסות שוב.</translation>
 <translation id="7376553024552204454">הדגשת סמן העכבר כשהסמן בתנועה</translation>
 <translation id="737728204345822099">ייתכן שתיעוד של ביקורך באתר יישמר במפתח האבטחה שלך.</translation>
 <translation id="7377451353532943397">המשך חסימת הגישה לחיישנים</translation>
@@ -6799,6 +6798,7 @@
 <translation id="7380622428988553498">שם המכשיר מכיל תווים לא חוקיים</translation>
 <translation id="7380768571499464492"><ph name="PRINTER_NAME" /> עודכנה</translation>
 <translation id="7382085868019811559">‏בעזרת התמיכה בדפדפן מדור קודם (LBS) אפשר לפתוח תבניות URL מסוימות בדפדפן חלופי שתומך בתכונות מדור קודם. התכונות האלה נחוצות לצורך הפעילות התקינה של האתרים האלה.</translation>
+<translation id="738322632977123193">‏לא ניתן להעלות את הקובץ. יש להעלות תמונה באחד מהפורמטים הבאים: ‎.jpg,‏ ‏‎.gif,‏ ‎.png,‏ ‎.bmp,‏ ‎.tif או ‎.webp</translation>
 <translation id="73843634555824551">שיטות קלט ומקלדות</translation>
 <translation id="7384687527486377545">חזרה אוטומטית על פעולת מקלדת</translation>
 <translation id="7385490373498027129">כל הקבצים והנתונים המקומיים של כל המשתמשים במכשיר <ph name="DEVICE_TYPE" /> זה יימחקו באופן סופי.</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index c1584c5..a4c2012 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -879,6 +879,7 @@
 <translation id="1805967612549112634">PIN の確認</translation>
 <translation id="1806335016774576568">別の開いているアプリに切り替える</translation>
 <translation id="1807246157184219062">明</translation>
+<translation id="1809201888580326312">このサイトやアプリのパスワードは保存しないよう設定しています</translation>
 <translation id="1809483812148634490">Google Play からダウンロードしたアプリは、この Chromebook から削除されます。
     <ph name="LINE_BREAKS1" />
     購入した映画、テレビ番組、音楽、書籍、その他のアプリ内購入のコンテンツも削除される可能性があります。
@@ -901,7 +902,6 @@
 <translation id="1819721979226826163">[アプリの通知] &gt; [Google Play 開発者サービス] の順にタップします。</translation>
 <translation id="1820028137326691631">管理者から提供されたパスワードを入力</translation>
 <translation id="1822140782238030981">Chrome をすでにご利用の場合はログイン</translation>
-<translation id="1823098433522728610">このドキュメントには機密性の高いコンテンツが含まれています。</translation>
 <translation id="18245044880483936">バックアップ データは、お子様のドライブの保存容量にはカウントされません。</translation>
 <translation id="1825565032302550710">ポートは 1024~65535 の範囲で指定してください</translation>
 <translation id="182577151972096764">最近表示したレシピ</translation>
@@ -1780,6 +1780,7 @@
 <translation id="2620215283731032047"><ph name="FILE_NAME" /> は安全にダウンロードできません。</translation>
 <translation id="2620436844016719705">システム</translation>
 <translation id="262154978979441594">Google アシスタントの音声モデルのトレーニング</translation>
+<translation id="2621763461149967601"><ph name="FOLDER_TITLE" />(<ph name="SORT_TYPE" /></translation>
 <translation id="26224892172169984">すべてのサイトに対してプロトコルの処理を許可しない</translation>
 <translation id="262373406453641243">Colemak</translation>
 <translation id="2624142942574147739">このページはカメラとマイクにアクセスしています。</translation>
@@ -1924,7 +1925,6 @@
 <translation id="2743301740238894839">開始</translation>
 <translation id="2743387203779672305">クリップボードにコピー</translation>
 <translation id="2745080116229976798">Microsoft 限定従属</translation>
-<translation id="2747266560080989517">このファイルにはデリケートなコンテンツまたは危険なコンテンツが含まれています。所有者に修正するよう依頼してください。</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> にログイン</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">スペルと一緒に文法をチェック</translation>
@@ -2516,7 +2516,6 @@
 <translation id="3317459757438853210">両面印刷</translation>
 <translation id="3317678681329786349">カメラとマイクがブロックされています</translation>
 <translation id="3320630259304269485">セーフ ブラウジング(危険なサイトからの保護機能)などのセキュリティ設定</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{このデータにはデリケートなコンテンツまたは危険なコンテンツが含まれています。このコンテンツを削除してから、もう一度お試しください。}=1{このファイルにはデリケートなコンテンツまたは危険なコンテンツが含まれています。このコンテンツを削除してから、もう一度お試しください。}other{これらのファイルにはデリケートなコンテンツまたは危険なコンテンツが含まれています。このコンテンツを削除してから、もう一度お試しください。}}</translation>
 <translation id="3323521181261657960">ボーナスタイムが加算されました</translation>
 <translation id="3323577066981719144">ここで加えた変更は、Chrome ブラウザにのみ反映されます。Lacros Chrome ブラウザの設定に変更を加えるには、Lacros Chrome ブラウザを開いて [設定] に移動してください。</translation>
 <translation id="3325804108816646710">使用可能なプロファイルを検出しています...</translation>
@@ -2650,7 +2649,6 @@
 <translation id="3445925074670675829">USB-C デバイス</translation>
 <translation id="3446274660183028131">Windows をインストールするには Parallels Desktop を起動してください。</translation>
 <translation id="344630545793878684">多数のウェブサイトでのユーザーデータの読み取り</translation>
-<translation id="3446650212859500694">このファイルにはデリケートなコンテンツが含まれています</translation>
 <translation id="3447644283769633681">すべてのサードパーティの Cookie をブロック</translation>
 <translation id="3448492834076427715">アカウントを更新</translation>
 <translation id="3449393517661170867">新規タブ付きウィンドウ</translation>
@@ -3876,7 +3874,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> によるカメラとマイクへのアクセスを常に許可する</translation>
 <translation id="4606551464649945562">サイトに周囲の 3D マップの作成またはカメラ位置の追跡を許可しない</translation>
 <translation id="4608500690299898628">検索(&amp;F)...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> にはデリケートなコンテンツが含まれています</translation>
 <translation id="4609987916561367134">JavaScript の使用を許可するサイト</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> でエラーが発生しました</translation>
 <translation id="4610637590575890427">もしかして: <ph name="SITE" /></translation>
@@ -4919,6 +4916,7 @@
 <translation id="5612734644261457353">パスワードはまだ確認されていません。注: パスワードを最近変更した場合、新しいパスワードはログアウトした後に適用されます。こちらでは古いパスワードを使用してください。</translation>
 <translation id="5614190747811328134">ユーザー通知</translation>
 <translation id="5614553682702429503">パスワードを保存しますか?</translation>
+<translation id="5616571005307953937">古い順</translation>
 <translation id="5616726534702877126">サイズを予約</translation>
 <translation id="561698261642843490">Firefox を閉じる</translation>
 <translation id="5620540760831960151">このリストは、<ph name="BEGIN_LINK1" />{BrowserSwitcherUrlList}<ph name="END_LINK1" />、
@@ -5549,6 +5547,7 @@
 <translation id="6212168817037875041">画面をオフにする</translation>
 <translation id="6212752530110374741">リンクをメールで送信</translation>
 <translation id="621470880408090483">サイトに Bluetooth デバイスへの接続を許可しない</translation>
+<translation id="6216239400972191926">不承認のサイトとアプリ</translation>
 <translation id="6216601812881225442">コンテナのサイズを変更することはできません。Linux に事前に割り当てられている容量を調整するには、バックアップしてから新しいコンテナに復元してください。</translation>
 <translation id="6216696360484424239">自動ログイン</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> はオフラインです。インターネットに接続してもう一度お試しください。</translation>
@@ -5834,7 +5833,6 @@
 <translation id="6492396476180293140">ハードウェア スイッチにより内部カメラが無効になりました</translation>
 <translation id="6494327278868541139">保護強化機能の詳細を表示</translation>
 <translation id="6494445798847293442">認証局ではありません</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{このデータにはデリケートなコンテンツまたは危険なコンテンツが含まれています}=1{このファイルにはデリケートなコンテンツまたは危険なコンテンツが含まれています}other{これらのファイルにはデリケートなコンテンツまたは危険なコンテンツが含まれています}}</translation>
 <translation id="6497548114956205206">省エネツールの詳細</translation>
 <translation id="6497784818439587832">画面上の項目のサイズを変えるには、表示サイズを変更します</translation>
 <translation id="6497789971060331894">マウスの逆スクロール</translation>
@@ -5978,7 +5976,6 @@
 <translation id="6621391692573306628">このタブを別のデバイスに送信するには、両方のデバイスで Chrome にログインしてください</translation>
 <translation id="6622980291894852883">画像を引き続きブロックする</translation>
 <translation id="6624036901798307345">タブレット モードのときに、ツールバーのタブカウンタ ボタンをタップして、各タブのサムネイルが表示された新しいタブバーを開きます。</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> はデリケートなコンテンツまたは危険なコンテンツです。所有者に修正するよう依頼してください。</translation>
 <translation id="6624687053722465643">スイーツ</translation>
 <translation id="6628328486509726751">アップロード日時: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">セキュリティの強化</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index e42f344f..22cb6716 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -910,7 +910,6 @@
 <translation id="1819721979226826163">შეხებით აირჩიეთ: აპების შეტყობინებები &gt; Google Play services.</translation>
 <translation id="1820028137326691631">შეიყვანეთ ადმინისტრატორის მიერ მოწოებული პაროლი</translation>
 <translation id="1822140782238030981">უკვე ხართ Chrome-ის მომხმარებელი? შედით სისტემაში</translation>
-<translation id="1823098433522728610">ეს დოკუმენტი შეიცავს სენსიტიურ კონტენტს.</translation>
 <translation id="18245044880483936">სარეზერვო მონაცემები არ აისახება Google Drive-ზე თქვენი შვილისთვის გამოყოფილ მეხსიერების კვოტაზე.</translation>
 <translation id="1825565032302550710">პორტის ნომერი უნდა იყოს 1024-დან 65535-მდე</translation>
 <translation id="182577151972096764">ბოლო დროს ნანახი რეცეპტები</translation>
@@ -1944,7 +1943,6 @@
 <translation id="2743387203779672305">კოპირება გაცვლის ბუფერში</translation>
 <translation id="274362947316498129">აპი ცდილობს წვდომას <ph name="DEVICE_NAME" />-ზე. წვდომის დასაშვებად გამორთეთ <ph name="DEVICE_NAME" />-ის კონფიდენციალურობის გადამრთველი.</translation>
 <translation id="2745080116229976798">Microsoft-ის კვალიფიცირებული სუბორდინაცია</translation>
-<translation id="2747266560080989517">ეს ფაილი შეიცავს სენსიტიურ ან სახიფათო კონტენტს. სთხოვეთ მის მფლობელს აღნიშნულის გამოსწორება.</translation>
 <translation id="2749756011735116528">შედით <ph name="PRODUCT_NAME" />-ში</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">გრამატიკისა და მართლწერის შემოწმება</translation>
@@ -2540,7 +2538,6 @@
 <translation id="3317459757438853210">ორმხრივი</translation>
 <translation id="3317678681329786349">კამერა და მიკროფონი დაბლოკილია</translation>
 <translation id="3320630259304269485">Safe Browsing (სახიფათო საიტებისგან დაცვა) და უსაფრთხოებასთან დაკავშირებული სხვა პარამეტრები</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ეს მონაცემები შეიცავს სენსიტიურ ან სახიფათო კონტენტს. ამოშალეთ აღნიშნული კონტენტი და სცადეთ ხელახლა.}=1{ეს ფაილი შეიცავს სენსიტიურ ან სახიფათო კონტენტს. ამოშალეთ აღნიშნული კონტენტი და სცადეთ ხელახლა.}other{ეს ფაილები შეიცავს სენსიტიურ ან სახიფათო კონტენტს. ამოშალეთ აღნიშნული კონტენტი და სცადეთ ხელახლა.}}</translation>
 <translation id="3323521181261657960">გილოცავთ! ეკრანთან მეტ დროს გაატარებთ</translation>
 <translation id="3323577066981719144">თქვენ მიერ აქ შეტანილი ცვლილებები გავრცელდება მხოლოდ Chrome ბრაუზერზე. თქვენი Lacros Chrome ბრაუზერის პარამეტრების შესაცვლელად გახსენით Lacros Chrome ბრაუზერი და გადადით პარამეტრებზე.</translation>
 <translation id="3325804108816646710">იძებნება ხელმისაწვდომი პროფილები...</translation>
@@ -2674,7 +2671,6 @@
 <translation id="3445925074670675829">USB-C მოწყობილობა</translation>
 <translation id="3446274660183028131">Windows-ის ინსტალაციისთვის გაუშვით Parallels Desktop.</translation>
 <translation id="344630545793878684">წაიკითხეთ თქვენი მონაცემები რამდენიმე ვებსაიტზე</translation>
-<translation id="3446650212859500694">ეს ფაილი შეიცავს სენსიტიურ კონტენტს</translation>
 <translation id="3447644283769633681">დაბლოკეთ მესამე მხარის ყველა ქუქი-ჩანაწერი</translation>
 <translation id="3448492834076427715">ანგარიშის განახლება</translation>
 <translation id="3449393517661170867">ახალი ფანჯრის გახსნა ჩანართებიან რეჟიმში</translation>
@@ -3908,7 +3904,6 @@
 <translation id="4602466770786743961">ყოველთვის მიეცით ნება <ph name="HOST" />-ს, მიიღოს წვდომა თქვენს კამერასა და მიკროფონზე</translation>
 <translation id="4606551464649945562">საიტებისთვის თქვენი გარემოს 3-განზომილებიანი რუკის შექმნის ან კამერის პოზიციისთვის თვალის მიდევნების აკრძალვა</translation>
 <translation id="4608500690299898628">ძ&amp;ებნა…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> შეიცავს სენსიტიურ კონტენტს</translation>
 <translation id="4609987916561367134">დაშვებულია JavaScript-ის გამოყენება</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />-ს შეექმნა ხარვეზი</translation>
 <translation id="4610637590575890427">ხომ არ გსურდათ <ph name="SITE" />-ზე შესვლა?</translation>
@@ -5887,7 +5882,6 @@
 <translation id="6492396476180293140">შიდა კამერა დეაქტივირებულია აპარატურული გადამრთველის მეშვეობით</translation>
 <translation id="6494327278868541139">გაძლიერებული დაცვის დეტალების ჩვენება</translation>
 <translation id="6494445798847293442">არ წამოადგენს სერტიფიცირების ცენტრს</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ეს მონაცემები შეიცავს სენსიტიურ ან სახიფათო კონტენტს}=1{ეს ფაილი შეიცავს სენსიტიურ ან სახიფათო კონტენტს}other{ეს ფაილები შეიცავს სენსიტიურ ან სახიფათო კონტენტს}}</translation>
 <translation id="6497548114956205206">შეიტყვეთ მეტი ენერგიის დამზოგის შესახებ</translation>
 <translation id="6497784818439587832">შეცვალეთ ეკრანის ზომა, თქვენს ეკრანზე არსებული ერთეულები რომ დააპატარაოთ ან გაადიდოთ</translation>
 <translation id="6497789971060331894">მაუსით უკუგადაადგილება</translation>
@@ -6033,7 +6027,6 @@
 <translation id="6621391692573306628">ეს ჩანართი სხვა მოწყობილობაზე რომ გაგზავნოთ, შედით Chrome-ში ორივე მოწყობილობიდან</translation>
 <translation id="6622980291894852883">გააგრძელეთ გამოსახულებების დაბლოკვა</translation>
 <translation id="6624036901798307345">ტაბლეტის რეჟიმში ხელსაწყოთა ზოლზე ჩანართების მთვლელის ღილაკზე შეხებისას გაიხსნება ჩანართების ახალი ზოლი, რომელზეც ნაჩვენები იქნება თითოეული ჩანართის მინიატურული ვერსია.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> შეიცავს სენსიტიურ ან სახიფათო კონტენტს. სთხოვეთ მის მფლობელს აღნიშნულის გამოსწორება.</translation>
 <translation id="6624687053722465643">ტკბილეულობა</translation>
 <translation id="6628328486509726751">ატვირთულია <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">უფრო ძლიერი უსაფრთხოება</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 70df65e..79206da 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -904,7 +904,6 @@
 <translation id="1819721979226826163">"Қолданба туралы хабарландырулар &gt; Google Play Services" түймесін түртіңіз.</translation>
 <translation id="1820028137326691631">Әкімші берген құпия сөзді енгізу</translation>
 <translation id="1822140782238030981">Chrome браузерін бұрыннан пайдаланып жүрсіз бе? Аккаунтқа кіріңіз.</translation>
-<translation id="1823098433522728610">Бұл құжатта құпия мазмұн бар.</translation>
 <translation id="18245044880483936">Сақтық көшірме деректері балаңыздың Drive жадынан орын алмайды.</translation>
 <translation id="1825565032302550710">Порт 1024 және 65535 аралығында болуы керек.</translation>
 <translation id="182577151972096764">жақында көрілген рецептілер</translation>
@@ -1937,7 +1936,6 @@
 <translation id="2743301740238894839">Бастау</translation>
 <translation id="2743387203779672305">Буферге көшіру</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">Бұл файлда құпия не қауіпті мазмұн бар. Иесінен бұл мәселені шешуін сұраңыз.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> өніміне кіру</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Емлемен грамматиканы тексеру</translation>
@@ -2532,7 +2530,6 @@
 <translation id="3317459757438853210">Екі жақты</translation>
 <translation id="3317678681329786349">Камера мен микрофонға тыйым салынған</translation>
 <translation id="3320630259304269485">Қауіпсіз шолу (қауіпті сайттардан қорғау) және басқа қауіпсіздік параметрлері</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Бұл деректерде құпия не қауіпті мазмұн бар. Мазмұнды өшіріп, әрекетті қайталаңыз.}=1{Бұл файлда құпия не қауіпті мазмұн бар. Мазмұнды өшіріп, әрекетті қайталаңыз.}other{Бұл файлдарда құпия не қауіпті мазмұн бар. Мазмұнды өшіріп, әрекетті қайталаңыз.}}</translation>
 <translation id="3323521181261657960">Бонус! Пайдалану уақыты ұзартылды</translation>
 <translation id="3323577066981719144">Осында енгізген өзгертулеріңіз тек Chrome браузеріне қолданылады. Lacros Chrome браузерінің параметрлеріне өзгерістер енгізу үшін браузерді ашып, параметрлерге өтіңіз.</translation>
 <translation id="3325804108816646710">Қолжетімді профильдер ізделуде…</translation>
@@ -2666,7 +2663,6 @@
 <translation id="3445925074670675829">USB-C құрылғысы</translation>
 <translation id="3446274660183028131">Windows жүйесін орнату үшін Parallels Desktop-ты іске қосыңыз.</translation>
 <translation id="344630545793878684">Көптеген веб-сайттардағы деректеріңізді оқу</translation>
-<translation id="3446650212859500694">Бұл файлда құпия ақпарат бар.</translation>
 <translation id="3447644283769633681">Барлық үшінші тарап cookie файлын бөгеу</translation>
 <translation id="3448492834076427715">Аккаунтты жаңарту</translation>
 <translation id="3449393517661170867">Қойындысы бар жаңа терезе</translation>
@@ -3668,6 +3664,7 @@
 <translation id="4394049700291259645">Өшіру</translation>
 <translation id="4396956294839002702">{COUNT,plural, =0{&amp;Барлығын ашу}=1{&amp;Бетбелгіні ашу}other{&amp;Барлығын ({COUNT}) ашу}}</translation>
 <translation id="4397372003838952832">Бұл құпия сөзді есте сақтаудың қажеті жоқ. <ph name="EMAIL" /> аккаунты үшін ол мына жерде сақталады: <ph name="GOOGLE_PASSWORD_MANAGER" />.</translation>
+<translation id="4397844455100743910">Қатынасу сұраулары туралы толық ақпарат алыңыз.</translation>
 <translation id="439817266247065935">Құрылғыңыз дұрыс өшірілмеді. Linux қолданбаларын пайдалану үшін Linux жүйесін қайта қосыңыз.</translation>
 <translation id="4400367121200150367">Құпия сөздерді ешқашан сақтамайтын сайттар тізімі осы жерге шығады</translation>
 <translation id="4400632832271803360">Жоғарғы қатардағы пернелердің әрекетін ауыстыру үшін қосқыш пернесін басып тұрыңыз</translation>
@@ -3897,7 +3894,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> хостына әрқашан камераңыз бен микрофоныңызға кіру рұқсатын беру</translation>
 <translation id="4606551464649945562">Сайттарға айналаңыздың 3D картасын жасауға немесе камераңыздың орнын бақылауға рұқсат бермеу</translation>
 <translation id="4608500690299898628">&amp;Табу…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> файлында құпия мазмұн бар.</translation>
 <translation id="4609987916561367134">JavaScript пайдалануға рұқсаты барлар</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> плагинінде қате шықты</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> сайтына өту керек пе?</translation>
@@ -4035,6 +4031,7 @@
 <translation id="4733793249294335256">Орын</translation>
 <translation id="473546211690256853">Бұл аккаунтты <ph name="DOMAIN" /> басқарады</translation>
 <translation id="4735506354605317060">Меңзерді айналдыру</translation>
+<translation id="4735793370946506039">Күшейтілген Safe Browsing туралы толық ақпарат алыңыз.</translation>
 <translation id="4735803855089279419">Жүйе бұл құрылғыға арналған идентификаторларды анықтай алмады.</translation>
 <translation id="4736292055110123391">Барлық құрылғыларда бетбелгілерді, құпия сөздерді, тарихты, т.б. синхрондау</translation>
 <translation id="473775607612524610">Жаңарту</translation>
@@ -4063,6 +4060,7 @@
 <translation id="4765524037138975789">{MONTHS,plural, =1{Бұл құрылғы 1 ай сақталады және келесіде кодсыз қосыла аласыз. Оны әкімші орнатады.}other{Бұл құрылғы {MONTHS} ай сақталады және келесіде кодсыз қосыла аласыз. Оны әкімші орнатады.}}</translation>
 <translation id="4765582662863429759">Android Messages қолданбасына хабарларды телефоннан Chromebook құрылғысына жіберуге мүмкіндік береді</translation>
 <translation id="4766598565665644999">Барлық кеңейтім <ph name="HOST" /> сайтын оқып, өзгерте алады.</translation>
+<translation id="4767427586072640478">Өшірулі кеңейтімдер туралы толық ақпарат алыңыз.</translation>
 <translation id="4768332406694066911">Осы ұйымдардан алынған және сізді анықтайтын сертификаттар бар</translation>
 <translation id="4770119228883592393">Рұқсат сұралды, жауап беру үшін ⌘ + Option + төменге бағыттауыш перне тіркесімін басыңыз.</translation>
 <translation id="4773112038801431077">Linux жүйесін жаңарту</translation>
@@ -5863,7 +5861,6 @@
 <translation id="6492396476180293140">Ішкі камера аппараттық ауыстырғыш арқылы өшірілген.</translation>
 <translation id="6494327278868541139">Жақсартылған қорғаныс туралы мәліметтерді көрсету</translation>
 <translation id="6494445798847293442">Сертификат беру органы емес</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Бұл деректерде құпия не қауіпті мазмұн бар.}=1{Бұл файлда құпия не қауіпті мазмұн бар.}other{Бұл файлдарда құпия не қауіпті мазмұн бар.}}</translation>
 <translation id="6497548114956205206">Қуат үнемдеу режимі туралы толық ақпарат</translation>
 <translation id="6497784818439587832">Экрандағы элементтерді кішірейту не ұлғайту үшін дисплей өлшемін өзгертіңіз.</translation>
 <translation id="6497789971060331894">Тінтуірмен кері айналдыру</translation>
@@ -6009,7 +6006,6 @@
 <translation id="6621391692573306628">Бұл қойындыны басқа құрылғыға жіберу үшін екі құрылғыда Chrome-ға кіріңіз.</translation>
 <translation id="6622980291894852883">Кескін бөгеуді жалғастыру</translation>
 <translation id="6624036901798307345">Планшет режимінде әр қойындының нобайларын көрсететін жаңа қойындылар жолағын ашу үшін құралдар тақтасындағы қойынды саны түймесін түртіңіз.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> файлында құпия не қауіпті мазмұн бар. Иесінен бұл мәселені шешуін сұраңыз.</translation>
 <translation id="6624687053722465643">Тәтті</translation>
 <translation id="6628328486509726751">Жүктеп салынған <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Жоғары қауіпсіздік</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index eb58f70d..ead1f55 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -239,6 +239,7 @@
 <translation id="121384500095351701">មិនអាចទាញយកឯកសារនេះ​ដោយសុវត្ថិភាពបានទេ</translation>
 <translation id="1215411991991485844">កម្មវិធីផ្ទៃខាងក្រោយថ្មីត្រូវបានបន្ថែម</translation>
 <translation id="1216542092748365687">លុប​ស្នាម​ម្រាមដៃ</translation>
+<translation id="1216891999012841486">ស្វែងយល់បន្ថែម​អំពី​ការដោះស្រាយបញ្ហា​ដំឡើងកំណែ</translation>
 <translation id="1217114730239853757">តើអ្នកចង់​បើកដំណើរការ ChromeVox ដែលជា​កម្មវិធី​អានអេក្រង់ភ្ជាប់មកជាមួយស្រាប់​សម្រាប់ ChromeOS Flex ដែរទេ? ប្រសិនបើដូច្នេះមែន សូមចុចរបារដកឃ្លា។</translation>
 <translation id="1217483152325416304">ទិន្នន័យ​មូលដ្ឋាន​របស់អ្នក​នឹងត្រូវបាន​លុបក្នុងពេលឆាប់ៗនេះ</translation>
 <translation id="1217668622537098248">ត្រឡប់ទៅការចុចនៅផ្នែកខាងឆ្វេងវិញ បន្ទាប់ពីធ្វើសកម្មភាពហើយ</translation>
@@ -918,7 +919,6 @@
 <translation id="1819721979226826163">ចុច​ការជូន​ដំណឹង​កម្មវិធី &gt; សេវាកម្ម Google Play ។</translation>
 <translation id="1820028137326691631">បញ្ចូល​ពាក្យសម្ងាត់​ដែលផ្ដល់​ដោយ​អ្នក​គ្រប់គ្រង</translation>
 <translation id="1822140782238030981">ជាអ្នកប្រើប្រាស់ Chrome ហើយមែនទេ? សូមចូលគណនី</translation>
-<translation id="1823098433522728610">ឯកសារនេះមានខ្លឹមសាររសើប។</translation>
 <translation id="18245044880483936">ទិន្នន័យ​បម្រុង​ទុក​នឹង​មិន​រាប់​បញ្ចូល​ទៅក្នុងកម្រិត​កំណត់នៃទំហំ​ផ្ទុកថាស​របស់កូនអ្នក​ទេ។</translation>
 <translation id="1825565032302550710">ច្រក​ត្រូវតែ​នៅចន្លោះ​ពី 1024 ទៅ 65535</translation>
 <translation id="182577151972096764">រូបមន្ត​ដែលបានមើល​ថ្មីៗនេះ</translation>
@@ -1955,7 +1955,6 @@
 <translation id="2743301740238894839">ចាប់ផ្ដើម</translation>
 <translation id="2743387203779672305">ចម្លងទៅផ្ទាំងឃ្លីបបត</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">ឯកសារនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់។ សូមស្នើឱ្យម្ចាស់ឯកសារ​នេះធ្វើការកែប្រែ។</translation>
 <translation id="2749756011735116528">ចូលទៅ <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">ស៊ីម</translation>
 <translation id="2749881179542288782">ពិនិត្យវេយ្យាករណ៍ជាមួយការប្រកប</translation>
@@ -2550,7 +2549,6 @@
 <translation id="3317459757438853210">ទាំងសងខាង</translation>
 <translation id="3317678681329786349">បាន​ទប់ស្កាត់​កាមេរ៉ា និង​មីក្រូហ្វូន</translation>
 <translation id="3320630259304269485">ការរុករក​ដោយសុវត្ថិភាព (ការការពារ​ពី​គេហទំព័រ​ដែលមានគ្រោះថ្នាក់) និង​ការកំណត់​សុវត្ថិភាព​ផ្សេងទៀត</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ទិន្នន័យនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់។ សូមលុបខ្លឹមសារនេះចេញ រួចព្យាយាមម្ដងទៀត។}=1{ឯកសារនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់។ សូមលុបខ្លឹមសារនេះចេញ រួចព្យាយាមម្ដងទៀត។}other{ឯកសារទាំងនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់។ សូមលុបខ្លឹមសារនេះចេញ រួចព្យាយាមម្ដងទៀត។}}</translation>
 <translation id="3323521181261657960">ម៉ោងបន្ថែម! អ្នក​ទទួល​បាន​រយៈពេលប្រើប្រាស់ឧបករណ៍​បន្ថែម</translation>
 <translation id="3323577066981719144">ការផ្លាស់ប្ដូរដែលអ្នកធ្វើនៅទីនេះអនុវត្តចំពោះកម្មវិធីរុករកតាមអ៊ីនធឺណិត Chrome តែប៉ុណ្ណោះ។ ដើម្បីធ្វើការផ្លាស់ប្ដូរការកំណត់​កម្មវិធីរុករក​តាមអ៊ីនធឺណិត Lacros Chrome របស់អ្នក សូមបើកកម្មវិធីរុករក​តាមអ៊ីនធឺណិត Lacros Chrome រួចចូលទៅកាន់ការកំណត់។</translation>
 <translation id="3325804108816646710">កំពុងរកមើល​កម្រងព័ត៌មាន​ដែលមាន...</translation>
@@ -2684,7 +2682,6 @@
 <translation id="3445925074670675829">ឧបករណ៍ USB-C</translation>
 <translation id="3446274660183028131">សូមចាប់ផ្ដើម Parallels Desktop ដើម្បីដំឡើង Windows។</translation>
 <translation id="344630545793878684">អានទិន្នន័យរបស់អ្នកនៅលើគេហទំព័រមួយចំនួន</translation>
-<translation id="3446650212859500694">ឯកសារនេះមានខ្លឹមសាររសើប</translation>
 <translation id="3447644283769633681">ទប់ស្កាត់ខូគីរបស់ភាគីទីបីទាំងអស់</translation>
 <translation id="3448492834076427715">ធ្វើបច្ចុប្បន្នភាព​គណនី</translation>
 <translation id="3449393517661170867">វិនដូថ្មី​ដែលចែកជា​ផ្ទាំង</translation>
@@ -3917,7 +3914,6 @@
 <translation id="4602466770786743961">អនុញ្ញាត <ph name="HOST" /> ឲ្យចូលប្រើកាមេរ៉ា និងម៉ៃក្រូហ្វូនរបស់អ្នកជានិច្ច</translation>
 <translation id="4606551464649945562">កុំអនុញ្ញាតឱ្យគេហទំព័របង្កើតផែនទី 3D នៃមជ្ឈដ្ឋានជុំវិញរបស់អ្នក ឬតាមដានទីតាំងកាមេរ៉ា</translation>
 <translation id="4608500690299898628">ស្វែងរក...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> មានខ្លឹមសាររសើប</translation>
 <translation id="4609987916561367134">អនុញ្ញាតឱ្យប្រើ JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> បានជួបបញ្ហា</translation>
 <translation id="4610637590575890427">តើអ្នកពិតជាចង់ទៅ <ph name="SITE" />?</translation>
@@ -4994,6 +4990,7 @@
 <translation id="5632059346822207074">បានស្នើសុំការអនុញ្ញាត, ចុច Ctrl + Forward ដើម្បីឆ្លើយតប</translation>
 <translation id="5632566673632479864">គណនីរបស់អ្នក <ph name="EMAIL" /> មិនត្រូវបានអនុញ្ញាតឱ្យធ្វើជាគណនីចម្បងទៀតទេ។ ដោយសារគណនីនេះត្រូវបានគ្រប់គ្រងដោយ <ph name="DOMAIN" /> ចំណាំ ប្រវត្តិ ពាក្យសម្ងាត់ និងការកំណត់ផ្សេងទៀតរបស់អ្នកនឹងត្រូវបានសម្អាតពីឧបករណ៍នេះ។</translation>
 <translation id="5632592977009207922">កំពុងទាញយក នៅសល់ <ph name="PERCENT_REMAINING" />% ទៀត</translation>
+<translation id="5633149627228920745">ស្វែងយល់បន្ថែម​អំពី​លក្ខខណ្ឌតម្រូវ​ប្រព័ន្ធ</translation>
 <translation id="563371367637259496">ចល័ត</translation>
 <translation id="5634446357546764049">មើលអនុស្សាវរីយ៍នៃ​ការធ្វើដំណើរថ្មីៗ​របស់អ្នក និងអ្វីៗជាច្រើនទៀត</translation>
 <translation id="5635312199252507107">អនុញ្ញាតនៅលើ​គេហទំព័រជាក់លាក់</translation>
@@ -5891,7 +5888,6 @@
 <translation id="6492396476180293140">កាមេរ៉ា​ខាងក្នុង​ត្រូវ​បានបិទដំណើរការ​ដោយ​ប៊ូតុងបិទបើក​ហាតវែរ</translation>
 <translation id="6494327278868541139">បង្ហាញព័ត៌មានលម្អិត​អំពីការការពារដែល​ប្រសើរជាងមុន</translation>
 <translation id="6494445798847293442">មិនមែន​ជា​អាជ្ញាធរ​វិញ្ញាបនបត្រ​ទេ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ទិន្នន័យនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់}=1{ឯកសារនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់}other{ឯកសារទាំងនេះមានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់}}</translation>
 <translation id="6497548114956205206">ស្វែងយល់បន្ថែមអំពីមុខងារសន្សំសំចៃថាមពល</translation>
 <translation id="6497784818439587832">ប្ដូរ​ទំហំ​បង្ហាញ ដើម្បីធ្វើឱ្យ​ធាតុ​នៅលើ​អេក្រង់​របស់អ្នក​តូចជាង ឬ​ធំជាងមុន</translation>
 <translation id="6497789971060331894">ការរំកិល​កណ្ដុរ​បញ្រ្ចាស</translation>
@@ -6037,7 +6033,6 @@
 <translation id="6621391692573306628">ដើម្បីបញ្ជូន​ផ្ទាំងនេះ​ទៅ​ឧបករណ៍​ផ្សេង សូម​ចូល Chrome នៅលើ​ឧបករណ៍​ទាំងពីរ</translation>
 <translation id="6622980291894852883">បន្តការរារាំងរូបភាព</translation>
 <translation id="6624036901798307345">នៅក្នុងមុខងារ​ថេប្លេត សូមចុចលើ​ប៊ូតុងរបារឧបករណ៍​កម្មវិធីរាប់ផ្ទាំង ដើម្បីបើក​របារផ្ទាំងថ្មី ដែលបង្ហាញ​រូបក្របតំណាង​ផ្ទាំងនីមួយៗ។</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> មានខ្លឹមសាររសើប ឬគ្រោះថ្នាក់។ សូមស្នើឱ្យម្ចាស់ឯកសារ​នេះធ្វើការកែប្រែ។</translation>
 <translation id="6624687053722465643">ភាពផ្អែម</translation>
 <translation id="6628328486509726751">បានទាញឡើង <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">សុវត្ថិភាពខ្លាំងជាងមុន</translation>
@@ -8342,6 +8337,7 @@
 <translation id="8785622406424941542">ប៊ិច</translation>
 <translation id="8786824282808281903">នៅពេលកូនរបស់អ្នកឃើញរូបតំណាងនេះ គាត់អាចប្រើស្នាម​ម្រាមដៃសម្រាប់សម្គាល់អត្តសញ្ញាណ ឬដើម្បីយល់ព្រមលើការទិញ។</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{ក្រុមគ្មានឈ្មោះ - 1 ផ្ទាំង}other{ក្រុមគ្មានឈ្មោះ - # ផ្ទាំង}}</translation>
+<translation id="8791157330927639737">ស្វែងយល់បន្ថែម​អំពី​ការដំឡើងកំណែ</translation>
 <translation id="8791534160414513928">ផ្ញើសំណើរ "កុំតាមដានខ្ញុំ" ជាមួយចរារចណ៍ការរុករករបស់អ្នក</translation>
 <translation id="879413103056696865">ខណៈពេល​ដែល​ហតស្ប៉ត​បើក <ph name="PHONE_NAME" /> របស់​អ្នក​នឹង៖</translation>
 <translation id="8795916974678578410">ផ្ទាំងថ្មី</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index d1415c7..e85d75b5 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -914,7 +914,6 @@
 <translation id="1819721979226826163">ಅಪ್ಲಿಕೇಶನ್ ಅಧಿಸೂಚನೆಗಳು &gt; Google Play ಸೇವೆಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.</translation>
 <translation id="1820028137326691631">ನಿರ್ವಾಹಕರು ಒದಗಿಸಿದ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ</translation>
 <translation id="1822140782238030981">ಈಗಾಗಲೇ Chrome ಬಳಕೆದಾರರಾಗಿದ್ದೀರಾ? ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
-<translation id="1823098433522728610">ಈ ಡಾಕ್ಯುಮೆಂಟ್ ಸೂಕ್ಷ್ಮ ವಿಷಯವನ್ನು ಹೊಂದಿದೆ.</translation>
 <translation id="18245044880483936">ನಿಮ್ಮ ಮಗುವಿನ ಡ್ರೈವ್ ಸಂಗ್ರಹಣೆ ಕೋಟಾದಲ್ಲಿ ಬ್ಯಾಕಪ್‌ ಡೇಟಾ ಸೇರಿರುವುದಿಲ್ಲ.</translation>
 <translation id="1825565032302550710">ಪೋರ್ಟ್ 1024 ಮತ್ತು 65535 ಆಗಿರಬೇಕು</translation>
 <translation id="182577151972096764">ಇತ್ತೀಚೆಗೆ ವೀಕ್ಷಿಸಿದ ರೆಸಿಪಿಗಳು</translation>
@@ -1949,8 +1948,8 @@
 <translation id="274318651891194348">ಕೀಬೋರ್ಡ್ ಅನ್ನು ಹುಡುಕಲಾಗುತ್ತಿದೆ</translation>
 <translation id="2743301740238894839">ಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="2743387203779672305">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿ</translation>
+<translation id="274362947316498129">ಆ್ಯಪ್‌ವೊಂದು <ph name="DEVICE_NAME" /> ಅನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ. ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಅನುಮತಿಸಲು <ph name="DEVICE_NAME" /> ಗೌಪ್ಯತೆ ಸ್ವಿಚ್ ಅನ್ನು ಆಫ್ ಮಾಡಿ.</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">ಈ ಫೈಲ್ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ. ಅದರ ಮಾಲೀಕರಿಗೆ ಸರಿಪಡಿಸಲು ಕೇಳಿ.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> ಗೆ ಸೈನ್ ಇನ್ ಆಗಿ</translation>
 <translation id="2749836841884031656">ಸಿಮ್</translation>
 <translation id="2749881179542288782">ವ್ಯಾಕರಣವನ್ನು ಕಾಗುಣಿತದೊಂದಿಗೆ ಪರಿಶೀಲಿಸಿ</translation>
@@ -2546,7 +2545,6 @@
 <translation id="3317459757438853210">ಎರಡು-ಕಡೆಗಳಿಂದ</translation>
 <translation id="3317678681329786349">ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="3320630259304269485">ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್‌ (ಅಪಾಯಕಾರಿ ಸೈಟ್‌ಗಳಿಂದ ರಕ್ಷಣೆ) ಮತ್ತು ಇತರೆ ಭದ್ರತಾ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ಈ ಡೇಟಾ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ. ಈ ವಿಷಯವನ್ನು ತೆಗೆದುಹಾಕಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}=1{ಈ ಫೈಲ್ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ. ಈ ವಿಷಯವನ್ನು ತೆಗೆದುಹಾಕಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}one{ಈ ಫೈಲ್‌ಗಳು ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ. ಈ ವಿಷಯವನ್ನು ತೆಗೆದುಹಾಕಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}other{ಈ ಫೈಲ್‌ಗಳು ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ. ಈ ವಿಷಯವನ್ನು ತೆಗೆದುಹಾಕಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.}}</translation>
 <translation id="3323521181261657960">ಬೋನಸ್! ನೀವು ಇನ್ನಷ್ಟು ವೀಕ್ಷಣಾ ಅವಧಿಯನ್ನು ಪಡೆದಿದ್ದೀರಿ</translation>
 <translation id="3323577066981719144">ನೀವು ಇಲ್ಲಿ ಮಾಡುವ ಬದಲಾವಣೆಗಳು Chrome ಬ್ರೌಸರ್‌ಗೆ ಮಾತ್ರ ಅನ್ವಯಿಸುತ್ತದೆ. ನಿಮ್ಮ Lacros Chrome ಬ್ರೌಸರ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಲು, Lacros Chrome ಬ್ರೌಸರ್ ತೆರೆಯಿರಿ ಮತ್ತು ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ.</translation>
 <translation id="3325804108816646710">ಲಭ್ಯವಿರುವ ಪ್ರೊಫೈಲ್‌ಗಳಿಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation>
@@ -2680,7 +2678,6 @@
 <translation id="3445925074670675829">USB-C ಸಾಧನ</translation>
 <translation id="3446274660183028131">Windows ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು Parallels Desktop ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ.</translation>
 <translation id="344630545793878684">ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಹಲವಾರು ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ಓದಿ</translation>
-<translation id="3446650212859500694">ಈ ಫೈಲ್ ಸೂಕ್ಷ್ಮ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ.</translation>
 <translation id="3447644283769633681">ಮೂರನೇ-ವ್ಯಕ್ತಿಯ ಎಲ್ಲ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸು</translation>
 <translation id="3448492834076427715">ಖಾತೆಯನ್ನು ಅಪ್‌ಡೇಟ್ ಮಾಡಿ</translation>
 <translation id="3449393517661170867">ಹೊಸ ಟ್ಯಾಬ್ ಮಾಡಿರುವ ವಿಂಡೋ</translation>
@@ -3123,6 +3120,7 @@
 <translation id="385051799172605136">ಹಿಂದೆ</translation>
 <translation id="3851428669031642514">ಅಸುರಕ್ಷಿತ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="3852215160863921508">ಇನ್‌ಪುಟ್ ನೆರವು</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> ಅನ್ನು ಆನ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="3854599674806204102">ಒಂದು ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ</translation>
 <translation id="3854967233147778866">ವೆಬ್‌ಸೈಟ್‌ಗಳನ್ನು ಇತರ ಭಾಷೆಗಳಲ್ಲಿ ಅನುವಾದಿಸಲು ಅವಕಾಶ ನೀಡಿ</translation>
 <translation id="3854976556788175030">ಔಟ್‌ಪುಟ್ ಟ್ರೇ ಭರ್ತಿಯಾಗಿದೆ</translation>
@@ -3456,6 +3454,7 @@
 <translation id="4163560723127662357">ಅಪರಿಚಿತ ಕೀಬೋರ್ಡ್</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> ಇಮೇಲ್ ಮಾನ್ಯ ಸಂಸ್ಥೆಗೆ ಸೇರಿಲ್ಲ. ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ. ನೀವು ನಿರ್ವಾಹಕರಾಗಿದ್ದರೆ, ಇಲ್ಲಿಗೆ ಭೇಟಿ ನೀಡುವ ಮೂಲಕ ನಿಮ್ಮ ಸಂಸ್ಥೆಯನ್ನು ನೀವು ಸೆಟಪ್ ಮಾಡಬಹುದು: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">ಸೈಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> ಆ್ಯಪ್ <ph name="DEVICE_NAME" /> ಅನ್ನು ಆ್ಯಕ್ಸೆಸ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ. ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ಅನುಮತಿಸಲು <ph name="DEVICE_NAME" /> ಗೌಪ್ಯತೆ ಸ್ವಿಚ್ ಅನ್ನು ಆಫ್ ಮಾಡಿ.</translation>
 <translation id="4167393659000039775">ಯಾವುದೇ ಡೇಟಾ ನಷ್ಟಕ್ಕೆ Google ಜವಾಬ್ದಾರರಾಗಿರುವುದಿಲ್ಲ ಮತ್ತು ಪ್ರಮಾಣೀಕರಿಸದ ಮಾದರಿಗಳಲ್ಲಿ <ph name="DEVICE_OS" /> ಕೆಲಸ ಮಾಡದಿರಬಹುದು. g.co/flex/InstallGuide ನಲ್ಲಿ ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ.</translation>
 <translation id="4167686856635546851">ಸೈಟ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ, ವೀಡಿಯೊ ಗೇಮ್‌ಗಳು ಅಥವಾ ವೆಬ್ ಫಾರ್ಮ್‌ಗಳಂತಹ ಸಂವಾದಾತ್ಮಕ ಫೀಚರ್‌ಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು JavaScript ಅನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತವೆ</translation>
 <translation id="4168015872538332605"><ph name="PRIMARY_EMAIL" /> ಸೇರಿದಂತಹ ಕೆಲವು ಸೆಟ್ಟಿಂಗ್‍ಗಳನ್ನು ನಿಮ್ಮೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ. ಬಹು ಸೈನ್‍-ಇನ್ ಬಳಸುವಾಗ ಮಾತ್ರ ಈ ಸೆಟ್ಟಿಂಗ್‍ಗಳು ನಿಮ್ಮ ಖಾತೆಯ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುತ್ತವೆ.</translation>
@@ -3913,11 +3912,11 @@
 <translation id="4602466770786743961">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಹಾಗೂ ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಅನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ</translation>
 <translation id="4606551464649945562">ನಿಮ್ಮ ಸುತ್ತಮುತ್ತಲಿನ 3D ನಕ್ಷೆಗಳನ್ನು ರಚಿಸುವುದು ಅಥವಾ ಕ್ಯಾಮರಾ ಸ್ಥಿತಿಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಬೇಡಿ.</translation>
 <translation id="4608500690299898628">&amp;ಹುಡುಕು...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> ಸೂಕ್ಷ್ಮ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ</translation>
 <translation id="4609987916561367134">JavaScript ಬಳಸಲು ಈ ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ಗೆ ದೋಷ ಎದುರಾಗಿದೆ</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> ವೆಬ್‌ಸೈಟ್‌ಗೆ ಹೋಗುವುದೇ?</translation>
 <translation id="4611114513649582138">ಡೇಟಾ ಸಂಪರ್ಕ ಲಭ್ಯವಿದೆ</translation>
+<translation id="4612841084470706111">ಎಲ್ಲಾ ವಿನಂತಿಸಿದ ಸೈಟ್‌ಗಳಿಗೆ ಆ್ಯಕ್ಸೆಸ್ ಅನ್ನು ನೀಡಿ.</translation>
 <translation id="4613144866899789710">Linux ಇನ್‌ಸ್ಟಾಲೇಶನ್ ಅನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="4613271546271159013">ನೀವು ಹೊಸ ಟ್ಯಾಬ್ ತೆರೆದಿರುವಾಗ ಯಾವ ಪುಟವನ್ನು ತೋರಿಸಲಾಗಿದೆ ಎಂಬುದರ ವಿಸ್ತರಣೆ ಬದಲಾಗಿದೆ.</translation>
 <translation id="4615586811063744755">ಯಾವುದೇ ಕುಕೀ ಆಯ್ಕೆ ಮಾಡಲಾಗಿಲ್ಲ</translation>
@@ -5686,6 +5685,7 @@
 <translation id="6291949900244949761">ಒಂದು ಸೈಟ್ USB ಸಾಧನಗಳನ್ನು ಪ್ರವೇಶಿಸಲು ಬಯಸಿದಾಗ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿರುವುದು)</translation>
 <translation id="6291953229176937411">ಫೈಂಡರ್‌ನಲ್ಲಿ &amp;ತೋರಿಸಿ</translation>
 <translation id="6292699686837272722">ಟ್ಯಾಬ್‌ಗಳು ಮಧ್ಯಮ ಅಗಲಕ್ಕೆ ಕುಗ್ಗುತ್ತವೆ</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> ಅನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="6294759976468837022">ಸ್ವಯಂ-ಸ್ಕ್ಯಾನ್ ವೇಗ</translation>
 <translation id="6295158916970320988">ಎಲ್ಲಾ ಸೈಟ್‌ಗಳು</translation>
 <translation id="6295855836753816081">ಉಳಿಸಲಾಗುತ್ತಿದೆ...</translation>
@@ -5891,7 +5891,6 @@
 <translation id="6492396476180293140">ಹಾರ್ಡ್‌ವೇರ್ ಸ್ವಿಚ್‌ನ ಮೂಲಕ ಆಂತರಿಕ ಕ್ಯಾಮರಾವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="6494327278868541139">ವರ್ಧಿತ ಸುರಕ್ಷತಾ ವಿವರಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="6494445798847293442">ಪ್ರಮಾಣೀಕರಣದ ಪ್ರಾಧಿಕಾರವಲ್ಲ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ಈ ಡೇಟಾ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ}=1{ಈ ಫೈಲ್ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ}one{ಈ ಫೈಲ್‌ಗಳು ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿವೆ}other{ಈ ಫೈಲ್‌ಗಳು ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿವೆ}}</translation>
 <translation id="6497548114956205206">ಎನರ್ಜಿ ಸೇವರ್ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation>
 <translation id="6497784818439587832">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್‌ನ ಮೇಲಿನ ಐಟಂಗಳನ್ನು ಚಿಕ್ಕದಾಗಿಸಲು ಅಥವಾ ದೊಡ್ಡದಾಗಿ ಮಾಡಲು ಡಿಸ್‌ಪ್ಲೇ ಗಾತ್ರವನ್ನು ಬದಲಾಯಿಸಿ</translation>
 <translation id="6497789971060331894">ಮೌಸ್ ಹಿಮ್ಮುಖ ಸ್ಕ್ರಾಲ್ ಮಾಡುವಿಕೆ</translation>
@@ -6039,7 +6038,6 @@
 <translation id="6621391692573306628">ಈ ಟ್ಯಾಬ್ ಅನ್ನು ಬೇರೊಂದು ಸಾಧನಕ್ಕೆ ಕಳುಹಿಸಲು, ಎರಡೂ ಸಾಧನಗಳಲ್ಲಿ Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="6622980291894852883">ಚಿತ್ರಗಳನ್ನು ನಿರ್ಬಂಧಿಸುವುದನ್ನು ಮುಂದುವರಿಸಿ</translation>
 <translation id="6624036901798307345">ಟ್ಯಾಬ್ಲೆಟ್ ಮೋಡ್‌ನಲ್ಲಿ, ಪ್ರತಿ ಟ್ಯಾಬ್‌ನ ಥಂಬ್‌ನೇಲ್‌ಗಳನ್ನು ತೋರಿಸುವ ಹೊಸ ಟ್ಯಾಬ್ ಸ್ಟ್ರೈಪ್ ತೆರೆಯಲು, ಟ್ಯಾಬ್ ಕೌಂಟರ್ ಪರಿಕರಪಟ್ಟಿಯ ಬಟನ್ ಮೇಲೆ ಟ್ಯಾಪ್ ಮಾಡಿ.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> ಸೂಕ್ಷ್ಮ ಅಥವಾ ಅಪಾಯಕಾರಿ ವಿಷಯವನ್ನು ಒಳಗೊಂಡಿದೆ. ಅದರ ಮಾಲೀಕರಿಗೆ ಸರಿಪಡಿಸಲು ಕೇಳಿ.</translation>
 <translation id="6624687053722465643">ಸ್ವೀಟ್‌ನೆಸ್</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> ಅಪ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="6630117778953264026">ಸದೃಢ ಭದ್ರತೆ</translation>
@@ -8498,6 +8496,7 @@
 <translation id="8940081510938872932">ಇದೀಗ ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಅತಿ ಹೆಚ್ಚು ವಿಷಯಗಳನ್ನು ಸಲ್ಲಿಸುತ್ತಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="8940381019874223173">ನಿಮ್ಮ Google Photos ನಲ್ಲಿರುವುದು</translation>
 <translation id="8941173171815156065">'<ph name="PERMISSION" />' ಅನುಮತಿಯನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> ಆಫ್ ಆಗಿದೆ</translation>
 <translation id="894191600409472540">ಸದೃಢ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ರಚಿಸಿ</translation>
 <translation id="894360074127026135">Netscape ಅಂತರರಾಷ್ಟ್ರೀಯ ಸ್ಟೆಪ್-ಅಪ್</translation>
 <translation id="8944099748578356325">ಇನ್ನಷ್ಟು ತ್ವರಿತವಾಗಿ ಬ್ಯಾಟರಿ ಬಳಸಿ (ಪ್ರಸ್ತುತವಾಗಿ <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 46b1414..9228ee0f 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -918,7 +918,6 @@
 <translation id="1819721979226826163">앱 알림 &gt; Google Play 서비스를 탭합니다.</translation>
 <translation id="1820028137326691631">관리자가 제공한 비밀번호를 입력하세요.</translation>
 <translation id="1822140782238030981">이미 Chrome을 사용 중이신가요? 로그인하세요.</translation>
-<translation id="1823098433522728610">문서에 민감한 콘텐츠가 있습니다.</translation>
 <translation id="18245044880483936">백업 데이터는 자녀의 드라이브 스토리지 저장용량에 포함되지 않습니다.</translation>
 <translation id="1825565032302550710">포트 번호는 1024와 65535 사이여야 합니다.</translation>
 <translation id="182577151972096764">최근에 본 레시피</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2743301740238894839">시작</translation>
 <translation id="2743387203779672305">클립보드로 복사</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">민감하거나 위험한 콘텐츠가 있는 파일입니다. 소유자에게 수정을 요청하세요.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />에 로그인</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">영문 철자 및 문법 검사</translation>
@@ -2551,7 +2549,6 @@
 <translation id="3317459757438853210">양면</translation>
 <translation id="3317678681329786349">카메라 및 마이크 차단됨</translation>
 <translation id="3320630259304269485">세이프 브라우징(위험한 사이트로부터 보호) 및 기타 보안 설정</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{민감하거나 위험한 콘텐츠가 있는 데이터입니다. 콘텐츠를 삭제한 후 다시 시도해 보세요.}=1{민감하거나 위험한 콘텐츠가 있는 파일입니다. 콘텐츠를 삭제한 후 다시 시도해 보세요.}other{민감하거나 위험한 콘텐츠가 있는 파일입니다. 콘텐츠를 삭제한 후 다시 시도해 보세요.}}</translation>
 <translation id="3323521181261657960">보너스 기기 사용 시간이 추가되었습니다</translation>
 <translation id="3323577066981719144">여기에서 변경하는 사항은 Chrome 브라우저에만 적용됩니다. Lacros Chrome 브라우저 설정을 변경하려면 Lacros Chrome 브라우저를 열고 설정으로 이동하세요.</translation>
 <translation id="3325804108816646710">사용 가능한 프로필 찾는 중...</translation>
@@ -2685,7 +2682,6 @@
 <translation id="3445925074670675829">USB-C 기기</translation>
 <translation id="3446274660183028131">Windows를 설치하려면 Parallels Desktop을 실행하세요.</translation>
 <translation id="344630545793878684">다수의 웹사이트에서 데이터 읽기</translation>
-<translation id="3446650212859500694">민감한 콘텐츠가 있는 파일입니다.</translation>
 <translation id="3447644283769633681">모든 타사 쿠키 차단</translation>
 <translation id="3448492834076427715">계정 업데이트</translation>
 <translation id="3449393517661170867">새 탭 창</translation>
@@ -3916,7 +3912,6 @@
 <translation id="4602466770786743961"><ph name="HOST" />에서 카메라와 마이크에 액세스하도록 항상 허용</translation>
 <translation id="4606551464649945562">사이트에서 주변 환경의 3D 지도를 생성하거나 카메라 위치를 추적하도록 허용하지 않음</translation>
 <translation id="4608500690299898628">찾기(&amp;F)...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" />에 민감한 콘텐츠가 있습니다.</translation>
 <translation id="4609987916561367134">자바스크립트 사용이 허용됨</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />에 오류가 발생했습니다</translation>
 <translation id="4610637590575890427"><ph name="SITE" />(으)로 이동하려고 하셨나요?</translation>
@@ -5889,7 +5884,6 @@
 <translation id="6492396476180293140">하드웨어 스위치로 인해 내장 카메라가 비활성화됨</translation>
 <translation id="6494327278868541139">향상된 보안 세부정보 표시</translation>
 <translation id="6494445798847293442">인증 기관이 아닙니다.</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{민감하거나 위험한 콘텐츠가 있는 데이터입니다.}=1{민감하거나 위험한 콘텐츠가 있는 파일입니다.}other{민감하거나 위험한 콘텐츠가 있는 파일입니다.}}</translation>
 <translation id="6497548114956205206">에너지 절약 모드에 관해 자세히 알아보기</translation>
 <translation id="6497784818439587832">화면에 표시되는 항목을 축소하거나 확대하려면 디스플레이 크기를 변경하세요.</translation>
 <translation id="6497789971060331894">마우스 역방향 스크롤</translation>
@@ -6035,7 +6029,6 @@
 <translation id="6621391692573306628">이 탭을 다른 기기로 보내려면 두 기기 모두에서 Chrome에 로그인하세요.</translation>
 <translation id="6622980291894852883">이미지 계속 차단</translation>
 <translation id="6624036901798307345">태블릿 모드에서 탭 카운터 툴바 버튼을 탭하여 각 탭의 썸네일을 보여주는 새로운 탭 표시줄을 엽니다.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> 파일에 민감하거나 위험한 콘텐츠가 있습니다. 소유자에게 수정을 요청하세요.</translation>
 <translation id="6624687053722465643">달콤</translation>
 <translation id="6628328486509726751">업로드 시간: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">보안 강화</translation>
@@ -6418,7 +6411,7 @@
 <translation id="697508444536771064">Linux 종료</translation>
 <translation id="6975361011348772931">읽기 및 변경 요청됨</translation>
 <translation id="6978121630131642226">검색엔진</translation>
-<translation id="6979041727349121225">에너지 절약</translation>
+<translation id="6979041727349121225">에너지 절약 모드</translation>
 <translation id="6979044105893951891">관리 게스트 세션 실행 및 종료</translation>
 <translation id="6979158407327259162">Google Drive</translation>
 <translation id="6979440798594660689">음소거(기본값)</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 118bedb..b0cf72d 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -918,7 +918,6 @@
 <translation id="1819721979226826163">Колдонмо билдирүүлөрү &gt; Google Play кызматтарын таптаңыз.</translation>
 <translation id="1820028137326691631">Администратор берген сырсөздү киргизиңиз</translation>
 <translation id="1822140782238030981">Chrome аккаунтуңуз барбы? Ага кириңиз</translation>
-<translation id="1823098433522728610">Бул документте купуя мазмун бар.</translation>
 <translation id="18245044880483936">Маалыматтын камдык көчүрмөлөрү балаңыздын Drive сактагычынан орун ээлебейт.</translation>
 <translation id="1825565032302550710">Порт 1024 менен 65535 ортосунда болушу керек</translation>
 <translation id="182577151972096764">жакында көрүлгөн рецепттер</translation>
@@ -1955,7 +1954,6 @@
 <translation id="2743301740238894839">Баштоо</translation>
 <translation id="2743387203779672305">Алмашуу буферине көчүрүү</translation>
 <translation id="2745080116229976798">Microsoft Квалификациялык көз карандылык</translation>
-<translation id="2747266560080989517">Бул файлда купуя же кооптуу мазмун камтылган. Анын ээсинен файлды оңдоону сураныңыз.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> кириңиз</translation>
 <translation id="2749836841884031656">SIM-карта</translation>
 <translation id="2749881179542288782">Орфография менен грамматиканы айкалыштырып текшерүү</translation>
@@ -2550,7 +2548,6 @@
 <translation id="3317459757438853210">Эки тараптуу</translation>
 <translation id="3317678681329786349">Камера менен микрофон бөгөттөлдү</translation>
 <translation id="3320630259304269485">Коопсуз серептөө (кооптуу сайттардан коргоо) жана башка коопсуздук жөндөөлөрү</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Бул маалыматта купуя же кооптуу мазмун камтылган. Бул мазмунду өчүрүп, кайра аракет кылыңыз.}=1{Бул файлда купуя же кооптуу мазмун камтылган. Бул мазмунду өчүрүп, кайра аракет кылыңыз.}other{Бул файлдарда купуя же кооптуу мазмун камтылган. Бул мазмунду өчүрүп, кайра аракет кылыңыз.}}</translation>
 <translation id="3323521181261657960">Бонус! Түзмөктү колдонуу убакыты узарды</translation>
 <translation id="3323577066981719144">Бул жерде киргизген өзгөртүүлөрүңүз Chrome серепчисине карата гана колдонулат. Lacros Chrome серепчисинин жөндөөлөрүнө өзгөрүүлөрдү киргизүү үчүн Lacros Chrome серепчисин ачып, жөндөөлөргө өтүңүз.</translation>
 <translation id="3325804108816646710">Жеткиликтүү профилдер изделүүдө…</translation>
@@ -2684,7 +2681,6 @@
 <translation id="3445925074670675829">USB-C түзмөгү</translation>
 <translation id="3446274660183028131">Windows'ту орнотуу үчүн Parallels Desktop кызматын иштетиңиз.</translation>
 <translation id="344630545793878684">Дайын-даректериңизди бир нече вебсайттан окуңуз</translation>
-<translation id="3446650212859500694">Бул файлда купуя мазмун бар</translation>
 <translation id="3447644283769633681">Үчүнчү тараптын бардык cookie файлдарын бөгөттөө</translation>
 <translation id="3448492834076427715">Аккаунтту жаңыртуу</translation>
 <translation id="3449393517661170867">Жаңы өтмөктөгү терезе</translation>
@@ -3917,7 +3913,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> камера жана микрофонуңузга кирүүсүнө ар дайым уруксат берүү</translation>
 <translation id="4606551464649945562">Сайттарга айланаңыздын 3D картасын түзүүгө же камераңыздын абалына көз салууга тыюу салуу</translation>
 <translation id="4608500690299898628">&amp;Табуу…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> файлында купуя мазмун бар</translation>
 <translation id="4609987916561367134">Javascript'ти колдоно алат</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> плагининде ката кетти</translation>
 <translation id="4610637590575890427">Бул жерге <ph name="SITE" /> өтөйүн дедиңиз беле?</translation>
@@ -5890,7 +5885,6 @@
 <translation id="6492396476180293140">Ички камера аппараттык камсыздоо которгучу аркылуу өчүрүлдү</translation>
 <translation id="6494327278868541139">Жакшыртылган коргоонун чоо-жайын көрсөтүү</translation>
 <translation id="6494445798847293442">Тастыктоочу борбор эмес</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Бул маалыматта купуя же кооптуу мазмун камтылган}=1{Бул файлда купуя же кооптуу мазмун камтылган}other{Бул файлдарда купуя же кооптуу мазмун камтылган}}</translation>
 <translation id="6497548114956205206">Кубатты үнөмдөгүч жөнүндө кеңири маалымат алыңыз</translation>
 <translation id="6497784818439587832">Дисплейдин өлчөмүн өзгөртүп, экрандагы элементтерди кичирейтип же чоңойтуу</translation>
 <translation id="6497789971060331894">Чычкан менен артка сыдыруу</translation>
@@ -6036,7 +6030,6 @@
 <translation id="6621391692573306628">Бул өтмөктү башка түзмөккө жөнөтүү үчүн эки түзмөктөн тең Chrome'го кириңиз</translation>
 <translation id="6622980291894852883">Сүрөттөр бөгөттөлө берсин</translation>
 <translation id="6624036901798307345">Планшет режиминде куралдар тилкесиндеги өтмөктөрдүн саны баскычын басып, жаңы өтмөктөр тактасын ачыңыз. Анда ар бир өтмөктүн эскизи көрсөтүлөт.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> файлында купуя же кооптуу мазмун бар. Анын ээсинен файлды оңдоону сураныңыз.</translation>
 <translation id="6624687053722465643">Таттуу</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> жүктөлүп берилди.</translation>
 <translation id="6630117778953264026">Өркүндөтүлгөн коопсуздук</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 05e31721..486e646 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -239,6 +239,7 @@
 <translation id="121384500095351701">ບໍ່ສາມາດດາວໂຫຼດໄຟລ໌ນີ້ໄດ້ຢ່າງປອດໄພ</translation>
 <translation id="1215411991991485844">ເພີ່ມແອັບພື້ນຫຼັງໃໝ່ແລ້ວ</translation>
 <translation id="1216542092748365687">ລຶບລາຍນິ້ວມືອອກ</translation>
+<translation id="1216891999012841486">ສຶກສາເພີ່ມເຕີມກ່ຽວກັບການແກ້ໄຂຂໍ້ຜິດພາດໃນການອັບເດດ</translation>
 <translation id="1217114730239853757">ທ່ານຕ້ອງການເປີດນຳໃຊ້ ChromeVox, ໂປຣແກຣມອ່ານໜ້າຈໍທີ່ມີມາໃນຕົວສຳລັບ ChromeOS Flex ບໍ່? ຖ້າຕ້ອງການ, ກະລຸນາກົດແຖບຍະຫວ່າງ.</translation>
 <translation id="1217483152325416304">ຂໍ້ມູນໃນເຄື່ອງຂອງທ່ານຈະຖືກລຶບໃນໄວໆນີ້</translation>
 <translation id="1217668622537098248">ປ່ຽນກັບໄປເປັນການຄລິກຊ້າຍຫຼັງຈາກດຳເນີນການແລ້ວ</translation>
@@ -916,7 +917,6 @@
 <translation id="1819721979226826163">ແຕະການແຈ້ງເຕືອນແອັບ &gt; ການບໍລິການຂອງ Google Play.</translation>
 <translation id="1820028137326691631">ປ້ອນລະຫັດຜ່ານທີ່ຜູ້ເບິ່ງແຍງລະບົບສະໜອງໃຫ້</translation>
 <translation id="1822140782238030981">ເປັນຜູ້ໃຊ້ Chrome ແລ້ວບໍ? ເຂົ້າສູ່ລະບົບ</translation>
-<translation id="1823098433522728610">ເອກະສານນີ້ມີເນື້ອຫາລະອຽດອ່ອນ.</translation>
 <translation id="18245044880483936">ຂໍ້ມູນສຳຮອງຈະບໍ່ນັບຮວມໂຄຕ້າບ່ອນຈັດເກັບຂໍ້ມູນ Drive ຂອງລູກທ່ານ.</translation>
 <translation id="1825565032302550710">ຜອດຕ້ອງຢູ່ລະຫວ່າງ 1024 ຫາ 65535</translation>
 <translation id="182577151972096764">ສູດທີ່ເບິ່ງຫຼ້າສຸດ</translation>
@@ -1955,7 +1955,6 @@
 <translation id="2743387203779672305">ກັອບປີ້ໄປໃສ່ຄລິບບອດ</translation>
 <translation id="274362947316498129">ມີແອັບກຳລັງພະຍາຍາມເຂົ້າເຖິງ <ph name="DEVICE_NAME" /> ຢູ່. ກະລຸນາປິດສະວິດຄວາມເປັນສ່ວນຕົວ <ph name="DEVICE_NAME" /> ເພື່ອອະນຸຍາດສິດເຂົ້າເຖິງ.</translation>
 <translation id="2745080116229976798">ອັນທີ່​ສຳຄັນ​ນ້ອຍ​ກວ່າ​ທີ່​​ເຂົ້າ​ເກນ​ຄຸນສົມບັດ​ຂອງ Microsoft</translation>
-<translation id="2747266560080989517">ໄຟລ໌ນີ້ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ. ຂໍໃຫ້ເຈົ້າຂອງມັນແກ້ໄຂ.</translation>
 <translation id="2749756011735116528">ລົງຊື່ເຂົ້າ​ໃຊ້ <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">ກວດເບິ່ງໄວຍະກອນກັບການສະກົດຄໍາ</translation>
@@ -2550,7 +2549,6 @@
 <translation id="3317459757438853210">ສອງໜ້າ</translation>
 <translation id="3317678681329786349">ບລັອກກ້ອງຖ່າຍຮູບ ແລະ ໄມໂຄຣໂຟນໄວ້ແລ້ວ</translation>
 <translation id="3320630259304269485">Safe Browsing (ການປົກປ້ອງຈາກເວັບໄຊອັນຕະລາຍ) ແລະ ການຕັ້ງຄ່າຄວາມປອດໄພອື່ນໆ</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ຂໍ້ມູນນີ້ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ. ລຶບເນື້ອຫານີ້ອອກ ແລ້ວລອງໃໝ່.}=1{ໄຟລ໌ນີ້ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ. ລຶບເນື້ອຫານີ້ອອກ ແລ້ວລອງໃໝ່.}other{ໄຟລ໌ເຫຼົ່ານີ້ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ. ລຶບເນື້ອຫານີ້ອອກ ແລ້ວລອງໃໝ່.}}</translation>
 <translation id="3323521181261657960">ໂບນັດ! ທ່ານໄດ້ເວລາໜ້າຈໍເພີ່ມ</translation>
 <translation id="3323577066981719144">ການປ່ຽນແປງທີ່ທ່ານສ້າງຢູ່ບ່ອນນີ້ຈະມີຜົນກັບໂປຣແກຣມທ່ອງເວັບ Chrome ເທົ່ານັ້ນ. ເພື່ອປ່ຽນການຕັ້ງຄ່າໂປຣແກຣມທ່ອງເວັບ Lacros Chrome ຂອງທ່ານ, ໃຫ້ເປີດໂປຣແກຣມທ່ອງເວັບ Lacros Chrome ຂຶ້ນມາແລ້ວໄປຫາການຕັ້ງຄ່າ.</translation>
 <translation id="3325804108816646710">ກຳລັງຊອກຫາໂປຣໄຟລ໌ທີ່ມີຢູ່...</translation>
@@ -2684,7 +2682,6 @@
 <translation id="3445925074670675829">ອຸ​ປະ​ກອນ USB-C</translation>
 <translation id="3446274660183028131">ກະລຸນາເປີດໃຊ້ Parallels Desktop ເພື່ອຕິດຕັ້ງ Windows.</translation>
 <translation id="344630545793878684">ອ່ານ​ຂໍ້​ມູນ​ຂອງ​ທ່ານ​ຢູ່​ເທິງຫຼາຍ​ເວັບ​ໄຊ​ທ໌</translation>
-<translation id="3446650212859500694">ໄຟລ໌ນີ້ມີເນື້ອຫາລະອຽດອ່ອນ</translation>
 <translation id="3447644283769633681">ບລັອກຄຸກກີ້ພາກສ່ວນທີສາມທັງໝົດ</translation>
 <translation id="3448492834076427715">ອັບເດດບັນຊີ</translation>
 <translation id="3449393517661170867">ໜ້າຈໍແຖບໃໝ່</translation>
@@ -3919,7 +3916,6 @@
 <translation id="4602466770786743961">ອະນຸຍາດໃຫ້ <ph name="HOST" /> ​​ເຂົ້າຫາ​ກ້ອງ​ຖ່າຍ​ຮູບ​ ແລະໄມໂຄຣໂຟນຂອງ​ທ່ານສະເໝີ</translation>
 <translation id="4606551464649945562">ບໍ່ອະນຸຍາດໃຫ້ເວັບໄຊສ້າງແຜນທີ່ 3 ມິຕິຂອງສິ່ງທີ່ຢູ່ອ້ອມຂ້າງຕົວທ່ານ ຫຼື ຕິດຕາມຕຳແໜ່ງກ້ອງ</translation>
 <translation id="4608500690299898628">ຊອກຫາ...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> ມີເນື້ອຫາລະອຽດອ່ອນ</translation>
 <translation id="4609987916561367134">ໄດ້ຮັບອະນຸຍາດໃຫ້ໃຊ້ JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ເກີດຄວາມຜິດພາດຂຶ້ນ</translation>
 <translation id="4610637590575890427">ທ່ານໝາຍຄວາມວ່າຈະໄປຫາ <ph name="SITE" /> ບໍ?</translation>
@@ -4995,6 +4991,7 @@
 <translation id="5632059346822207074">ຂໍການອະນຸຍາດແລ້ວ, ກະລຸນາກົດ Ctrl + ໄປໜ້າເພື່ອຕອບກັບ</translation>
 <translation id="5632566673632479864">ບັນຊີຂອງທ່ານ <ph name="EMAIL" /> ບໍ່ໄດ້ຮັບອະນຸຍາດເປັນບັນຊີຫຼັກອີກຕໍ່ໄປ. ເນື່ອງຈາກ <ph name="DOMAIN" /> ເປັນຜູ້ຈັດການບັນຊີນີ້, ບຸກມາກ, ປະຫວັດ, ລະຫັດຜ່ານ ແລະ ການຕັ້ງຄ່າອື່ນໆຂອງທ່ານຈະຖືກລຶບລ້າງອອກຈາກອຸປະກອນນີ້.</translation>
 <translation id="5632592977009207922">ກຳລັງດາວໂຫຼດ, ຍັງເຫຼືອ <ph name="PERCENT_REMAINING" />%</translation>
+<translation id="5633149627228920745">ສຶກສາເພີ່ມເຕີມກ່ຽວກັບຄວາມຕ້ອງການຂອງລະບົບ</translation>
 <translation id="563371367637259496">ມືຖື</translation>
 <translation id="5634446357546764049">ເບິ່ງຄວາມຊົງຈຳຂອງການເດີນທາງຫຼ້າສຸດຂອງທ່ານ ແລະ ອື່ນໆ</translation>
 <translation id="5635312199252507107">ອະນຸຍາດຢູ່ເວັບໄຊສະເພາະ</translation>
@@ -5893,7 +5890,6 @@
 <translation id="6492396476180293140">ກ້ອງພາຍໃນຖືກປິດໄວ້ໂດຍສະວິດຮາດແວ</translation>
 <translation id="6494327278868541139">ສະແດງລາຍລະອຽດການປົກປ້ອງທີ່ປັບປຸງໃຫ້ດີຂຶ້ນ</translation>
 <translation id="6494445798847293442">ບໍ່ແມ່ນໜ່ວຍງານອອກໃບຮັບຮອງ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ຂໍ້ມູນນີ້ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ}=1{ໄຟລ໌ນີ້ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ}other{ໄຟລ໌ເຫຼົ່ານີ້ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ}}</translation>
 <translation id="6497548114956205206">ສຶກສາເພີ່ມເຕີມກ່ຽວກັບຕົວປະຢັດພະລັງງານ</translation>
 <translation id="6497784818439587832">ປ່ຽນຂະໜາດການສະແດງຜົນເພື່ອເຮັດໃຫ້ລາຍການຕ່າງໆໃນໜ້າຈໍຂອງທ່ານນ້ອຍລົງ ຫຼື ໃຫຍ່ຂຶ້ນ</translation>
 <translation id="6497789971060331894">ການເລື່ອນເມົ້າຖອຍຫຼັງ</translation>
@@ -6039,7 +6035,6 @@
 <translation id="6621391692573306628">ເພື່ອສົ່ງແຖບນີ້ໄປຫາອຸປະກອນອື່ນ, ໃຫ້ເຂົ້າສູ່ລະບົບຫາ Chrome ຢູ່ທັງສອງອຸປະກອນ</translation>
 <translation id="6622980291894852883">ສືບ​ຕໍ່​ບລັອກຮູບ​</translation>
 <translation id="6624036901798307345">ໃນໂໝດແທັບເລັດ, ໃຫ້ແຕະໃສ່ປຸ່ມແຖບເຄື່ອງມືຕົວນັບແຖບເພື່ອເປີດລາຍແຖບໃໝ່ທີ່ສະແດງຮູບຕົວຢ່າງຂອງແຕ່ລະແຖບ.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> ມີເນື້ອຫາລະອຽດອ່ອນ ຫຼື ອັນຕະລາຍ. ຂໍໃຫ້ເຈົ້າຂອງມັນແກ້ໄຂ.</translation>
 <translation id="6624687053722465643">ຄວາມຫວານ</translation>
 <translation id="6628328486509726751">ອັບ​ໂຫຼດ <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">ການຮັກສາຄວາມປອດໄພທີ່ຮັດກຸມຂຶ້ນ</translation>
@@ -8342,6 +8337,7 @@
 <translation id="8785622406424941542">ປາຍປາກກາ</translation>
 <translation id="8786824282808281903">ເມື່ອລູກຂອງທ່ານເຫັນໄອຄອນນີ້, ລາຍນິ້ວມືຈະສາມາດຖືກໃຊ້ສຳລັບການລະບຸຕົວຕົນ ຫຼື ເພື່ອອະນຸມັດການສັ່ງຊື້ໄດ້.</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{ກຸ່ມບໍ່ມີຊື່ - 1 ແຖບ}other{ກຸ່ມບໍ່ມີຊື່ - # ແຖບ}}</translation>
+<translation id="8791157330927639737">ສຶກສາເພີ່ມເຕີມກ່ຽວກັບການອັບເດດ</translation>
 <translation id="8791534160414513928">ສົ່ງຄໍາຂໍ "ຢ່າຕິດຕາມ" ກັບການຈາລະຈອນທ່ອງເວັບຂອງທ່ານ</translation>
 <translation id="879413103056696865">ໃນຂະນະທີ່ຮັອດສະປອດເປີດຢູ່, <ph name="PHONE_NAME" /> ຂອງທ່ານຈະ:</translation>
 <translation id="8795916974678578410">ໜ້າ​ຕ່າງໃຫມ່</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index fe570d7f..5b8d9c2 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -921,7 +921,6 @@
 <translation id="1819721979226826163">Palieskite „Programų pranešimai“ &gt; „Google Play“ paslaugos“.</translation>
 <translation id="1820028137326691631">Įveskite administratoriaus suteiktą slaptažodį</translation>
 <translation id="1822140782238030981">Jau naudojate „Chrome“? Prisijunkite</translation>
-<translation id="1823098433522728610">Šiame dokumente yra neskelbtino turinio.</translation>
 <translation id="18245044880483936">Atsarginės kopijos duomenys nebus įtraukti skaičiuojant vaiko Disko saugyklos kvotą.</translation>
 <translation id="1825565032302550710">Prievadas turi būti nuo 1024 iki 65535</translation>
 <translation id="182577151972096764">neseniai peržiūrėtų receptų</translation>
@@ -1958,7 +1957,6 @@
 <translation id="2743301740238894839">Pradėti</translation>
 <translation id="2743387203779672305">Kopijuoti į iškarpinę</translation>
 <translation id="2745080116229976798">„Microsoft“ tinkamas pavaldumas</translation>
-<translation id="2747266560080989517">Šiame faile yra neskelbtino arba pavojingo turinio. Paprašykite savininko sutvarkyti.</translation>
 <translation id="2749756011735116528">Prisijungti prie „<ph name="PRODUCT_NAME" />“</translation>
 <translation id="2749836841884031656">SIM kortelė</translation>
 <translation id="2749881179542288782">Tikrinti gramatiką ir rašybą</translation>
@@ -2553,7 +2551,6 @@
 <translation id="3317459757438853210">Dvipusis</translation>
 <translation id="3317678681329786349">Fotoaparatas ir mikrofonas užblokuoti</translation>
 <translation id="3320630259304269485">Saugus naršymas (apsauga nuo pavojingų svetainių) ir kiti saugos nustatymai</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Šiuose duomenyse yra neskelbtino arba pavojingo turinio. Pašalinkite šį turinį ir bandykite dar kartą.}=1{Šiame faile yra neskelbtino arba pavojingo turinio. Pašalinkite šį turinį ir bandykite dar kartą.}one{Šiuose failuose yra neskelbtino arba pavojingo turinio. Pašalinkite šį turinį ir bandykite dar kartą.}few{Šiuose failuose yra neskelbtino arba pavojingo turinio. Pašalinkite šį turinį ir bandykite dar kartą.}many{Šiuose failuose yra neskelbtino arba pavojingo turinio. Pašalinkite šį turinį ir bandykite dar kartą.}other{Šiuose failuose yra neskelbtino arba pavojingo turinio. Pašalinkite šį turinį ir bandykite dar kartą.}}</translation>
 <translation id="3323521181261657960">Premija! Galite ilgiau naudoti įrenginį</translation>
 <translation id="3323577066981719144">Čia atlikti pakeitimai taikomi tik naršyklei „Chrome“. Jei norite atlikti „Lacros“ naršyklės „Chrome“ nustatymų pakeitimus, atidarykite „Lacros“ naršyklę „Chrome“ ir eikite į nustatymus.</translation>
 <translation id="3325804108816646710">Ieškoma pasiekiamų profilių...</translation>
@@ -2687,7 +2684,6 @@
 <translation id="3445925074670675829">USB-C įrenginys</translation>
 <translation id="3446274660183028131">Norėdami įdiegti „Windows“ paleiskite „Parallels Desktop“.</translation>
 <translation id="344630545793878684">Skaityti duomenys daugybėje svetainių</translation>
-<translation id="3446650212859500694">Šiame faile yra neskelbtino turinio</translation>
 <translation id="3447644283769633681">Blokuoti visus trečiosios šalies slapukus</translation>
 <translation id="3448492834076427715">Atnaujinti paskyrą</translation>
 <translation id="3449393517661170867">Naujas skirtukų langas</translation>
@@ -3920,7 +3916,6 @@
 <translation id="4602466770786743961">Visada leisti <ph name="HOST" /> pasiekti fotoaparatą ir mikrofoną</translation>
 <translation id="4606551464649945562">Neleisti svetainėms kurti jūsų aplinkos 3D žemėlapio ir stebėti kameros padėties</translation>
 <translation id="4608500690299898628">Rasti...</translation>
-<translation id="4608703838363792434">Faile „<ph name="FILE_NAME" />“ yra neskelbtino turinio</translation>
 <translation id="4609987916561367134">Leidžiama naudoti „JavaScript“</translation>
 <translation id="4610162781778310380">Įvyko papildinio „<ph name="PLUGIN_NAME" />“ klaida</translation>
 <translation id="4610637590575890427">Ar norėjote eiti į <ph name="SITE" />?</translation>
@@ -5894,7 +5889,6 @@
 <translation id="6492396476180293140">Vidinė kamera išaktyvinta naudojant aparatinės įrangos jungiklį</translation>
 <translation id="6494327278868541139">Rodyti išsamią informaciją apie sustiprintą apsaugą</translation>
 <translation id="6494445798847293442">Ne sertifikavimo institucija</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Šiuose duomenyse yra neskelbtino arba pavojingo turinio}=1{Šiame faile yra neskelbtino arba pavojingo turinio}one{Šiuose failuose yra neskelbtino arba pavojingo turinio}few{Šiuose failuose yra neskelbtino arba pavojingo turinio}many{Šiuose failuose yra neskelbtino arba pavojingo turinio}other{Šiuose failuose yra neskelbtino arba pavojingo turinio}}</translation>
 <translation id="6497548114956205206">Sužinokite daugiau apie Energijos taupymo priemonę</translation>
 <translation id="6497784818439587832">Pakeiskite ekrano dydį, kad sumažintumėte ar padidintumėte ekrane rodomus elementus</translation>
 <translation id="6497789971060331894">Atvirkštinis slinkimas pele</translation>
@@ -6046,7 +6040,6 @@
 <translation id="6621391692573306628">Jei norite siųsti šį skirtuką į kitą įrenginį, prisijunkite prie „Chrome“ abiejuose įrenginiuose</translation>
 <translation id="6622980291894852883">Tęsti vaizdų blokavimą</translation>
 <translation id="6624036901798307345">Dirbdami planšetinio kompiuterio režimu atidarykite naują skirtuko juostelę, kurioje rodomos kiekvieno skirtuko miniatiūros, palietę įrankių juostos skirtukų skaitiklio mygtuką.</translation>
-<translation id="6624535038674360844">Faile „<ph name="FILE_NAME" />“ yra neskelbtino arba pavojingo turinio. Paprašykite savininko sutvarkyti.</translation>
 <translation id="6624687053722465643">Saldumas</translation>
 <translation id="6628328486509726751">Įkelta <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Patikimesnė apsauga</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 3046ba9..f4fdd65 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -909,7 +909,6 @@
 <translation id="1819721979226826163">Pieskarieties vienumam Lietotņu paziņojumi &gt; Google Play pakalpojumi.</translation>
 <translation id="1820028137326691631">Ievadiet administratora piešķirto paroli</translation>
 <translation id="1822140782238030981">Vai esat Chrome lietotājs? Pierakstieties!</translation>
-<translation id="1823098433522728610">Šajā dokumentā ir sensitīvs saturs.</translation>
 <translation id="18245044880483936">Dublētie dati netiks ieskaitīti jūsu bērna Diska krātuves kvotā.</translation>
 <translation id="1825565032302550710">Porta numuram jābūt starp 1024 un 65535</translation>
 <translation id="182577151972096764">nesen skatītās receptes</translation>
@@ -1942,7 +1941,6 @@
 <translation id="2743301740238894839">Sākt</translation>
 <translation id="2743387203779672305">Kopēt starpliktuvē</translation>
 <translation id="2745080116229976798">Microsoft pilnīga pakārtotība</translation>
-<translation id="2747266560080989517">Šis fails ietver sensitīvu vai bīstamu saturu. Lūdziet faila īpašniekam to labot.</translation>
 <translation id="2749756011735116528">Pierakstīties produktā <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Pārbaudīt gramatiku un pareizrakstību</translation>
@@ -2537,7 +2535,6 @@
 <translation id="3317459757438853210">Divpusēja</translation>
 <translation id="3317678681329786349">Kameras un mikrofona lietošana ir bloķēta</translation>
 <translation id="3320630259304269485">Droša pārlūkošana (aizsardzība pret bīstamām vietnēm) un citi drošības iestatījumi.</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Šie dati ietver sensitīvu vai bīstamu saturu. Noņemiet šo saturu un mēģiniet vēlreiz.}=1{Šis fails ietver sensitīvu vai bīstamu saturu. Noņemiet šo saturu un mēģiniet vēlreiz.}zero{Šie faili ietver sensitīvu vai bīstamu saturu. Noņemiet šo saturu un mēģiniet vēlreiz.}one{Šie faili ietver sensitīvu vai bīstamu saturu. Noņemiet šo saturu un mēģiniet vēlreiz.}other{Šie faili ietver sensitīvu vai bīstamu saturu. Noņemiet šo saturu un mēģiniet vēlreiz.}}</translation>
 <translation id="3323521181261657960">Bonuss! Pagarināts izmantošanas ilgums</translation>
 <translation id="3323577066981719144">Šeit veiktās izmaiņas tiks lietotas tikai pārlūkā Chrome. Lai veiktu izmaiņas Lacros pārlūka Chrome iestatījumos, atveriet Lacros pārlūku Chrome un pārejiet uz iestatījumiem.</translation>
 <translation id="3325804108816646710">Notiek pieejamu profilu meklēšana...</translation>
@@ -2671,7 +2668,6 @@
 <translation id="3445925074670675829">USB-C ierīce</translation>
 <translation id="3446274660183028131">Lai instalētu Windows, palaidiet Parallels Desktop.</translation>
 <translation id="344630545793878684">Lasīt jūsu datus vairākās vietnēs</translation>
-<translation id="3446650212859500694">Šis fails ietver sensitīvu saturu.</translation>
 <translation id="3447644283769633681">Bloķēt visus trešo pušu sīkfailus</translation>
 <translation id="3448492834076427715">Atjaunināt kontu</translation>
 <translation id="3449393517661170867">Jauns logs ar cilnēm</translation>
@@ -3903,7 +3899,6 @@
 <translation id="4602466770786743961">Vienmēr atļaut vietnei <ph name="HOST" /> piekļūt kamerai un mikrofonam</translation>
 <translation id="4606551464649945562">Neļaut vietnēm izveidot jūsu apkārtnes 3D karti vai izsekot kameras pozīciju</translation>
 <translation id="4608500690299898628">&amp;Atrast...</translation>
-<translation id="4608703838363792434">Fails <ph name="FILE_NAME" /> ietver sensitīvu saturu.</translation>
 <translation id="4609987916561367134">Drīkst izmantot JavaScript</translation>
 <translation id="4610162781778310380">Spraudnī <ph name="PLUGIN_NAME" /> radās kļūda.</translation>
 <translation id="4610637590575890427">Vai jūs vēlējāties doties uz <ph name="SITE" />?</translation>
@@ -5873,7 +5868,6 @@
 <translation id="6492396476180293140">Iekšējā kamera tika deaktivizēta, nospiežot aparatūras slēdzi.</translation>
 <translation id="6494327278868541139">Rādīt uzlabotās aizsardzības informāciju</translation>
 <translation id="6494445798847293442">Nav sertifikāta izdevējiestāde</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Šie dati ietver sensitīvu vai bīstamu saturu.}=1{Šis fails ietver sensitīvu vai bīstamu saturu.}zero{Šie faili ietver sensitīvu vai bīstamu saturu.}one{Šie faili ietver sensitīvu vai bīstamu saturu.}other{Šie faili ietver sensitīvu vai bīstamu saturu.}}</translation>
 <translation id="6497548114956205206">Uzzināt vairāk par enerģijas taupīšanas režīmu</translation>
 <translation id="6497784818439587832">Mainiet attēlojuma lielumu, lai samazinātu vai palielinātu ekrānā redzamos vienumus.</translation>
 <translation id="6497789971060331894">Peles ritināšana atpakaļgaitā</translation>
@@ -6023,7 +6017,6 @@
 <translation id="6621391692573306628">Lai nosūtītu šo cilni uz citu ierīci, abās ierīcēs pierakstieties pārlūkā Chrome</translation>
 <translation id="6622980291894852883">Turpināt bloķēt attēlus</translation>
 <translation id="6624036901798307345">Planšetdatora režīmā pieskarieties ciļņu skaitītāja rīkjoslas pogai, lai atvērtu jaunu ciļņu joslu, kurā būs redzams katras cilnes sīktēls.</translation>
-<translation id="6624535038674360844">Fails <ph name="FILE_NAME" /> ietver sensitīvu vai bīstamu saturu. Lūdziet faila īpašniekam to labot.</translation>
 <translation id="6624687053722465643">Kārums</translation>
 <translation id="6628328486509726751">Augšupielādēts: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Labāka aizsardzība</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 7df2c6e..0aa19d8 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -922,7 +922,6 @@
 <translation id="1819721979226826163">Допрете „Известувања за апликации &gt; Услуги на Google Play“.</translation>
 <translation id="1820028137326691631">Внесете лозинка што ви ја обезбедил администраторот</translation>
 <translation id="1822140782238030981">Веќе сте корисник на Chrome? Најавете се</translation>
-<translation id="1823098433522728610">Документов содржи чувствителни содржини.</translation>
 <translation id="18245044880483936">Податоците од бекапот нема да се вбројуваат во квотата за простор на Drive на вашето дете.</translation>
 <translation id="1825565032302550710">Портата мора да биде помеѓу 1024 и 65535</translation>
 <translation id="182577151972096764">неодамна прегледани рецепти</translation>
@@ -1960,7 +1959,6 @@
 <translation id="2743387203779672305">Копирај на клип-табла</translation>
 <translation id="274362947316498129">Апликација се обидува да пристапи до <ph name="DEVICE_NAME" />. Исклучете го прекинувачот за приватност на <ph name="DEVICE_NAME" /> за да дозволите пристап.</translation>
 <translation id="2745080116229976798">Квалификувана подреденост на Microsoft</translation>
-<translation id="2747266560080989517">Датотекава содржи чувствителни или опасни содржини. Побарајте од сопственикот да ја поправи.</translation>
 <translation id="2749756011735116528">Најави се на <ph name="PRODUCT_NAME" />…</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Провери граматика со правопис</translation>
@@ -2556,7 +2554,6 @@
 <translation id="3317459757438853210">Двострано</translation>
 <translation id="3317678681329786349">Камерата и микрофонот се блокирани</translation>
 <translation id="3320630259304269485">Безбедно прелистување (заштита од опасни сајтови) и други безбедносни поставки</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Податоциве содржат чувствителни или опасни содржини. Отстранете ги тие содржини и обидете се повторно.}=1{Датотекава содржи чувствителни или опасни содржини. Отстранете ги тие содржини и обидете се повторно.}one{Датотекиве содржат чувствителни или опасни содржини. Отстранете ги тие содржини и обидете се повторно.}other{Датотекиве содржат чувствителни или опасни содржини. Отстранете ги тие содржини и обидете се повторно.}}</translation>
 <translation id="3323521181261657960">Бонус! Доби уште време за користење на уредот</translation>
 <translation id="3323577066981719144">Промените што ќе ги извршите тука важат само за прелистувачот Chrome. За да извршите промени во поставките за прелистувачот Lacros Chrome, отворете го и одете во поставки.</translation>
 <translation id="3325804108816646710">Се бараат достапни профили…</translation>
@@ -2690,7 +2687,6 @@
 <translation id="3445925074670675829">USB-Ц уред</translation>
 <translation id="3446274660183028131">Стартувајте Parallels Desktop за да инсталирате Windows.</translation>
 <translation id="344630545793878684">Читајте ги вашите податоци на голем број веб-локации</translation>
-<translation id="3446650212859500694">Датотекава содржи чувствителни содржини</translation>
 <translation id="3447644283769633681">Блокирајте ги сите колачиња од трети страни</translation>
 <translation id="3448492834076427715">Ажурирајте ја сметката</translation>
 <translation id="3449393517661170867">Нов прозорец со картички</translation>
@@ -3925,7 +3921,6 @@
 <translation id="4602466770786743961">Секогаш дозволувај <ph name="HOST" /> да пристапи до камерата и микрофонот</translation>
 <translation id="4606551464649945562">Не дозволувај им на сајтовите да создаваат 3D-карта на опкружувањето или да ја следат позицијата на камерата</translation>
 <translation id="4608500690299898628">&amp;Најди...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> содржи чувствителни содржини</translation>
 <translation id="4609987916561367134">Дозволено им е да користат JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> наиде на грешка</translation>
 <translation id="4610637590575890427">Дали мислевте да одите на <ph name="SITE" />?</translation>
@@ -5904,7 +5899,6 @@
 <translation id="6492396476180293140">Внатрешната камера е деактивирана со хардверски прекинувач</translation>
 <translation id="6494327278868541139">Прикажи ги деталите за подобрената заштита</translation>
 <translation id="6494445798847293442">Не е орган за сертифицирање</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Податоциве содржат чувствителни или опасни содржини}=1{Датотекава содржи чувствителни или опасни содржини}one{Датотекиве содржат чувствителни или опасни содржини}other{Датотекиве содржат чувствителни или опасни содржини}}</translation>
 <translation id="6497548114956205206">Дознајте повеќе за штедачот на енергија</translation>
 <translation id="6497784818439587832">Променете ја големината на екранот за да се намалат или зголемат ставките на екранот</translation>
 <translation id="6497789971060331894">Обратно лизгање на глувчето</translation>
@@ -6052,7 +6046,6 @@
 <translation id="6621391692573306628">За да ја испратите картичкава на друг уред, најавете се на Chrome на двата уреда</translation>
 <translation id="6622980291894852883">Продолжи со блокирање слики…</translation>
 <translation id="6624036901798307345">Во режимот на таблет, допрете го копчето за алатник на бројачот на картички за да се отвори нова лента за картички која прикажува сликички за секоја картичка.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> содржи чувствителни или опасни содржини. Побарајте од сопственикот да ја поправи.</translation>
 <translation id="6624687053722465643">Мила</translation>
 <translation id="6628328486509726751">Прикачено <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Посилна безбедност</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 1197035..0dc6ef2 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -906,7 +906,6 @@
 <translation id="1819721979226826163">ആപ്പ് അറിയിപ്പുകൾ &gt; Google Play സേവനങ്ങൾ ടാപ്പ് ചെയ്യുക.</translation>
 <translation id="1820028137326691631">അഡ്‌മിൻ നൽകിയ പാസ്‌വേഡ് നൽകുക</translation>
 <translation id="1822140782238030981">മുമ്പേ ഒരു Chrome ഉപയോക്താവാണോ? സൈൻ ഇൻ ചെയ്യുക</translation>
-<translation id="1823098433522728610">സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഉള്ളടക്കം ഈ ഡോക്യുമെന്റിൽ അടങ്ങിയിരിക്കുന്നു.</translation>
 <translation id="18245044880483936">ബാക്കപ്പ് ഡാറ്റയും നിങ്ങളുടെ കുട്ടിയുടെ Drive സ്‌റ്റോറേജ് ക്വാട്ടയും വെവ്വേറെയായിരിക്കും.</translation>
 <translation id="1825565032302550710">പോർട്ട് 1024-നും 65535-നും ഇടയിലായിരിക്കണം</translation>
 <translation id="182577151972096764">അടുത്തിടെ കണ്ട റെസിപ്പികൾ</translation>
@@ -1940,7 +1939,6 @@
 <translation id="2743387203779672305">ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തുക</translation>
 <translation id="274362947316498129">ഒരു ആപ്പ് <ph name="DEVICE_NAME" /> ആക്‌സസ് ചെയ്യാൻ ശ്രമിക്കുന്നു. ആക്‌സസ് നൽകാൻ <ph name="DEVICE_NAME" /> സ്വകാര്യതാ സ്വിച്ച് ഓഫാക്കുക.</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">ഈ ഫയലിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു. പരിഹരിക്കാൻ അതിന്റെ ഉടമയോട് ആവശ്യപ്പെടുക.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> എന്നതിലേയ്‍ക്ക് സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="2749836841884031656">സിം</translation>
 <translation id="2749881179542288782">സ്‌പെല്ലിംഗിനൊപ്പം വ്യാകരണവും പരിശോധിക്കുക</translation>
@@ -2535,7 +2533,6 @@
 <translation id="3317459757438853210">രണ്ട്-വശങ്ങളുള്ള</translation>
 <translation id="3317678681329786349">ക്യാമറയും മൈക്രോഫോണും ബ്ലോക്ക് ചെയ്‌‌തു</translation>
 <translation id="3320630259304269485">സുരക്ഷിത ബ്രൗസിംഗും (അപകടകരമായ സൈറ്റുകളിൽ നിന്നുള്ള പരിരക്ഷ) മറ്റ് സുരക്ഷാ ക്രമീകരണവും</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ഈ ഡാറ്റയിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു. ഈ ഉള്ളടക്കം നീക്കം ചെയ്‌ത് വീണ്ടും ശ്രമിക്കുക.}=1{ഈ ഫയലിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു. ഈ ഉള്ളടക്കം നീക്കം ചെയ്‌ത് വീണ്ടും ശ്രമിക്കുക.}other{ഈ ഫയലുകളിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു. ഈ ഉള്ളടക്കം നീക്കം ചെയ്‌ത് വീണ്ടും ശ്രമിക്കുക.}}</translation>
 <translation id="3323521181261657960">ബോണസ്! നിങ്ങൾക്ക് കൂടുതൽ സ്‌ക്രീൻ സമയം ലഭിച്ചിരിക്കുന്നു</translation>
 <translation id="3323577066981719144">നിങ്ങൾ ഇവിടെ വരുത്തുന്ന മാറ്റങ്ങൾ Chrome ബ്രൗസറിൽ മാത്രമേ ബാധകമാകൂ. നിങ്ങളുടെ Lacros Chrome ബ്രൗസർ ക്രമീകരണത്തിൽ മാറ്റങ്ങൾ വരുത്താൻ, Lacros Chrome ബ്രൗസർ തുറന്ന് ക്രമീകരണത്തിലേക്ക് പോകുക.</translation>
 <translation id="3325804108816646710">ലഭ്യമായ പ്രൊഫൈലുകൾ തിരയുന്നു...</translation>
@@ -2669,7 +2666,6 @@
 <translation id="3445925074670675829">USB-C ഉപകരണം</translation>
 <translation id="3446274660183028131">Windows ഇൻസ്‌റ്റാൾ ചെയ്യാൻ Parallels Desktop ലോഞ്ച് ചെയ്യുക.</translation>
 <translation id="344630545793878684">നിരവധി വെബ്‌സൈറ്റുകളിലെ നിങ്ങളുടെ വിവരം വായിക്കുക</translation>
-<translation id="3446650212859500694">ഈ ഫയലിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു</translation>
 <translation id="3447644283769633681">എല്ലാ മൂന്നാം-കക്ഷി കുക്കികളും തടയുക</translation>
 <translation id="3448492834076427715">അക്കൗണ്ട് അപ്‌ഡേറ്റ് ചെയ്യുക</translation>
 <translation id="3449393517661170867">ടാബ് ചെയ്‌ത പുതിയ വിന്‍ഡോ</translation>
@@ -3902,7 +3898,6 @@
 <translation id="4602466770786743961">നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്‌സസ് ചെയ്യുന്നതിന് <ph name="HOST" /> എന്നതിനെ എപ്പോഴും അനുവദിക്കുക</translation>
 <translation id="4606551464649945562">നിങ്ങളുടെ ചുറ്റുപാടുകളുടെ 3D മാപ്പ് സൃഷ്ടിക്കാനോ ക്യാമറയുടെ സ്ഥാനം ട്രാക്ക് ചെയ്യാനോ സൈറ്റുകളെ അനുവദിക്കരുത്</translation>
 <translation id="4608500690299898628">&amp;കണ്ടെത്തുക...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> എന്നതിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ട ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു</translation>
 <translation id="4609987916561367134">JavaScript ഉപയോഗിക്കാൻ അനുവദിച്ചിരിക്കുന്നു</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />-ന് ഒരു പിശക് നേരിട്ടു</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> -ലേക്ക് പോകണമെന്നാണോ ഉദ്ദേശിച്ചത്?</translation>
@@ -5879,7 +5874,6 @@
 <translation id="6492396476180293140">ഹാർഡ്‌വെയർ സ്വിച്ച്, ഇന്റേണൽ ക്യാമറ നിഷ്ക്രിയമാക്കി</translation>
 <translation id="6494327278868541139">മെച്ചപ്പെടുത്തിയ പരിരക്ഷയുടെ വിശദാംശങ്ങൾ കാണിക്കുക</translation>
 <translation id="6494445798847293442">ഒരു സര്‍ട്ടിഫിക്കേഷന്‍ അതോറിറ്റിയല്ല</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ഈ ഡാറ്റയിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു}=1{ഈ ഫയലിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു}other{ഈ ഫയലുകളിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു}}</translation>
 <translation id="6497548114956205206">എനർജി സേവറിനെ കുറിച്ച് കൂടുതലറിയുക</translation>
 <translation id="6497784818439587832">നിങ്ങളുടെ സ്ക്രീനിലെ ഇനങ്ങൾ ചെറുതാക്കാനോ വലുതാക്കാനോ ഡിസ്പ്ലേ വലുപ്പം മാറ്റുക</translation>
 <translation id="6497789971060331894">മൗസ് വിപരീതദിശയിൽ സ്ക്രോൾ ചെയ്യൽ</translation>
@@ -6025,7 +6019,6 @@
 <translation id="6621391692573306628">ഈ ടാബ് മറ്റൊരു ഉപകരണത്തിലേക്ക് അയയ്‌ക്കാൻ, രണ്ട് ഉപകരണങ്ങളിലെയും Chrome-ൽ സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="6622980291894852883">ചിത്രങ്ങൾ‌ തടയുന്നത് തുടരുക</translation>
 <translation id="6624036901798307345">ടാബ്‌ലെറ്റ് മോഡിൽ, ഓരോ ടാബിന്റെയും ലഘുചിത്രങ്ങൾ കാണിക്കുന്ന, തുറന്ന് വച്ചിട്ടുള്ള പുതിയ ടാബുകൾ തുറക്കാൻ ടാബ് കൗണ്ടർ ടൂൾബാർ ബട്ടൺ ടാപ്പ് ചെയ്യുക.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> എന്നതിൽ സൂക്ഷ്‌മമായി കൈകാര്യം ചെയ്യേണ്ടതോ അപകടകരമായതോ ആയ ഉള്ളടക്കം അടങ്ങിയിരിക്കുന്നു. പരിഹരിക്കാൻ അതിന്റെ ഉടമയോട് ആവശ്യപ്പെടുക.</translation>
 <translation id="6624687053722465643">സ്വീറ്റ്നസ്സ്</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> അപ്‌ലോഡുചെ‌യ്തു</translation>
 <translation id="6630117778953264026">ശക്തമായ സുരക്ഷ</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index deeb4c25..4567945 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -409,6 +409,7 @@
 <translation id="1388253969141979417">Таны микрофоныг ашиглахыг зөвшөөрсөн</translation>
 <translation id="1388728792929436380">Шинэчилж дуусахад <ph name="DEVICE_TYPE" /> дахин эхэлнэ.</translation>
 <translation id="1389601498324964367">Квотоор удирддаг хадгалах сан</translation>
+<translation id="1390113502208199250">Та Chrome Education-н сайжруулалтын онцлогуудыг ашиглахын тулд энэ төхөөрөмжийг үйлдвэрийн тохиргоонд шинэчлэх шаардлагатай болно.</translation>
 <translation id="139013308650923562">Таны төхөөрөмж дээр суулгасан фонтуудыг ашиглахыг зөвшөөрсөн</translation>
 <translation id="1390548061267426325">Энгийн цонх хэлбэрээр нээх</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> нь <ph name="PRINTER_NAME" />-р хэвлэх зөвшөөрөлгүй. Админтайгаа холбогдоно уу.</translation>
@@ -479,6 +480,7 @@
 <translation id="1436784010935106834">Устгасан</translation>
 <translation id="1437986450143295708">Асуудлыг дэлгэрэнгүй тайлбарлана уу</translation>
 <translation id="1439671507542716852">урт хугацааны тусламж</translation>
+<translation id="1440090277117135316">Сургуулийн элсэлт дууслаа</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" />-г сонгосон</translation>
 <translation id="1442851588227551435">Идэвхтэй Kerberos тасалбарыг тохируулах</translation>
 <translation id="1444628761356461360">Энэ тохиргоог төхөөрөмжийн эзэмшигч удирддаг, <ph name="OWNER_EMAIL" />.</translation>
@@ -914,7 +916,6 @@
 <translation id="1819721979226826163">Аппын мэдэгдэл &gt; Google Play үйлчилгээг товшино уу.</translation>
 <translation id="1820028137326691631">Админы өгсөн нууц үгийг оруулах</translation>
 <translation id="1822140782238030981">Chrome-н хэрэглэгч үү? Нэвтэрнэ үү</translation>
-<translation id="1823098433522728610">Энэ документод эмзэг контент байна.</translation>
 <translation id="18245044880483936">Нөөцлөлтийн өгөгдөл нь таны хүүхдийн Драйв сангийн багтаамжид нөлөөлөхгүй.</translation>
 <translation id="1825565032302550710">Порт нь 1024 болон 65535-ын хооронд байх ёстой</translation>
 <translation id="182577151972096764">саяхан харсан жорууд</translation>
@@ -1951,7 +1952,6 @@
 <translation id="2743301740238894839">Эхлүүлэх</translation>
 <translation id="2743387203779672305">Завсрын түр санах самбар луу хуулах</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">Энэ файл эмзэг эсвэл аюултай контенттой байна. Өмчлөгчөөс нь үүнийг засахыг хүснэ үү.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> руу нэвтрэх</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Зөв бичих дүрмийн алдааг шалгах</translation>
@@ -2407,6 +2407,7 @@
 <translation id="3170072451822350649">Та нэвтэрч орох ажиллагааг алгасаж болох бөгөөд <ph name="LINK_START" /> зочны хувиар хайлт хийж болно<ph name="LINK_END" /> .</translation>
 <translation id="31774765611822736">Шинэ табыг зүүн тийш нь</translation>
 <translation id="3177909033752230686">Хуудасны хэл:</translation>
+<translation id="3177914167275935955">Таны төхөөрөмжид Chrome Education-н сайжруулалт багтсан хэдий ч таны хэрэглэгчийн нэр Google for Education бүртгэлтэй холбоогүй байна. Хоёрдогч төхөөрөмжөөс g.co/workspace/edusignup-д зочилж Google for Education бүртгэл үүсгэнэ үү.</translation>
 <translation id="3179982752812949580">Текстийн фонт</translation>
 <translation id="3181954750937456830">Аюулгүй хөтөч (таныг болон таны төхөөрөмжийг аюултай сайтаас хамгаалдаг)</translation>
 <translation id="3182749001423093222">Зөв бичгийн алдаа шалгах</translation>
@@ -2546,7 +2547,6 @@
 <translation id="3317459757438853210">Хоёр талт</translation>
 <translation id="3317678681329786349">Камер болон микрофоныг блоклосон</translation>
 <translation id="3320630259304269485">Аюулгүй үзэх (аюултай сайтаас хамгаалах хамгаалалт) болон аюулгүй байдлын бусад тохиргоо</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Энэ өгөгдөл эмзэг эсвэл аюултай контенттой байна. Энэ контентыг хасаад, дахин оролдоно уу.}=1{Энэ файл эмзэг эсвэл аюултай контенттой байна. Энэ контентыг хасаад, дахин оролдоно уу.}other{Эдгээр файл эмзэг эсвэл аюултай контенттой байна. Энэ контентыг хасаад, дахин оролдоно уу.}}</translation>
 <translation id="3323521181261657960">Бонус! Таны дэлгэцийн цагийг сунгалаа</translation>
 <translation id="3323577066981719144">Таны энд хийсэн өөрчлөлтүүд зөвхөн Chrome хөтчид хэрэгжинэ. Lacros Chrome хөтчийн тохиргоондоо өөрчлөлтүүд хийхийн тулд Lacros Chrome хөтчийг нээж, тохиргоо руу очно уу.</translation>
 <translation id="3325804108816646710">Боломжтой профайлыг хайж байна...</translation>
@@ -2680,7 +2680,6 @@
 <translation id="3445925074670675829">USB-C төхөөрөмж</translation>
 <translation id="3446274660183028131">Windows-г суулгахын тулд Parallels Desktop-г эхлүүлнэ үү.</translation>
 <translation id="344630545793878684">Олон тооны веб хуудсууд дээр байгаа өөрийнхөө мэдээллийг уншина уу</translation>
-<translation id="3446650212859500694">Энэ файл эмзэг контенттой байна</translation>
 <translation id="3447644283769633681">Гуравдагч талын бүх күүкиг блоклох</translation>
 <translation id="3448492834076427715">Бүртгэл шинэчлэх</translation>
 <translation id="3449393517661170867">Шинэ табтай цонх</translation>
@@ -3912,7 +3911,6 @@
 <translation id="4602466770786743961"><ph name="HOST" />-д таны камер болон микрофонд нэвтрэхийг үргэлж зөвшөөрөх</translation>
 <translation id="4606551464649945562">Сайтуудад таны эргэн тойрны 3D газрын зургийг үүсгэх эсвэл камерын хөдөлгөөнийг хянахыг үл зөвшөөрөх</translation>
 <translation id="4608500690299898628">&amp;Олох...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> эмзэг контенттой байна</translation>
 <translation id="4609987916561367134">JavaScript-г ашиглахыг зөвшөөрсөн</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />-д алдаа гарлаа</translation>
 <translation id="4610637590575890427">Та энэ <ph name="SITE" /> руу орох гэж байсан уу?</translation>
@@ -4076,6 +4074,7 @@
 <translation id="4762489666082647806">Заагчийн өнгө</translation>
 <translation id="4762718786438001384">Төхөөрөмжийн дискний багтаамж маш бага байна</translation>
 <translation id="4763408175235639573">Таныг энэ хуудсыг харахад дараах күүкийг тохируулсан</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> Google for Education бүртгэл биш байна. Администратортайгаа холбогдоно уу. Хэрэв та администратор бол дараахад зочилсноор байгууллагаа тохируулах боломжтой: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Энэ төхөөрөмжийг 1 сарын турш хадгалах бөгөөд та дараагийн удаа кодгүйгээр холбогдох боломжтой. Үүнийг танай администратор тохируулсан.}other{Энэ төхөөрөмжийг {MONTHS} сарын турш хадгалах бөгөөд та дараагийн удаа кодгүйгээр холбогдох боломжтой. Үүнийг танай администратор тохируулсан.}}</translation>
 <translation id="4765582662863429759">Андройд Мессежийг таны утаснаас таны Chromebook-д мессеж илгээхийг зөвшөөрдөг</translation>
 <translation id="4766598565665644999">Бүх өргөтгөлүүд <ph name="HOST" />-г унших, өөрчлөх боломжтой</translation>
@@ -4737,6 +4736,7 @@
 <translation id="5407167491482639988">Ойлгомжгүй</translation>
 <translation id="5408750356094797285">Томруулалт: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">Таны Google Бүртгэлээс</translation>
+<translation id="5411022484772257615">Сургуулийн элсэлтийг дуусгаж чадсангүй</translation>
 <translation id="5413640305322530561">Оношилгоо болон ашиглалтын өгөгдлийн талаар нэмэлт мэдээлэл авна уу</translation>
 <translation id="5414198321558177633">Профайлын жагсаалтыг сэргээж байна. Үүнд хэдэн минут шаардлагатай байж магадгүй.</translation>
 <translation id="5414566801737831689">Өөрийн ордог вэбсайтуудынхаа дүрснүүдийг уншуулна уу</translation>
@@ -5522,6 +5522,7 @@
 <translation id="6129953537138746214">Space</translation>
 <translation id="6130692320435119637">Wi-Fi нэмэх</translation>
 <translation id="6130887916931372608">Гарны товчлуур</translation>
+<translation id="6132714462430777655">Сургуулийн элсэлтийг алгасах уу?</translation>
 <translation id="6135823405800500595">Таны утас ойрхон, түгжээг нь тайлсан, Bluetooth, Wi-Fi нь асаалттай эсэхийг шалгана уу</translation>
 <translation id="6135826623269483856">Таны бүх дэлгэц дээр цонх удирдахыг зөвшөөрөөгүй</translation>
 <translation id="6136114942382973861">Татаж авсан файл хадгалах эсвэл нээх хэсгийг хаах</translation>
@@ -5885,7 +5886,6 @@
 <translation id="6492396476180293140">Техник хангамжийн сэлгүүрээр дотоод камерыг идэвхгүй болгосон</translation>
 <translation id="6494327278868541139">Сайжруулсан хамгаалалтын дэлгэрэнгүйг харуулах</translation>
 <translation id="6494445798847293442">Гэрчилгээжүүлэх эрхгүй</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Энэ өгөгдөл эмзэг эсвэл аюултай контенттой байна}=1{Энэ файл эмзэг эсвэл аюултай контенттой байна}other{Эдгээр файл эмзэг эсвэл аюултай контенттой байна}}</translation>
 <translation id="6497548114956205206">Эрчим хүч хэмнэгчийн талаар нэмэлт мэдээлэл авах</translation>
 <translation id="6497784818439587832">Дэлгэц дээрх зүйлсээ жижигрүүлэх эсвэл томруулахын тулд дэлгэцийн хэмжээг өөрчлөөрэй</translation>
 <translation id="6497789971060331894">Хулганыг урвуу гүйлгэх</translation>
@@ -6031,7 +6031,6 @@
 <translation id="6621391692573306628">Энэ табыг өөр төхөөрөмж рүү илгээхийн тулд аль аль төхөөрөмж дээр Chrome-д нэвтэрнэ үү</translation>
 <translation id="6622980291894852883">Зураг блоклохыг үргэлжлүүлэх</translation>
 <translation id="6624036901798307345">Таблетын горимд таб тус бүрийн өнгөц зургийг харуулсан шинэ таб зурвасыг нээхийн тулд таб тоологч самбарын товчлуур дээр товшино уу.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> эмзэг эсвэл аюултай контенттой байна. Өмчлөгчөөс нь үүнийг засахыг хүснэ үү.</translation>
 <translation id="6624687053722465643">Амттай байдал</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" />-ыг татаж авчирсан</translation>
 <translation id="6630117778953264026">Илүү хүчирхэг аюулгүй байдал</translation>
@@ -6743,6 +6742,7 @@
 <translation id="7310598146671372464">Нэвтэрч чадсангүй. Сервер нь Kerberos-н тодорхой шифрлэлтийн төрлийг дэмждэггүй. Админтайгаа холбогдоно уу.</translation>
 <translation id="7311089766378749632"><ph name="SITE_NAME" />-г уншиж, өөрчлөх хүсэлт тавьж байна</translation>
 <translation id="7312210124139670355">Таны администратор eSIM-г тань шинэчилж байна. Үүнд хэдэн минут шаардлагатай.</translation>
+<translation id="7317831949569936035">Сургуулийн элсэлт</translation>
 <translation id="7320213904474460808">Сүлжээг өгөгдмөл болгох</translation>
 <translation id="7321545336522791733">Серверт холбогдох боломжгүй</translation>
 <translation id="7323315405936922211">Курсорын хэсгийн хэмжээ</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 640cfe2..24ba7bf 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -917,7 +917,6 @@
 <translation id="1819721979226826163">अ‍ॅप सूचना &gt; Google Play सेवा वर टॅप करा.</translation>
 <translation id="1820028137326691631">ॲडमिनने पुरवलेला पासवर्ड एंटर करा</translation>
 <translation id="1822140782238030981">आधीच Chrome वापरकर्ता आहात? साइन इन करा</translation>
-<translation id="1823098433522728610">या दस्तऐवजामध्ये संवेदनशील आशय आहे.</translation>
 <translation id="18245044880483936">बॅकअप डेटा तुमच्या मुलाच्या ड्राइव्ह स्टोरेजच्या कोट्यामध्ये मोजला जाणार नाही.</translation>
 <translation id="1825565032302550710">पोर्ट १०२४ आणि ६५५३५ यांच्या मधले असणे आवश्यक आहे</translation>
 <translation id="182577151972096764">अलीकडे पाहिलेल्या पाककृती</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2743301740238894839">सुरू करा</translation>
 <translation id="2743387203779672305">क्लिपबोर्डवर कॉपी करा</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">या फाइलमध्ये संवेदनशील किंवा धोकादायक आशय आहे. तिच्या मालकाला ती दुरुस्त करण्यास सांगा.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> मध्ये साइन इन करा</translation>
 <translation id="2749836841884031656">सिम</translation>
 <translation id="2749881179542288782">शुद्धलेखनासह व्याकरण तपासा</translation>
@@ -2549,7 +2547,6 @@
 <translation id="3317459757438853210">दोन्ही बाजूंनी</translation>
 <translation id="3317678681329786349">कॅमेरा आणि मायक्रोफोन ब्लॉक केले आहेत</translation>
 <translation id="3320630259304269485">सुरक्षित ब्राउझिंग (धोकादायक साइटपासून संरक्षण) आणि इतर सुरक्षितता सेटिंग्ज</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{या डेटामध्ये संवेदनशील किंवा धोकादायक आशय आहे. हा आशय काढा आणि पुन्हा प्रयत्न करा.}=1{या फाइलमध्ये संवेदनशील किंवा धोकादायक आशय आहे. हा आशय काढा आणि पुन्हा प्रयत्न करा.}other{या फाइलमध्ये संवेदनशील किंवा धोकादायक आशय आहे. हा आशय काढा आणि पुन्हा प्रयत्न करा.}}</translation>
 <translation id="3323521181261657960">बोनस! तुम्हाला आणखी स्क्रीन वेळ मिळाला</translation>
 <translation id="3323577066981719144">तुम्ही येथे केलेले बदल फक्त Chrome ब्राउझरवर लागू होतात. तुमच्या Lacros Chrome ब्राउझर सेटिंग्जमध्ये बदल करण्यासाठी, Lacros Chrome ब्राउझर उघडा आणि सेटिंग्जवर जा.</translation>
 <translation id="3325804108816646710">उपलब्ध प्रोफाइल शोधत आहे...</translation>
@@ -2683,7 +2680,6 @@
 <translation id="3445925074670675829">USB-C डिव्‍हाइस</translation>
 <translation id="3446274660183028131">Windows इंस्टॉल करण्यासाठी कृपया Parallels Desktop लाँच करा.</translation>
 <translation id="344630545793878684">अनेक वेबसाइटवर तुमचा डेटा वाचा</translation>
-<translation id="3446650212859500694">या फाइलमध्ये संवेदनशील आशय आहे</translation>
 <translation id="3447644283769633681">सर्व तृतीय-पक्ष कुकीज ब्लॉक करा</translation>
 <translation id="3448492834076427715">खाते अपडेट करा</translation>
 <translation id="3449393517661170867">नवीन टॅब असलेल्या विंडोमध्ये उघडा</translation>
@@ -3914,7 +3910,6 @@
 <translation id="4602466770786743961">नेहमी <ph name="HOST" /> ला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्‍यास परवानगी द्या</translation>
 <translation id="4606551464649945562">साइटना तुमच्या आसपासच्या परिसराचा 3D नकाशा तयार करू किंवा कॅमेर्‍याचे स्थान ट्रॅक करू देऊ नका</translation>
 <translation id="4608500690299898628">&amp;शोधा...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> मध्ये संवेदनशील आशय आहे</translation>
 <translation id="4609987916561367134">JavaScript वापरण्याची अनुमती आहे</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ला एरर आली</translation>
 <translation id="4610637590575890427">तुम्हाला <ph name="SITE" /> कडे जायचे असे म्हणायचे होते काय?</translation>
@@ -5888,7 +5883,6 @@
 <translation id="6492396476180293140">अंतर्गत कॅमेरा हा हार्डवेअर स्विचद्वारे डीॲक्टिव्हेट केला</translation>
 <translation id="6494327278868541139">वर्धित संरक्षणाचे तपशील दाखवा</translation>
 <translation id="6494445798847293442">प्रमाणीकरण अधिकृतता नाही</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{या डेटामध्ये संवेदनशील किंवा धोकादायक आशय आहे}=1{या फाइलमध्ये संवेदनशील किंवा धोकादायक आशय आहे}other{या फाइलमध्ये संवेदनशील किंवा धोकादायक आशय आहे}}</translation>
 <translation id="6497548114956205206">एनर्जी सेव्हरबद्दल अधिक जाणून घ्या</translation>
 <translation id="6497784818439587832">तुमच्या स्क्रीनवरील आयटम लहान किंवा मोठे करण्यासाठी डिस्प्लेचा आकार बदला</translation>
 <translation id="6497789971060331894">माउस रिव्हर्स स्क्रोलिंग</translation>
@@ -6034,7 +6028,6 @@
 <translation id="6621391692573306628">हा टॅब दुसर्‍या डिव्हाइसवर पाठवण्यासाठी, दोन्ही डिव्हाइसवर Chrome मध्ये साइन इन करा</translation>
 <translation id="6622980291894852883">इमेज ब्लॉक करणे सुरू ठेवा</translation>
 <translation id="6624036901798307345">प्रत्येक टॅबचे थंबनेल दाखवणारी नवीन टॅब स्ट्रिप उघडण्यासाठी टॅबलेट मोडमध्ये, टॅब काउंटर टूलबार बटणवर टॅप करा.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> मध्ये संवेदनशील किंवा धोकादायक आशय आहे. तिच्या मालकाला ती दुरुस्त करण्यास सांगा.</translation>
 <translation id="6624687053722465643">गोडवा</translation>
 <translation id="6628328486509726751">अपलोड केलेली <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">अधिक मजबूत सुरक्षा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index febad92..eab1b26b5 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -409,6 +409,7 @@
 <translation id="1388253969141979417">Dibenarkan untuk menggunakan mikrofon anda</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> akan dimulakan semula apabila kemaskinian selesai.</translation>
 <translation id="1389601498324964367">Storan terurus kuota</translation>
+<translation id="1390113502208199250">Anda perlu melakukan tetapan semula kilang pada peranti ini untuk menggunakan ciri Peningkatan Pendidikan Chrome.</translation>
 <translation id="139013308650923562">Dibenarkan untuk menggunakan fon yang dipasang pada peranti anda</translation>
 <translation id="1390548061267426325">Buka sebagai Tab Biasa</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> tidak diizinkan untuk mencetak ke <ph name="PRINTER_NAME" />. Sila hubungi pentadbir anda.</translation>
@@ -479,6 +480,7 @@
 <translation id="1436784010935106834">Dibuang</translation>
 <translation id="1437986450143295708">Terangkan isu itu secara terperinci</translation>
 <translation id="1439671507542716852">sokongan jangka panjang</translation>
+<translation id="1440090277117135316">Pendaftaran sekolah selesai</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> dipilih</translation>
 <translation id="1442851588227551435">Tetapkan tiket Kerberos yang aktif</translation>
 <translation id="1444628761356461360">Tetapan ini diuruskan oleh pemilik peranti, <ph name="OWNER_EMAIL" />.</translation>
@@ -918,7 +920,6 @@
 <translation id="1819721979226826163">Ketik Pemberitahuan apl &gt; Perkhidmatan Google Play.</translation>
 <translation id="1820028137326691631">Masukkan kata laluan yang disediakan oleh pentadbir</translation>
 <translation id="1822140782238030981">Sudah menjadi pengguna Chrome? Log masuk</translation>
-<translation id="1823098433522728610">Dokumen ini mengandungi kandungan sensitif.</translation>
 <translation id="18245044880483936">Data sandaran tidak dikira dalam kuota storan Drive anak anda.</translation>
 <translation id="1825565032302550710">Port mestilah antara 1024 hingga 65535</translation>
 <translation id="182577151972096764">resipi yang dilihat baru-baru ini</translation>
@@ -1954,8 +1955,8 @@
 <translation id="274318651891194348">Mencari papan kekunci</translation>
 <translation id="2743301740238894839">Mula</translation>
 <translation id="2743387203779672305">Salin ke papan keratan</translation>
+<translation id="274362947316498129">Satu apl sedang cuba mengakses <ph name="DEVICE_NAME" />. Matikan suis privasi <ph name="DEVICE_NAME" /> untuk membenarkan akses.</translation>
 <translation id="2745080116229976798">Subordinasi Layak Microsoft</translation>
-<translation id="2747266560080989517">Fail ini mengandungi kandungan sensitif atau berbahaya. Minta pemilik membetulkan fail ini.</translation>
 <translation id="2749756011735116528">Log masuk ke <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Periksa Tatabahasa Dengan Ejaan</translation>
@@ -2411,6 +2412,7 @@
 <translation id="3170072451822350649">Anda juga boleh melangkau log masuk dan <ph name="LINK_START" />menyemak imbas sebagai tetamu<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Tab baharu ke kiri</translation>
 <translation id="3177909033752230686">Bahasa Halaman:</translation>
+<translation id="3177914167275935955">Peranti anda merangkumi Peningkatan Pendidikan Chrome tetapi nama pengguna anda tidak dikaitkan dengan akaun Google for Education. Sila buat akaun Google for Education dengan melawati g.co/workspace/edusignup pada peranti kedua.</translation>
 <translation id="3179982752812949580">Fon teks</translation>
 <translation id="3181954750937456830">Penyemakan Imbas Selamat (melindungi anda dan peranti anda daripada tapak yang berbahaya)</translation>
 <translation id="3182749001423093222">Semakan ejaan</translation>
@@ -2550,7 +2552,6 @@
 <translation id="3317459757438853210">Dua sisi</translation>
 <translation id="3317678681329786349">Kamera dan mikrofon disekat</translation>
 <translation id="3320630259304269485">Tetapan Penyemakan Imbas Selamat (perlindungan daripada tapak berbahaya) dan tetapan keselamatan lain</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Data ini mengandungi kandungan sensitif atau berbahaya. Alih keluar kandungan ini dan cuba lagi.}=1{Fail ini mengandungi kandungan sensitif atau berbahaya. Alih keluar kandungan ini dan cuba lagi.}other{Fail ini mengandungi kandungan sensitif atau berbahaya. Alih keluar kandungan ini dan cuba lagi.}}</translation>
 <translation id="3323521181261657960">Bonus! Masa skrin anda lebih lama</translation>
 <translation id="3323577066981719144">Perubahan yang anda buat di sini hanya digunakan pada Penyemak Imbas Chrome. Untuk membuat perubahan pada tetapan Penyemak Imbas Chrome Lacros anda, buka Penyemak Imbas Chrome Lacros dan pergi ke tetapan.</translation>
 <translation id="3325804108816646710">Mencari profil yang tersedia...</translation>
@@ -2684,7 +2685,6 @@
 <translation id="3445925074670675829">Peranti USB-C</translation>
 <translation id="3446274660183028131">Sila lancarkan Parallels Desktop untuk memasang Windows.</translation>
 <translation id="344630545793878684">Baca data anda di beberapa laman web</translation>
-<translation id="3446650212859500694">Fail ini mengandungi kandungan sensitif</translation>
 <translation id="3447644283769633681">Sekat semua kuki pihak ketiga</translation>
 <translation id="3448492834076427715">Kemas kini akaun</translation>
 <translation id="3449393517661170867">Tetingkap bertab baharu</translation>
@@ -3126,6 +3126,7 @@
 <translation id="385051799172605136">Kembali</translation>
 <translation id="3851428669031642514">Muatkan skrip yang tidak selamat</translation>
 <translation id="3852215160863921508">Bantuan Input</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> dihidupkan</translation>
 <translation id="3854599674806204102">Buat pilihan</translation>
 <translation id="3854967233147778866">Tawaran untuk menterjemah laman web dalam bahasa lain</translation>
 <translation id="3854976556788175030">Dulang output penuh</translation>
@@ -3459,6 +3460,7 @@
 <translation id="4163560723127662357">Papan kekunci yang tidak diketahui.</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> bukan milik organisasi yang sah. Hubungi pentadbir anda. Jika anda seorang pentadbir, anda boleh menyediakan organisasi anda dengan melawati: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Tetapan tapak</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> sedang cuba untuk mengakses <ph name="DEVICE_NAME" />. Matikan suis privasi <ph name="DEVICE_NAME" /> untuk membenarkan akses.</translation>
 <translation id="4167393659000039775">Google tidak bertanggungjawab atas sebarang kehilangan data dan <ph name="DEVICE_OS" /> mungkin tidak berfungsi pada model yang tidak diperakui. Ketahui lebih lanjut di g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Tapak biasanya menggunakan JavaScript untuk memaparkan ciri interaktif, seperti permainan video atau borang web</translation>
 <translation id="4168015872538332605">Beberapa tetapan milik <ph name="PRIMARY_EMAIL" /> sedang dikongsikan dengan anda. Tetapan ini hanya mempengaruhi akaun anda semasa menggunakan berbilang log masuk.</translation>
@@ -3917,11 +3919,11 @@
 <translation id="4602466770786743961">Sentiasa benarkan <ph name="HOST" /> mengakses kamera dan mikrofon anda</translation>
 <translation id="4606551464649945562">Jangan benarkan tapak membuat peta 3D bagi persekitaran anda dan menjejaki kedudukan kamera</translation>
 <translation id="4608500690299898628">&amp;Cari...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> mengandungi kandungan sensitif</translation>
 <translation id="4609987916561367134">Dibenarkan untuk menggunakan JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> telah mengalami ralat</translation>
 <translation id="4610637590575890427">Adakah anda maksudkan pergi ke <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Sambungan data tersedia</translation>
+<translation id="4612841084470706111">Berikan akses kepada semua laman yang diminta.</translation>
 <translation id="4613144866899789710">Membatalkan pemasangan Linux...</translation>
 <translation id="4613271546271159013">Sambungan telah menukar halaman yang ditunjukkan apabila anda membuka halaman baharu.</translation>
 <translation id="4615586811063744755">tiada kuki dipilih</translation>
@@ -4081,6 +4083,7 @@
 <translation id="4762489666082647806">Warna penuding</translation>
 <translation id="4762718786438001384">Ruang cakera peranti terlalu rendah</translation>
 <translation id="4763408175235639573">Kuki berikut ditetapkan apabila anda melihat halaman ini</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> bukan akaun Google for Education yang sah. Hubungi pentadbir anda. Jika anda seorang pentadbir, anda boleh menyediakan organisasi anda dengan melawati: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Peranti ini akan disimpan selama 1 bulan dan anda boleh menyambung tanpa kod pada masa akan datang. Ini ditetapkan oleh pentadbir anda.}other{Peranti ini akan disimpan selama {MONTHS} bulan dan anda boleh menyambung tanpa kod pada masa akan datang. Ini ditetapkan oleh pentadbir anda.}}</translation>
 <translation id="4765582662863429759">Membenarkan Android Messages menyampaikan teks daripada telefon ke Chromebook anda</translation>
 <translation id="4766598565665644999">Semua sambungan boleh membaca &amp; menukar <ph name="HOST" /></translation>
@@ -4742,6 +4745,7 @@
 <translation id="5407167491482639988">Tidak dapat difahami</translation>
 <translation id="5408750356094797285">Zum: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">Daripada Akaun Google anda</translation>
+<translation id="5411022484772257615">Tidak dapat menyelesaikan pendaftaran sekolah</translation>
 <translation id="5413640305322530561">Ketahui lebih lanjut tentang data diagnostik dan penggunaan.</translation>
 <translation id="5414198321558177633">Memuat semula senarai profil. Proses ini mungkin mengambil masa beberapa minit.</translation>
 <translation id="5414566801737831689">Baca ikon laman web yang anda lawati</translation>
@@ -5527,6 +5531,7 @@
 <translation id="6129953537138746214">Ruang</translation>
 <translation id="6130692320435119637">Tambah Wi-Fi</translation>
 <translation id="6130887916931372608">Kekunci papan kekunci</translation>
+<translation id="6132714462430777655">Langkau pendaftaran sekolah?</translation>
 <translation id="6135823405800500595">Pastikan telefon ada pada anda, tidak berkunci dan Bluetooth serta Wi-Fi dihidupkan.</translation>
 <translation id="6135826623269483856">Tidak dibenarkan mengurus tetingkap pada semua paparan anda</translation>
 <translation id="6136114942382973861">Tutup bar muat turun</translation>
@@ -5685,6 +5690,7 @@
 <translation id="6291949900244949761">Tanya apabila tapak mahu mengakses peranti USB (disyorkan)</translation>
 <translation id="6291953229176937411">&amp;Paparkan dalam Pencari</translation>
 <translation id="6292699686837272722">Tab mengecil kepada lebar sederhana</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> telah dimatikan</translation>
 <translation id="6294759976468837022">Kelajuan autoimbas</translation>
 <translation id="6295158916970320988">Semua tapak</translation>
 <translation id="6295855836753816081">Menyimpan...</translation>
@@ -5890,7 +5896,6 @@
 <translation id="6492396476180293140">Kamera dalaman dinyahaktifkan oleh suis perkakasan</translation>
 <translation id="6494327278868541139">Paparkan butiran perlindungan dipertingkatkan</translation>
 <translation id="6494445798847293442">Bukan Pihak Berkuasa Pensijilan</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Data ini mengandungi kandungan sensitif atau berbahaya}=1{Fail ini mengandungi kandungan sensitif atau berbahaya}other{Fail ini mengandungi kandungan sensitif atau berbahaya}}</translation>
 <translation id="6497548114956205206">Ketahui lebih lanjut tentang penjimat tenaga</translation>
 <translation id="6497784818439587832">Tukar saiz paparan untuk menjadikan item pada skrin anda lebih kecil atau lebih besar</translation>
 <translation id="6497789971060331894">Penatalan terbalik tetikus</translation>
@@ -6036,7 +6041,6 @@
 <translation id="6621391692573306628">Untuk menghantar tab ini ke peranti lain, log masuk ke Chrome pada kedua-dua peranti</translation>
 <translation id="6622980291894852883">Terus menyekat imej</translation>
 <translation id="6624036901798307345">Dalam mod tablet, ketik butang bar alat pengira tab untuk membuka jalur tab baharu yang memaparkan lakaran kecil setiap tab.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> mengandungi kandungan sensitif atau berbahaya. Minta pemilik membetulkan fail ini.</translation>
 <translation id="6624687053722465643">Manis</translation>
 <translation id="6628328486509726751">Dimuat naik <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Keselamatan yang lebih kukuh</translation>
@@ -6748,6 +6752,7 @@
 <translation id="7310598146671372464">Gagal log masuk. Pelayan tidak menyokong jenis penyulitan Kerberos yang dinyatakan. Sila hubungi pentadbir anda.</translation>
 <translation id="7311089766378749632">Meminta untuk membaca dan menukar <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">Pentadbir sedang menetapkan semula eSIM anda. Proses ini mungkin mengambil masa beberapa minit.</translation>
+<translation id="7317831949569936035">Pendaftaran sekolah</translation>
 <translation id="7320213904474460808">Kembali ke rangkaian secara lalai</translation>
 <translation id="7321545336522791733">Pelayan tidak dapat dihubungi</translation>
 <translation id="7323315405936922211">Saiz kawasan kursor</translation>
@@ -8497,6 +8502,7 @@
 <translation id="8940081510938872932">Komputer anda melakukan terlalu banyak perkara sekarang. Cuba semula sebentar lagi.</translation>
 <translation id="8940381019874223173">Daripada Google Photos anda</translation>
 <translation id="8941173171815156065">Tarik balik kebenaran '<ph name="PERMISSION" />'</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> dimatikan</translation>
 <translation id="894191600409472540">Buat kata laluan kukuh</translation>
 <translation id="894360074127026135">Peningkatan Antarabangsa Netscape</translation>
 <translation id="8944099748578356325">Gunakan bateri dengan lebih cepat (pada masa ini <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index 4e3cf2c..a22bfb97 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -409,6 +409,7 @@
 <translation id="1388253969141979417">သင့်မိုက်ခရိုဖုန်း သုံးရန် ခွင့်ပြုထားသည်</translation>
 <translation id="1388728792929436380">အပ်ဒိတ်များလုပ်ပြီးသည့်အခါ <ph name="DEVICE_TYPE" /> ပြန်လည်စတင်မည်။</translation>
 <translation id="1389601498324964367">ခွဲတမ်းချ-စီမံထားသည့် သိုလှောင်ခန်း</translation>
+<translation id="1390113502208199250">‘Chrome ပညာရေးဆိုင်ရာ အဆင့်မြှင့်ခြင်း’ ဝန်ဆောင်မှုများ သုံးရန် ဤစက်ကို စက်ရုံထုတ်အတိုင်း ပြင်ဆင်သတ်မှတ်ရမည်။</translation>
 <translation id="139013308650923562">သင့်ကိရိယာတွင်ထည့်သွင်းထားသော ဖောင့်များသုံးရန် ခွင့်ပြုထားသည်</translation>
 <translation id="1390548061267426325">ပုံမှန် တပ်ဖ် အနေဖြင့် ဖွင့်မည်</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> ကို <ph name="PRINTER_NAME" /> တွင် ပုံနှိပ်ထုတ်ရန် ခွင့်ပြုမထားပါ။ သင့်စီမံခန့်ခွဲသူထံ ဆက်သွယ်ပါ။</translation>
@@ -479,6 +480,7 @@
 <translation id="1436784010935106834">ဖယ်ရှားပစ်ခဲ့</translation>
 <translation id="1437986450143295708">ပြဿနာကို အသေးစိတ်ဖော်ပြရန်</translation>
 <translation id="1439671507542716852">ရေရှည် အကူအညီ</translation>
+<translation id="1440090277117135316">ကျောင်းအပ်နှံမှု ပြီးပြီ</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> ရွေးချယ်ထားသည်</translation>
 <translation id="1442851588227551435">အသုံးပြုနေသော Kerberos လက်မှတ် သတ်မှတ်ရန်</translation>
 <translation id="1444628761356461360">ဤကြိုတင်ချိန်ညှိချက်များအား စက်ပစ္စည်း၏ ပိုင်ရှင် <ph name="OWNER_EMAIL" /> မှ စီမံသည်။</translation>
@@ -917,7 +919,6 @@
 <translation id="1819721979226826163">အက်ပ်အကြောင်းကြားချက်များ &gt; Google Play ဝန်ဆောင်မှုများကို တို့ပါ။</translation>
 <translation id="1820028137326691631">စီမံခန့်ခွဲသူ ပေးထားသော စကားဝှက် ထည့်ပါ</translation>
 <translation id="1822140782238030981">Chrome အသုံးပြုနေပြီးသား ဖြစ်ပါသလား။ လက်မှတ်ထိုးဝင်ပါ</translation>
-<translation id="1823098433522728610">ဤမှတ်တမ်းဖိုင်တွင် သတိထားရမည့်အကြောင်းအရာ ပါဝင်သည်။</translation>
 <translation id="18245044880483936">အရန်သိမ်းထားသော ဒေတာများသည် သင့်ကလေး၏ Drive သိုလှောင်ခန်းနေရာကို ယူသုံးမည် မဟုတ်ပါ။</translation>
 <translation id="1825565032302550710">ပို့တ်က ၁၀၂၄ နှင့် ၆၅၅၃၅ အကြားတွင် ရှိရမည်</translation>
 <translation id="182577151972096764">လတ်တလော ကြည့်ထားသည့် ချက်ပြုတ်နည်းများ</translation>
@@ -1952,8 +1953,8 @@
 <translation id="274318651891194348">ကီးဘုတ် ရှာနေသည်</translation>
 <translation id="2743301740238894839">စတင်ရန်</translation>
 <translation id="2743387203779672305">ကလစ်ဘုဒ်သို့ ကူးယူရန်</translation>
+<translation id="274362947316498129">အက်ပ်တစ်ခုက <ph name="DEVICE_NAME" /> ကို သုံးရန် ကြိုးစားနေသည်။ သုံးခွင့်ပြုရန် <ph name="DEVICE_NAME" /> ကိုယ်ရေးလုံခြုံမှုခလုတ်ကို ပိတ်ပါ။</translation>
 <translation id="2745080116229976798">Microsoft အရည်သွေးမှီ အမိန့်လိုက်နာမှု</translation>
-<translation id="2747266560080989517">ဤဖိုင်တွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်။ ၎င်း၏ပိုင်ရှင်ကို ပြင်ခိုင်းပါ။</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />သို့ လက်မှတ်ထိုး ဝင်ရန်</translation>
 <translation id="2749836841884031656">ဆင်းမ်</translation>
 <translation id="2749881179542288782">သဒ္ဒါကို စာလုံးပေါင်းနှင့်အတူ စစ်ကြည့်ရန်</translation>
@@ -2409,6 +2410,7 @@
 <translation id="3170072451822350649">သင် မဝင်ဘဲ ကျော်သွားနိုင်ကာ <ph name="LINK_START" />ဧည့်သည် <ph name="LINK_END" /> အနေဖြင့် အသုံးပြုနိုင်ပါသည်။</translation>
 <translation id="31774765611822736">ဘယ်ဘက်တွင် တဘ်အသစ်</translation>
 <translation id="3177909033752230686">စာမျက်နှာ ဘာသာစကား −</translation>
+<translation id="3177914167275935955">သင့်စက်တွင် ‘Chrome ပညာရေးဆိုင်ရာ အဆင့်မြှင့်ခြင်း’ ပါဝင်သော်လည်း သင့်အသုံးပြုသူအမည်သည် Google for Education အကောင့်နှင့် ဆက်စပ်မှုမရှိပါ။ ဒုတိယစက်ပေါ်တွင် Google for Education အကောင့်ဖွင့်ရန် g.co/workspace/edusignup သို့ ဝင်ကြည့်ပါ။</translation>
 <translation id="3179982752812949580">စာသားဖောင့်</translation>
 <translation id="3181954750937456830">အင်တာနက်ကို လုံခြုံစွာအသုံးပြုရေးစနစ် (သင်နှင့် သင့်စက်ကို အန္တရာယ်ရှိသည့် ဝဘ်ဆိုက်များမှ ကာကွယ်သည်)</translation>
 <translation id="3182749001423093222">စာလုံးပေါင်းသတ်ပုံစစ်ခြင်း</translation>
@@ -2548,7 +2550,6 @@
 <translation id="3317459757438853210">နှစ်ဖက်စလုံး</translation>
 <translation id="3317678681329786349">ကင်မရာနှင့် မိုက်ခရိုဖုန်းကို ပိတ်ထားသည်</translation>
 <translation id="3320630259304269485">'ဘေးကင်းလုံခြုံစွာ အင်တာနက်အသုံးပြုခြင်း' (အန္တရာယ်ရှိသည့် ဝဘ်ဆိုက်များမှ ကာကွယ်ခြင်း) နှင့် အခြားလုံခြုံရေး ဆက်တင်များ</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ဤဒေတာတွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်။ ဤအကြောင်းအရာကို ဖယ်ရှားပြီး ထပ်စမ်းကြည့်ပါ။}=1{ဤဖိုင်တွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်။ ဤအကြောင်းအရာကို ဖယ်ရှားပြီး ထပ်စမ်းကြည့်ပါ။}other{ဤဖိုင်များတွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်။ ဤအကြောင်းအရာကို ဖယ်ရှားပြီး ထပ်စမ်းကြည့်ပါ။}}</translation>
 <translation id="3323521181261657960">အပိုဆု။ အသုံးပြုချိန် ပိုရထားသည်</translation>
 <translation id="3323577066981719144">ဤနေရာတွင်ပြုလုပ်သော အပြောင်းအလဲများသည် Chrome ဘရောင်ဇာတွင်သာ သက်ရောက်ပါသည်။ သင်၏ Lacros Chrome ဘရောင်ဇာ ဆက်တင်များတွင် အပြောင်းအလဲများပြုလုပ်ရန် Lacros Chrome ဘရောင်ဇာဖွင့်ပြီး ဆက်တင်များသို့သွားပါ။</translation>
 <translation id="3325804108816646710">ရနိုင်သောပရိုဖိုင်များ ရှာနေသည်...</translation>
@@ -2682,7 +2683,6 @@
 <translation id="3445925074670675829">USB-C ကိရိယာ</translation>
 <translation id="3446274660183028131">Windows ထည့်သွင်းရန် Parallels Desktop ကို ဖွင့်ပါ။</translation>
 <translation id="344630545793878684">ဝဘ်ဆိုက် တသီကြီးမှ သင်၏ ဒေတာကို ဖတ်ရန်</translation>
-<translation id="3446650212859500694">ဤဖိုင်တွင် သတိထားရသော အကြောင်းအရာ ပါဝင်သည်</translation>
 <translation id="3447644283769633681">ပြင်ပအဖွဲ့အစည်း၏ ကွတ်ကီးအားလုံးကို ပိတ်ပါ</translation>
 <translation id="3448492834076427715">အကောင့်ကို အပ်ဒိတ်လုပ်ရန်</translation>
 <translation id="3449393517661170867">တဘ်ဝင်းဒိုး အသစ်</translation>
@@ -3124,6 +3124,7 @@
 <translation id="385051799172605136">နောက်သို့</translation>
 <translation id="3851428669031642514">စိတ်မချရသည့် စကရစ်များ ရယူရန်</translation>
 <translation id="3852215160863921508">လက်ကွက် အထောက်အကူ</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> ဖွင့်ထားသည်</translation>
 <translation id="3854599674806204102">တစ်ခုရွေးပါ</translation>
 <translation id="3854967233147778866">ဝဘ်ဆိုက်များကို အခြားဘာသာစကားများဖြင့် ပြန်ဆိုရန် ကမ်းလှမ်းသည်</translation>
 <translation id="3854976556788175030">အထွက်ဗန်း ပြည့်နေပါပြီ</translation>
@@ -3456,6 +3457,7 @@
 <translation id="4163560723127662357">အမည်မသိ ကီးဘုတ်</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> သည် ခိုင်မာသော အဖွဲ့အစည်းတွင် ရှိမနေပါ။ သင့်စီမံခန့်ခွဲသူထံ ဆက်သွယ်ပါ။ သင်သည် စီမံခန့်ခွဲသူဖြစ်ပါက ဤနေရာသို့ ဝင်ကြည့်ပြီး သင့်အဖွဲ့အစည်းကို စနစ်ထည့်သွင်းနိုင်သည်- g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">ဝက်ဆိုက် ဆက်တင်များ</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> က <ph name="DEVICE_NAME" /> ကို သုံးရန် ကြိုးစားနေသည်။ သုံးခွင့်ပြုရန် <ph name="DEVICE_NAME" /> ကိုယ်ရေးလုံခြုံမှုခလုတ်ကို ပိတ်ပါ။</translation>
 <translation id="4167393659000039775">ဒေတာဆုံးရှုံးမှုများအတွက် Google တွင် တာဝန်မရှိပါ။ အသိအမှတ်မပြုထားသော မော်ဒယ်များတွင် <ph name="DEVICE_OS" /> လုပ်ဆောင်နိုင်မည်မဟုတ်ပါ။ g.co/flex/InstallGuide တွင် ပိုမိုလေ့လာပါ။</translation>
 <translation id="4167686856635546851">ဗီဒီယိုဂိမ်းများ (သို့) ဝဘ်ဖောင်များကဲ့သို့ ပြန်လှန်တုံ့ပြန်သော ဝန်ဆောင်မှုများ ပြသရန် ဝဘ်ဆိုက်များက Javascript ကို အသုံးပြုလေ့ရှိသည်</translation>
 <translation id="4168015872538332605"><ph name="PRIMARY_EMAIL" /> နှင့်သက်ဆိုင်သည့် အချို့ဆက်တင်များအား သင်နှင့် မျှဝေထားသည်။ များစွာဝင်ရောက်ခြင်း အသုံးပြုနေစဉ်သာ ဤဆက်တင်များ သင့်အကောင့်ကို အကျိုးသက်ရောက်မှု ရှိသည်။</translation>
@@ -3914,11 +3916,11 @@
 <translation id="4602466770786743961"><ph name="HOST" />အား သင်၏ ကင်မရာ နှင့် မိုက်ခရိုဖုန်းကို အမြဲတမ်းရယူသုံးမှု ဆက်ခွင့်ပြုရန်</translation>
 <translation id="4606551464649945562">သင့်ပတ်ဝန်းကျင်၏ 3D မြေပုံဆွဲခြင်း သို့မဟုတ် ကင်မရာအနေအထား ခြေရာခံခြင်းတို့ ပြုလုပ်ရန် ဝဘ်ဆိုက်များကို ခွင့်မပြုပါနှင့်</translation>
 <translation id="4608500690299898628">&amp;ရှာရန်...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> တွင် သတိထားရသော အကြောင်းအရာ ပါဝင်သည်</translation>
 <translation id="4609987916561367134">Javascript သုံးရန် ခွင့်ပြုထားသည်</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> တွင် အမှားအယွင်းတစ်ခု ရှိနေသည်</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> သို့သွားရောက်ရန် သင်ဆိုလိုပါသလား?</translation>
 <translation id="4611114513649582138">ဒေတာချိတ်ဆက်မှု ရနိုင်ပါသည်</translation>
+<translation id="4612841084470706111">တောင်းဆိုထားသော ဝဘ်ဆိုက်အားလုံးသို့ ခွင့်ပြုချက်ပေးနိုင်သည်။</translation>
 <translation id="4613144866899789710">Linux ထည့်သွင်းမှုကို ပယ်ဖျက်နေသည်...</translation>
 <translation id="4613271546271159013">တိုးချဲ့မှု တစ်ခုက သင်က တဘ် အသစ်ကို ဖွင့်လိုက်သည့် အခါမှာ ပြသည့် စာမျက်နှာကို ပြောင်းလဲခဲ့သည်။</translation>
 <translation id="4615586811063744755">မည်သည့် ကွတ်ကီးကိုမျှ ရွေးမထားပါ</translation>
@@ -4078,6 +4080,7 @@
 <translation id="4762489666082647806">ညွှန်မြားအရောင်</translation>
 <translation id="4762718786438001384">စက်ပစ္စည်း၏ သိုလှောင်ခန်းအလွန်နည်းနေပါသည်</translation>
 <translation id="4763408175235639573">ဤစာမျက်နှာကို သင်ကြည့်ခဲ့ချိန်၌ အောက်ပါကွတ်ကီးများကို သတ်မှတ်ထားပါသည်</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> သည် မှန်ကန်သော Google for Education အကောင့် မဟုတ်ပါ။ သင့်စီမံခန့်ခွဲသူထံ ဆက်သွယ်ပါ။ သင်သည် စီမံခန့်ခွဲသူဖြစ်ပါက သင့်အဖွဲ့အစည်းကို စနစ်ထည့်သွင်းရန် ဤနေရာသို့ ဝင်ကြည့်နိုင်သည်- g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{ဤစက်ကို ၁ လ သိမ်းပေးမည်ဖြစ်ပြီး နောက်တစ်ကြိမ်တွင် ကုဒ်မပါဘဲ ချိတ်ဆက်နိုင်သည်။ ၎င်းကို သင်၏စီမံခန့်ခွဲသူက သတ်မှတ်ထားသည်။}other{ဤစက်ကို {MONTHS} လ သိမ်းပေးမည်ဖြစ်ပြီး နောက်တစ်ကြိမ်တွင် ကုဒ်မပါဘဲ ချိတ်ဆက်နိုင်သည်။ ၎င်းကို သင်၏စီမံခန့်ခွဲသူက သတ်မှတ်ထားသည်။}}</translation>
 <translation id="4765582662863429759">သင့်ဖုန်းမှ သင်၏ Chromebook သို့ စာတိုမက်ဆေ့ဂျ်များ ထပ်ဆင့်ပို့ရန် Android Messages ကို ခွင့်ပြုပါ</translation>
 <translation id="4766598565665644999">နောက်ဆက်တွဲအားလုံးက <ph name="HOST" /> ကို ဖတ်ပြီးပြောင်းနိုင်သည်</translation>
@@ -4739,6 +4742,7 @@
 <translation id="5407167491482639988">ဗလုံးဗထွေး</translation>
 <translation id="5408750356094797285">ဇူးမ် − <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">သင်၏ Google Account မှ</translation>
+<translation id="5411022484772257615">ကျောင်းအပ်နှံမှု ပြီးမသွားပါ</translation>
 <translation id="5413640305322530561">အမှားရှာဖွေမှုနှင့် သုံးစွဲမှုဒေတာအကြောင်း ပိုမိုလေ့လာရန်</translation>
 <translation id="5414198321558177633">ပရိုဖိုင်စာရင်းကို ပြန်လည် စတင်နေသည်။ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။</translation>
 <translation id="5414566801737831689">သင် ဝင်ကြည့်သည့် ဝက်ဘ်ဆိုက်များ၏ အိုင်ကွန််များကို ဖတ်ရန်</translation>
@@ -5523,6 +5527,7 @@
 <translation id="6129953537138746214">နေရာခြား</translation>
 <translation id="6130692320435119637">Wi-Fi ထည့်ရန်</translation>
 <translation id="6130887916931372608">ကီးဘုတ်ခလုတ်</translation>
+<translation id="6132714462430777655">ကျောင်းအပ်နှံမှုကို ကျော်မလား။</translation>
 <translation id="6135823405800500595">သင့်ဖုန်းသည် အနီးတွင်ရှိပြီး လော့ခ်ဖွင့်ထားကာ ဘလူးတုသ်နှင့် Wi-Fi ဖွင့်ထားကြောင်း သေချာပါစေ</translation>
 <translation id="6135826623269483856">သင့်ဖန်သားပြင်အားလုံးတွင် ဝင်းဒိုးများစီမံခြင်းကို ခွင့်ပြုမထားသည်များ</translation>
 <translation id="6136114942382973861">ဒေါင်းလုဒ်ဘား ပိတ်ရန်</translation>
@@ -5682,6 +5687,7 @@
 <translation id="6291949900244949761">ဝဘ်ဆိုက်က USB စက်ပစ္စည်းများကို အသုံးပြုလိုသည့်အခါ ခွင့်တောင်းရန် (အကြံပြုထားသည်)</translation>
 <translation id="6291953229176937411">&amp;တွေ့ရှိချက် ထဲမှာ ပြရန်</translation>
 <translation id="6292699686837272722">အလယ်အလတ်ဗြက်အတိုင်း တဘ်များကို ချုံ့မည်</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> ပိတ်ထားသည်</translation>
 <translation id="6294759976468837022">အော်တိုစကင်ဖတ်ခြင်း မြန်နှုန်း</translation>
 <translation id="6295158916970320988">ဆိုဒ်များအားလုံး</translation>
 <translation id="6295855836753816081">သိမ်းဆည်းနေသည်...</translation>
@@ -5887,7 +5893,6 @@
 <translation id="6492396476180293140">အတွင်းကင်မရာကို ဟာ့ဒ်ဝဲခလုတ်က ရပ်ထားသည်</translation>
 <translation id="6494327278868541139">အဆင့်မြှင့်တင်ထားသော ကာကွယ်မှု အသေးစိတ်ကို ပြရန်</translation>
 <translation id="6494445798847293442">စီမံခန့်ခွဲမှုဆိုင်ရာ အသိအမှတ်ပြုလက်မှတ် ထုတ်ပေးသူ မဟုတ်ပါ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ဤဒေတာတွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်}=1{ဤဖိုင်တွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်}other{ဤဖိုင်များတွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်}}</translation>
 <translation id="6497548114956205206">စွမ်းအင်ချွေတာစနစ်အကြောင်း ပိုမိုလေ့လာရန်</translation>
 <translation id="6497784818439587832">ဖန်သားပြင်ပေါ်ရှိ အရာများကို ပိုသေးအောင် သို့မဟုတ် ပိုကြီးအောင် ပြုလုပ်ရန် ပြသမှုအရွယ်အစားကို ပြောင်းနိုင်သည်</translation>
 <translation id="6497789971060331894">မောက်စ် ပြောင်းပြန်လှိမ့်ရန်</translation>
@@ -6031,7 +6036,6 @@
 <translation id="6621391692573306628">အခြားစက်သို့ ဤတဘ်ကို ပို့ရန် နှစ်စက်လုံးတွင် Chrome သို့ လက်မှတ်ထိုးဝင်ပါ</translation>
 <translation id="6622980291894852883">ပုံများကို ပိတ်ဆို့မှု ဆက်လုပ်ရန်</translation>
 <translation id="6624036901798307345">တက်ဘလက်မုဒ်တွင် တဘ်တစ်ခုစီ၏ ပုံသေးများကို ပြသပေးသည့် တဘ်ဘားတန်းအသစ်ကို ဖွင့်ရန် တဘ်ရေတွက်မှုပြ ကိရိယာဘား ခလုတ်ကို တို့ပါ။</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> တွင် သတိထားရသော သို့မဟုတ် အန္တရာယ်ရှိသော အကြောင်းအရာ ပါဝင်သည်။ ၎င်း၏ပိုင်ရှင်ကို ပြင်ခိုင်းပါ။</translation>
 <translation id="6624687053722465643">ချိုသာမှု</translation>
 <translation id="6628328486509726751">တင်ပြီး <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">ပိုမိုခိုင်မာသည့် လုံခြုံရေး</translation>
@@ -6743,6 +6747,7 @@
 <translation id="7310598146671372464">စနစ်သို့ ဝင်၍မရပါ။ ဆာဗာသည် သတ်မှတ်ထားသည့် Kerberos အသွင်ဝှက်ခြင်း အမျိုးအစားများကို ပံ့ပိုးမထားပါ။ သင်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။</translation>
 <translation id="7311089766378749632"><ph name="SITE_NAME" /> ကို ဖတ်ပြီးပြောင်းရန် ခွင့်တောင်းနေသည်</translation>
 <translation id="7312210124139670355">သင်၏စီမံခန့်ခွဲသူသည် eSIM ကို ပြင်ဆင်သတ်မှတ်နေသည်။ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။</translation>
+<translation id="7317831949569936035">ကျောင်းအပ်နှံမှု</translation>
 <translation id="7320213904474460808">မူရင်း ကွန်ရက်</translation>
 <translation id="7321545336522791733">ဆာဗာကိုချိတ်ဆက်၍မရပါ</translation>
 <translation id="7323315405936922211">ကာဆာဧရိယာအရွယ်အစား</translation>
@@ -8490,6 +8495,7 @@
 <translation id="8940081510938872932">သင့်ကွန်ပျူတာသည် ယခု အလုပ်များစွာ လုပ်နေပါသည်။ နောက်မှ ထပ်မံကြိုးစားပါ။</translation>
 <translation id="8940381019874223173">သင်၏ Google Photos မှ</translation>
 <translation id="8941173171815156065">ခွင့်ပြုချက် '<ph name="PERMISSION" />'ကို ရုပ်သိမ်းရန်</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> ပိတ်ထားသည်</translation>
 <translation id="894191600409472540">လုံခြုံမှုမြင့်သည့် စကားဝှက်များ ပြုလုပ်ပါ</translation>
 <translation id="894360074127026135">Netscape အပြည်ပြည်ဆိုင်ရာ Step-Up</translation>
 <translation id="8944099748578356325">ဘက်ထရီကို ပိုမိုလျှင်မြန်စွာ အသုံးပြုမည် (လက်ရှိ <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 0c27868..5f5e1b8 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -405,6 +405,7 @@
 <translation id="1388253969141979417">तपाईंको माइक्रोफोन प्रयोग गर्ने अनुमति दिइएका साइटहरू</translation>
 <translation id="1388728792929436380">अपडेट पूरा भएपछि <ph name="DEVICE_TYPE" /> रिस्टार्ट हुने छ।</translation>
 <translation id="1389601498324964367">कोटाका आधारमा व्यवस्थापन गरिएको भण्डारण</translation>
+<translation id="1390113502208199250">तपाईं Chrome Education Upgrade का सुविधाहरू प्रयोग गर्न चाहनुहुन्छ भने तपाईंले यो डिभाइस फ्याक्ट्री रिसेट गर्नु पर्ने हुन्छ।</translation>
 <translation id="139013308650923562">तपाईंको डिभाइसमा इन्स्टल गरिएका फन्ट प्रयोग गर्न दिइएका साइटहरू</translation>
 <translation id="1390548061267426325">नियमित ट्याबको रूपमा खोल्नुहोस्</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> लाई <ph name="PRINTER_NAME" /> मार्फत प्रिन्ट गर्ने अनुमति दिइएको छैन। कृपया आफ्ना एड्मिनलाई सम्पर्क गर्नुहोस्।</translation>
@@ -475,6 +476,7 @@
 <translation id="1436784010935106834">हटाइयो</translation>
 <translation id="1437986450143295708">यो समस्या विस्तृत रूपमा वर्णन गर्नुहोस्</translation>
 <translation id="1439671507542716852">दीर्घकालीन सहायता</translation>
+<translation id="1440090277117135316">स्कुलको इमेल ठेगाना हालेर डिभाइस दर्ता गर्ने प्रक्रिया पूरा भयो</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> चयन गरियो</translation>
 <translation id="1442851588227551435">Kerberos को सक्रिय टिकट सेट गर्नुहोस्</translation>
 <translation id="1444628761356461360">यो सेटिङ यन्त्रको मालिक, <ph name="OWNER_EMAIL" /> द्वारा व्यवस्थत छ।</translation>
@@ -904,7 +906,6 @@
 <translation id="1819721979226826163">एपसम्बन्धी सूचनाहरू &gt; Google Play services मा ट्याप गर्नुहोस्।</translation>
 <translation id="1820028137326691631">प्रशासकले उपलब्ध गराउनुभएको पासवर्ड प्रविष्टि गर्नुहोस्</translation>
 <translation id="1822140782238030981">पहिल्यैदेखि Chrome को प्रयोगकर्ता हुनुहुन्छ? साइन इन गर्नुहोस्</translation>
-<translation id="1823098433522728610">यो डकुमेन्टमा संवेदनशील सामग्री छ।</translation>
 <translation id="18245044880483936">डेटा ब्याकअप गर्दा तपाईंका बच्चाको ड्राइभको भण्डारण कोटा प्रयोग हुने छैन।</translation>
 <translation id="1825565032302550710">पोर्ट अनिवार्य रूपमा १०२४ र ६५५३५ का बिचमा हुनु पर्छ</translation>
 <translation id="182577151972096764">हालसालै हेरिएका पाकविधिहरू</translation>
@@ -1937,7 +1938,6 @@
 <translation id="2743301740238894839">सुरु गर्नुहोस्</translation>
 <translation id="2743387203779672305">क्लिपबोर्डमा प्रतिलिपि बनाउँनुहोस्</translation>
 <translation id="2745080116229976798">Microsoft मर्यादित पराधीन</translation>
-<translation id="2747266560080989517">यो फाइलमा संवेदनशील वा खतरनाक सामग्री छ। यसका मालिकलाई उक्त समस्या समाधान गर्न लगाउनुहोस्।</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> मा साइन इन गर्नुहोस्</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">व्याकरणसँगै हिज्जे पनि जाँच्नुहोस्</translation>
@@ -2394,6 +2394,7 @@
 <translation id="3170072451822350649">तपाइँले साइन इन गर्न पनि छाड्न सक्नुहुन्छ र <ph name="LINK_START" />पाहनुाको रूपाम ब्राउज गर्न सक्नुहुन्छ<ph name="LINK_END" />।</translation>
 <translation id="31774765611822736">नयाँ ट्याब बायाँतिर देखिन्छ</translation>
 <translation id="3177909033752230686">पृष्ठको भाषा:</translation>
+<translation id="3177914167275935955">तपाईंको डिभाइसमा Chrome Education Upgrade समावेश छ तर तपाईंको युजरनेम Google for Education खातासँग सम्बद्ध छैन। कृपया सहायक डिभाइसमार्फत g.co/workspace/edusignup मा गई Google for Education खाता बनाउनुहोस्।</translation>
 <translation id="3179982752812949580">पाठको फन्ट</translation>
 <translation id="3181954750937456830">सुरक्षित ब्राउजिङ (तपाईं र तपाईंको यन्त्रलाई खतरनाक साइटहरूबाट सुरक्षित राख्छ)</translation>
 <translation id="3182749001423093222">हिज्जे जाँच</translation>
@@ -2533,7 +2534,6 @@
 <translation id="3317459757438853210">दुई-छेउ भएको</translation>
 <translation id="3317678681329786349">क्यामेरा र माइक्रोफोन प्रयोग गर्नमाथि रोक लगाइयो</translation>
 <translation id="3320630259304269485">सुरक्षित ब्राउजिङ (जोखिमपूर्ण साइटहरूबाट सुरक्षा) र सुरक्षासम्बन्धी अन्य सेटिङ</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{यो डेटामा संवेदनशील वा खतरनाक सामग्री छ। यो सामग्री हटाउनुहोस् र फेरि प्रयास गर्नुहोस्।}=1{यो फाइलमा संवेदनशील वा खतरनाक सामग्री छ। यो सामग्री हटाउनुहोस् र फेरि प्रयास गर्नुहोस्।}other{यी फाइलहरूमा संवेदनशील वा खतरनाक सामग्री छ। यो सामग्री हटाउनुहोस् र फेरि प्रयास गर्नुहोस्।}}</translation>
 <translation id="3323521181261657960">बोनस! तपाईंले यन्त्रमा हेरेर बिताउने थप समय प्राप्त गर्नुभयो</translation>
 <translation id="3323577066981719144">तपाईंले यहाँ गर्ने परिवर्तनहरू Chrome ब्राउजरमा मात्र लागू हुन्छन्। आफ्नो Lacros Chrome ब्राउजरको सेटिङ परिवर्तन गर्न Lacros Chrome ब्राउजर खोल्नुहोस् र सेटिङमा जानुहोस्।</translation>
 <translation id="3325804108816646710">उपलब्ध प्रोफाइलहरू खोज्दै...</translation>
@@ -2667,7 +2667,6 @@
 <translation id="3445925074670675829">USB-C यन्त्र</translation>
 <translation id="3446274660183028131">कृपया Windows इन्स्टल गर्न Parallels Desktop खोल्नुहोस्।</translation>
 <translation id="344630545793878684">विभिन्न वेबसाइटहरूमा तपाईँको डेटा पढ्नुहोस्</translation>
-<translation id="3446650212859500694">यो फाइलमा संवेदनशील सामग्री छ</translation>
 <translation id="3447644283769633681">तेस्रो पक्षीय सबै कुकीहरू ब्लक गर्नुहोस्</translation>
 <translation id="3448492834076427715">खाता अपडेट गर्नुहोस्</translation>
 <translation id="3449393517661170867">नयाँ ट्याबमा खोलिएको विन्डो</translation>
@@ -3898,7 +3897,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> लाई जहिले पनि तपाइँको क्यामेरा र माइक्रोफोन पहुँच गर्ने अनुमति दिनुहोस्</translation>
 <translation id="4606551464649945562">साइटहरूलाई आफू वरपरको ठाउँको 3D नक्सा बनाउन वा क्यामेराको अवस्था पत्ता लगाउन नदिनुहोस्</translation>
 <translation id="4608500690299898628">&amp;फेला पार्नुहोस्...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> मा संवेदनशील सामग्री छ</translation>
 <translation id="4609987916561367134">JavaScript प्रयोग गर्नेे अनुमति दिइएका साइटहरू</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> मा त्रुटि भएको छ</translation>
 <translation id="4610637590575890427">के तपाईं <ph name="SITE" /> मा जान चाहनुहुन्छ?</translation>
@@ -4062,6 +4060,7 @@
 <translation id="4762489666082647806">पोइन्टरको रङ</translation>
 <translation id="4762718786438001384">यन्त्रको डिस्कमा खाली ठाउँ अत्यन्त कम छ</translation>
 <translation id="4763408175235639573">तपाईंले यस पृष्ठ हेर्दा निम्न कुकीहरू सेट गरिए</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> वैध Google for Education खाता होइन। आफ्ना एड्मिनसँग सम्पर्क गर्नुहोस्। तपाईं एड्मिन हुनुहुन्छ भने तपाईं निम्न लिंकमा गएर आफ्नो सङ्गठन सेटअप गर्न सक्नुहुन्छ: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{यो डिभाइससम्बन्धी जानकारी १ महिनाका लागि सेभ गरिने छ र तपाईं अर्को पटक कोड प्रयोग नगरिकन कनेक्ट गर्न सक्नुहुन्छ। तपाईंका एड्मिनले यो सेटिङ तय गर्नुहुन्छ।}other{यो डिभाइससम्बन्धी जानकारी {MONTHS} महिनाका लागि सेभ गरिने छ र तपाईं अर्को पटक कोड प्रयोग नगरिकन कनेक्ट गर्न सक्नुहुन्छ। तपाईंका एड्मिनले यो सेटिङ तय गर्नुहुन्छ।}}</translation>
 <translation id="4765582662863429759">यसले Android Messages लाई तपाईंको फोनबाट तपाईंको Chromebook मा पाठ प्रसारण गर्न दिन्छ</translation>
 <translation id="4766598565665644999">सबै एक्स्टेन्सनहरू <ph name="HOST" /> रिड गर्न तथा बदल्न सक्छन्</translation>
@@ -4723,6 +4722,7 @@
 <translation id="5407167491482639988">अस्पष्ट</translation>
 <translation id="5408750356094797285">जुम: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">तपाईंको Google खाताबाट</translation>
+<translation id="5411022484772257615">स्कुलको इमेल ठेगाना हालेर डिभाइस दर्ता गर्ने प्रक्रिया पूरा गर्न सकिएन</translation>
 <translation id="5413640305322530561">निदान तथा प्रयोगसम्बन्धी डेटाका बारेमा थप जान्नुहोस्</translation>
 <translation id="5414198321558177633">प्रोफाइलको सूची रिफ्रेस गरिँदै छ। यो कार्य पूरा हुन केही बेर लाग्न सक्छ।</translation>
 <translation id="5414566801737831689">तपाईंले भ्रमण गर्नुहुने वेबसाइटहरूको प्रतिमा पढ्नुहोस्</translation>
@@ -5507,6 +5507,7 @@
 <translation id="6129953537138746214">क्षेत्र</translation>
 <translation id="6130692320435119637">Wi-Fi नेटवर्क थप्नुहोस्</translation>
 <translation id="6130887916931372608">किबोर्ड की</translation>
+<translation id="6132714462430777655">स्कुलको इमेल ठेगाना हालेर डिभाइस दर्ता गर्ने प्रक्रिया स्किप गर्ने हो?</translation>
 <translation id="6135823405800500595">तपाईंको फोन नजिकै छ, अनलक गरिएको छ र उक्त फोनमा ब्लुटुथ तथा Wi-Fi अन गरिएको छ भन्ने कुरा सुनिश्चित गर्नुहोस्</translation>
 <translation id="6135826623269483856">तपाईंका सबै डिस्प्लेमा विन्डो व्यवस्थापन गर्ने अनुमति नदिइएका साइटहरू</translation>
 <translation id="6136114942382973861">डाउनलोडहरूको पट्टी बन्द गर्नुहोस्</translation>
@@ -5870,7 +5871,6 @@
 <translation id="6492396476180293140">हार्डवेयर स्विच थिचेर आन्तरिक क्यामेरा डिएक्टिभ गरिएको छ</translation>
 <translation id="6494327278868541139">परिष्कृत सुरक्षासम्बन्धी विवरण देखाइयोस्</translation>
 <translation id="6494445798847293442">प्रमाणीकरण अधिकारी होइन</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{यो डेटामा संवेदनशील वा खतरनाक सामग्री छ}=1{यो फाइलमा संवेदनशील वा खतरनाक सामग्री छ}other{यी फाइलहरूमा संवेदनशील वा खतरनाक सामग्री छ}}</translation>
 <translation id="6497548114956205206">इनर्जी सेभर मोडका बारेमा थप जान्नुहोस्</translation>
 <translation id="6497784818439587832">स्क्रिनमा भएका वस्तुहरूलाई अझ ठुलो वा सानो बनाउन डिस्प्लेको आकार परिवर्तन गर्नुहोस्</translation>
 <translation id="6497789971060331894">माउस विपरीत दिशामा स्क्रोल गर्ने कार्य</translation>
@@ -6016,7 +6016,6 @@
 <translation id="6621391692573306628">तपाईं यो ट्याब अर्को डिभाइसमा पठाउन चाहनुहुन्छ भने दुवै डिभाइसमा Chrome मा साइन इन गर्नुहोस्</translation>
 <translation id="6622980291894852883">तस्वीरहरूलाई ब्लक गर्न जारी राख्नुहोस्</translation>
 <translation id="6624036901798307345">ट्याब्लेट मोडमा भएका बेला प्रत्येक ट्याबको थम्बनेल देखाउने नयाँ ट्याब स्ट्रिप खोल्न ट्याबको सङ्ख्या गन्ने टुलबारको बटनमा ट्याप गर्नुहोस्।</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> मा संवेदनशील वा खतरनाक सामग्री छ। यसका मालिकलाई उक्त समस्या समाधान गर्न लगाउनुहोस्।</translation>
 <translation id="6624687053722465643">मिठास</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> लाई अपलोड गरियो</translation>
 <translation id="6630117778953264026">अझ बलियो सुरक्षा</translation>
@@ -6728,6 +6727,7 @@
 <translation id="7310598146671372464">लग इन गर्न सकिएन। सर्भरले Kerberos नामक तोकिएको इन्क्रिप्सनका प्रकारहरूलाई समर्थन गर्दैन। आफ्नो प्रशासकसँग सम्पर्क गर्नुहोस्।</translation>
 <translation id="7311089766378749632"><ph name="SITE_NAME" /> मा भएका सामग्री रिड गर्ने र ती सामग्री परिवर्तन गर्ने अनुमति मागिँदै छ</translation>
 <translation id="7312210124139670355">तपाईंका एड्मिन तपाईंको eSIM रिसेट गर्दै हुनुहुन्छ। यो कार्य पूरा हुन केही बेर लाग्न सक्छ।</translation>
+<translation id="7317831949569936035">स्कुलको इमेल ठेगाना हालेर डिभाइस दर्ता गर्ने प्रक्रिया</translation>
 <translation id="7320213904474460808">डिफल्ट नेटवर्क बनाउनुहोस्</translation>
 <translation id="7321545336522791733">सर्भर पहुँचयोग्य छैन</translation>
 <translation id="7323315405936922211">कर्सरको क्षेत्रको आकार</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 48855273..ab2e9d3 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -907,7 +907,6 @@
 <translation id="1819721979226826163">Tik op App-meldingen &gt; Google Play-services.</translation>
 <translation id="1820028137326691631">Geef het wachtwoord op dat je van de beheerder hebt gekregen</translation>
 <translation id="1822140782238030981">Ben je al Chrome-gebruiker? Log in</translation>
-<translation id="1823098433522728610">Dit document bevat gevoelige content.</translation>
 <translation id="18245044880483936">Back-upgegevens tellen niet mee voor de Drive-opslaglimiet van je kind.</translation>
 <translation id="1825565032302550710">Poort moet tussen 1024 en 65535 liggen</translation>
 <translation id="182577151972096764">recent bekeken recepten</translation>
@@ -1941,7 +1940,6 @@
 <translation id="2743387203779672305">Kopiëren naar klembord</translation>
 <translation id="274362947316498129">Een app probeert toegang te krijgen tot <ph name="DEVICE_NAME" />. Zet de privacyschakelaar voor <ph name="DEVICE_NAME" /> uit om toegang te geven.</translation>
 <translation id="2745080116229976798">Gekwalificeerde ondergeschiktheid van Microsoft</translation>
-<translation id="2747266560080989517">Dit bestand bevat gevoelige of gevaarlijke content. Vraag de eigenaar om dit op te lossen.</translation>
 <translation id="2749756011735116528">Inloggen op <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">Simkaart</translation>
 <translation id="2749881179542288782">Controleer grammatica met spelling</translation>
@@ -2536,7 +2534,6 @@
 <translation id="3317459757438853210">Dubbelzijdig</translation>
 <translation id="3317678681329786349">Camera en microfoon geblokkeerd</translation>
 <translation id="3320630259304269485">Safe Browsing (bescherming tegen gevaarlijke sites) en andere beveiligingsinstellingen</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Deze gegevens bevatten gevoelige of gevaarlijke content. Verwijder deze content en probeer het opnieuw.}=1{Dit bestand bevat gevoelige of gevaarlijke content. Verwijder deze content en probeer het opnieuw.}other{Deze bestanden bevatten gevoelige of gevaarlijke content. Verwijder deze content en probeer het opnieuw.}}</translation>
 <translation id="3323521181261657960">Bonus! Je hebt meer schermtijd gekregen</translation>
 <translation id="3323577066981719144">Wijzigingen die je hier aanbrengt, zijn alleen van toepassing op de Chrome-browser. Als je wijzigingen wilt aanbrengen in de Lacros Chrome-browserinstellingen, open je de Lacros Chrome-browser en ga je naar Instellingen.</translation>
 <translation id="3325804108816646710">Zoeken naar beschikbare profielen…</translation>
@@ -2670,7 +2667,6 @@
 <translation id="3445925074670675829">USB-C-apparaat</translation>
 <translation id="3446274660183028131">Start Parallels Desktop om Windows te installeren.</translation>
 <translation id="344630545793878684">Je gegevens voor een aantal websites lezen</translation>
-<translation id="3446650212859500694">Dit bestand bevat gevoelige content</translation>
 <translation id="3447644283769633681">Alle cookies van derden blokkeren</translation>
 <translation id="3448492834076427715">Account updaten</translation>
 <translation id="3449393517661170867">Nieuw venster met tabbladen</translation>
@@ -3903,7 +3899,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> altijd toegang geven tot je camera en microfoon</translation>
 <translation id="4606551464649945562">Niet toestaan dat sites een 3D-kaart van je omgeving maken of de camerapositie volgen</translation>
 <translation id="4608500690299898628">&amp;Zoeken...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> bevat gevoelige content</translation>
 <translation id="4609987916561367134">Toestemming om JavaScript te gebruiken</translation>
 <translation id="4610162781778310380">Er is een fout opgetreden in <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Wilde je naar <ph name="SITE" /> gaan?</translation>
@@ -5873,7 +5868,6 @@
 <translation id="6492396476180293140">Interne camera gedeactiveerd door hardwareschakelaar</translation>
 <translation id="6494327278868541139">Details van geoptimaliseerde beveiliging bekijken</translation>
 <translation id="6494445798847293442">Geen certificeringsinstantie</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Deze gegevens bevatten gevoelige of gevaarlijke content}=1{Dit bestand bevat gevoelige of gevaarlijke content}other{Deze bestanden bevatten gevoelige of gevaarlijke content}}</translation>
 <translation id="6497548114956205206">Meer informatie over energiebesparing</translation>
 <translation id="6497784818439587832">Wijzig de weergavegrootte om items op het scherm kleiner of groter te maken.</translation>
 <translation id="6497789971060331894">Omgekeerd scrollen muis</translation>
@@ -6019,7 +6013,6 @@
 <translation id="6621391692573306628">Als je dit tabblad naar een ander apparaat wilt sturen, log je op beide apparaten in bij Chrome</translation>
 <translation id="6622980291894852883">Afbeeldingen blijven blokkeren</translation>
 <translation id="6624036901798307345">Tik in de tabletmodus op de werkbalkknop met de tabbladteller om de tabbladstrook te openen. Je ziet dan miniaturen van alle tabbladen.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> bevat gevoelige of gevaarlijke content. Vraag de eigenaar om dit op te lossen.</translation>
 <translation id="6624687053722465643">Cupcake</translation>
 <translation id="6628328486509726751">Geüploade <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Betere beveiliging</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 7f1d826..138f8f9 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -915,7 +915,6 @@
 <translation id="1819721979226826163">Trykk på Appvarsler &gt; Google Play Tjenester.</translation>
 <translation id="1820028137326691631">Skriv inn administratorgodkjent passord</translation>
 <translation id="1822140782238030981">Bruker du allerede Chrome? Logg på</translation>
-<translation id="1823098433522728610">Dette dokumentet har sensitivt innhold.</translation>
 <translation id="18245044880483936">De sikkerhetskopierte dataene teller ikke med i Disk-lagringskvoten til barnet ditt.</translation>
 <translation id="1825565032302550710">Porten må være mellom 1024 og 65535</translation>
 <translation id="182577151972096764">nylig viste oppskrifter</translation>
@@ -1950,8 +1949,8 @@
 <translation id="274318651891194348">Søker etter tastatur</translation>
 <translation id="2743301740238894839">Start</translation>
 <translation id="2743387203779672305">Kopiér til utklippstavlen</translation>
+<translation id="274362947316498129">En app prøver å få tilgang til <ph name="DEVICE_NAME" />. Slå av personvernbryteren for <ph name="DEVICE_NAME" /> for å gi tilgang.</translation>
 <translation id="2745080116229976798">Microsoft kvalifisert underordning</translation>
-<translation id="2747266560080989517">Denne filen har sensitivt eller farlig innhold. Spør eieren om å fikse dette.</translation>
 <translation id="2749756011735116528">Logg på <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM-kort</translation>
 <translation id="2749881179542288782">Kontroller·grammatikk·og·staving</translation>
@@ -2547,7 +2546,6 @@
 <translation id="3317459757438853210">Tosidig</translation>
 <translation id="3317678681329786349">Kameraet og mikrofonen er blokkert</translation>
 <translation id="3320630259304269485">Safe Browsing (beskyttelse mot farlige nettsteder) og andre sikkerhetsinnstillinger</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Disse dataene har sensitivt eller farlig innhold. Fjern dette innholdet, og prøv på nytt.}=1{Denne filen har sensitivt eller farlig innhold. Fjern dette innholdet, og prøv på nytt.}other{Disse filene har sensitivt eller farlig innhold. Fjern dette innholdet, og prøv på nytt.}}</translation>
 <translation id="3323521181261657960">Bonus! Du har fått mer skjermtid</translation>
 <translation id="3323577066981719144">Endringer du gjør her, gjelder kun i Chrome-nettleseren. For å gjøre endringer i Lacros Chrome-nettleserinnstillingene, åpne Lacros Chrome-nettleseren og gå til innstillingene.</translation>
 <translation id="3325804108816646710">Ser etter tilgjengelige profiler …</translation>
@@ -2681,7 +2679,6 @@
 <translation id="3445925074670675829">USB-C-enhet</translation>
 <translation id="3446274660183028131">Start Parallels Desktop for å installere Windows.</translation>
 <translation id="344630545793878684">Lesing av dataene dine på en rekke nettsteder</translation>
-<translation id="3446650212859500694">Denne filen har sensitivt innhold</translation>
 <translation id="3447644283769633681">Blokkér alle informasjonskapsler fra tredjeparter</translation>
 <translation id="3448492834076427715">Oppdater kontoen</translation>
 <translation id="3449393517661170867">Nytt vindu med faner</translation>
@@ -3123,6 +3120,7 @@
 <translation id="385051799172605136">Tilbake</translation>
 <translation id="3851428669031642514">Last inn utrygge skripter</translation>
 <translation id="3852215160863921508">Inndatastøtte</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> er slått på</translation>
 <translation id="3854599674806204102">Velg et alternativ</translation>
 <translation id="3854967233147778866">Tilby å oversette nettsteder på andre språk</translation>
 <translation id="3854976556788175030">Utskriftsskuffen er full</translation>
@@ -3454,6 +3452,7 @@
 <translation id="4163560723127662357">Ukjent tastatur</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> tilhører ikke noen gyldig organisasjon. Kontakt administratoren din. Hvis du er en administrator, kan du konfigurere organisasjonen din ved å gå til g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Nettstedsinnstillinger</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> prøver å få tilgang til <ph name="DEVICE_NAME" />. Slå av personvernbryteren for <ph name="DEVICE_NAME" /> for å gi tilgang.</translation>
 <translation id="4167393659000039775">Google er ikke ansvarlig for eventuelt tap av data, og det kan hende <ph name="DEVICE_OS" /> ikke virker på usertifiserte modeller. Finn ut mer på g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Nettsteder bruker vanligvis JavaScript for å kunne vise interaktive funksjoner, som spill eller nettskjemaer</translation>
 <translation id="4168015872538332605">Noen innstillinger som tilhører <ph name="PRIMARY_EMAIL" /> blir delt med deg. Disse innstillingene påvirker bare kontoen din når du bruker multipålogging.</translation>
@@ -3911,11 +3910,11 @@
 <translation id="4602466770786743961">Tillat alltid at <ph name="HOST" /> bruker kameraet og mikrofonen</translation>
 <translation id="4606551464649945562">Ikke la nettsteder lage 3D-kart av omgivelsene dine eller spore kameraposisjonen</translation>
 <translation id="4608500690299898628">&amp;Finn</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> har sensitivt innhold</translation>
 <translation id="4609987916561367134">Nettsteder som har lov til å bruke JavaScript</translation>
 <translation id="4610162781778310380">Det oppsto en feil med <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Vil du gå til <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">En datatilkobling er tilgjengelig</translation>
+<translation id="4612841084470706111">Gi tilgang til alle forespurte nettsteder.</translation>
 <translation id="4613144866899789710">Avbryter Linux-installasjonen …</translation>
 <translation id="4613271546271159013">En utvidelse har endret hvilken siden som vises når du åpner en ny fane.</translation>
 <translation id="4615586811063744755">ingen informasjonskapsel er valgt</translation>
@@ -5681,6 +5680,7 @@
 <translation id="6291949900244949761">Spør når et nettsted vil ha tilgang til USB-enheter (anbefales)</translation>
 <translation id="6291953229176937411">&amp;Vis i Finder</translation>
 <translation id="6292699686837272722">Faner krymper til middels bredde</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> er slått av</translation>
 <translation id="6294759976468837022">Hastighet for automatisk skanning</translation>
 <translation id="6295158916970320988">Alle nettsteder</translation>
 <translation id="6295855836753816081">Lagrer …</translation>
@@ -5886,7 +5886,6 @@
 <translation id="6492396476180293140">Innebygd kamera er deaktivert av maskinvarebryter</translation>
 <translation id="6494327278868541139">Vis detaljer om økt beskyttelse</translation>
 <translation id="6494445798847293442">Ikke en sertifiseringsinstans</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Disse dataene har sensitivt eller farlig innhold}=1{Denne filen har sensitivt eller farlig innhold}other{Disse filene har sensitivt eller farlig innhold}}</translation>
 <translation id="6497548114956205206">Finn ut mer om strømsparing</translation>
 <translation id="6497784818439587832">Endre skjermstørrelsen for å gjøre elementer på skjermen mindre eller større</translation>
 <translation id="6497789971060331894">Omvendt rulling med musen</translation>
@@ -6032,7 +6031,6 @@
 <translation id="6621391692573306628">For å sende denne fanen til en annen enhet, logg på Chrome på begge enhetene</translation>
 <translation id="6622980291894852883">Fortsett blokkering av bilder</translation>
 <translation id="6624036901798307345">I nettbrettmodus kan du trykke på fanetellerknappen på verktøyraden for å åpne den nye faneraden som viser miniatyrbilder av alle fanene.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> har sensitivt eller farlig innhold. Spør eieren om å fikse dette.</translation>
 <translation id="6624687053722465643">Kakemons</translation>
 <translation id="6628328486509726751">Lastet opp <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Sterkere sikkerhet</translation>
@@ -8493,6 +8491,7 @@
 <translation id="8940081510938872932">Datamaskinen din har for mange baller i luften nå. Prøv på nytt senere.</translation>
 <translation id="8940381019874223173">Fra Google Foto</translation>
 <translation id="8941173171815156065">Opphev tillatelsen «<ph name="PERMISSION" />»</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> er av</translation>
 <translation id="894191600409472540">Lag sterke passord</translation>
 <translation id="894360074127026135">Internasjonal oppgradering av Netscape</translation>
 <translation id="8944099748578356325">bruke opp batteriet raskere (for øyeblikket <ph name="BATTERY_PERCENTAGE" /> %)</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index aab64b8..2b4154e5 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -408,6 +408,7 @@
 <translation id="1388253969141979417">ଆପଣଙ୍କ ମାଇକ୍ରୋଫୋନ୍ ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଆଯାଇଛି</translation>
 <translation id="1388728792929436380">ଅପଡେଟଗୁଡ଼ିକ ସମ୍ପୂର୍ଣ୍ଣ ହେଲେ <ph name="DEVICE_TYPE" /> ପୁଣି ରିଷ୍ଟାର୍ଟ ହେବ।</translation>
 <translation id="1389601498324964367">କୋଟା-ପରିଚାଳିତ ଷ୍ଟୋରେଜ</translation>
+<translation id="1390113502208199250">Chrome Education Upgrade ଫିଚରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଏହି ଡିଭାଇସର ଫେକ୍ଟୋରୀ ରିସେଟ କରିବାକୁ ହେବ।</translation>
 <translation id="139013308650923562">ଆପଣଙ୍କ ଡିଭାଇସରେ ଇନଷ୍ଟଲ୍ କରାଯାଇଥିବା ଫଣ୍ଟଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇଛି</translation>
 <translation id="1390548061267426325">ନିୟମିତ ଟାବ୍ ଭାବରେ ଖୋଲନ୍ତୁ</translation>
 <translation id="1390907927270446471"><ph name="PRINTER_NAME" />ରେ ପ୍ରିଣ୍ଟ କରିବା ପାଇଁ <ph name="PROFILE_USERNAME" />କୁ ଅଧିକାର ଦିଆଯାଇ ନାହିଁ। ଦୟାକରି ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
@@ -478,6 +479,7 @@
 <translation id="1436784010935106834">କାଢ଼ି ଦିଆଯାଇଛି</translation>
 <translation id="1437986450143295708">ସମସ୍ୟାଟିକୁ ବିଶଦ ଭାବେ ବର୍ଣ୍ଣନା କରନ୍ତୁ</translation>
 <translation id="1439671507542716852">ଦୀର୍ଘକାଳୀନ ସହାୟତା</translation>
+<translation id="1440090277117135316">ସ୍କୁଲ ପଞ୍ଜିକରଣ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> ଚୟନ କରାଯାଇଛି</translation>
 <translation id="1442851588227551435">ସକ୍ରିୟ Kerberos ଟିକେଟ୍ ସେଟ୍ କରନ୍ତୁ</translation>
 <translation id="1444628761356461360">ଡିଭାଇସ୍ ମାଲିକ, <ph name="OWNER_EMAIL" />ଙ୍କ ଦ୍ୱାରା.ଏହି ସେଟିଂ ପରିଚାଳନା କରାଯାଉଛି।</translation>
@@ -904,7 +906,6 @@
 <translation id="1819721979226826163">ଆପ୍‌ ବିଜ୍ଞପ୍ତି &gt; Google Play ସେବାରେ ଟାପ୍‌ କରନ୍ତୁ।</translation>
 <translation id="1820028137326691631">ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ବାରା ଦିଆଯାଇଥିବା ପାସ୍‌ୱର୍ଡ ଦିଅନ୍ତୁ</translation>
 <translation id="1822140782238030981">ଆପଣ ପୂର୍ବରୁ ଜଣେ Chrome ୟୁଜର ଅଟନ୍ତି? ସାଇନ ଇନ କରନ୍ତୁ</translation>
-<translation id="1823098433522728610">ଏହି ଡକ୍ୟୁମେଣ୍ଟରେ ସମ୍ବେଦନଶୀଳ ବିଷୟବସ୍ତୁ ଅଛି।</translation>
 <translation id="18245044880483936">ବ୍ୟାକଅପ୍ ଡାଟାକୁ ଆପଣଙ୍କ ପିଲାର Drive ଷ୍ଟୋରେଜ୍ କୋଟାରେ ଗଣନା କରାଯିବ ନାହିଁ।</translation>
 <translation id="1825565032302550710">ପୋର୍ଟ 1024 ଓ 65535 ମଧ୍ୟରେ ହେବା ଆବଶ୍ୟକ</translation>
 <translation id="182577151972096764">ବର୍ତ୍ତମାନ ଦେଖାଯାଇଥିବା ରେସିପିଗୁଡ଼ିକ</translation>
@@ -1939,7 +1940,6 @@
 <translation id="2743387203779672305">କ୍ଲିପ୍‌ବୋର୍ଡକୁ କପି କରନ୍ତୁ</translation>
 <translation id="274362947316498129">ଏକ ଆପ <ph name="DEVICE_NAME" />କୁ ଆକ୍ସେସ କରିବା ପାଇଁ ଚେଷ୍ଟା କରୁଛି। ଆକ୍ସେସ କରିବାକୁ ଅନୁମତି ଦେବା ପାଇଁ <ph name="DEVICE_NAME" /> ଗୋପନୀୟତା ସ୍ୱିଚକୁ ବନ୍ଦ କରନ୍ତୁ।</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">ଏହି ଫାଇଲରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି। ଏହାକୁ ସମାଧାନ କରିବା ପାଇଁ ଏହାର ମାଲିକଙ୍କୁ କୁହନ୍ତୁ।</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />ରେ ସାଇନ୍‍ ଇନ୍‍ କରନ୍ତୁ</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">ବନାନ ସହିତ ବ୍ୟାକରଣର ଯାଞ୍ଚ କରନ୍ତୁ</translation>
@@ -2395,6 +2395,7 @@
 <translation id="3170072451822350649">ଆପଣ ହୁଏତ ସାଇନ୍ ଇନ୍‌କୁ ଛାଡ଼ିପାରିବେ ଏବଂ <ph name="LINK_START" />ଅତିଥି ଭାବେ ବ୍ରାଉଜ୍ କରିପାରିବେ<ph name="LINK_END" />।</translation>
 <translation id="31774765611822736">ବାମ ପଟେ ଥିବା ନୂଆ ଟାବ</translation>
 <translation id="3177909033752230686">ପୃଷ୍ଠାର ଭାଷା:</translation>
+<translation id="3177914167275935955">ଆପଣଙ୍କ ଡିଭାଇସରେ ଏକ Chrome Education Upgrade ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି, କିନ୍ତୁ ଆପଣଙ୍କ ୟୁଜରନେମ କୌଣସି Google for Education ଆକାଉଣ୍ଟ ସହ ସମ୍ବନ୍ଧିତ ନୁହେଁ। ଏକ ଦ୍ୱିତୀୟ ଡିଭାଇସରେ g.co/workspace/edusignupକୁ ଭିଜିଟ କରି ଦୟାକରି ଗୋଟିଏ Google for Education ଆକାଉଣ୍ଟ ତିଆରି କରନ୍ତୁ।</translation>
 <translation id="3179982752812949580">ଟେକ୍ସଟ୍ ଫଣ୍ଟ</translation>
 <translation id="3181954750937456830">ସେଫ୍ ବ୍ରାଉଜିଂ (ଆପଣଙ୍କୁ ଏବଂ ଆପଣଙ୍କର ଡିଭାଇସ୍‍କୁ ବିପଜ୍ଜନକ ସାଇଟ୍‍ଗୁଡ଼ିକରୁ ରକ୍ଷା କରେ)</translation>
 <translation id="3182749001423093222">ବନାନ ଯାଞ୍ଚ</translation>
@@ -2534,7 +2535,6 @@
 <translation id="3317459757438853210">ଦୁଇ-ତରଫା</translation>
 <translation id="3317678681329786349">କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନ୍ ବ୍ଲକ୍ ଅଛି</translation>
 <translation id="3320630259304269485">ସେଫ୍ ବ୍ରାଉଜିଂ (ବିପଦଜନକ ସାଇଟଗୁଡ଼ିକରୁ ସୁରକ୍ଷା) ଏବଂ ଅନ୍ୟ ସୁରକ୍ଷା ସେଟିଂସ୍</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ଏହି ଡାଟାରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି। ଏହି ବିଷୟବସ୍ତୁ କାଢ଼ି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।}=1{ଏହି ଫାଇଲରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି। ଏହି ବିଷୟବସ୍ତୁ କାଢ଼ି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।}other{ଏହି ଫାଇଲଗୁଡ଼ିକରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି। ଏହି ବିଷୟବସ୍ତୁ କାଢ଼ି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।}}</translation>
 <translation id="3323521181261657960">ବୋନସ୍! ଆପଣ ଅଧିକ ସ୍କ୍ରିନ୍ ସମୟ ପାଇଛନ୍ତି</translation>
 <translation id="3323577066981719144">ଆପଣ ଏଠାରେ କରୁଥିବା ପରିବର୍ତ୍ତନଗୁଡ଼ିକ କେବଳ Chrome ବ୍ରାଉଜରରେ ଲାଗୁ ହୋଇଥାଏ। ଆପଣଙ୍କ Lacros Chrome ବ୍ରାଉଜର ସେଟିଂସରେ ପରିବର୍ତ୍ତନ କରିବାକୁ, Lacros Chrome ବ୍ରାଉଜର ଖୋଲି ସେଟିଂସକୁ ଯାଆନ୍ତୁ।</translation>
 <translation id="3325804108816646710">ଉପଲବ୍ଧ ପ୍ରୋଫାଇଲଗୁଡ଼ିକୁ ଖୋଜାଯାଉଛି...</translation>
@@ -2668,7 +2668,6 @@
 <translation id="3445925074670675829">USB-C ଡିଭାଇସ୍</translation>
 <translation id="3446274660183028131">ଦୟାକରି Windows ଇନଷ୍ଟଲ୍ କରିବାକୁ Parallels Desktop ଲଞ୍ଚ କରନ୍ତୁ।</translation>
 <translation id="344630545793878684">ଅନେକଗୁଡ଼ିଏ ୱେବ୍‌ସାଇଟ୍‌ରେ ଆପଣଙ୍କର ଡାଟା ପଢ଼ନ୍ତୁ</translation>
-<translation id="3446650212859500694">ଏହ ଫାଇଲରେ ସମ୍ବେଦନଶୀଳ ବିଷୟବସ୍ତୁ ଅଛି</translation>
 <translation id="3447644283769633681">ସମସ୍ତ ତୃତୀୟ-ପକ୍ଷ କୁକୀକୁ ବ୍ଲକ କରନ୍ତୁ</translation>
 <translation id="3448492834076427715">ଆକାଉଣ୍ଟ ଅପ୍‌ଡେଟ୍ କରନ୍ତୁ</translation>
 <translation id="3449393517661170867">ନୂଆ ଟାବ୍ କରାଯାଇଥିବା ୱିଣ୍ଡୋ</translation>
@@ -3901,7 +3900,6 @@
 <translation id="4602466770786743961">ଆପଣଙ୍କର କ୍ୟାମେରା ଓ ମାଇକ୍ରୋଫୋନ୍ ଆକ୍ସେସ୍ କରିବା ପାଇଁ <ph name="HOST" />କୁ ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ</translation>
 <translation id="4606551464649945562">ଆପଣଙ୍କ ପରିପାର୍ଶ୍ୱର ଏକ 3D ମ୍ୟାପ୍ ତିଆରି କରିବା ଏବଂ କ୍ୟାମେରା ସ୍ଥିତି ଟ୍ରାକ୍ କରିବାକୁ ସାଇଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ</translation>
 <translation id="4608500690299898628">&amp;ଖୋଜନ୍ତୁ...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" />ରେ ସମ୍ବେଦନଶୀଳ ବିଷୟବସ୍ତୁ ଅଛି</translation>
 <translation id="4609987916561367134">JavaScript ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଆଯାଇଛି</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />ରେ କିଛି ତ୍ରୁଟି ଦେଖାଦେ‍ଇଛି</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> କୁ ଯିବା ଲାଗି ଆପଣ ବୁଝନ୍ତି କି?</translation>
@@ -4066,6 +4064,7 @@
 <translation id="4762489666082647806">ପଏଣ୍ଟରର ରଙ୍ଗ</translation>
 <translation id="4762718786438001384">ଡିଭାଇସ୍ ଡିସ୍କ୍ ସ୍ଥାନ ଅତ୍ୟନ୍ତ କମ୍</translation>
 <translation id="4763408175235639573">ଯେତେବେଳେ ଆପଣ ଏହି ପୃଷ୍ଠା ଦେଖିଥିଲେ, ସେତେବେଳେ ନିମ୍ନରେ ଦିଆଯାଇଥିବା କୁକୀଗୁଡ଼ିକ ସେଟ୍ କରାଯାଇଥିଲା</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> ଏକ ବୈଧ Google for Education ଆକାଉଣ୍ଟ ନୁହେଁ। ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ କଣ୍ଟାକ୍ଟ କରନ୍ତୁ। ଯଦି ଆପଣ ଜଣେ ଆଡମିନିଷ୍ଟ୍ରେଟର ଅଟନ୍ତି, ତେବେ ଆପଣ ଏଠାକୁ ଭିଜିଟ କରି ଆପଣଙ୍କ ସଂସ୍ଥାକୁ ସେଟ ଅପ କରିପାରିବେ: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{ଏହି ଡିଭାଇସଟି 1 ମାସ ପାଇଁ ସେଭ ହୋଇଯିବ ଏବଂ ଆପଣ ପରବର୍ତ୍ତୀ ଥର ଏକ କୋଡ ବିନା କନେକ୍ଟ କରିପାରିବେ। ଏହା ଆପଣଙ୍କର ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ସେଟ କରାଯାଇଛି।}other{ଏହି ଡିଭାଇସଟି {MONTHS} ମାସ ପାଇଁ ସେଭ ହୋଇଯିବ ଏବଂ ଆପଣ ପରବର୍ତ୍ତୀ ଥର ଏକ କୋଡ ବିନା କନେକ୍ଟ କରିପାରିବେ। ଏହା ଆପଣଙ୍କର ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ସେଟ କରାଯାଇଛି।}}</translation>
 <translation id="4765582662863429759">ଆପଣଙ୍କର ଫୋନ୍‌ରୁ Chromebookକୁ ଟେକ୍ସଟ୍‍ ପ୍ରତିସାରଣ କରିବାକୁ Androidର ମେସେଜ୍‌ଗୁଡ଼ିକୁ ଅନୁମତି ଦିଏ।</translation>
 <translation id="4766598565665644999">ସମସ୍ତ ଏକ୍ସଟେନସନ <ph name="HOST" />କୁ ପଢ଼ିପାରିବେ ଓ ପରିବର୍ତ୍ତନ କରିପାରିବେ</translation>
@@ -4727,6 +4726,7 @@
 <translation id="5407167491482639988">ଦୁର୍ବୋଧ୍ୟ</translation>
 <translation id="5408750356094797285">ଜୁମ୍ କରନ୍ତୁ: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରୁ</translation>
+<translation id="5411022484772257615">ସ୍କୁଲ ପଞ୍ଜିକରଣ ସମ୍ପୂର୍ଣ୍ଣ କରାଯାଇପାରିଲା ନାହିଁ</translation>
 <translation id="5413640305322530561">ଡାଏଗ୍ନୋଷ୍ଟିକ ଓ ବ୍ୟବହାର ସମ୍ବନ୍ଧିତ ଡାଟା ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation>
 <translation id="5414198321558177633">ପ୍ରୋଫାଇଲ୍ ତାଲିକାକୁ ରିଫ୍ରେସ୍ କରାଯାଉଛି। ଏଥିପାଇଁ କିଛି ସମୟ ଲାଗିପାରେ।</translation>
 <translation id="5414566801737831689">ଆପଣ ଯାଇଥିବା ୱେବ୍‌ସାଇଟ୍‌ଗୁଡ଼ିକର ଆଇକନ୍‌ଗୁଡ଼ିକୁ ପଢ଼ନ୍ତୁ</translation>
@@ -5509,6 +5509,7 @@
 <translation id="6129953537138746214">ସ୍ପେସ୍</translation>
 <translation id="6130692320435119637">Wi-Fi ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="6130887916931372608">କୀବୋର୍ଡର କୀ</translation>
+<translation id="6132714462430777655">ସ୍କୁଲ ପଞ୍ଜିକରଣକୁ ବାଦ୍ ଦେବେ?</translation>
 <translation id="6135823405800500595">ଆପଣଙ୍କ ଫୋନଟି ପାଖରେ ଅଛି, ଏହାକୁ ଅନଲକ କରାଯାଇଛି ଏବଂ ବ୍ଲୁଟୁଥ ଓ ୱାଇ-ଫାଇ ଚାଲୁ ଅଛି ବୋଲି ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation>
 <translation id="6135826623269483856">ଆପଣଙ୍କ ସମସ୍ତ ଡିସପ୍ଲେରେ ୱିଣ୍ଡୋଗୁଡ଼ିକୁ ପରିଚାଳନା କରିବା ପାଇଁ ସାଇଟଗୁଡ଼ିକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ</translation>
 <translation id="6136114942382973861">ଡାଉନ୍‌ଲୋଡ୍ ବାର୍‍କୁ ବନ୍ଦ କରନ୍ତୁ</translation>
@@ -5873,7 +5874,6 @@
 <translation id="6492396476180293140">ହାର୍ଡୱେର ସ୍ୱିଚ ଦ୍ୱାରା ଇଣ୍ଟର୍ନଲ କ୍ୟାମେରାକୁ ନିଷ୍କ୍ରିୟ କରାଯାଇଛି</translation>
 <translation id="6494327278868541139">ଉନ୍ନତ ସୁରକ୍ଷା ବିବରଣୀ ଦେଖାନ୍ତୁ</translation>
 <translation id="6494445798847293442">କୌଣସି ପ୍ରାମାଣିକରଣ ଅଧିକାରୀ ନୁହେଁ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ଏହି ଡାଟାରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି}=1{ଏହି ଫାଇଲରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି}other{ଏହି ଫାଇଲଗୁଡ଼ିକରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି}}</translation>
 <translation id="6497548114956205206">ଏନର୍ଜି ସେଭର ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation>
 <translation id="6497784818439587832">ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ଆଇଟମଗୁଡ଼ିକୁ ଛୋଟ କିମ୍ବା ବଡ଼ କରିବା ପାଇଁ ଡିସପ୍ଲେ ଆକାର ବଦଳାନ୍ତୁ</translation>
 <translation id="6497789971060331894">ମାଉସ୍ ରିଭର୍ସ ସ୍କ୍ରୋଲିଂ</translation>
@@ -6020,7 +6020,6 @@
 <translation id="6621391692573306628">ଏହି ଟାବକୁ ଅନ୍ୟ ଏକ ଡିଭାଇସକୁ ପଠାଇବା ପାଇଁ ଉଭୟ ଡିଭାଇସରେ Chromeକୁ ସାଇନ ଇନ କରନ୍ତୁ</translation>
 <translation id="6622980291894852883">ଛବି ବ୍ଲକ୍ କରିବା ଜାରି ରଖନ୍ତୁ</translation>
 <translation id="6624036901798307345">ଟାବଲେଟ ମୋଡରେ, ପ୍ରତ୍ୟେକ ଟାବର ଥମ୍ବନେଲକୁ ଦେଖାଉଥିବା ନୂଆ ଟାବ ଷ୍ଟ୍ରିପକୁ ଖୋଲିବା ପାଇଁ ଟାବ କାଉଣ୍ଟର ଟୁଲବାର ବଟନରେ ଟାପ କରନ୍ତୁ।</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" />ରେ ସମ୍ବେଦନଶୀଳ କିମ୍ବା ବିପଦଜନକ ବିଷୟବସ୍ତୁ ଅଛି। ଏହାକୁ ସମାଧାନ କରିବା ପାଇଁ ଏହାର ମାଲିକଙ୍କୁ କୁହନ୍ତୁ।</translation>
 <translation id="6624687053722465643">ମଧୁରତା</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" />ରେ ଅପ୍‌ଲୋଡ୍ ହୋଇଛି</translation>
 <translation id="6630117778953264026">କଡ଼ା ସୁରକ୍ଷା</translation>
@@ -6733,6 +6732,7 @@
 <translation id="7310598146671372464">ଲଗ୍‌ଇନ୍ କରିହେଲା ନାହିଁ। ସର୍ଭର ନିର୍ଦ୍ଦିଷ୍ଟ କରାଯାଇଥିବା Kerberos ଏନ୍‌କ୍ରିପ୍‌ସନ୍ ପ୍ରକାରକୁ ସମର୍ଥନ କରୁନାହିଁ। ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation>
 <translation id="7311089766378749632"><ph name="SITE_NAME" />କୁ ପଢ଼ିବା ଏବଂ ସେଥିରେ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ ଅନୁରୋଧ କରାଯାଉଛି</translation>
 <translation id="7312210124139670355">ଆପଣଙ୍କ ଆଡମିନଷ୍ଟ୍ରେଟର ଆପଣଙ୍କର eSIMକୁ ରିସେଟ କରୁଛନ୍ତି। ଏଥିପାଇଁ କିଛି ସମୟ ଲାଗିପାରେ।</translation>
+<translation id="7317831949569936035">ସ୍କୁଲ ପଞ୍ଜିକରଣ</translation>
 <translation id="7320213904474460808">ନେଟୱାର୍କ ପାଇଁ ଡିଫଲ୍ଟ</translation>
 <translation id="7321545336522791733">ସର୍ଭର୍ ଅପହଞ୍ଚ ଦୂରତାରେ ଅଛି</translation>
 <translation id="7323315405936922211">କର୍ସର ଏରିଆ ଆକାର</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 2a4e7c2..aa4849c 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -919,7 +919,6 @@
 <translation id="1819721979226826163">ਐਪ ਸੂਚਨਾਵਾਂ &gt; Google Play ਸੇਵਾਵਾਂ 'ਤੇ ਟੈਪ ਕਰੋ।</translation>
 <translation id="1820028137326691631">ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਮੁਹੱਈਆ ਕੀਤਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ</translation>
 <translation id="1822140782238030981">ਕੀ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਇੱਕ Chrome ਵਰਤੋਂਕਾਰ ਹੋ? ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
-<translation id="1823098433522728610">ਇਸ ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ ਹੈ।</translation>
 <translation id="18245044880483936">ਬੈਕਅੱਪ ਡਾਟੇ ਨੂੰ ਤੁਹਾਡੇ ਬੱਚੇ ਦੇ 'ਡਰਾਈਵ' ਸਟੋਰੇਜ ਕੋਟੇ ਵਿੱਚ ਨਹੀਂ ਗਿਣਿਆ ਜਾਵੇਗਾ।</translation>
 <translation id="1825565032302550710">ਪੋਰਟ 1024 ਅਤੇ 65535 ਦੇ ਵਿਚਕਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ</translation>
 <translation id="182577151972096764">ਹਾਲ ਹੀ ਵਿੱਚ ਦੇਖੀਆਂ ਗਈਆਂ ਪਕਵਾਨ-ਵਿਧੀਆਂ</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2743301740238894839">ਸ਼ੁਰੂ ਕਰੋ</translation>
 <translation id="2743387203779672305">ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰੋ</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">ਇਸ ਫ਼ਾਈਲ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ। ਇਸ ਦੇ ਮਾਲਕ ਨੂੰ ਸਹੀ ਕਰਨ ਲਈ ਕਹੋ।</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="2749836841884031656">ਸਿਮ</translation>
 <translation id="2749881179542288782">ਸਪੈਲਿੰਗ ਨਾਲ ਵਿਆਕਰਣ ਦੀ ਜਾਂਚ ਕਰੋ</translation>
@@ -2550,7 +2548,6 @@
 <translation id="3317459757438853210">ਦੋ-ਪੱਖੀ</translation>
 <translation id="3317678681329786349">ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਬਲਾਕ ਕੀਤੇ ਗਏ</translation>
 <translation id="3320630259304269485">ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ (ਖਤਰਨਾਕ ਸਾਈਟਾਂ ਤੋਂ ਸੁਰੱਖਿਆ) ਅਤੇ ਹੋਰ ਸੁਰੱਖਿਆ ਸੈਟਿੰਗਾਂ</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ਇਸ ਡਾਟੇ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ। ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਹਟਾ ਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।}=1{ਇਸ ਫ਼ਾਈਲ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ। ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਹਟਾ ਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।}other{ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ। ਇਸ ਸਮੱਗਰੀ ਨੂੰ ਹਟਾ ਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।}}</translation>
 <translation id="3323521181261657960">ਬੋਨਸ! ਤੁਹਾਡਾ ਸਕ੍ਰੀਨ ਸਮਾਂ ਵਧਾਇਆ ਗਿਆ</translation>
 <translation id="3323577066981719144">ਤੁਹਾਡੇ ਵੱਲੋਂ ਇੱਥੇ ਕੀਤੀਆਂ ਤਬਦੀਲੀਆਂ ਸਿਰਫ਼ Chrome ਬ੍ਰਾਊਜ਼ਰ 'ਤੇ ਹੀ ਲਾਗੂ ਹੁੰਦੀਆਂ ਹਨ। ਆਪਣੇ Lacros Chrome ਬ੍ਰਾਊਜ਼ਰ ਦੀਆਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਕਰਨ ਲਈ, Lacros Chrome ਬ੍ਰਾਊਜ਼ਰ ਖੋਲ੍ਹੋ ਅਤੇ ਸੈਟਿੰਗਾਂ 'ਤੇ ਜਾਓ।</translation>
 <translation id="3325804108816646710">ਉਪਲਬਧ ਪ੍ਰੋਫਾਈਲਾਂ ਨੂੰ ਲੱਭਿਆ ਜਾ ਰਿਹਾ ਹੈ...</translation>
@@ -2684,7 +2681,6 @@
 <translation id="3445925074670675829">USB-C ਡੀਵਾਈਸ</translation>
 <translation id="3446274660183028131">Windows ਨੂੰ ਸਥਾਪਤ ਕਰਨ ਲਈ ਕਿਰਪਾ ਕਰਕੇ Parallels Desktop ਨੂੰ ਲਾਂਚ ਕਰੋ।</translation>
 <translation id="344630545793878684">ਕੁਝ ਵੈਬਸਾਈਟਾਂ ਤੇ ਆਪਣਾ ਡਾਟਾ ਪੜ੍ਹੋ</translation>
-<translation id="3446650212859500694">ਇਸ ਫ਼ਾਈਲ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ ਹੈ</translation>
 <translation id="3447644283769633681">ਤੀਜੀ-ਧਿਰ ਦੀਆਂ ਸਾਰੀਆਂ ਕੁਕੀਜ਼ ਬਲਾਕ ਕਰੋ</translation>
 <translation id="3448492834076427715">ਖਾਤਾ ਅੱਪਡੇਟ ਕਰੋ</translation>
 <translation id="3449393517661170867">ਟੈਬ ਕੀਤੀ ਗਈ ਨਵੀਂ ਵਿੰਡੋ</translation>
@@ -3917,7 +3913,6 @@
 <translation id="4602466770786743961">ਹਮੇਸ਼ਾਂ <ph name="HOST" />  ਆਪਣੇ ਕੈਮਰੇ ਅਤੇ ਮਾਈਕ੍ਰੋਫੋਨ ਤੇ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦਿਓ</translation>
 <translation id="4606551464649945562">ਸਾਈਟਾਂ ਨੂੰ ਤੁਹਾਡੇ ਆਲੇ-ਦੁਆਲੇ ਦਾ 3D ਨਕਸ਼ਾ ਬਣਾਉਣ ਜਾਂ ਕੈਮਰਾ ਸਥਿਤੀ ਨੂੰ ਟਰੈਕ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਾ ਦਿਓ</translation>
 <translation id="4608500690299898628">&amp;ਲੱਭੋ...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਸਮੱਗਰੀ ਹੈ</translation>
 <translation id="4609987916561367134">JavaScript ਵਰਤਣ ਦੀ ਇਜਾਜ਼ਤ ਹੈ</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ਵਿੱਚ ਕੋਈ ਗੜਬੜ ਹੋਈ</translation>
 <translation id="4610637590575890427">ਕੀ ਤੁਸੀਂ <ph name="SITE" /> ਤੇ ਜਾਣਾ ਸੀ?</translation>
@@ -5890,7 +5885,6 @@
 <translation id="6492396476180293140">ਹਾਰਡਵੇਅਰ ਸਵਿੱਚ ਦੀ ਮਦਦ ਨਾਲ ਅੰਦਰੂਨੀ ਕੈਮਰਾ ਅਕਿਰਿਆਸ਼ੀਲ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="6494327278868541139">ਵਿਸਤ੍ਰਿਤ ਸੁਰੱਖਿਆ ਵੇਰਵੇ ਦਿਖਾਓ</translation>
 <translation id="6494445798847293442">ਇੱਕ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਅਥਾਰਿਟੀ ਨਹੀਂ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ਇਸ ਡਾਟੇ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ}=1{ਇਸ ਫ਼ਾਈਲ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ}other{ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ}}</translation>
 <translation id="6497548114956205206">ਊਰਜਾ ਸੇਵਰ ਬਾਰੇ ਹੋਰ ਜਾਣੋ</translation>
 <translation id="6497784818439587832">ਆਪਣੀ ਸਕ੍ਰੀਨ 'ਤੇ ਆਈਟਮਾਂ ਨੂੰ ਛੋਟਾ ਜਾਂ ਵੱਡਾ ਕਰਨ ਲਈ ਡਿਸਪਲੇ ਦਾ ਆਕਾਰ ਬਦਲੋ</translation>
 <translation id="6497789971060331894">ਮਾਊਸ ਦੀ ਉਲਟ ਸਕ੍ਰੋਲਿੰਗ</translation>
@@ -6038,7 +6032,6 @@
 <translation id="6621391692573306628">ਇਸ ਟੈਬ ਨੂੰ ਕਿਸੇ ਹੋਰ ਡੀਵਾਈਸ 'ਤੇ ਭੇਜਣ ਲਈ ਦੋਵਾਂ ਡੀਵਾਈਸਾਂ 'ਤੇ Chrome ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ</translation>
 <translation id="6622980291894852883">ਚਿੱਤਰ ਬਲੌਕ ਕਰਨਾ ਜਾਰੀ ਰੱਖੋ</translation>
 <translation id="6624036901798307345">ਟੈਬਲੈੱਟ ਮੋਡ ਵਿੱਚ, ਹਰੇਕ ਟੈਬ ਦਾ ਲਘੂ-ਚਿੱਤਰ ਦਿਖਾਉਣ ਵਾਲੀ ਨਵੀਂ ਟੈਬ ਪੱਟੀ ਖੋਲ੍ਹਣ ਲਈ ਟੈਬ ਕਾਊਂਟਰ ਟੂਲਬਾਰ ਬਟਨ 'ਤੇ ਟੈਪ ਕਰੋ।</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> ਵਿੱਚ ਸੰਵੇਦਨਸ਼ੀਲ ਜਾਂ ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਹੈ। ਇਸ ਦੇ ਮਾਲਕ ਨੂੰ ਸਹੀ ਕਰਨ ਲਈ ਕਹੋ।</translation>
 <translation id="6624687053722465643">ਮਿੱਠਾ</translation>
 <translation id="6628328486509726751"><ph name="WEBRTC_LOG_UPLOAD_TIME" /> ਅਪਲੋਡ ਕੀਤਾ ਗਿਆ</translation>
 <translation id="6630117778953264026">ਮਜ਼ਬੂਤ ਸੁਰੱਖਿਆ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index ef390ea..255c09b 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -905,7 +905,6 @@
 <translation id="1819721979226826163">Kliknij Powiadomienia z aplikacji &gt; Usługi Google Play.</translation>
 <translation id="1820028137326691631">Wpisz hasło uzyskane od administratora</translation>
 <translation id="1822140782238030981">Używasz już Chrome? Zaloguj się.</translation>
-<translation id="1823098433522728610">Ten dokument zawiera dane wrażliwe.</translation>
 <translation id="18245044880483936">Dane kopii zapasowej nie zmniejszają ilości miejsca dostępnego na Dysku Twojego dziecka.</translation>
 <translation id="1825565032302550710">Port musi mieć numer z zakresu 1024–65535</translation>
 <translation id="182577151972096764">ostatnio przeglądane przepisy</translation>
@@ -1928,7 +1927,6 @@
 <translation id="2743387203779672305">Skopiuj do schowka</translation>
 <translation id="274362947316498129">Aplikacja próbuje uzyskać dostęp do: <ph name="DEVICE_NAME" />. Aby na to zezwolić, wyłącz przełącznik prywatności urządzenia <ph name="DEVICE_NAME" />.</translation>
 <translation id="2745080116229976798">Subordynacja kwalifikowana firmy Microsoft</translation>
-<translation id="2747266560080989517">Ten plik zawiera treści niebezpieczne lub treści o charakterze kontrowersyjnym. Poproś właściciela, by rozwiązał problem.</translation>
 <translation id="2749756011735116528">Zaloguj się w <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Sprawdzaj gramatykę razem z pisownią</translation>
@@ -2523,7 +2521,6 @@
 <translation id="3317459757438853210">Druk dwustronny</translation>
 <translation id="3317678681329786349">Zablokowano dostęp do kamery i mikrofonu</translation>
 <translation id="3320630259304269485">Bezpieczne przeglądanie (ochrona przed niebezpiecznymi stronami) i inne ustawienia zabezpieczeń</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Te dane zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym. Usuń te treści i spróbuj jeszcze raz.}=1{Ten plik zawiera treści niebezpieczne lub treści o charakterze kontrowersyjnym. Usuń te treści i spróbuj jeszcze raz.}few{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym. Usuń te treści i spróbuj jeszcze raz.}many{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym. Usuń te treści i spróbuj jeszcze raz.}other{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym. Usuń te treści i spróbuj jeszcze raz.}}</translation>
 <translation id="3323521181261657960">Bonus! Możesz dłużej korzystać z urządzenia</translation>
 <translation id="3323577066981719144">Wprowadzone tu zmiany są stosowane tylko do przeglądarki Chrome. Aby zmienić ustawienia przeglądarki Chrome w wersji Lacros, otwórz ją i przejdź do ustawień.</translation>
 <translation id="3325804108816646710">Szukam dostępnych profili...</translation>
@@ -2657,7 +2654,6 @@
 <translation id="3445925074670675829">Urządzenie USB-C</translation>
 <translation id="3446274660183028131">Włącz aplikację Parallels Desktop, by zainstalować system Windows.</translation>
 <translation id="344630545793878684">Odczyt Twoich danych na kilku stronach internetowych</translation>
-<translation id="3446650212859500694">Ten plik zawiera treści o charakterze kontrowersyjnym</translation>
 <translation id="3447644283769633681">Blokuj wszystkie pliki cookie innych firm</translation>
 <translation id="3448492834076427715">Aktualizuj konto</translation>
 <translation id="3449393517661170867">Nowe okno z kartami</translation>
@@ -3891,7 +3887,6 @@
 <translation id="4602466770786743961">Zawsze zezwalaj witrynie <ph name="HOST" /> na dostęp do kamery i mikrofonu</translation>
 <translation id="4606551464649945562">Nie zezwalaj stronom na tworzenie mapy 3D Twojego otoczenia ani na śledzenie pozycji kamery</translation>
 <translation id="4608500690299898628">&amp;Znajdź</translation>
-<translation id="4608703838363792434">Plik <ph name="FILE_NAME" /> zawiera treści o charakterze kontrowersyjnym</translation>
 <translation id="4609987916561367134">Zezwolono na używanie JavaScriptu</translation>
 <translation id="4610162781778310380">We wtyczce <ph name="PLUGIN_NAME" /> wystąpił błąd</translation>
 <translation id="4610637590575890427">Czy chodziło o przejście do witryny <ph name="SITE" />?</translation>
@@ -5865,7 +5860,6 @@
 <translation id="6492396476180293140">Kamerę wewnętrzną wyłączono przełącznikiem sprzętowym</translation>
 <translation id="6494327278868541139">Pokaż szczegóły silniejszej ochrony</translation>
 <translation id="6494445798847293442">To nie jest urząd certyfikacji</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Te dane zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}=1{Ten plik zawiera treści niebezpieczne lub treści o charakterze kontrowersyjnym.}few{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}many{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}other{Te pliki zawierają treści niebezpieczne lub treści o charakterze kontrowersyjnym.}}</translation>
 <translation id="6497548114956205206">Więcej informacji o oszczędzaniu energii</translation>
 <translation id="6497784818439587832">Umożliwia zmienianie rozmiaru wyświetlacza, aby elementy na ekranie były mniejsze lub większe</translation>
 <translation id="6497789971060331894">Odwrotne przewijanie myszą</translation>
@@ -6015,7 +6009,6 @@
 <translation id="6621391692573306628">Aby wysłać tę kartę na inne urządzenie, na obu urządzeniach zaloguj się w Chrome</translation>
 <translation id="6622980291894852883">Nadal blokuj pokazywanie grafik</translation>
 <translation id="6624036901798307345">W trybie tabletu kliknij przycisk licznika kart na pasku narzędzi, aby otworzyć nowy pasek kart z miniaturą każdej karty.</translation>
-<translation id="6624535038674360844">Plik <ph name="FILE_NAME" /> zawiera treści niebezpieczne lub treści o charakterze kontrowersyjnym. Poproś właściciela, by rozwiązał problem.</translation>
 <translation id="6624687053722465643">Słodycz</translation>
 <translation id="6628328486509726751">Przesłano: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Lepsze zabezpieczenia</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 56ef108..1553512 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -240,6 +240,7 @@
 <translation id="121384500095351701">Não é possível fazer o download desse arquivo por motivos de segurança</translation>
 <translation id="1215411991991485844">Novo aplicativo de fundo adicionado</translation>
 <translation id="1216542092748365687">Remover impressão digital</translation>
+<translation id="1216891999012841486">Saiba mais sobre como corrigir erros de atualização</translation>
 <translation id="1217114730239853757">Você quer ativar o ChromeVox, o leitor de tela integrado do ChromeOS Flex? Se for o caso, pressione a barra de espaço.</translation>
 <translation id="1217483152325416304">Seus dados locais serão excluídos em breve</translation>
 <translation id="1217668622537098248">Reverter para o clique com botão esquerdo após a ação</translation>
@@ -410,6 +411,7 @@
 <translation id="1388253969141979417">Permitir o uso do microfone</translation>
 <translation id="1388728792929436380">O <ph name="DEVICE_TYPE" /> será reiniciado quando as atualizações forem concluídas.</translation>
 <translation id="1389601498324964367">Armazenamento gerenciado por cotas</translation>
+<translation id="1390113502208199250">Você precisará redefinir este dispositivo para a configuração original se quiser usar recursos do Upgrade do Chrome Education.</translation>
 <translation id="139013308650923562">Com autorização para usar as fontes instaladas no dispositivo</translation>
 <translation id="1390548061267426325">Abrir como guia normal</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> não tem autorização para imprimir com a <ph name="PRINTER_NAME" />. Entre em contato com o administrador.</translation>
@@ -480,6 +482,7 @@
 <translation id="1436784010935106834">Removido</translation>
 <translation id="1437986450143295708">Descreva o problema detalhadamente</translation>
 <translation id="1439671507542716852">suporte de longo prazo</translation>
+<translation id="1440090277117135316">Registro escolar concluído</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> selecionado(s)</translation>
 <translation id="1442851588227551435">Definir um tíquete ativo do Kerberos</translation>
 <translation id="1444628761356461360">Esta configuração é gerenciada pelo proprietário do dispositivo, <ph name="OWNER_EMAIL" />.</translation>
@@ -919,7 +922,6 @@
 <translation id="1819721979226826163">Toque em Notificações de apps &gt; Google Play Services.</translation>
 <translation id="1820028137326691631">Digite a senha fornecida pelo administrador</translation>
 <translation id="1822140782238030981">Já é usuário do Chrome? Faça login</translation>
-<translation id="1823098433522728610">Esse documento tem conteúdo sensível.</translation>
 <translation id="18245044880483936">Os dados de backup não serão contabilizados na cota de armazenamento do Google Drive da criança.</translation>
 <translation id="1825565032302550710">A porta precisa estar entre 1.024 e 65.535</translation>
 <translation id="182577151972096764">receitas acessadas recentemente</translation>
@@ -1955,8 +1957,8 @@
 <translation id="274318651891194348">Procurando teclado</translation>
 <translation id="2743301740238894839">Iniciar</translation>
 <translation id="2743387203779672305">Copiar para área de transferência</translation>
+<translation id="274362947316498129">Um app está tentando acessar este dispositivo: <ph name="DEVICE_NAME" />. Desative a chave de privacidade do dispositivo <ph name="DEVICE_NAME" /> para permitir o acesso.</translation>
 <translation id="2745080116229976798">Subordinação qualificada da Microsoft</translation>
-<translation id="2747266560080989517">Esse arquivo tem conteúdo confidencial ou perigoso. Peça para o proprietário corrigir isso.</translation>
 <translation id="2749756011735116528">Fazer login no <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">Chip</translation>
 <translation id="2749881179542288782">Verificar a gramática com a ortografia</translation>
@@ -2412,6 +2414,7 @@
 <translation id="3170072451822350649">Também é possível ignorar o login e <ph name="LINK_START" />navegar como visitante<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Nova guia à esquerda</translation>
 <translation id="3177909033752230686">Idioma da página:</translation>
+<translation id="3177914167275935955">Seu dispositivo inclui um Upgrade do Chrome Education, mas seu nome de usuário não está associado a uma conta do Google for Education. Crie uma conta desse tipo acessando g.co/workspace/edusignup em um dispositivo secundário.</translation>
 <translation id="3179982752812949580">Fonte do texto</translation>
 <translation id="3181954750937456830">Navegação segura: protege você e seu dispositivo de sites perigosos</translation>
 <translation id="3182749001423093222">Verificação ortográfica</translation>
@@ -2551,7 +2554,6 @@
 <translation id="3317459757438853210">Frente e verso</translation>
 <translation id="3317678681329786349">Câmera e microfone bloqueados</translation>
 <translation id="3320630259304269485">"Navegação segura" (proteção contra sites perigosos) e outras configurações de segurança</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Esses dados têm conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}=1{Esse arquivo tem conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}one{Esse arquivo tem conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}other{Esses arquivos têm conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}}</translation>
 <translation id="3323521181261657960">Bônus! Você ganhou mais tempo de uso</translation>
 <translation id="3323577066981719144">As mudanças que você fizer aqui serão aplicadas apenas ao navegador Chrome. Abra o navegador Chrome Lacros e acesse as configurações se quiser fazer mudanças nele.</translation>
 <translation id="3325804108816646710">Procurando perfis disponíveis…</translation>
@@ -2686,7 +2688,6 @@
 <translation id="3445925074670675829">Dispositivo USB-C</translation>
 <translation id="3446274660183028131">Inicie o Parallels Desktop para instalar o Windows.</translation>
 <translation id="344630545793878684">Leia seus dados em uma série de websites</translation>
-<translation id="3446650212859500694">O arquivo tem conteúdo confidencial</translation>
 <translation id="3447644283769633681">Bloquear todos os cookies de terceiros</translation>
 <translation id="3448492834076427715">Atualizar conta</translation>
 <translation id="3449393517661170867">Nova janela com guias</translation>
@@ -3128,6 +3129,7 @@
 <translation id="385051799172605136">Voltar</translation>
 <translation id="3851428669031642514">Carregar scripts não seguros</translation>
 <translation id="3852215160863921508">Assistência para entrada de texto</translation>
+<translation id="3853549894831560772">O dispositivo <ph name="DEVICE_NAME" /> está ativado</translation>
 <translation id="3854599674806204102">Escolha uma opção</translation>
 <translation id="3854967233147778866">Oferecer para traduzir sites em outros idiomas</translation>
 <translation id="3854976556788175030">A bandeja de saída está cheia</translation>
@@ -3461,6 +3463,7 @@
 <translation id="4163560723127662357">Teclado desconhecido</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> não pertence a uma organização válida. Entre em contato com o administrador. Se você é um administrador, configure sua organização em g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Configurações do site</translation>
+<translation id="4167212649627589331">O app <ph name="APP_NAME" /> está tentando acessar este dispositivo: <ph name="DEVICE_NAME" />. Desative a chave de privacidade do dispositivo <ph name="DEVICE_NAME" /> para permitir o acesso.</translation>
 <translation id="4167393659000039775">O Google não se responsabiliza pela perda de dados, e o <ph name="DEVICE_OS" /> pode não funcionar em modelos sem certificação. Saiba mais em g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Os sites geralmente usam JavaScript para exibir recursos interativos, como videogames ou formulários da Web</translation>
 <translation id="4168015872538332605">Algumas configurações pertencentes a <ph name="PRIMARY_EMAIL" /> estão sendo compartilhadas com você. Essas configurações afetam sua conta apenas quando o recurso de login múltiplo é usado.</translation>
@@ -3919,11 +3922,11 @@
 <translation id="4602466770786743961">Sempre permitir que <ph name="HOST" /> acesse sua câmera e seu microfone</translation>
 <translation id="4606551464649945562">Não permitir que os sites criem um mapa 3D do ambiente a sua volta ou acompanhem a posição da câmera</translation>
 <translation id="4608500690299898628">&amp;Buscar...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> tem conteúdo confidencial</translation>
 <translation id="4609987916561367134">Permitir o uso do JavaScript</translation>
 <translation id="4610162781778310380">O plug-in <ph name="PLUGIN_NAME" /> encontrou um erro</translation>
 <translation id="4610637590575890427">Você quis ir a <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Conexão de dados disponível</translation>
+<translation id="4612841084470706111">Dar acesso a todos os sites solicitados.</translation>
 <translation id="4613144866899789710">Cancelando instalação do Linux...</translation>
 <translation id="4613271546271159013">Uma extensão alterou a página exibida quando uma nova guia é aberta.</translation>
 <translation id="4615586811063744755">nenhum cookie foi selecionado</translation>
@@ -4083,6 +4086,7 @@
 <translation id="4762489666082647806">Cor do ponteiro</translation>
 <translation id="4762718786438001384">Dispositivo com espaço em disco criticamente baixo</translation>
 <translation id="4763408175235639573">Os cookies a seguir foram definidos quando você visualizou esta página</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> não é uma conta válida do Google for Education. Entre em contato com o administrador. Se você é um administrador, configure sua organização em g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Este dispositivo vai ser salvo por 1 mês e você vai poder se conectar sem um código na próxima vez. Isso é definido pelo seu administrador.}one{Este dispositivo vai ser salvo por {MONTHS} mês e você vai poder se conectar sem um código na próxima vez. Isso é definido pelo seu administrador.}other{Este dispositivo vai ser salvo por {MONTHS} meses e você vai poder se conectar sem um código na próxima vez. Isso é definido pelo seu administrador.}}</translation>
 <translation id="4765582662863429759">Permite que o Android Mensagens transmita mensagens de texto do smartphone para o Chromebook</translation>
 <translation id="4766598565665644999">Todas as extensões podem ler e mudar o <ph name="HOST" /></translation>
@@ -4744,6 +4748,7 @@
 <translation id="5407167491482639988">Ininteligível</translation>
 <translation id="5408750356094797285">Zoom: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">Da sua Conta do Google</translation>
+<translation id="5411022484772257615">Não foi possível concluir o registro escolar</translation>
 <translation id="5413640305322530561">Saiba mais sobre dados de uso e diagnóstico.</translation>
 <translation id="5414198321558177633">Atualizando a lista de perfis. Isso pode levar alguns minutos.</translation>
 <translation id="5414566801737831689">Ler os ícones dos websites que você visitar</translation>
@@ -4996,6 +5001,7 @@
 <translation id="5632059346822207074">Permissão solicitada, pressione Ctrl + Avançar para responder</translation>
 <translation id="5632566673632479864">Não é mais permitido usar sua conta <ph name="EMAIL" /> como a principal. Como essa conta é gerenciada por <ph name="DOMAIN" />, seus favoritos, histórico, senhas e outras configurações serão excluídos deste dispositivo.</translation>
 <translation id="5632592977009207922">Download em andamento, <ph name="PERCENT_REMAINING" />% restante(s)</translation>
+<translation id="5633149627228920745">Saiba mais sobre os requisitos do sistema</translation>
 <translation id="563371367637259496">Celular</translation>
 <translation id="5634446357546764049">Ver recordações das suas viagens recentes e mais</translation>
 <translation id="5635312199252507107">Permitir em sites específicos</translation>
@@ -5530,6 +5536,7 @@
 <translation id="6129953537138746214">Espaço</translation>
 <translation id="6130692320435119637">Adicionar Wi-Fi</translation>
 <translation id="6130887916931372608">Tecla</translation>
+<translation id="6132714462430777655">Pular registro escolar?</translation>
 <translation id="6135823405800500595">O smartphone precisa estar por perto, desbloqueado e com o Bluetooth e o Wi-Fi ativados</translation>
 <translation id="6135826623269483856">Sem permissão para gerenciar janelas em todas as suas telas</translation>
 <translation id="6136114942382973861">Fechar barra de downloads</translation>
@@ -5688,6 +5695,7 @@
 <translation id="6291949900244949761">Perguntar quando um site quiser acessar dispositivos USB (recomendado)</translation>
 <translation id="6291953229176937411">&amp;Mostrar no Finder</translation>
 <translation id="6292699686837272722">as guias são encolhidas para uma largura média</translation>
+<translation id="6293862149782163840">O dispositivo <ph name="DEVICE_NAME" /> está desativado</translation>
 <translation id="6294759976468837022">Velocidade da leitura automática</translation>
 <translation id="6295158916970320988">Todos os sites</translation>
 <translation id="6295855836753816081">Salvando...</translation>
@@ -5893,7 +5901,6 @@
 <translation id="6492396476180293140">Câmera interna desativada por um interruptor de hardware</translation>
 <translation id="6494327278868541139">Mostrar detalhes da proteção reforçada</translation>
 <translation id="6494445798847293442">Não é uma Autoridade de certificação</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Esses dados têm conteúdo confidencial ou perigoso}=1{Esse arquivo tem conteúdo confidencial ou perigoso}one{Esse arquivo tem conteúdo confidencial ou perigoso}other{Esses arquivos têm conteúdo confidencial ou perigoso}}</translation>
 <translation id="6497548114956205206">Saiba mais sobre a economia de energia</translation>
 <translation id="6497784818439587832">Mude o tamanho da tela para aumentar ou diminuir os itens nela.</translation>
 <translation id="6497789971060331894">Rolagem reversa do mouse</translation>
@@ -6041,7 +6048,6 @@
 <translation id="6621391692573306628">Para enviar esta guia a outro dispositivo, faça login no Chrome nos dois aparelhos</translation>
 <translation id="6622980291894852883">Continuar bloqueando imagens</translation>
 <translation id="6624036901798307345">No modo tablet, toque no botão da barra de ferramentas do contador de guias para abrir a nova barra de guias com miniaturas de cada uma.</translation>
-<translation id="6624535038674360844">O arquivo <ph name="FILE_NAME" /> tem conteúdo confidencial ou perigoso. Peça para o proprietário corrigir isso.</translation>
 <translation id="6624687053722465643">Docinho</translation>
 <translation id="6628328486509726751">Horário do envio: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Mais segurança</translation>
@@ -6753,6 +6759,7 @@
 <translation id="7310598146671372464">Não foi possível fazer login. O servidor não é compatível com os tipos de criptografia do Kerberos especificados. Entre em contato com seu administrador.</translation>
 <translation id="7311089766378749632">Solicitação para ler e fazer mudanças em <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">O administrador está redefinindo o eSIM. Isso pode levar alguns minutos.</translation>
+<translation id="7317831949569936035">Registro escolar</translation>
 <translation id="7320213904474460808">Usar rede como padrão</translation>
 <translation id="7321545336522791733">Servidor inacessível</translation>
 <translation id="7323315405936922211">Tamanho da área do cursor</translation>
@@ -8347,6 +8354,7 @@
 <translation id="8785622406424941542">Stylus</translation>
 <translation id="8786824282808281903">Quando a criança vir este ícone, a impressão digital poderá ser usada para identificação ou aprovação de compras.</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{Grupo sem nome: 1 guia}one{Grupo sem nome: # guia}other{Grupo sem nome: # guias}}</translation>
+<translation id="8791157330927639737">Saiba mais sobre como atualizar</translation>
 <translation id="8791534160414513928">Enviar a observação "Não rastrear" em seu tráfego de navegação</translation>
 <translation id="879413103056696865">Enquanto o ponto de acesso estiver ativado, seu <ph name="PHONE_NAME" /> vai:</translation>
 <translation id="8795916974678578410">Nova janela</translation>
@@ -8502,6 +8510,7 @@
 <translation id="8940081510938872932">Seu computador está fazendo muitas coisas no momento. Tente novamente mais tarde.</translation>
 <translation id="8940381019874223173">Do seu Google Fotos</translation>
 <translation id="8941173171815156065">Revogar a permissão "<ph name="PERMISSION" />"</translation>
+<translation id="8941688920560496412">O dispositivo <ph name="DEVICE_NAME" /> está desativado</translation>
 <translation id="894191600409472540">Crie senhas fortes</translation>
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Consumir a bateria mais rapidamente (no momento com <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 4749444..d4c5ea1 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -908,7 +908,6 @@
 <translation id="1819721979226826163">Toque em Notificações da aplicação &gt; Serviços do Google Play.</translation>
 <translation id="1820028137326691631">Introduzir a palavra-passe fornecida pelo administrador</translation>
 <translation id="1822140782238030981">Já é um utilizador do Chrome? Inicie sessão.</translation>
-<translation id="1823098433522728610">Este documento tem conteúdo sensível.</translation>
 <translation id="18245044880483936">Os dados da cópia de segurança não são contabilizados para a quota do armazenamento do Drive da criança.</translation>
 <translation id="1825565032302550710">A porta tem de ser entre 1024 e 65535.</translation>
 <translation id="182577151972096764">receitas visualizadas recentemente</translation>
@@ -1942,7 +1941,6 @@
 <translation id="2743387203779672305">Copiar para a área de transferência</translation>
 <translation id="274362947316498129">Uma app está a tentar aceder à <ph name="DEVICE_NAME" />. Desative o interruptor de privacidade da <ph name="DEVICE_NAME" /> para permitir o acesso.</translation>
 <translation id="2745080116229976798">Subordinação qualificada Microsoft</translation>
-<translation id="2747266560080989517">Este ficheiro tem conteúdo sensível ou perigoso. Peça ao proprietário para corrigir.</translation>
 <translation id="2749756011735116528">Iniciar sessão no <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Verificar gramática com a ortografia</translation>
@@ -2538,7 +2536,6 @@
 <translation id="3317459757438853210">Frente e verso</translation>
 <translation id="3317678681329786349">Câmara e microfone bloqueados</translation>
 <translation id="3320630259304269485">Navegação segura (proteção contra sites perigosos) e outras definições de segurança.</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Estes dados têm conteúdo sensível ou perigoso. Remova este conteúdo e tente novamente.}=1{Este ficheiro tem conteúdo sensível ou perigoso. Remova este conteúdo e tente novamente.}other{Estes ficheiros têm conteúdo sensível ou perigoso. Remova este conteúdo e tente novamente.}}</translation>
 <translation id="3323521181261657960">Bónus! Tens mais tempo de utilização</translation>
 <translation id="3323577066981719144">As alterações que efetuar aqui aplicam-se apenas ao navegador Chrome. Para efetuar alterações às definições do navegador Chrome Lacros, abra o navegador Chrome Lacros e aceda às definições.</translation>
 <translation id="3325804108816646710">A procurar perfis disponíveis…</translation>
@@ -2672,7 +2669,6 @@
 <translation id="3445925074670675829">Dispositivo USB-C</translation>
 <translation id="3446274660183028131">Inicie o Parallels Desktop para instalar o Windows.</translation>
 <translation id="344630545793878684">Ler os seus dados em vários Sites</translation>
-<translation id="3446650212859500694">Este ficheiro tem conteúdo sensível</translation>
 <translation id="3447644283769633681">Bloquear todos os cookies de terceiros</translation>
 <translation id="3448492834076427715">Atualizar conta</translation>
 <translation id="3449393517661170867">Nova janela com separadores</translation>
@@ -3906,7 +3902,6 @@
 <translation id="4602466770786743961">Permitir sempre que <ph name="HOST" /> aceda à sua câmara e microfone</translation>
 <translation id="4606551464649945562">Não permitir que os sites criem um mapa 3D do ambiente à sua volta nem monitorizem a posição da câmara</translation>
 <translation id="4608500690299898628">&amp;Localizar...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> tem conteúdo sensível</translation>
 <translation id="4609987916561367134">Com autorização para utilizar JavaScript</translation>
 <translation id="4610162781778310380">O plug-in <ph name="PLUGIN_NAME" /> encontrou um erro.</translation>
 <translation id="4610637590575890427">Pretendia aceder a <ph name="SITE" />?</translation>
@@ -5883,7 +5878,6 @@
 <translation id="6492396476180293140">Câmara interna desativada pelo interruptor do hardware</translation>
 <translation id="6494327278868541139">Mostrar detalhes de proteção melhorada</translation>
 <translation id="6494445798847293442">Não é uma autoridade de certificação</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Estes dados têm conteúdo sensível ou perigoso.}=1{Este ficheiro tem conteúdo sensível ou perigoso.}other{Estes ficheiros têm conteúdo sensível ou perigoso.}}</translation>
 <translation id="6497548114956205206">Saber mais sobre a poupança de energia</translation>
 <translation id="6497784818439587832">Altere o tamanho da visualização para diminuir ou aumentar o tamanho dos itens no ecrã</translation>
 <translation id="6497789971060331894">Deslocamento inverso do rato</translation>
@@ -6029,7 +6023,6 @@
 <translation id="6621391692573306628">Para enviar este separador para outro dispositivo, inicie sessão no Chrome em ambos os dispositivos</translation>
 <translation id="6622980291894852883">Continuar a bloquear imagens</translation>
 <translation id="6624036901798307345">No modo tablet, toque no botão da barra de ferramentas do contador de separadores para abrir a nova Faixa de separadores que apresenta as miniaturas de cada separador.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> tem conteúdo sensível ou perigoso. Peça ao proprietário para corrigir.</translation>
 <translation id="6624687053722465643">Doce</translation>
 <translation id="6628328486509726751">Carregado <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Maior segurança</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index bd125a5f..3b9be03 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -408,6 +408,7 @@
 <translation id="1388253969141979417">Au permisiunea de a folosi microfonul</translation>
 <translation id="1388728792929436380">Acest <ph name="DEVICE_TYPE" /> va reporni după finalizarea actualizărilor.</translation>
 <translation id="1389601498324964367">Spațiu de stocare gestionat prin cote</translation>
+<translation id="1390113502208199250">Va trebui să revii la setările din fabrică ale dispozitivului pentru a folosi funcțiile Upgrade la Chrome pentru educație.</translation>
 <translation id="139013308650923562">Au permisiunea de a folosi fonturile instalate pe dispozitiv</translation>
 <translation id="1390548061267426325">Deschideți ca filă obișnuită</translation>
 <translation id="1390907927270446471">Contul <ph name="PROFILE_USERNAME" /> nu este autorizat să printeze la <ph name="PRINTER_NAME" />. Contactează administratorul.</translation>
@@ -478,6 +479,7 @@
 <translation id="1436784010935106834">Eliminat</translation>
 <translation id="1437986450143295708">Descrie problema detaliat</translation>
 <translation id="1439671507542716852">asistență pe durată extinsă</translation>
+<translation id="1440090277117135316">Înscrierea la școală s-a finalizat</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> selectate</translation>
 <translation id="1442851588227551435">Setează tichetul Kerberos activ</translation>
 <translation id="1444628761356461360">Această setare este gestionată de proprietarul dispozitivului, <ph name="OWNER_EMAIL" />.</translation>
@@ -908,7 +910,6 @@
 <translation id="1819721979226826163">Atinge Notificări din aplicații &gt; Servicii Google Play.</translation>
 <translation id="1820028137326691631">Introdu parola oferită de administrator</translation>
 <translation id="1822140782238030981">Ești deja utilizator Chrome? Conectează-te</translation>
-<translation id="1823098433522728610">Acest document include conținut sensibil.</translation>
 <translation id="18245044880483936">Datele cărora li s-a făcut backup nu sunt luate în considerare la calcularea cotei de stocare Drive a copilului tău.</translation>
 <translation id="1825565032302550710">Portul trebuie să aibă o valoare între 1024 și 65535</translation>
 <translation id="182577151972096764">rețete afișate recent</translation>
@@ -1941,7 +1942,6 @@
 <translation id="2743301740238894839">Începe</translation>
 <translation id="2743387203779672305">Copiați în clipboard</translation>
 <translation id="2745080116229976798">Subordonare calificată Microsoft</translation>
-<translation id="2747266560080989517">Acest fișier include conținut sensibil sau periculos. Solicită-i proprietarului să îl remedieze.</translation>
 <translation id="2749756011735116528">Conectează-te la <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Verificare gramaticală și ortografică</translation>
@@ -2397,6 +2397,7 @@
 <translation id="3170072451822350649">De asemenea, puteți să omiteți conectarea și să <ph name="LINK_START" />navigați ca invitat<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Filă nouă în stânga</translation>
 <translation id="3177909033752230686">Limba paginii:</translation>
+<translation id="3177914167275935955">Dispozitivul include Upgrade-ul la Chrome pentru educație, dar numele de utilizator nu este asociat unui cont Google for Education. Creează un cont Google for Education accesând g.co/workspace/edusignup pe un dispozitiv secundar.</translation>
 <translation id="3179982752812949580">Fontul textului</translation>
 <translation id="3181954750937456830">Navigare sigură (protecție împotriva site-urilor periculoase)</translation>
 <translation id="3182749001423093222">Verificarea ortografiei</translation>
@@ -2536,7 +2537,6 @@
 <translation id="3317459757438853210">Față-verso</translation>
 <translation id="3317678681329786349">Camera foto și microfonul sunt blocate</translation>
 <translation id="3320630259304269485">Navigarea sigură (protecție împotriva site-urilor periculoase) și alte setări de securitate</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Aceste date includ conținut sensibil sau periculos. Elimină conținutul și încearcă din nou.}=1{Acest fișier include conținut sensibil sau periculos. Elimină conținutul și încearcă din nou.}few{Aceste fișiere includ conținut sensibil sau periculos. Elimină conținutul și încearcă din nou.}other{Aceste fișiere includ conținut sensibil sau periculos. Elimină conținutul și încearcă din nou.}}</translation>
 <translation id="3323521181261657960">Bonus! Ai primit o durată mai mare de folosire a dispozitivului</translation>
 <translation id="3323577066981719144">Modificările pe care le faci aici se aplică numai în browserul Chrome. Pentru a face modificări în setările browserului Lacros Chrome, deschide browserul Lacros Chrome și accesează setările.</translation>
 <translation id="3325804108816646710">Se caută profiluri disponibile...</translation>
@@ -2670,7 +2670,6 @@
 <translation id="3445925074670675829">Dispozitiv USB-C</translation>
 <translation id="3446274660183028131">Lansează Parallels Desktop pentru a instala Windows.</translation>
 <translation id="344630545793878684">Citește datele de pe un număr de site-uri</translation>
-<translation id="3446650212859500694">Acest fișier include conținut sensibil</translation>
 <translation id="3447644283769633681">Blocați toate cookie-urile terță parte</translation>
 <translation id="3448492834076427715">Actualizează contul</translation>
 <translation id="3449393517661170867">Fereastră nouă cu file</translation>
@@ -3902,7 +3901,6 @@
 <translation id="4602466770786743961">Permiteți întotdeauna accesul <ph name="HOST" /> la camera și microfonul dvs.</translation>
 <translation id="4606551464649945562">Nu permite site-urilor să creeze o hartă 3D a lucrurilor din jur sau să urmărească poziția camerei video</translation>
 <translation id="4608500690299898628">&amp;Caută...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> include conținut sensibil</translation>
 <translation id="4609987916561367134">Au permisiunea de a folosi JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> a întâmpinat o eroare</translation>
 <translation id="4610637590575890427">Ai vrut să accesezi <ph name="SITE" />?</translation>
@@ -4066,6 +4064,7 @@
 <translation id="4762489666082647806">Culoarea indicatorului</translation>
 <translation id="4762718786438001384">Spațiul de pe hard diskul dispozitivului este foarte redus</translation>
 <translation id="4763408175235639573">La afișarea paginii au fost setate următoarele cookie-uri</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> nu este un cont Google for Education valid. Contactează administratorul. Dacă ești administrator, îți poți configura organizația accesând g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Dispozitivul va fi salvat timp de o lună și te poți conecta fără cod data viitoare. Setarea este configurată de administrator.}few{Dispozitivul va fi salvat timp de {MONTHS} luni și te poți conecta fără cod data viitoare. Setarea este configurată de administrator.}other{Dispozitivul va fi salvat timp de {MONTHS} de luni și te poți conecta fără cod data viitoare. Setarea este configurată de administrator.}}</translation>
 <translation id="4765582662863429759">Permite Android Messages să retransmită mesaje text din telefonul tău în Chromebook</translation>
 <translation id="4766598565665644999">Toate extensiile pot să citească și facă modificări la <ph name="HOST" /></translation>
@@ -4727,6 +4726,7 @@
 <translation id="5407167491482639988">Neinteligibilă</translation>
 <translation id="5408750356094797285">Zoom: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">Din Contul Google</translation>
+<translation id="5411022484772257615">Nu am putut finaliza înscrierea la școală</translation>
 <translation id="5413640305322530561">Află mai multe despre datele de diagnosticare și de utilizare</translation>
 <translation id="5414198321558177633">Se actualizează lista de profiluri. Poate dura câteva minute.</translation>
 <translation id="5414566801737831689">Citește pictogramele site-urilor pe care le accesezi</translation>
@@ -5512,6 +5512,7 @@
 <translation id="6129953537138746214">Spațiu</translation>
 <translation id="6130692320435119637">Adaugă o rețea Wi-Fi</translation>
 <translation id="6130887916931372608">Tasta de pe tastatură</translation>
+<translation id="6132714462430777655">Omiți înscrierea la școală?</translation>
 <translation id="6135823405800500595">Asigură-te că telefonul este în apropiere, deblocat, cu funcțiile Bluetooth și Wi-Fi activate</translation>
 <translation id="6135826623269483856">Nu au permisiunea de a gestiona ferestre pe toate ecranele</translation>
 <translation id="6136114942382973861">Închide bara de descărcări</translation>
@@ -5875,7 +5876,6 @@
 <translation id="6492396476180293140">Camera internă a fost dezactivată de comutatorul hardware</translation>
 <translation id="6494327278868541139">Afișează detalii despre protecția îmbunătățită</translation>
 <translation id="6494445798847293442">Nu este o Autoritate de certificare</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Aceste date includ conținut sensibil sau periculos}=1{Acest fișier include conținut sensibil sau periculos}few{Aceste fișiere includ conținut sensibil sau periculos}other{Aceste fișiere includ conținut sensibil sau periculos}}</translation>
 <translation id="6497548114956205206">Află mai multe despre Economisirea energiei</translation>
 <translation id="6497784818439587832">Modifică dimensiunea de afișare pentru a micșora sau a mări elementele de pe ecran</translation>
 <translation id="6497789971060331894">Derularea inversă cu mouse-ul</translation>
@@ -6023,7 +6023,6 @@
 <translation id="6621391692573306628">Pentru a trimite această filă pe alt dispozitiv, conectează-te la Chrome pe ambele dispozitive</translation>
 <translation id="6622980291894852883">Continuă blocarea imaginilor</translation>
 <translation id="6624036901798307345">În modul tabletă, atinge butonul contorului de file din bara de instrumente pentru a deschide noua bară de file care afișează miniaturi pentru fiecare filă.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> include conținut sensibil sau periculos. Solicită-i proprietarului să îl remedieze.</translation>
 <translation id="6624687053722465643">Dulcineea</translation>
 <translation id="6628328486509726751">Încărcat la <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Securitate sporită</translation>
@@ -6735,6 +6734,7 @@
 <translation id="7310598146671372464">Conectarea nu a reușit. Serverul nu acceptă tipurile de criptare Kerberos specificate. Contactează administratorul.</translation>
 <translation id="7311089766378749632">Se solicită citirea și modificarea <ph name="SITE_NAME" />:</translation>
 <translation id="7312210124139670355">Administratorul îți resetează cardul eSIM Poate dura câteva minute.</translation>
+<translation id="7317831949569936035">Înscriere la școală</translation>
 <translation id="7320213904474460808">Setează ca rețea prestabilită</translation>
 <translation id="7321545336522791733">Serverul nu poate fi accesat</translation>
 <translation id="7323315405936922211">Mărimea zonei cursorului</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index abbaeef..a81f6ee3 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -909,7 +909,6 @@
 <translation id="1819721979226826163">Нажмите "Уведомления приложений &gt; Сервисы Google Play".</translation>
 <translation id="1820028137326691631">Введите пароль, полученный от администратора</translation>
 <translation id="1822140782238030981">Уже пользуетесь Chrome? Войдите в систему.</translation>
-<translation id="1823098433522728610">Этот документ содержит деликатный контент.</translation>
 <translation id="18245044880483936">Резервные копии не занимают места на Google Диске ребенка.</translation>
 <translation id="1825565032302550710">Номер порта должен быть в диапазоне 1024–65535.</translation>
 <translation id="182577151972096764">недавно просмотренные рецепты</translation>
@@ -1942,7 +1941,6 @@
 <translation id="2743301740238894839">Начать</translation>
 <translation id="2743387203779672305">Скопировать в буфер</translation>
 <translation id="2745080116229976798">Квалифицированное подчинение Microsoft</translation>
-<translation id="2747266560080989517">Этот файл содержит конфиденциальный или опасный контент. Попросите владельца его исправить.</translation>
 <translation id="2749756011735116528">Войти в <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Проверять грамматику и правописание</translation>
@@ -2537,7 +2535,6 @@
 <translation id="3317459757438853210">Двусторонняя печать</translation>
 <translation id="3317678681329786349">Доступ к камере и микрофону запрещен</translation>
 <translation id="3320630259304269485">Безопасный просмотр (защита от опасных сайтов) и другие настройки безопасности</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Эти данные содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}=1{Этот файл содержит конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}one{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}few{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}many{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}other{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}}</translation>
 <translation id="3323521181261657960">Время использования устройства продлено</translation>
 <translation id="3323577066981719144">Параметры ниже относятся только к браузеру Chrome. Чтобы изменить параметры браузера Lacros, откройте его и перейдите в настройки.</translation>
 <translation id="3325804108816646710">Поиск доступных профилей…</translation>
@@ -2671,7 +2668,6 @@
 <translation id="3445925074670675829">Устройство USB-C</translation>
 <translation id="3446274660183028131">Чтобы установить Windows, запустите Parallels Desktop.</translation>
 <translation id="344630545793878684">Просмотр данных на нескольких сайтах</translation>
-<translation id="3446650212859500694">Этот файл содержит конфиденциальный контент.</translation>
 <translation id="3447644283769633681">Заблокировать все сторонние файлы cookie</translation>
 <translation id="3448492834076427715">Обновить аккаунт</translation>
 <translation id="3449393517661170867">Новое окно с вкладками</translation>
@@ -3903,7 +3899,6 @@
 <translation id="4602466770786743961">Всегда предоставлять сайту <ph name="HOST" /> доступ к камере и микрофону</translation>
 <translation id="4606551464649945562">Запретить сайтам создавать 3D-карту места, в котором вы находитесь, и отслеживать положение камеры</translation>
 <translation id="4608500690299898628">&amp;Найти...</translation>
-<translation id="4608703838363792434">Файл <ph name="FILE_NAME" /> содержит конфиденциальный контент.</translation>
 <translation id="4609987916561367134">Разрешить сайтам использовать JavaScript</translation>
 <translation id="4610162781778310380">Ошибка в плагине <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Возможно, вы хотели перейти на <ph name="SITE" />?</translation>
@@ -5876,7 +5871,6 @@
 <translation id="6492396476180293140">Встроенная камера отключена с помощью аппаратного переключателя.</translation>
 <translation id="6494327278868541139">Открыть описание улучшенной защиты</translation>
 <translation id="6494445798847293442">Не является центром сертификации</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Эти данные содержат конфиденциальный или опасный контент.}=1{Этот файл содержит конфиденциальный или опасный контент.}one{Эти файлы содержат конфиденциальный или опасный контент.}few{Эти файлы содержат конфиденциальный или опасный контент.}many{Эти файлы содержат конфиденциальный или опасный контент.}other{Эти файлы содержат конфиденциальный или опасный контент.}}</translation>
 <translation id="6497548114956205206">Подробнее о режиме энергосбережения</translation>
 <translation id="6497784818439587832">Изменить масштаб изображения, чтобы увеличить или уменьшить объекты на экране</translation>
 <translation id="6497789971060331894">Обратное направление прокрутки мышью</translation>
@@ -6028,7 +6022,6 @@
 <translation id="6621391692573306628">Чтобы отправить вкладку с одного устройства на другое, войдите на них в Chrome.</translation>
 <translation id="6622980291894852883">Всегда блокировать изображения</translation>
 <translation id="6624036901798307345">В режиме планшета нажмите кнопку с числом вкладок на панели инструментов, чтобы открыть новую панель с уменьшенными изображениями всех вкладок.</translation>
-<translation id="6624535038674360844">Файл <ph name="FILE_NAME" /> содержит конфиденциальный или опасный контент. Попросите владельца его исправить.</translation>
 <translation id="6624687053722465643">Пирожное</translation>
 <translation id="6628328486509726751">Время загрузки: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Более надежная защита</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 38722e0..43148ec 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -909,7 +909,6 @@
 <translation id="1819721979226826163">යෙදුම් දැනුම්දීම් &gt; Google Play සේවා තට්ටු කරන්න.</translation>
 <translation id="1820028137326691631">පරිපාලකයා ලබා දුන් මුරපදය ඇතුළත් කරන්න</translation>
 <translation id="1822140782238030981">දැනටමත් Chrome පරිශීලකයෙක්ද? පුරන්න</translation>
-<translation id="1823098433522728610">මෙම ලේඛනයෙහි සංවේදී අන්තර්ගතය ඇත.</translation>
 <translation id="18245044880483936">උපස්ථ දත්ත ඔබේ දරුවාගේ Drive ගබඩා පංගුවට ගණන් නොගැනෙයි.</translation>
 <translation id="1825565032302550710">පෝර්ට් එක 1024 සහ 65535 අතර විය යුතුය</translation>
 <translation id="182577151972096764">මෑතකදී බැලූ වට්ටෝරු</translation>
@@ -1946,7 +1945,6 @@
 <translation id="2743301740238894839">අරඹන්න</translation>
 <translation id="2743387203779672305">ක්ලිප්බෝඩ් එකට පිටපත් කරන්න</translation>
 <translation id="2745080116229976798">Microsoft සුදුසුකම්ලත් යටත් කිරීම</translation>
-<translation id="2747266560080989517">මෙම ගොනුව තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත. එහි හිමිකරුට නිවැරදි කිරිමට කියන්න.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> වෙත ඇතුළු වන්න</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">අකුරු සමඟ ව්‍යාකරණ පරීක්ෂා කරන්න</translation>
@@ -2542,7 +2540,6 @@
 <translation id="3317459757438853210">දෙපසම</translation>
 <translation id="3317678681329786349">කැමරාව සහ මයික්‍රෆෝනය අවහිරයි</translation>
 <translation id="3320630259304269485">ආරක්‍ෂිත බ්‍රවුස් කිරීම (අනතුරුදායක වෙබ් අඩවිවලින් ආරක්‍ෂාව) සහ වෙනත් ආරක්‍ෂක සැකසීම්</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{මෙම දත්ත තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත. මෙම අන්තර්ගතය ඉවත් කර නැවත උත්සාහ කරන්න.}=1{මෙම ගොනුව තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත. මෙම අන්තර්ගතය ඉවත් කර නැවත උත්සාහ කරන්න.}one{මෙම ගොනු තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත. මෙම අන්තර්ගතය ඉවත් කර නැවත උත්සාහ කරන්න.}other{මෙම ගොනු තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත. මෙම අන්තර්ගතය ඉවත් කර නැවත උත්සාහ කරන්න.}}</translation>
 <translation id="3323521181261657960">ප්‍රසාදිතය! ඔබ වැඩිපුර තිර කාලය ලබා ඇත</translation>
 <translation id="3323577066981719144">ඔබ මෙහි සිදු කරන වෙනස් කිරීම් Chrome බ්‍රව්සරයට පමණක් අදාළ වේ. ඔබගේ Lacros Chrome බ්‍රවුසර සැකසීම්වලට වෙනස් කිරීම් සිදු කිරීමට, Lacros Chrome බ්‍රවුසරය විවෘත කර සැකසීම් වෙත යන්න.</translation>
 <translation id="3325804108816646710">ලබා ගත හැකි පැතිකඩවල් සොයමින්...</translation>
@@ -2676,7 +2673,6 @@
 <translation id="3445925074670675829">USB-C උපාංගය</translation>
 <translation id="3446274660183028131">Windows ස්ථාපනය කිරීමට කරුණාකර Parallels Desktop දියත් කරන්න.</translation>
 <translation id="344630545793878684">වෙබ අඩවි විශාල ගණනක ඔබගේ දත්ත කියවන්න</translation>
-<translation id="3446650212859500694">මෙම ගොනුවේ සංවේදී අන්තර්ගතය ඇත</translation>
 <translation id="3447644283769633681">සියලු තෙවන පාර්ශ්ව කුකි අවහිර කරන්න</translation>
 <translation id="3448492834076427715">ගිණුම යාවත්කාලීන කරන්න</translation>
 <translation id="3449393517661170867">නව පටිති කවුළුව</translation>
@@ -3909,7 +3905,6 @@
 <translation id="4602466770786743961">ඔබේ කැමරාව සහ මයික්‍රෆෝනය වෙත පිවිසීමට <ph name="HOST" />ට  ඉඩ දෙන්න</translation>
 <translation id="4606551464649945562">වෙබ් අඩවිවලට ඔබේ වටපිටාවේ ත්‍රිමාන සිතියමක් සෑදීමට හෝ කැමරා ස්ථානය හඹා යෑමට ඉඩ නොදෙන්න</translation>
 <translation id="4608500690299898628">සොයන්න... (&amp;F)</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> තුළ සංවේදී අන්තර්ගතය ඇත</translation>
 <translation id="4609987916561367134">ජාවාස්ක්‍රිප්ට් භාවිත කිරීමට ඉඩ දේ</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> දෝෂයකට මුහුණ දී ඇත</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> වෙත යෑමට ඔබ අදහස් කලාද?</translation>
@@ -5886,7 +5881,6 @@
 <translation id="6492396476180293140">දෘඪාංග ස්විචය මඟින් අභ්‍යන්තර කැමරාව ක්‍රියාවිරහිත කර ඇත</translation>
 <translation id="6494327278868541139">වැඩි දියුණු කළ ආරක්ෂණ විස්තර පෙන්වන්න</translation>
 <translation id="6494445798847293442">සහතිකකරණ අධිකාරියක් නොවේ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{මෙම දත්ත තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}=1{මෙම ගොනුව තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}one{මෙම ගොනු තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}other{මෙම ගොනු තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත}}</translation>
 <translation id="6497548114956205206">බලශක්ති සුරැකුම පිළිබඳ තව දැන ගන්න</translation>
 <translation id="6497784818439587832">ඔබේ තිරයෙහි ඇති අයිතම කුඩා හෝ විශාල කිරීමට සංදර්ශක ප්‍රමාණය වෙනස් කරන්න</translation>
 <translation id="6497789971060331894">මූසික ආපස්සට අනුචලනය</translation>
@@ -6032,7 +6026,6 @@
 <translation id="6621391692573306628">මෙම පටිත්ත වෙනත් උපාංගයකට යැවීමට, උපාංග දෙකම මත Chrome වෙත පුරන්න</translation>
 <translation id="6622980291894852883">පින්තූර බාධාකිරීම කරගෙන යන්න</translation>
 <translation id="6624036901798307345">ටැබ්ලට් ප්‍රකාරය තුළ, එක් එක් ටැබයෙහි සිඟිති රූ පෙන්වන නව ටැබ තීරුව විවෘත කිරීමට ටැබ ගණනය කිරීම් මෙවලම් තීරු බොත්තම ක්ලික් කරන්න.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> තුළ සංවේදී හෝ අනතුරුදායක අන්තර්ගතය ඇත. එහි හිමිකරුට නිවැරදි කිරිමට කියන්න.</translation>
 <translation id="6624687053722465643">රසැති</translation>
 <translation id="6628328486509726751">උඩුගත විය <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">ප්‍රබල ආරක්ෂාව</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 0dd65cf..48ecdca 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -409,6 +409,7 @@
 <translation id="1388253969141979417">Môže používať váš mikrofón</translation>
 <translation id="1388728792929436380">Zariadenie <ph name="DEVICE_TYPE" /> bude po dokončení aktualizácií reštartované.</translation>
 <translation id="1389601498324964367">Ukladací priestor spravovaný podľa objemu</translation>
+<translation id="1390113502208199250">Ak chcete používať funkcie povýšenia Chrome Education, budete musieť obnoviť výrobné nastavenia tohto zariadenia.</translation>
 <translation id="139013308650923562">Weby s povolením používať písma nainštalované v zariadení</translation>
 <translation id="1390548061267426325">Otvoriť ako bežnú kartu</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> nemá oprávnenie tlačiť v zariadení <ph name="PRINTER_NAME" />. Kontaktujte správcu.</translation>
@@ -479,6 +480,7 @@
 <translation id="1436784010935106834">Odstránené</translation>
 <translation id="1437986450143295708">Podrobne opíšte problém</translation>
 <translation id="1439671507542716852">dlhodobá podpora</translation>
+<translation id="1440090277117135316">Zápis do školy bol dokončený</translation>
 <translation id="144283815522798837">Počet vybratých položiek: <ph name="NUMBER_OF_ITEMS_SELECTED" /></translation>
 <translation id="1442851588227551435">Nastaviť aktívny tiket Kerberos</translation>
 <translation id="1444628761356461360">Toto nastavenie spravuje vlastník zariadenia <ph name="OWNER_EMAIL" />.</translation>
@@ -909,7 +911,6 @@
 <translation id="1819721979226826163">Klepnite na položky Upozornenia aplikácií &gt; Služby Google Play.</translation>
 <translation id="1820028137326691631">Zadajte heslo od správcu</translation>
 <translation id="1822140782238030981">Už ste používateľ Chromu? Prihláste sa</translation>
-<translation id="1823098433522728610">Tento dokument zahrnuje citlivý obsah.</translation>
 <translation id="18245044880483936">Zálohované údaje sa nezapočítavajú do kvóty priestoru na Disku vášho dieťaťa.</translation>
 <translation id="1825565032302550710">Port musí byť v rozsahu od 1024 do 65535</translation>
 <translation id="182577151972096764">naposledy zobrazené recepty</translation>
@@ -1941,8 +1942,8 @@
 <translation id="274318651891194348">Hľadá sa klávesnica</translation>
 <translation id="2743301740238894839">Spustiť</translation>
 <translation id="2743387203779672305">Kopírovať do schránky</translation>
+<translation id="274362947316498129">K zariadeniu <ph name="DEVICE_NAME" /> sa pokúša získať prístup nejaká aplikácia. Ak ho chcete povoliť, vypnite prepínač ochrany súkromia v zariadení <ph name="DEVICE_NAME" />.</translation>
 <translation id="2745080116229976798">Oprávnené podriadenie od spoločnosti Microsoft</translation>
-<translation id="2747266560080989517">Tento súbor má citlivý alebo nebezpečný obsah. Požiadajte vlastníka o nápravu.</translation>
 <translation id="2749756011735116528">Prihlásiť sa do služby <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Skontrolovať gramatiku s pravopisom</translation>
@@ -2398,6 +2399,7 @@
 <translation id="3170072451822350649">Môžete tiež preskočiť prihlásenie a <ph name="LINK_START" />prehliadať ako hosť<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Nová karta vľavo</translation>
 <translation id="3177909033752230686">Jazyk stránky:</translation>
+<translation id="3177914167275935955">Vaše zariadenie zahŕňa povýšenie Chrome Education, ale vaše používateľské meno nie je spojené s účtom Google for Education. V druhom zariadení prejdite na g.co/workspace/edusignup a zriaďte si účet Google for Education.</translation>
 <translation id="3179982752812949580">Písmo textu</translation>
 <translation id="3181954750937456830">Bezpečné prehliadanie (chráni vás aj zariadenie pred nebezpečnými webmi)</translation>
 <translation id="3182749001423093222">Kontrola pravopisu</translation>
@@ -2537,7 +2539,6 @@
 <translation id="3317459757438853210">Obojstranne</translation>
 <translation id="3317678681329786349">Kamera a mikrofón sú zablokované</translation>
 <translation id="3320630259304269485">Bezpečné prehliadanie (ochrana pred nebezpečnými webmi) a ďalšie nastavenia zabezpečenia</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Tieto údaje majú citlivý alebo nebezpečný obsah. Tento obsah odstráňte a skúste to znova.}=1{Tento súbor má citlivý alebo nebezpečný obsah. Tento obsah odstráňte a skúste to znova.}few{Tieto súbory majú citlivý alebo nebezpečný obsah. Tento obsah odstráňte a skúste to znova.}many{Tieto súbory majú citlivý alebo nebezpečný obsah. Tento obsah odstráňte a skúste to znova.}other{Tieto súbory majú citlivý alebo nebezpečný obsah. Tento obsah odstráňte a skúste to znova.}}</translation>
 <translation id="3323521181261657960">Bonus! Získavaš viac času používania.</translation>
 <translation id="3323577066981719144">Zmeny, ktoré tu vykonáte, sa použijú iba v prehliadači Chrome. Ak chcete zmeniť nastavenia prehliadača Lacros Chrome, otvorte ho a prejdite do nastavení.</translation>
 <translation id="3325804108816646710">Hľadajú sa dostupné profily...</translation>
@@ -2671,7 +2672,6 @@
 <translation id="3445925074670675829">Zariadenie USB-C</translation>
 <translation id="3446274660183028131">Spustite Parallels Desktop a nainštalujte tak Windows.</translation>
 <translation id="344630545793878684">Čítať vaše údaje na viacerých webových stránkach</translation>
-<translation id="3446650212859500694">Tento súbor má citlivý obsah</translation>
 <translation id="3447644283769633681">Blokovať všetky súbory cookie tretích strán</translation>
 <translation id="3448492834076427715">Aktualizovať účet</translation>
 <translation id="3449393517661170867">Nové okno s kartami</translation>
@@ -3113,6 +3113,7 @@
 <translation id="385051799172605136">Späť</translation>
 <translation id="3851428669031642514">Načítať nebezpečné skripty</translation>
 <translation id="3852215160863921508">Pomoc so vstupom</translation>
+<translation id="3853549894831560772">Zariadenie <ph name="DEVICE_NAME" /> je zapnuté</translation>
 <translation id="3854599674806204102">Vyberte požadovanú možnosť</translation>
 <translation id="3854967233147778866">Ponúkať preklad webov v iných jazykoch</translation>
 <translation id="3854976556788175030">Výstupný zásobník je plný</translation>
@@ -3446,6 +3447,7 @@
 <translation id="4163560723127662357">Neznáma klávesnica</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> nepatrí platnej organizácii. Kontaktujte svojho správcu. Ak ste správca, môžete nastaviť organizáciu na g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Nastavenia webu</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> sa pokúša získať prístup k zariadeniu <ph name="DEVICE_NAME" />. Ak ho chcete povoliť, vypnite prepínač ochrany súkromia v zariadení <ph name="DEVICE_NAME" />.</translation>
 <translation id="4167393659000039775">Google nezodpovedá za stratu údajov. <ph name="DEVICE_OS" /> nemusí fungovať v necertifikovaných modeloch. Viac sa dozviete na g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Weby zvyčajne používajú Javaskript, aby mohli zobraziť interaktívne funkcie, napríklad videohry alebo webové formuláre</translation>
 <translation id="4168015872538332605">Používateľ <ph name="PRIMARY_EMAIL" /> s vami zdieľa niektoré svoje nastavenia. Tieto nastavenia váš účet ovplyvnia iba počas používania viacnásobného prihlásenia.</translation>
@@ -3903,11 +3905,11 @@
 <translation id="4602466770786743961">Vždy povoliť stránkam <ph name="HOST" /> prístup ku kamere a mikrofónu</translation>
 <translation id="4606551464649945562">Nepovoliť webom vytvoriť 3D mapu vášho okolia ani sledovať umiestnenie kamier</translation>
 <translation id="4608500690299898628">&amp;Nájsť...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> má citlivý obsah</translation>
 <translation id="4609987916561367134">Môže používať JavaScript</translation>
 <translation id="4610162781778310380">V súvislosti s doplnkom <ph name="PLUGIN_NAME" /> sa vyskytla chyba</translation>
 <translation id="4610637590575890427">Chceli ste prejsť na adresu <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Je k dispozícii dátové pripojenie</translation>
+<translation id="4612841084470706111">Udeliť prístup všetkým požadovaným webom</translation>
 <translation id="4613144866899789710">Ruší sa inštalácia v systéme Linux…</translation>
 <translation id="4613271546271159013">Rozšírenie zmenilo stránku, ktorá sa vám zobrazí po otvorení novej karty.</translation>
 <translation id="4615586811063744755">nevybrali ste žiadny súbor cookie</translation>
@@ -4067,6 +4069,7 @@
 <translation id="4762489666082647806">Farba ukazovateľa</translation>
 <translation id="4762718786438001384">Kritický nedostatok miesta na disku zariadenia</translation>
 <translation id="4763408175235639573">Počas zobrazenia tejto stránky boli nastavené nasledujúce súbory cookie</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> nie je platný účet Google for Education. Kontaktujte svojho správcu. Ak ste správca, svoju organizáciu môžete nastaviť na g.co/workspace/edusignup.</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Toto zariadenie bude uložené na 1 mesiac a nabudúce sa môžete pripojiť bez kódu. Nastavil to váš správca.}few{Toto zariadenie bude uložené na {MONTHS} mesiace a nabudúce sa môžete pripojiť bez kódu. Nastavil to váš správca.}many{Toto zariadenie bude uložené na {MONTHS} mesiaca a nabudúce sa môžete pripojiť bez kódu. Nastavil to váš správca.}other{Toto zariadenie bude uložené na {MONTHS} mesiacov a nabudúce sa môžete pripojiť bez kódu. Nastavil to váš správca.}}</translation>
 <translation id="4765582662863429759">Umožňuje Správam pre Android prenášať textové správy z vášho telefónu do Chromebooku</translation>
 <translation id="4766598565665644999">Všetky rozšírenia môžu čítať a meniť web <ph name="HOST" /></translation>
@@ -4728,6 +4731,7 @@
 <translation id="5407167491482639988">Nezrozumiteľný zvuk</translation>
 <translation id="5408750356094797285">Lupa: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">Z vášho účtu Google</translation>
+<translation id="5411022484772257615">Zápis do školy sa nepodarilo dokončiť</translation>
 <translation id="5413640305322530561">Ďalšie informácie o diagnostikách a údajoch o využití</translation>
 <translation id="5414198321558177633">Obnovuje sa zoznam profilov. Môže to trvať niekoľko minút.</translation>
 <translation id="5414566801737831689">Čítať ikony webov, ktoré navštevujete</translation>
@@ -5513,6 +5517,7 @@
 <translation id="6129953537138746214">Medzera</translation>
 <translation id="6130692320435119637">Pridať Wi‑Fi</translation>
 <translation id="6130887916931372608">Kláves klávesnice</translation>
+<translation id="6132714462430777655">Chcete preskočiť zápis do školy?</translation>
 <translation id="6135823405800500595">Uistite sa, že telefón máte nablízku, odomknutý a so zapnutým rozhraním Bluetooth a pripojením Wi‑Fi</translation>
 <translation id="6135826623269483856">Nemôže spravovať okná na všetkých obrazovkách</translation>
 <translation id="6136114942382973861">Zatvoriť panel so stiahnutými súbormi</translation>
@@ -5671,6 +5676,7 @@
 <translation id="6291949900244949761">Opýtať sa, keď chce web získať prístup k zariadeniam USB (odporúčané)</translation>
 <translation id="6291953229176937411">&amp;Zobraziť v aplikácii Finder</translation>
 <translation id="6292699686837272722">Karty sa zmenšia na strednú šírku</translation>
+<translation id="6293862149782163840">Zariadenie <ph name="DEVICE_NAME" /> je vypnuté</translation>
 <translation id="6294759976468837022">Rýchlosť automatického prehľadávania</translation>
 <translation id="6295158916970320988">Všetky weby</translation>
 <translation id="6295855836753816081">Ukladá sa...</translation>
@@ -5876,7 +5882,6 @@
 <translation id="6492396476180293140">Interná kamera bola deaktivovaná prepínačom hardvéru</translation>
 <translation id="6494327278868541139">Zobraziť podrobnosti o rozšírenej ochrane</translation>
 <translation id="6494445798847293442">Položka nie je certifikačnou autoritou</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Tieto údaje majú citlivý alebo nebezpečný obsah}=1{Tento súbor má citlivý alebo nebezpečný obsah}few{Tieto súbory majú citlivý alebo nebezpečný obsah}many{Tieto súbory majú citlivý alebo nebezpečný obsah}other{Tieto súbory majú citlivý alebo nebezpečný obsah}}</translation>
 <translation id="6497548114956205206">Ďalšie informácie o šetriči energie</translation>
 <translation id="6497784818439587832">Zmenou veľkosti zobrazenia môžete položky na obrazovke zmenšiť alebo zväčšiť</translation>
 <translation id="6497789971060331894">Obrátené posúvanie myšou</translation>
@@ -6026,7 +6031,6 @@
 <translation id="6621391692573306628">Ak chcete túto kartu odoslať do iného zariadenia, prihláste v oboch zariadeniach do Chromu</translation>
 <translation id="6622980291894852883">Pokračovať v blokovaní obrázkov</translation>
 <translation id="6624036901798307345">V režime tabletu klepnite na paneli s nástrojmi na tlačidlo počítadla kariet a otvorte tak nový panel kariet s miniatúrami všetkých kariet.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> má citlivý alebo nebezpečný obsah. Požiadajte vlastníka o nápravu.</translation>
 <translation id="6624687053722465643">Sladkosť</translation>
 <translation id="6628328486509726751">Nahrané <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Silnejšie zabezpečenie</translation>
@@ -6738,6 +6742,7 @@
 <translation id="7310598146671372464">Nepodarilo sa prihlásiť. Server nepodporuje stanovené typy šifrovania Kerberos. Kontaktujte správcu.</translation>
 <translation id="7311089766378749632">Žiada o povolenie čítať a vykonávať zmeny na <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">Správca resetuje vašu eSIM kartu. Môže trvať niekoľko minút.</translation>
+<translation id="7317831949569936035">Zápis do školy</translation>
 <translation id="7320213904474460808">Preferovať sieť</translation>
 <translation id="7321545336522791733">Server je nedostupný</translation>
 <translation id="7323315405936922211">Veľkosť oblasti kurzora</translation>
@@ -8488,6 +8493,7 @@
 <translation id="8940081510938872932">Počítač momentálne vykonáva priveľa úloh.  Skúste to neskôr.</translation>
 <translation id="8940381019874223173">Z vašich Fotiek Google</translation>
 <translation id="8941173171815156065">Odvolať povolenie „<ph name="PERMISSION" />“</translation>
+<translation id="8941688920560496412">Zariadenie <ph name="DEVICE_NAME" /> je vypnuté</translation>
 <translation id="894191600409472540">Vytvárajte si silné heslá</translation>
 <translation id="894360074127026135">Netscape – medzinárodný prestup na vyššiu edíciu</translation>
 <translation id="8944099748578356325">Bude intenzívnejšie využívať batériu (aktuálne <ph name="BATTERY_PERCENTAGE" /> %)</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 342c048..a38a64c 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -921,7 +921,6 @@
 <translation id="1819721979226826163">Dotaknite se »Obvestila aplikacije &gt; Storitve Google Play«.</translation>
 <translation id="1820028137326691631">Vnesite geslo, ki ga je priskrbel skrbnik</translation>
 <translation id="1822140782238030981">Že uporabljate Chrome? Prijavite se.</translation>
-<translation id="1823098433522728610">V tem dokumentu je občutljiva vsebina.</translation>
 <translation id="18245044880483936">Varnostno kopirani podatki se ne štejejo v otrokovo količinsko omejitev prostora za shranjevanje v Googlu Drive.</translation>
 <translation id="1825565032302550710">Številka vrat mora biti med 1024 in 65535</translation>
 <translation id="182577151972096764">nedavno ogledani recepti</translation>
@@ -1958,7 +1957,6 @@
 <translation id="2743301740238894839">Začni</translation>
 <translation id="2743387203779672305">Kopiraj v odložišče</translation>
 <translation id="2745080116229976798">Microsoftova kvalificirana podrejenost</translation>
-<translation id="2747266560080989517">V tej datoteki je občutljiva ali nevarna vsebina. Lastnika datoteke prosite, naj odpravi težavo.</translation>
 <translation id="2749756011735116528">Prijavite se v storitev <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Preverjanje slovnice in črkovanja</translation>
@@ -2553,7 +2551,6 @@
 <translation id="3317459757438853210">Obojestransko</translation>
 <translation id="3317678681329786349">Kamera in mikrofon sta blokirana</translation>
 <translation id="3320630259304269485">Varno brskanje (zaščita pred nevarnimi spletnimi mesti) in druge varnostne nastavitve</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{V teh podatkih je občutljiva ali nevarna vsebina. Odstranite jo in poskusite znova.}=1{V tej datoteki je občutljiva ali nevarna vsebina. Odstranite jo in poskusite znova.}one{V teh datotekah je občutljiva ali nevarna vsebina. Odstranite jo in poskusite znova.}two{V teh datotekah je občutljiva ali nevarna vsebina. Odstranite jo in poskusite znova.}few{V teh datotekah je občutljiva ali nevarna vsebina. Odstranite jo in poskusite znova.}other{V teh datotekah je občutljiva ali nevarna vsebina. Odstranite jo in poskusite znova.}}</translation>
 <translation id="3323521181261657960">Nagrada! Čas uporabe je podaljšan.</translation>
 <translation id="3323577066981719144">Spremembe, ki jih naredite tukaj, se uporabljajo samo za brskalnik Chrome. Če želite spreminjati nastavitve brskalnika Chrome Lacros, odprite brskalnik Chrome Lacros in nato nastavitve.</translation>
 <translation id="3325804108816646710">Iskanje razpoložljivih profilov …</translation>
@@ -2687,7 +2684,6 @@
 <translation id="3445925074670675829">Naprava USB-C</translation>
 <translation id="3446274660183028131">Zaženite program Parallels Desktop, če želite namestiti sistem Windows.</translation>
 <translation id="344630545793878684">Branje vaših podatkov na več spletnih mestih</translation>
-<translation id="3446650212859500694">V tej datoteki je občutljiva vsebina</translation>
 <translation id="3447644283769633681">Blokiraj vse piškotke drugih spletnih mest</translation>
 <translation id="3448492834076427715">Posodobi račun</translation>
 <translation id="3449393517661170867">Novo okno z zavihki</translation>
@@ -3920,7 +3916,6 @@
 <translation id="4602466770786743961">Vedno omogoči gostitelju <ph name="HOST" /> dostop do kamere in mikrofona</translation>
 <translation id="4606551464649945562">Spletnim mestom ne dovoli ustvarjanja 3D-zemljevida vaše okolice ali spremljanja položaja kamere</translation>
 <translation id="4608500690299898628">&amp;Iskanje ...</translation>
-<translation id="4608703838363792434">V datoteki <ph name="FILE_NAME" /> je občutljiva vsebina</translation>
 <translation id="4609987916561367134">Dovoljena je uporaba JavaScripta</translation>
 <translation id="4610162781778310380">Pri vtičniku <ph name="PLUGIN_NAME" /> je prišlo do napake</translation>
 <translation id="4610637590575890427">Ali ste nameravali obiskati <ph name="SITE" />?</translation>
@@ -5895,7 +5890,6 @@
 <translation id="6492396476180293140">Notranjo kamero je onemogočilo strojno stikalo.</translation>
 <translation id="6494327278868541139">Prikaz podatkov o izboljšani zaščiti</translation>
 <translation id="6494445798847293442">Ni overitelj potrdil</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{V teh podatkih je občutljiva ali nevarna vsebina}=1{V tej datoteki je občutljiva ali nevarna vsebina}one{V teh datotekah je občutljiva ali nevarna vsebina}two{V teh datotekah je občutljiva ali nevarna vsebina}few{V teh datotekah je občutljiva ali nevarna vsebina}other{V teh datotekah je občutljiva ali nevarna vsebina}}</translation>
 <translation id="6497548114956205206">Preberite več o varčevanju z energijo</translation>
 <translation id="6497784818439587832">Spremenite velikost zaslona, če želite pomanjšati ali povečati elemente na zaslonu.</translation>
 <translation id="6497789971060331894">Obratno pomikanje z miško</translation>
@@ -6047,7 +6041,6 @@
 <translation id="6621391692573306628">Če želite ta zavihek poslati v drugo napravo, se v obeh napravah prijavite v Chrome.</translation>
 <translation id="6622980291894852883">Še naprej blokiraj slike</translation>
 <translation id="6624036901798307345">V načinu tabličnega računalnika se dotaknite gumba za štetje zavihkov v orodni vrstici, če želite odpreti nov trak z zavihki, ki prikazuje sličice posameznih zavihkov.</translation>
-<translation id="6624535038674360844">V datoteki <ph name="FILE_NAME" /> je občutljiva ali nevarna vsebina. Lastnika datoteke prosite, naj odpravi težavo.</translation>
 <translation id="6624687053722465643">Sladkorček</translation>
 <translation id="6628328486509726751">Preneseno: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Večja varnost</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index e298c087..7246c32 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -904,7 +904,6 @@
 <translation id="1819721979226826163">Trokit te Njoftimet e aplikacioneve &gt; Shërbimet e Google Play.</translation>
 <translation id="1820028137326691631">Fut fjalëkalimin e ofruar nga administratori</translation>
 <translation id="1822140782238030981">Je tashmë një përdorues i Chrome? Identifikohu</translation>
-<translation id="1823098433522728610">Ky dokument ka përmbajtje delikate.</translation>
 <translation id="18245044880483936">Të dhënat e rezervimit nuk do të llogariten në kuotën e hapësirës ruajtëse të "Diskut" të fëmijës tënd.</translation>
 <translation id="1825565032302550710">Porta duhet të jetë mes 1024 dhe 65535</translation>
 <translation id="182577151972096764">recetat e shikuara së fundi</translation>
@@ -1938,7 +1937,6 @@
 <translation id="2743301740238894839">Nis</translation>
 <translation id="2743387203779672305">Kopjo te kujtesa e fragmenteve</translation>
 <translation id="2745080116229976798">Varësia e kualifikuar e Microsoft</translation>
-<translation id="2747266560080989517">Ky skedar ka përmbajtje delikate ose të rrezikshme. Kërkoji zotëruesit ta rregullojë.</translation>
 <translation id="2749756011735116528">Identifikohu në <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Kontrollo gramatikën me drejtshkrimin</translation>
@@ -2533,7 +2531,6 @@
 <translation id="3317459757438853210">Me dy anë</translation>
 <translation id="3317678681329786349">Kamera dhe mikrofoni lejohen</translation>
 <translation id="3320630259304269485">Shfletimi i sigurt (mbrojtje nga sajtet e rrezikshme) dhe cilësimet e tjera të sigurisë</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Këto të dhëna kanë përmbajtje delikate ose të rrezikshme. Hiqe këtë përmbajtje dhe provo përsëri.}=1{Ky skedar ka përmbajtje delikate ose të rrezikshme. Hiqe këtë përmbajtje dhe provo përsëri.}other{Këta skedarë kanë përmbajtje delikate ose të rrezikshme. Hiqe këtë përmbajtje dhe provo përsëri.}}</translation>
 <translation id="3323521181261657960">Bonus! Ke më shumë kohë para ekranit</translation>
 <translation id="3323577066981719144">Ndryshimet që bën këtu zbatohen vetëm në shfletuesin Chrome. Për të bërë ndryshime në cilësimet e shfletuesit Chrome Lacros, hap shfletuesin Chrome Lacros dhe shko te cilësimet.</translation>
 <translation id="3325804108816646710">Po kërkon për profilet e disponueshme...</translation>
@@ -2667,7 +2664,6 @@
 <translation id="3445925074670675829">Pajisja USB-C</translation>
 <translation id="3446274660183028131">Hap Parallels Desktop për të instaluar Windows.</translation>
 <translation id="344630545793878684">Lexo të dhënat e tua në një numër sajtesh uebi</translation>
-<translation id="3446650212859500694">Ky skedar ka përmbajtje delikate</translation>
 <translation id="3447644283769633681">Blloko të gjitha kukit e palëve të treta</translation>
 <translation id="3448492834076427715">Përditëso llogarinë</translation>
 <translation id="3449393517661170867">Dritare e re me skeda</translation>
@@ -3899,7 +3895,6 @@
 <translation id="4602466770786743961">Lejo gjithmonë që <ph name="HOST" /> të qaset në kamerën dhe mikrofonin tënd</translation>
 <translation id="4606551464649945562">Mos lejo që sajtet të krijojnë një hartë 3D të ambientit tënd rrethues ose të gjurmojnë pozicionin e kamerës</translation>
 <translation id="4608500690299898628">&amp;Gjej...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> ka përmbajtje delikate</translation>
 <translation id="4609987916561367134">Lejohen të përdorin JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ka hasur në një gabim</translation>
 <translation id="4610637590575890427">Mos dëshiron të shkosh te <ph name="SITE" />?</translation>
@@ -5872,7 +5867,6 @@
 <translation id="6492396476180293140">Kamera e brendshme u çaktivizua nga çelësi i harduerit</translation>
 <translation id="6494327278868541139">Shfaq detajet e mbrojtjes së përforcuar</translation>
 <translation id="6494445798847293442">Nuk është një autoritet certifikimi</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Këto të dhëna kanë përmbajtje delikate ose të rrezikshme}=1{Ky skedar ka përmbajtje delikate ose të rrezikshme}other{Këta skedarë kanë përmbajtje delikate ose të rrezikshme}}</translation>
 <translation id="6497548114956205206">Mëso më shumë për kursyesin e energjisë</translation>
 <translation id="6497784818439587832">Ndrysho madhësinë e ekranit për t'i bërë më të vegjël ose më të mëdhenj artikujt në ekran</translation>
 <translation id="6497789971060331894">Lëvizja e kundërt e miut</translation>
@@ -6018,7 +6012,6 @@
 <translation id="6621391692573306628">Për ta dërguar këtë skedë te një pajisje tjetër, identifikohu në Chrome në të dyja pajisjet</translation>
 <translation id="6622980291894852883">Vazhdo bllokimin e imazheve</translation>
 <translation id="6624036901798307345">Në modalitetin e tabletit, trokit në butonin e shiritit të veglave të numëruesit të skedave për të hapur një shirit të ri skedash që shfaq miniaturat e çdo skede.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> ka përmbajtje delikate ose të rrezikshme. Kërkoji zotëruesit ta rregullojë.</translation>
 <translation id="6624687053722465643">Ëmbëlsia</translation>
 <translation id="6628328486509726751">U ngarkua në <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Siguri më e fortë</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index fcd85d8..137fd9f 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -410,6 +410,7 @@
 <translation id="1388253969141979417">Dozvoljeno im je korišćenje mikrofona</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> će se restartovati kada se ažuriranja završe.</translation>
 <translation id="1389601498324964367">Memorijski prostor kojim se upravlja kvotama</translation>
+<translation id="1390113502208199250">Morate da resetujete ovaj uređaj na fabrička podešavanja da biste koristili funkcije nadogradnje za Chrome Education.</translation>
 <translation id="139013308650923562">Imaju dozvolu da koriste fontove instalirane na uređaju</translation>
 <translation id="1390548061267426325">Otvori kao uobičajenu karticu</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> nema ovlašćenje da štampa na: <ph name="PRINTER_NAME" />. Obratite se administratoru.</translation>
@@ -480,6 +481,7 @@
 <translation id="1436784010935106834">Uklonjeno</translation>
 <translation id="1437986450143295708">Detaljno opišite problem</translation>
 <translation id="1439671507542716852">dugoročna podrška</translation>
+<translation id="1440090277117135316">Registracija za školu je završena</translation>
 <translation id="144283815522798837">Izabranih stavki: <ph name="NUMBER_OF_ITEMS_SELECTED" /></translation>
 <translation id="1442851588227551435">Podesite aktivan Kerberos tiket</translation>
 <translation id="1444628761356461360">Ovim podešavanjem upravlja vlasnik uređaja, <ph name="OWNER_EMAIL" />.</translation>
@@ -907,7 +909,6 @@
 <translation id="1819721979226826163">Dodirnite Obaveštenja o aplikaciji &gt; Google Play usluge.</translation>
 <translation id="1820028137326691631">Unesite lozinku koju ste dobili od administratora</translation>
 <translation id="1822140782238030981">Već koristite Chrome? Prijavite se</translation>
-<translation id="1823098433522728610">Ovaj dokument sadrži osetljiv sadržaj.</translation>
 <translation id="18245044880483936">Rezervne kopije podataka se ne računaju u odnosu na kvotu memorijskog prostora deteta na Disku.</translation>
 <translation id="1825565032302550710">Port mora da bude između 1024 i 65535</translation>
 <translation id="182577151972096764">nedavno pregledane recepte</translation>
@@ -1939,8 +1940,8 @@
 <translation id="274318651891194348">Traži se tastatura</translation>
 <translation id="2743301740238894839">Pokreni</translation>
 <translation id="2743387203779672305">Kopiraj u memoriju</translation>
+<translation id="274362947316498129">Aplikacija pokušava da pristupi uređaju <ph name="DEVICE_NAME" />. Isključite prekidač za privatnost na uređaju <ph name="DEVICE_NAME" /> da biste dozvolili pristup.</translation>
 <translation id="2745080116229976798">Microsoft kvalifikovano podređivanje</translation>
-<translation id="2747266560080989517">Ova datoteka sadrži osetljiv ili opasan sadržaj. Zatražite od vlasnika da reši problem.</translation>
 <translation id="2749756011735116528">Prijavi me na proizvod <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Proveri gramatiku i pravopis</translation>
@@ -2396,6 +2397,7 @@
 <translation id="3170072451822350649">Možete i da preskočite prijavljivanje i da <ph name="LINK_START" />pregledate kao gost<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Nova kartica na levoj strani</translation>
 <translation id="3177909033752230686">Jezik stranice:</translation>
+<translation id="3177914167275935955">Uređaj sadrži nadogradnju za Chrome Education, ali vaše korisničko ime nije povezano sa Google for Education nalogom. Otvorite Google for Education nalog tako što ćete posetiti g.co/workspace/edusignup na sekundarnom uređaju.</translation>
 <translation id="3179982752812949580">Font teksta</translation>
 <translation id="3181954750937456830">Bezbedno pregledanje (štiti vas i uređaj od opasnih sajtova)</translation>
 <translation id="3182749001423093222">Provera pravopisa</translation>
@@ -2535,7 +2537,6 @@
 <translation id="3317459757438853210">Obostrano</translation>
 <translation id="3317678681329786349">Kamera i mikrofon su blokirani</translation>
 <translation id="3320630259304269485">Bezbedno pregledanje (zaštita od opasnih sajtova) i druga bezbednosna podešavanja</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Ovi podaci sadrže osetljiv ili opasan sadržaj. Uklonite ovaj sadržaj i probajte ponovo.}=1{Ova datoteka sadrži osetljiv ili opasan sadržaj. Uklonite ovaj sadržaj i probajte ponovo.}one{Ove datoteke sadrže osetljiv ili opasan sadržaj. Uklonite ovaj sadržaj i probajte ponovo.}few{Ove datoteke sadrže osetljiv ili opasan sadržaj. Uklonite ovaj sadržaj i probajte ponovo.}other{Ove datoteke sadrže osetljiv ili opasan sadržaj. Uklonite ovaj sadržaj i probajte ponovo.}}</translation>
 <translation id="3323521181261657960">Bonus! Dobijaš dodatno vreme ispred ekrana</translation>
 <translation id="3323577066981719144">Promene koje unosite ovde se primenjuju samo na Chrome pregledač. Da biste promenili podešavanja pregledača Lacros Chrome, otvorite Lacros Chrome i idite u podešavanja.</translation>
 <translation id="3325804108816646710">Traže se dostupni profili...</translation>
@@ -2669,7 +2670,6 @@
 <translation id="3445925074670675829">Uređaj sa USB priključkom tipa C</translation>
 <translation id="3446274660183028131">Pokrenite Parallels Desktop da biste instalirali Windows.</translation>
 <translation id="344630545793878684">Čitanje vaših podataka na više veb-sajtova</translation>
-<translation id="3446650212859500694">Ova datoteka sadrži osetljiv sadržaj</translation>
 <translation id="3447644283769633681">Blokiraj sve kolačiće trećih strana</translation>
 <translation id="3448492834076427715">Ažuriraj nalog</translation>
 <translation id="3449393517661170867">Novi prozor sa karticama</translation>
@@ -3111,6 +3111,7 @@
 <translation id="385051799172605136">Nazad</translation>
 <translation id="3851428669031642514">Učitavaj nebezbedne skripte</translation>
 <translation id="3852215160863921508">Pomoć pri unosu</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> je uključena</translation>
 <translation id="3854599674806204102">Izaberite opciju</translation>
 <translation id="3854967233147778866">Ponudi prevod veb-sajtova koji su na drugim jezicima</translation>
 <translation id="3854976556788175030">Posuda za odštampani materijal je puna</translation>
@@ -3444,6 +3445,7 @@
 <translation id="4163560723127662357">Nepoznata tastatura</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> ne pripada važećoj organizaciji. Obratite se administratoru. Ako ste vi administrator, možete da podesite organizaciju tako što ćete posetiti g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Podešavanja sajta</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> pokušava da pristupi uređaju <ph name="DEVICE_NAME" />. Isključite prekidač za privatnost na uređaju <ph name="DEVICE_NAME" /> da biste dozvolili pristup.</translation>
 <translation id="4167393659000039775">Google nije odgovoran ni za kakav gubitak podataka i <ph name="DEVICE_OS" /> možda neće raditi na modelima bez sertifikata. Saznajte više na g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Sajtovi obično koriste JavaScript da bi prikazivali interaktivne funkcije poput video igara ili veb-obrazaca</translation>
 <translation id="4168015872538332605">Neka podešavanja čiji je vlasnik <ph name="PRIMARY_EMAIL" /> se dele sa vama. Ta podešavanja utiču na nalog samo kada koristite višestruko prijavljivanje.</translation>
@@ -3901,11 +3903,11 @@
 <translation id="4602466770786743961">Uvek dozvoli da <ph name="HOST" /> pristupa kameri i mikrofonu</translation>
 <translation id="4606551464649945562">Ne dozvoljavajte sajtovima da prave 3D mapu okruženja ili da prate položaj kamere</translation>
 <translation id="4608500690299898628">&amp;Pronađi...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> sadrži osetljiv sadržaj</translation>
 <translation id="4609987916561367134">Dozvoljeno im je da koriste JavaScript</translation>
 <translation id="4610162781778310380">Dodatna komponenta <ph name="PLUGIN_NAME" /> je naišla na grešku</translation>
 <translation id="4610637590575890427">Da li ste želeli da odete na <ph name="SITE" /></translation>
 <translation id="4611114513649582138">Veza za prenos podataka je dostupna</translation>
+<translation id="4612841084470706111">Odobri pristup za sve zahtevane sajtove.</translation>
 <translation id="4613144866899789710">Otkazuje se Linux instalacija…</translation>
 <translation id="4613271546271159013">Dodatak je promenio stranicu koja se prikazuje kada otvorite novu karticu.</translation>
 <translation id="4615586811063744755">nijedan kolačić nije izabran</translation>
@@ -4065,6 +4067,7 @@
 <translation id="4762489666082647806">Boja pokazivača</translation>
 <translation id="4762718786438001384">Prostor na disku uređaja je zabrinjavajuće mali</translation>
 <translation id="4763408175235639573">Sledeći kolačići su postavljeni dok ste gledali ovu stranicu</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> nije važeći Google for Education nalog. Obratite se administratoru. Ako ste administrator, možete da podesite organizaciju tako što ćete posetiti: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Ovaj uređaj će biti sačuvan 1 mesec i možete da se povežete bez koda sledeći put. To je podesio administrator.}one{Ovaj uređaj će biti sačuvan {MONTHS} mesec i možete da se povežete bez koda sledeći put. To je podesio administrator.}few{Ovaj uređaj će biti sačuvan {MONTHS} meseca i možete da se povežete bez koda sledeći put. To je podesio administrator.}other{Ovaj uređaj će biti sačuvan {MONTHS} meseci i možete da se povežete bez koda sledeći put. To je podesio administrator.}}</translation>
 <translation id="4765582662863429759">Dozvoljava da Android Messages prenosi SMS-ove sa telefona na Chromebook</translation>
 <translation id="4766598565665644999">Svi dodaci mogu da čitaju i menjaju <ph name="HOST" /></translation>
@@ -4725,6 +4728,7 @@
 <translation id="5407167491482639988">Nerazumljiv</translation>
 <translation id="5408750356094797285">Zumirajte: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">Sa Google naloga</translation>
+<translation id="5411022484772257615">Registracija za školu nije uspela</translation>
 <translation id="5413640305322530561">Saznajte više o dijagnostici i podacima o korišćenju</translation>
 <translation id="5414198321558177633">Lista profila se osvežava. To može da potraje nekoliko minuta.</translation>
 <translation id="5414566801737831689">Čitanje ikona veb-sajtova koje posećujete</translation>
@@ -5512,6 +5516,7 @@
 <translation id="6129953537138746214">Razmak</translation>
 <translation id="6130692320435119637">Dodaj WiFi</translation>
 <translation id="6130887916931372608">Taster tastature</translation>
+<translation id="6132714462430777655">Želite da preskočite registraciju za školu?</translation>
 <translation id="6135823405800500595">Uverite se da je telefon u blizini, da je otključan i da su Bluetooth i WiFi uključeni</translation>
 <translation id="6135826623269483856">Nije im dozvoljeno da upravljaju prozorima na svim ekranima</translation>
 <translation id="6136114942382973861">Zatvori traku sa preuzimanjima</translation>
@@ -5670,6 +5675,7 @@
 <translation id="6291949900244949761">Pitaj kada sajt želi da pristupi USB uređajima (preporučeno)</translation>
 <translation id="6291953229176937411">&amp;Prikaži u Finder-u</translation>
 <translation id="6292699686837272722">Kartice se skupljaju do srednje širine</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> je isključena</translation>
 <translation id="6294759976468837022">Brzina automatskog skeniranja</translation>
 <translation id="6295158916970320988">Svi sajtovi</translation>
 <translation id="6295855836753816081">Čuva se…</translation>
@@ -5875,7 +5881,6 @@
 <translation id="6492396476180293140">Interna kamera je deaktivirana hardverskim prekidačem</translation>
 <translation id="6494327278868541139">Prikaži detalje o naprednoj zaštiti</translation>
 <translation id="6494445798847293442">Nije autoritet za izdavanje sertifikata</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Ovi podaci sadrže osetljiv ili opasan sadržaj}=1{Ova datoteka sadrži osetljiv ili opasan sadržaj}one{Ove datoteke sadrže osetljiv ili opasan sadržaj}few{Ove datoteke sadrže osetljiv ili opasan sadržaj}other{Ove datoteke sadrže osetljiv ili opasan sadržaj}}</translation>
 <translation id="6497548114956205206">Saznajte više o uštedi energije</translation>
 <translation id="6497784818439587832">Promenite veličinu prikaza da biste umanjili ili uvećali stavke na ekranu</translation>
 <translation id="6497789971060331894">Obrnuto pomeranje mišem</translation>
@@ -6025,7 +6030,6 @@
 <translation id="6621391692573306628">Da biste poslali ovu karticu na drugi uređaj, prijavite se u Chrome na oba uređaja</translation>
 <translation id="6622980291894852883">Nastavi blokiranje slika</translation>
 <translation id="6624036901798307345">U režimu tableta dodirnite dugme brojača kartica na traci s alatkama da biste otvorili novu traku sa karticama koja prikazuje sličice svake kartice.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> sadrži osetljiv ili opasan sadržaj. Zatražite od vlasnika da reši problem.</translation>
 <translation id="6624687053722465643">Slatkiš</translation>
 <translation id="6628328486509726751">Otpremljeno <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Veća bezbednost</translation>
@@ -6737,6 +6741,7 @@
 <translation id="7310598146671372464">Prijavljivanje nije uspelo. Server ne podržava navedene Kerberos tipove šifrovanja. Kontaktirajte administratora.</translation>
 <translation id="7311089766378749632">Zahtev za čitanje i menjanje za <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">Administrator resetuje eSIM. To može da potraje nekoliko minuta.</translation>
+<translation id="7317831949569936035">Registracija za školu</translation>
 <translation id="7320213904474460808">Postavi kao podrazumevanu mrežu</translation>
 <translation id="7321545336522791733">Server nije dostupan</translation>
 <translation id="7323315405936922211">Veličina oblasti kursora</translation>
@@ -8488,6 +8493,7 @@
 <translation id="8940081510938872932">Računar trenutno radi previše stvari. Probajte ponovo kasnije.</translation>
 <translation id="8940381019874223173">Iz Google slika</translation>
 <translation id="8941173171815156065">Opozovite dozvolu „<ph name="PERMISSION" />“</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> je isključena</translation>
 <translation id="894191600409472540">Napravite jake lozinke</translation>
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">brža potrošnja baterije (trenutno <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 91659e3..f884d52 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -410,6 +410,7 @@
 <translation id="1388253969141979417">Дозвољено им је коришћење микрофона</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> ће се рестартовати када се ажурирања заврше.</translation>
 <translation id="1389601498324964367">Меморијски простор којим се управља квотама</translation>
+<translation id="1390113502208199250">Морате да ресетујете овај уређај на фабричка подешавања да бисте користили функције надоградње за Chrome Education.</translation>
 <translation id="139013308650923562">Имају дозволу да користе фонтове инсталиране на уређају</translation>
 <translation id="1390548061267426325">Отвори као уобичајену картицу</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> нема овлашћење да штампа на: <ph name="PRINTER_NAME" />. Обратите се администратору.</translation>
@@ -480,6 +481,7 @@
 <translation id="1436784010935106834">Уклоњено</translation>
 <translation id="1437986450143295708">Детаљно опишите проблем</translation>
 <translation id="1439671507542716852">дугорочна подршка</translation>
+<translation id="1440090277117135316">Регистрација за школу је завршена</translation>
 <translation id="144283815522798837">Изабраних ставки: <ph name="NUMBER_OF_ITEMS_SELECTED" /></translation>
 <translation id="1442851588227551435">Подесите активан Kerberos тикет</translation>
 <translation id="1444628761356461360">Овим подешавањем управља власник уређаја, <ph name="OWNER_EMAIL" />.</translation>
@@ -907,7 +909,6 @@
 <translation id="1819721979226826163">Додирните Обавештења о апликацији &gt; Google Play услуге.</translation>
 <translation id="1820028137326691631">Унесите лозинку коју сте добили од администратора</translation>
 <translation id="1822140782238030981">Већ користите Chrome? Пријавите се</translation>
-<translation id="1823098433522728610">Овај документ садржи осетљив садржај.</translation>
 <translation id="18245044880483936">Резервне копије података се не рачунају у односу на квоту меморијског простора детета на Диску.</translation>
 <translation id="1825565032302550710">Порт мора да буде између 1024 и 65535</translation>
 <translation id="182577151972096764">недавно прегледане рецепте</translation>
@@ -1939,8 +1940,8 @@
 <translation id="274318651891194348">Тражи се тастатура</translation>
 <translation id="2743301740238894839">Покрени</translation>
 <translation id="2743387203779672305">Копирај у меморију</translation>
+<translation id="274362947316498129">Апликација покушава да приступи уређају <ph name="DEVICE_NAME" />. Искључите прекидач за приватност на уређају <ph name="DEVICE_NAME" /> да бисте дозволили приступ.</translation>
 <translation id="2745080116229976798">Microsoft квалификовано подређивање</translation>
-<translation id="2747266560080989517">Ова датотека садржи осетљив или опасан садржај. Затражите од власника да реши проблем.</translation>
 <translation id="2749756011735116528">Пријави ме на производ <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Провери граматику и правопис</translation>
@@ -2396,6 +2397,7 @@
 <translation id="3170072451822350649">Можете и да прескочите пријављивање и да <ph name="LINK_START" />прегледате као гост<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">Нова картица на левој страни</translation>
 <translation id="3177909033752230686">Језик странице:</translation>
+<translation id="3177914167275935955">Уређај садржи надоградњу за Chrome Education, али ваше корисничко име није повезано са Google for Education налогом. Отворите Google for Education налог тако што ћете посетити g.co/workspace/edusignup на секундарном уређају.</translation>
 <translation id="3179982752812949580">Фонт текста</translation>
 <translation id="3181954750937456830">Безбедно прегледање (штити вас и уређај од опасних сајтова)</translation>
 <translation id="3182749001423093222">Провера правописа</translation>
@@ -2535,7 +2537,6 @@
 <translation id="3317459757438853210">Обострано</translation>
 <translation id="3317678681329786349">Камера и микрофон су блокирани</translation>
 <translation id="3320630259304269485">Безбедно прегледање (заштита од опасних сајтова) и друга безбедносна подешавања</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Ови подаци садрже осетљив или опасан садржај. Уклоните овај садржај и пробајте поново.}=1{Ова датотека садржи осетљив или опасан садржај. Уклоните овај садржај и пробајте поново.}one{Ове датотеке садрже осетљив или опасан садржај. Уклоните овај садржај и пробајте поново.}few{Ове датотеке садрже осетљив или опасан садржај. Уклоните овај садржај и пробајте поново.}other{Ове датотеке садрже осетљив или опасан садржај. Уклоните овај садржај и пробајте поново.}}</translation>
 <translation id="3323521181261657960">Бонус! Добијаш додатно време испред екрана</translation>
 <translation id="3323577066981719144">Промене које уносите овде се примењују само на Chrome прегледач. Да бисте променили подешавања прегледача Lacros Chrome, отворите Lacros Chrome и идите у подешавања.</translation>
 <translation id="3325804108816646710">Траже се доступни профили...</translation>
@@ -2669,7 +2670,6 @@
 <translation id="3445925074670675829">Уређај са USB прикључком типа C</translation>
 <translation id="3446274660183028131">Покрените Parallels Desktop да бисте инсталирали Windows.</translation>
 <translation id="344630545793878684">Читање ваших података на више веб-сајтова</translation>
-<translation id="3446650212859500694">Ова датотека садржи осетљив садржај</translation>
 <translation id="3447644283769633681">Блокирај све колачиће трећих страна</translation>
 <translation id="3448492834076427715">Ажурирај налог</translation>
 <translation id="3449393517661170867">Нови прозор са картицама</translation>
@@ -3111,6 +3111,7 @@
 <translation id="385051799172605136">Назад</translation>
 <translation id="3851428669031642514">Учитавај небезбедне скрипте</translation>
 <translation id="3852215160863921508">Помоћ при уносу</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> је укључена</translation>
 <translation id="3854599674806204102">Изаберите опцију</translation>
 <translation id="3854967233147778866">Понуди превод веб-сајтова који су на другим језицима</translation>
 <translation id="3854976556788175030">Посуда за одштампани материјал је пуна</translation>
@@ -3444,6 +3445,7 @@
 <translation id="4163560723127662357">Непозната тастатура</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> не припада важећој организацији. Обратите се администратору. Ако сте ви администратор, можете да подесите организацију тако што ћете посетити g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Подешавања сајта</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> покушава да приступи уређају <ph name="DEVICE_NAME" />. Искључите прекидач за приватност на уређају <ph name="DEVICE_NAME" /> да бисте дозволили приступ.</translation>
 <translation id="4167393659000039775">Google није одговоран ни за какав губитак података и <ph name="DEVICE_OS" /> можда неће радити на моделима без сертификата. Сазнајте више на g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Сајтови обично користе JavaScript да би приказивали интерактивне функције попут видео игара или веб-образаца</translation>
 <translation id="4168015872538332605">Нека подешавања чији је власник <ph name="PRIMARY_EMAIL" /> се деле са вама. Та подешавања утичу на налог само када користите вишеструко пријављивање.</translation>
@@ -3901,11 +3903,11 @@
 <translation id="4602466770786743961">Увек дозволи да <ph name="HOST" /> приступа камери и микрофону</translation>
 <translation id="4606551464649945562">Не дозвољавајте сајтовима да праве 3D мапу окружења или да прате положај камере</translation>
 <translation id="4608500690299898628">&amp;Пронађи...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> садржи осетљив садржај</translation>
 <translation id="4609987916561367134">Дозвољено им је да користе JavaScript</translation>
 <translation id="4610162781778310380">Додатна компонента <ph name="PLUGIN_NAME" /> је наишла на грешку</translation>
 <translation id="4610637590575890427">Да ли сте желели да одете на <ph name="SITE" /></translation>
 <translation id="4611114513649582138">Веза за пренос података је доступна</translation>
+<translation id="4612841084470706111">Одобри приступ за све захтеване сајтове.</translation>
 <translation id="4613144866899789710">Отказује се Linux инсталација…</translation>
 <translation id="4613271546271159013">Додатак је променио страницу која се приказује када отворите нову картицу.</translation>
 <translation id="4615586811063744755">ниједан колачић није изабран</translation>
@@ -4065,6 +4067,7 @@
 <translation id="4762489666082647806">Боја показивача</translation>
 <translation id="4762718786438001384">Простор на диску уређаја је забрињавајуће мали</translation>
 <translation id="4763408175235639573">Следећи колачићи су постављени док сте гледали ову страницу</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> није важећи Google for Education налог. Обратите се администратору. Ако сте администратор, можете да подесите организацију тако што ћете посетити: g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{Овај уређај ће бити сачуван 1 месец и можете да се повежете без кода следећи пут. То је подесио администратор.}one{Овај уређај ће бити сачуван {MONTHS} месец и можете да се повежете без кода следећи пут. То је подесио администратор.}few{Овај уређај ће бити сачуван {MONTHS} месеца и можете да се повежете без кода следећи пут. То је подесио администратор.}other{Овај уређај ће бити сачуван {MONTHS} месеци и можете да се повежете без кода следећи пут. То је подесио администратор.}}</translation>
 <translation id="4765582662863429759">Дозвољава да Android Messages преноси SMS-ове са телефона на Chromebook</translation>
 <translation id="4766598565665644999">Сви додаци могу да читају и мењају <ph name="HOST" /></translation>
@@ -4725,6 +4728,7 @@
 <translation id="5407167491482639988">Неразумљив</translation>
 <translation id="5408750356094797285">Зумирајте: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">Са Google налога</translation>
+<translation id="5411022484772257615">Регистрација за школу није успела</translation>
 <translation id="5413640305322530561">Сазнајте више о дијагностици и подацима о коришћењу</translation>
 <translation id="5414198321558177633">Листа профила се освежава. То може да потраје неколико минута.</translation>
 <translation id="5414566801737831689">Читање икона веб-сајтова које посећујете</translation>
@@ -5512,6 +5516,7 @@
 <translation id="6129953537138746214">Размак</translation>
 <translation id="6130692320435119637">Додај WiFi</translation>
 <translation id="6130887916931372608">Тастер тастатуре</translation>
+<translation id="6132714462430777655">Желите да прескочите регистрацију за школу?</translation>
 <translation id="6135823405800500595">Уверите се да је телефон у близини, да је откључан и да су Bluetooth и WiFi укључени</translation>
 <translation id="6135826623269483856">Није им дозвољено да управљају прозорима на свим екранима</translation>
 <translation id="6136114942382973861">Затвори траку са преузимањима</translation>
@@ -5670,6 +5675,7 @@
 <translation id="6291949900244949761">Питај када сајт жели да приступи USB уређајима (препоручено)</translation>
 <translation id="6291953229176937411">&amp;Прикажи у Finder-у</translation>
 <translation id="6292699686837272722">Картице се скупљају до средње ширине</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> је искључена</translation>
 <translation id="6294759976468837022">Брзина аутоматског скенирања</translation>
 <translation id="6295158916970320988">Сви сајтови</translation>
 <translation id="6295855836753816081">Чува се…</translation>
@@ -5875,7 +5881,6 @@
 <translation id="6492396476180293140">Интерна камера је деактивирана хардверским прекидачем</translation>
 <translation id="6494327278868541139">Прикажи детаље о напредној заштити</translation>
 <translation id="6494445798847293442">Није ауторитет за издавање сертификата</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Ови подаци садрже осетљив или опасан садржај}=1{Ова датотека садржи осетљив или опасан садржај}one{Ове датотеке садрже осетљив или опасан садржај}few{Ове датотеке садрже осетљив или опасан садржај}other{Ове датотеке садрже осетљив или опасан садржај}}</translation>
 <translation id="6497548114956205206">Сазнајте више о уштеди енергије</translation>
 <translation id="6497784818439587832">Промените величину приказа да бисте умањили или увећали ставке на екрану</translation>
 <translation id="6497789971060331894">Обрнуто померање мишем</translation>
@@ -6025,7 +6030,6 @@
 <translation id="6621391692573306628">Да бисте послали ову картицу на други уређај, пријавите се у Chrome на оба уређаја</translation>
 <translation id="6622980291894852883">Настави блокирање слика</translation>
 <translation id="6624036901798307345">У режиму таблета додирните дугме бројача картица на траци с алаткама да бисте отворили нову траку са картицама која приказује сличице сваке картице.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> садржи осетљив или опасан садржај. Затражите од власника да реши проблем.</translation>
 <translation id="6624687053722465643">Слаткиш</translation>
 <translation id="6628328486509726751">Отпремљено <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Већа безбедност</translation>
@@ -6737,6 +6741,7 @@
 <translation id="7310598146671372464">Пријављивање није успело. Сервер не подржава наведене Kerberos типове шифровања. Контактирајте администратора.</translation>
 <translation id="7311089766378749632">Захтев за читање и мењање за <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">Администратор ресетује eSIM. То може да потраје неколико минута.</translation>
+<translation id="7317831949569936035">Регистрација за школу</translation>
 <translation id="7320213904474460808">Постави као подразумевану мрежу</translation>
 <translation id="7321545336522791733">Сервер није доступан</translation>
 <translation id="7323315405936922211">Величина области курсора</translation>
@@ -8488,6 +8493,7 @@
 <translation id="8940081510938872932">Рачунар тренутно ради превише ствари. Пробајте поново касније.</translation>
 <translation id="8940381019874223173">Из Google слика</translation>
 <translation id="8941173171815156065">Опозовите дозволу „<ph name="PERMISSION" />“</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> је искључена</translation>
 <translation id="894191600409472540">Направите јаке лозинке</translation>
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">бржа потрошња батерије (тренутно <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 5cfb272..24a1e8d 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -918,7 +918,6 @@
 <translation id="1819721979226826163">Tryck på Appaviseringar &gt; Google Play-tjänster.</translation>
 <translation id="1820028137326691631">Ange lösenordet du fått från administratören</translation>
 <translation id="1822140782238030981">Använder du redan Chrome? Logga in</translation>
-<translation id="1823098433522728610">Dokumentet har känsligt innehåll.</translation>
 <translation id="18245044880483936">Säkerhetskopierad data tar inte upp lagringsutrymme på barnets Drive.</translation>
 <translation id="1825565032302550710">Portnummer måste vara mellan 1024 och 65535</translation>
 <translation id="182577151972096764">nyligen visade recept</translation>
@@ -1956,7 +1955,6 @@
 <translation id="2743387203779672305">Kopiera till Urklipp</translation>
 <translation id="274362947316498129">En app försöker få åtkomst till <ph name="DEVICE_NAME" />. Inaktivera integritetsinställningen för <ph name="DEVICE_NAME" /> för att tillåta åtkomst.</translation>
 <translation id="2745080116229976798">Microsofts kvalificerade underordning</translation>
-<translation id="2747266560080989517">Filen har känsligt eller skadligt innehåll. Be ägaren att åtgärda detta.</translation>
 <translation id="2749756011735116528">Logga in på <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Kontrollera grammatik och stavning</translation>
@@ -2551,7 +2549,6 @@
 <translation id="3317459757438853210">Dubbelsidig</translation>
 <translation id="3317678681329786349">Kamera och mikrofon är blockerade</translation>
 <translation id="3320630259304269485">Säker webbsökning (skydd mot farliga webbplatser) och andra säkerhetsinställningar</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Det finns känsligt eller skadligt innehåll i denna data. Ta bort det och försök igen.}=1{Filen har känsligt eller skadligt innehåll. Ta bort det och försök igen.}other{Filerna har känsligt eller skadligt innehåll. Ta bort det och försök igen.}}</translation>
 <translation id="3323521181261657960">Bonus! Du har fått mer skärmtid</translation>
 <translation id="3323577066981719144">Ändringar du gör här gäller endast webbläsaren Chrome. Om du vill göra ändringar i inställningarna för webbläsaren Lacros Chrome öppnar du Lacros Chrome och väljer inställningarna.</translation>
 <translation id="3325804108816646710">Söker efter tillgängliga profiler …</translation>
@@ -2685,7 +2682,6 @@
 <translation id="3445925074670675829">USB-C-enhet</translation>
 <translation id="3446274660183028131">Starta Parallels Desktop om du vill installera Windows.</translation>
 <translation id="344630545793878684">Läsa din data på ett antal webbplatser</translation>
-<translation id="3446650212859500694">Filen har känsligt innehåll</translation>
 <translation id="3447644283769633681">Blockera alla cookies från tredje part</translation>
 <translation id="3448492834076427715">Uppdatera kontot</translation>
 <translation id="3449393517661170867">Nytt fönster med flikar</translation>
@@ -3920,7 +3916,6 @@
 <translation id="4602466770786743961">Tillåt alltid att <ph name="HOST" /> använder kameran och mikrofonen</translation>
 <translation id="4606551464649945562">Tillåt inte att webbplatser skapar en 3D-karta över dina omgivningar eller registrera kamerans position</translation>
 <translation id="4608500690299898628">&amp;Sök...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> har känsligt innehåll</translation>
 <translation id="4609987916561367134">Får använda JavaScript</translation>
 <translation id="4610162781778310380">Ett fel har uppstått i <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Ville du besöka <ph name="SITE" />?</translation>
@@ -5895,7 +5890,6 @@
 <translation id="6492396476180293140">Intern kamera har inaktiverats med maskinvarureglage</translation>
 <translation id="6494327278868541139">Visa detaljer om förbättrat skydd</translation>
 <translation id="6494445798847293442">Inte från certifikatutfärdare</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Det finns känsligt eller skadligt innehåll i denna data}=1{Filen har känsligt eller skadligt innehåll}other{Filerna har känsligt eller skadligt innehåll}}</translation>
 <translation id="6497548114956205206">Läs mer om energisparläget</translation>
 <translation id="6497784818439587832">Ändra skärmstorlek för att göra objekt på skärmen större eller mindre</translation>
 <translation id="6497789971060331894">Omvänd scrollning på musen</translation>
@@ -6041,7 +6035,6 @@
 <translation id="6621391692573306628">Om du vill skicka den här fliken till en annan enhet loggar du in i Chrome på båda enheterna</translation>
 <translation id="6622980291894852883">Fortsätt att blockera bilder</translation>
 <translation id="6624036901798307345">Öppna det nya flikhuvudet med miniatyrer av alla flikar genom att trycka på flikräknaren i verktygsfältet i surfplatteläge.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> har känsligt eller skadligt innehåll. Be ägaren att åtgärda detta.</translation>
 <translation id="6624687053722465643">Sockersöt</translation>
 <translation id="6628328486509726751">Uppladdat <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Bättre säkerhet</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 36e2630..1dbf503ad 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -915,7 +915,6 @@
 <translation id="1819721979226826163">Gusa Arifa za programu &gt; Huduma za Google Play.</translation>
 <translation id="1820028137326691631">Weka nenosiri lililotolewa na msimamizi</translation>
 <translation id="1822140782238030981">Unatumia Chrome tayari? Ingia katika akaunti</translation>
-<translation id="1823098433522728610">Hati hii ina maudhui nyeti.</translation>
 <translation id="18245044880483936">Nakala ya data iliyohifadhiwa haitahesabiwa katika mgawo wa nafasi ya Hifadhi ya Google ya mtoto wako.</translation>
 <translation id="1825565032302550710">Lazima mlango uwe kati ya 1024 na 65535</translation>
 <translation id="182577151972096764">mapishi yaliyotazamwa hivi karibuni</translation>
@@ -1952,7 +1951,6 @@
 <translation id="2743301740238894839">Anza</translation>
 <translation id="2743387203779672305">Nakili kwenye ubao wa kunakili</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">Faili hii ina maudhui hatari au nyeti. Mwombe mmiliki airekebishe.</translation>
 <translation id="2749756011735116528">Ingia kwenye <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Kagua Sarufi Pamoja na Tahajia</translation>
@@ -2547,7 +2545,6 @@
 <translation id="3317459757438853210">Pande mbili</translation>
 <translation id="3317678681329786349">Kamera na maikrofoni zimezuiwa</translation>
 <translation id="3320630259304269485">Kuvinjari Salama (ulinzi dhidi ya tovuti hatari) na mipangilio mingine ya usalama</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Data hii ina maudhui hatari au nyeti. Ondoa maudhui haya kisha ujaribu tena.}=1{Faili hii ina maudhui hatari au nyeti. Ondoa maudhui haya kisha ujaribu tena.}other{Faili hizi zina maudhui hatari au nyeti. Ondoa maudhui haya kisha ujaribu tena.}}</translation>
 <translation id="3323521181261657960">Bonasi! Umeongezewa muda wa kutumia kifaa</translation>
 <translation id="3323577066981719144">Mabadiliko utakayoyafanya hapa yatatumika tu kwenye Kivinjari cha Chrome. Ili ufanye mabadiliko kwenye mipangilio yako ya Kivinjari cha Lacros cha Chrome, fungua Kivinjari cha Lacros cha Chrome kisha uende kwenye mipangilio.</translation>
 <translation id="3325804108816646710">Inatafuta wasifu unaopatikana...</translation>
@@ -2681,7 +2678,6 @@
 <translation id="3445925074670675829">Kifaa cha USB-C</translation>
 <translation id="3446274660183028131">Tafadhali fungua programu ya Parallels Desktop ili usakinishe Windows.</translation>
 <translation id="344630545793878684">Soma data yako kwenye tovuti kadhaa</translation>
-<translation id="3446650212859500694">Faili hii ina maudhui nyeti</translation>
 <translation id="3447644283769633681">Zuia vidakuzi vyote vya wengine</translation>
 <translation id="3448492834076427715">Sasisha akaunti</translation>
 <translation id="3449393517661170867">Dirisha jipya lenye vichupo</translation>
@@ -3912,7 +3908,6 @@
 <translation id="4602466770786743961">Ruhusu <ph name="HOST" /> ifikie kamera na maikrofoni yako kila wakati</translation>
 <translation id="4606551464649945562">Usiruhusu tovuti zibuni ramani ya 3D ya mazingira yako wala kufuatilia mkao wa kamera</translation>
 <translation id="4608500690299898628">Ta&amp;futa</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> ina maudhui nyeti</translation>
 <translation id="4609987916561367134">Zinazoruhusiwa kutumia JavaScript</translation>
 <translation id="4610162781778310380">Hitilafu imetokea katika <ph name="PLUGIN_NAME" /></translation>
 <translation id="4610637590575890427">Je, ulitaka kwenda <ph name="SITE" />?</translation>
@@ -5885,7 +5880,6 @@
 <translation id="6492396476180293140">Kamera ya ndani imezimwa kwa kutumia swichi ya maunzi</translation>
 <translation id="6494327278868541139">Onyesha maelezo ya ulinzi ulioboreshwa</translation>
 <translation id="6494445798847293442">Si Mamlaka ya Kutoa Vyeti</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Data hii ina maudhui hatari au nyeti}=1{Faili hii ina maudhui hatari au nyeti}other{Faili hizi zina maudhui hatari au nyeti}}</translation>
 <translation id="6497548114956205206">Pata maelezo zaidi kuhusu kiokoa nishati</translation>
 <translation id="6497784818439587832">Badilisha ukubwa wa skrini ili uvifanye vipengee kwenye skrini yako vionekane vidogo au vikubwa</translation>
 <translation id="6497789971060331894">Usogezaji kinyume kwa kutumia kipanya</translation>
@@ -6031,7 +6025,6 @@
 <translation id="6621391692573306628">Ili utume kichupo hiki kwenda kwenye kifaa kingine, ingia katika Chrome kwenye vifaa vyote</translation>
 <translation id="6622980291894852883">Endelea kuzuia picha</translation>
 <translation id="6624036901798307345">Katika hali ya kompyuta kibao, gusa kitufe cha upau wa vidhibiti wa sehemu ya kuhesabu vichupo ili ufungue ukanda mpya wa vichupo unaoonyesha vijipicha vya kila kichupo.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> ina maudhui hatari au nyeti. Mwombe mmiliki airekebishe.</translation>
 <translation id="6624687053722465643">Utamu</translation>
 <translation id="6628328486509726751">Imepakia <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Usalama thabiti</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 7068d9ed..3d5f6235 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -407,6 +407,7 @@
 <translation id="1388253969141979417">மைக்ரோஃபோனைப் பயன்படுத்த அனுமதிக்கப்பட்டுள்ள தளங்கள்</translation>
 <translation id="1388728792929436380">புதுப்பிப்புகள் முடிந்தவுடன் <ph name="DEVICE_TYPE" /> சாதனம் மீண்டும் தொடங்கும்.</translation>
 <translation id="1389601498324964367">ஒதுக்கீட்டின் அடிப்படையில் நிர்வகிக்கப்படும் சேமிப்பகம்</translation>
+<translation id="1390113502208199250">Chrome Education Upgrade அம்சங்களைப் பயன்படுத்த நீங்கள் இந்தச் சாதனத்தை ஆரம்பநிலைக்கு மீட்டமைக்க வேண்டும்.</translation>
 <translation id="139013308650923562">சாதனத்தில் நிறுவப்பட்டுள்ள எழுத்து வடிவங்களைப் பயன்படுத்த அனுமதியுள்ள தளங்கள்</translation>
 <translation id="1390548061267426325">வழக்கமான தாவலாகத் திற</translation>
 <translation id="1390907927270446471"><ph name="PRINTER_NAME" /> இல் பிரிண்ட் செய்ய <ph name="PROFILE_USERNAME" /> அங்கீகரிக்கப்படவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
@@ -476,6 +477,7 @@
 <translation id="1436784010935106834">அகற்றப்பட்டது</translation>
 <translation id="1437986450143295708">சிக்கல் குறித்து விரிவாக விளக்கவும்</translation>
 <translation id="1439671507542716852">நீண்டகால உதவி</translation>
+<translation id="1440090277117135316">பள்ளிகளுக்குப் பதிவுசெய்தல் நிறைவடைந்தது</translation>
 <translation id="144283815522798837"><ph name="NUMBER_OF_ITEMS_SELECTED" /> தேர்ந்தெடுக்கப்பட்டன</translation>
 <translation id="1442851588227551435">செயலில் உள்ள Kerberos டிக்கெட்டை அமைத்தல்</translation>
 <translation id="1444628761356461360">இந்த அமைப்பானது சாதனத்தின் உரிமையாளரால் <ph name="OWNER_EMAIL" /> நிர்வகிக்கப்படுகிறது.</translation>
@@ -915,7 +917,6 @@
 <translation id="1819721979226826163">ஆப்ஸ் அறிவிப்புகள் &gt; Google Play சேவைகள் என்பதைத் தட்டவும்.</translation>
 <translation id="1820028137326691631">நிர்வாகி வழங்கிய கடவுச்சொல்லை உள்ளிடவும்</translation>
 <translation id="1822140782238030981">ஏற்கனவே Chrome பயனரா? உள்நுழைக</translation>
-<translation id="1823098433522728610">இந்த ஆவணத்தில் பாதுகாக்கவேண்டிய உள்ளடக்கம் உள்ளது.</translation>
 <translation id="18245044880483936">உங்கள் பிள்ளையின் Drive சேமிப்பக ஒதுக்கீட்டில் காப்புப் பிரதித் தரவு கணக்கிடப்படாது.</translation>
 <translation id="1825565032302550710">போர்ட் எண் 1024 - 65535க்குள் இருக்க வேண்டும்</translation>
 <translation id="182577151972096764">சமீபத்தில் பார்த்த ரெசிபிகள்</translation>
@@ -1950,7 +1951,6 @@
 <translation id="2743301740238894839">தொடங்கு</translation>
 <translation id="2743387203779672305">கிளிப்போர்டுக்கு நகலெடு</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">இந்த ஃபைல் பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளது. சரிசெய்யுமாறு அதன் உரிமையாளரிடம் கேட்கவும்.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> இல் உள்நுழையவும்</translation>
 <translation id="2749836841884031656">சிம்</translation>
 <translation id="2749881179542288782">இலக்கணம் மற்றும் எழுத்துப்பிழை சரிபார்</translation>
@@ -2406,6 +2406,7 @@
 <translation id="3170072451822350649">உள்நுழைவதைத் தவிர்த்துவிட்டு <ph name="LINK_START" />கெஸ்டாக உலாவலாம்<ph name="LINK_END" />.</translation>
 <translation id="31774765611822736">இடதுபுறத்தில் புதிய பக்கம்</translation>
 <translation id="3177909033752230686">பக்கத்தின் மொழி:</translation>
+<translation id="3177914167275935955">உங்கள் சாதனம் Chrome Education Upgradeடை உள்ளடக்கியதாகும், ஆனால் Google for Education கணக்கு ஒன்றுடன் உங்கள் பயனர்பெயர் தொடர்புடையதாக இல்லை. g.co/workspace/edusignup தளத்திற்குச் சென்று இரண்டாம்நிலைச் சாதனத்தில் Google for Education கணக்கை உருவாக்கவும்.</translation>
 <translation id="3179982752812949580">உரையின் எழுத்துரு</translation>
 <translation id="3181954750937456830">பாதுகாப்பு உலாவல் (ஆபத்தான தளங்களிலிருந்து உங்களையும் சாதனத்தையும் பாதுகாக்கும்)</translation>
 <translation id="3182749001423093222">எழுத்துப் பிழை சரிபார்ப்பான்</translation>
@@ -2544,7 +2545,6 @@
 <translation id="3317459757438853210">இரு-பக்கம்</translation>
 <translation id="3317678681329786349">கேமராவும் மைக்ரோஃபோனும் தடுக்கப்பட்டன</translation>
 <translation id="3320630259304269485">பாதுகாப்பு உலாவல் (ஆபத்தான தளங்களிலிருந்து பாதுகாப்பு) மற்றும் பிற பாதுகாப்பு அமைப்புகள்</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{இந்தத் தரவு பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளது. இந்த உள்ளடக்கத்தை அகற்றி மீண்டும் முயலவும்.}=1{இந்த ஃபைல் பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளது. இந்த உள்ளடக்கத்தை அகற்றி மீண்டும் முயலவும்.}other{இந்த ஃபைல்கள் பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளன. இந்த உள்ளடக்கத்தை அகற்றி மீண்டும் முயலவும்.}}</translation>
 <translation id="3323521181261657960">போனஸ்! கூடுதல் நேரம் பயன்படுத்தலாம்</translation>
 <translation id="3323577066981719144">இங்கே செய்யும் மாற்றங்கள் Chrome உலாவியில் மட்டுமே பயன்படுத்தப்படும். Lacros Chrome உலாவி அமைப்புகளில் மாற்றங்களைச் செய்ய, Lacros Chrome உலாவியைத் திறந்து அமைப்புகளுக்குச் செல்லவும்.</translation>
 <translation id="3325804108816646710">சுயவிவரங்கள் உள்ளதா எனப் பார்க்கிறது...</translation>
@@ -2678,7 +2678,6 @@
 <translation id="3445925074670675829">USB-C சாதனம்</translation>
 <translation id="3446274660183028131">Windowsஸை நிறுவ, Parallels Desktopபைத் துவக்கவும்.</translation>
 <translation id="344630545793878684">பல இணையதளங்களில் உங்கள் தரவைப் படித்தல்</translation>
-<translation id="3446650212859500694">இந்த ஃபைல் பாதுகாக்கவேண்டிய உள்ளடக்கத்தைக் கொண்டுள்ளது</translation>
 <translation id="3447644283769633681">மூன்றாம் தரப்பு குக்கீகள் அனைத்தையும் தடு</translation>
 <translation id="3448492834076427715">கணக்கைப் புதுப்பி</translation>
 <translation id="3449393517661170867">புதிய தாவலாக்கப்பட்ட சாளரம்</translation>
@@ -3908,7 +3907,6 @@
 <translation id="4602466770786743961">உங்கள் கேமராவையும் மைக்ரோஃபோனையும் அணுக <ph name="HOST" /> ஐ எப்போதும் அனுமதிக்கவும்</translation>
 <translation id="4606551464649945562">என்னைச் சுற்றியுள்ள இடங்களின் 3D மேப்பை உருவாக்கவோ கேமரா நிலையை டிராக் செய்யவோ தளங்களை அனுமதிக்காதே</translation>
 <translation id="4608500690299898628">&amp;கண்டுபிடி...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> பாதுகாக்கவேண்டிய உள்ளடக்கத்தைக் கொண்டுள்ளது</translation>
 <translation id="4609987916561367134">Javascriptடைப் பயன்படுத்த அனுமதிக்கப்பட்டுள்ள தளங்கள்</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> பிழையை எதிர்கொண்டது</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> க்கு செல்வதைக் குறித்தீர்களா?</translation>
@@ -4072,6 +4070,7 @@
 <translation id="4762489666082647806">பாயிண்டரின் வண்ணம்</translation>
 <translation id="4762718786438001384">சாதனத்தின் வட்டில் காலியிடம் மிகவும் குறைவாக உள்ளது</translation>
 <translation id="4763408175235639573">இந்தப் பக்கத்தை நீங்கள் பார்த்தபோது பின்வரும் குக்கீகள் அமைக்கப்பட்டன:</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> சரியான Google for Education கணக்கு அல்ல. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும். நீங்கள் நிர்வாகி எனில்: g.co/workspace/edusignup தளத்திற்குச் சென்று உங்கள் நிறுவனத்தை அமைக்கலாம்</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{இந்தச் சாதனம் 1 மாதத்திற்குச் சேமிக்கப்படும் என்பதால் அடுத்த முறை நீங்கள் குறியீடு இல்லாமல் இணைக்க முடியும். இது உங்கள் நிர்வாகியால் அமைக்கப்பட்டது.}other{இந்தச் சாதனம் {MONTHS} மாதங்களுக்குச் சேமிக்கப்படும் என்பதால் அடுத்த முறை நீங்கள் குறியீடு இல்லாமல் இணைக்க முடியும். இது உங்கள் நிர்வாகியால் அமைக்கப்பட்டது.}}</translation>
 <translation id="4765582662863429759">உங்கள் மொபைலில் இருந்து Chromebookகுக்கு மெசேஜ்களை ரிலே செய்ய Android மெசேஜஸை அனுமதிக்கும்</translation>
 <translation id="4766598565665644999">அனைத்து நீட்டிப்புகளும் <ph name="HOST" /> தளத்தில் உள்ளவற்றைப் படிக்கலாம் மாற்றலாம்</translation>
@@ -4732,6 +4731,7 @@
 <translation id="5407167491482639988">சரியாகக் கேட்கவில்லை</translation>
 <translation id="5408750356094797285">அளவு மாற்றம்: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">உங்கள் Google கணக்கில் இருந்து</translation>
+<translation id="5411022484772257615">பள்ளிகளுக்குப் பதிவுசெய்தலை நிறைவுசெய்ய முடியவில்லை</translation>
 <translation id="5413640305322530561">பிழை அறிக்கைத் தரவு &amp; உபயோகத் தரவு குறித்து மேலும் அறிக</translation>
 <translation id="5414198321558177633">நெட்வொர்க் சுயவிவரப் பட்டியலை ரெஃப்ரெஷ் செய்கிறது. இதற்குச் சில நிமிடங்கள் ஆகலாம்.</translation>
 <translation id="5414566801737831689">பார்வையிடும் இணையதளங்களின் ஐகான்களைப் படிக்கலாம்</translation>
@@ -5515,6 +5515,7 @@
 <translation id="6129953537138746214">இடைவெளி</translation>
 <translation id="6130692320435119637">வைஃபையைச் சேர்</translation>
 <translation id="6130887916931372608">கீபோர்டு பட்டன்</translation>
+<translation id="6132714462430777655">பள்ளிகளுக்குப் பதிவுசெய்தலைத் தவிர்க்கவா?</translation>
 <translation id="6135823405800500595">மொபைல் அன்லாக் செய்யப்பட்டு அருகில் இருப்பதையும் அதில் புளூடூத், வைஃபை இயக்கப்பட்டிருப்பதையும் உறுதிசெய்துகொள்ளவும்</translation>
 <translation id="6135826623269483856">உங்கள் டிஸ்ப்ளேக்கள் அனைத்திலும் சாளரங்களை நிர்வகிக்க அனுமதி இல்லாத தளங்கள்</translation>
 <translation id="6136114942382973861">பதிவிறக்கங்கள் பட்டியை மூடு</translation>
@@ -5877,7 +5878,6 @@
 <translation id="6492396476180293140">வன்பொருள் ஸ்விட்ச் மூலம் உட்புறக் கேமரா முடக்கப்பட்டுள்ளது</translation>
 <translation id="6494327278868541139">மேம்பட்ட பாதுகாப்பு விவரங்களைக் காட்டு</translation>
 <translation id="6494445798847293442">சான்றளிக்கும் அங்கீகாரம் அல்ல</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{இந்தத் தரவு பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளது}=1{இந்த ஃபைல் பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளது}other{இந்த ஃபைல்கள் பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளன}}</translation>
 <translation id="6497548114956205206">எனர்ஜி சேமிப்புப் பயன்முறை குறித்து மேலும் அறிந்துகொள்ளலாம்</translation>
 <translation id="6497784818439587832">திரையில் உள்ளவற்றைச் சிறிதாக்க/பெரிதாக்க காட்சி அளவை மாற்றலாம்</translation>
 <translation id="6497789971060331894">மவுஸ் பின்னோக்கிய ஸ்க்ரோலிங்</translation>
@@ -6022,7 +6022,6 @@
 <translation id="6621391692573306628">இந்தப் பக்கத்தை மற்றொரு சாதனத்திற்கு அனுப்ப, இரண்டு சாதனங்களிலும் Chromeமில் உள்நுழைய வேண்டும்</translation>
 <translation id="6622980291894852883">படங்களைத் தடுப்பதைத் தொடர்க</translation>
 <translation id="6624036901798307345">டேப்லெட் பயன்முறையில், ஒவ்வொரு பக்கத்தின் சிறுபடத்தையும் காட்டும் புதிய உலாவிப்பக்கப் பட்டியைத் திறக்க, பக்க எண்ணிக்கைக் கருவிப்பட்டி பட்டனைத் தட்டவும்.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> பாதுகாக்கவேண்டிய/ஆபத்தான உள்ளடக்கத்தைக் கொண்டுள்ளது. சரிசெய்யுமாறு அதன் உரிமையாளரிடம் கேட்கவும்.</translation>
 <translation id="6624687053722465643">ஸ்வீட்னஸ்</translation>
 <translation id="6628328486509726751">பதிவேற்றப்பட்ட நேரம் <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">வலுவான பாதுகாப்பு</translation>
@@ -6732,6 +6731,7 @@
 <translation id="7310598146671372464">உள்நுழைய முடியவில்லை. குறிப்பிடப்பட்டுள்ள Kerberos என்க்ரிப்ஷன் வகைகளைச் சேவையகம் ஆதரிக்கவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="7311089766378749632"><ph name="SITE_NAME" /> தளத்தில் உள்ளவற்றைப் படிக்கவும் மாற்றவும் அனுமதி கோருகிறது</translation>
 <translation id="7312210124139670355">நிர்வாகி உங்கள் eSIMமை மீட்டமைக்கிறார். இதற்குச் சில நிமிடங்கள் ஆகலாம்.</translation>
+<translation id="7317831949569936035">பள்ளிகளுக்குப் பதிவுசெய்தல்</translation>
 <translation id="7320213904474460808">இயல்புநிலை நெட்வொர்க்காக அமை</translation>
 <translation id="7321545336522791733">சேவையகத்தைத் தொடர்புகொள்ள  முடியவில்லை</translation>
 <translation id="7323315405936922211">கர்சர் பரப்பளவின் அளவு</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 3be4c17..7dcf992 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -917,7 +917,6 @@
 <translation id="1819721979226826163">యాప్ నోటిఫికేషన్‌లు &gt; Google Play సేవలను నొక్కండి.</translation>
 <translation id="1820028137326691631">నిర్వాహకులు అందించిన పాస్‌వర్డ్‌ని నమోదు చేయండి</translation>
 <translation id="1822140782238030981">ఇప్పటికే Chrome వినియోగదారా? సైన్ ఇన్ చేయండి</translation>
-<translation id="1823098433522728610">ఈ డాక్యుమెంట్‌లో సున్నితమైన వ్యక్తిగత కంటెంట్ ఉంది.</translation>
 <translation id="18245044880483936">బ్యాకప్ డేటా మీ చిన్నారి డిస్క్ స్టోరేజ్ కోటాలో లెక్కించబడదు.</translation>
 <translation id="1825565032302550710">పోర్ట్ 1024, 65535 మధ్య ఉండాలి</translation>
 <translation id="182577151972096764">ఇటీవల చూసిన రెసిపీలు</translation>
@@ -1954,7 +1953,6 @@
 <translation id="2743301740238894839">ప్రారంభించండి</translation>
 <translation id="2743387203779672305">క్లిప్‌బోర్డ్‌కు కాపీ చేయి</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">ఈ ఫైల్, గోప్యమైన లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉంది. పరిష్కరించమని ఫైల్ యజమానిని అడగండి.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" />కు సైన్ ఇన్ చేయండి</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">స్పెల్ చెక్‌తో పాటు వ్యాకరణాన్ని కూడా చెక్ చేయండి</translation>
@@ -2549,7 +2547,6 @@
 <translation id="3317459757438853210">రెండు-వైపులా ఉండేది</translation>
 <translation id="3317678681329786349">కెమెరా మరియు మైక్రోఫోన్ బ్లాక్ చేయబడ్డాయి</translation>
 <translation id="3320630259304269485">సురక్షిత బ్రౌజింగ్ (హానికరమైన సైట్‌ల నుండి రక్షణ), ఇతర భద్రతా సెట్టింగ్‌లు</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ఈ డేటా, గోప్యమైన లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉంది. ఈ కంటెంట్‌ను తీసివేసి, మళ్లీ ట్రై చేయండి.}=1{ఈ ఫైల్, గోప్యమైన లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉంది. ఈ కంటెంట్‌ను తీసివేసి, మళ్లీ ట్రై చేయండి.}other{ఈ ఫైల్స్, గోప్యమైన లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉన్నాయి. ఈ కంటెంట్‌ను తీసివేసి, మళ్లీ ట్రై చేయండి.}}</translation>
 <translation id="3323521181261657960">బోనస్! మీరు మరింత స్క్రీన్ వినియోగ సమయం పొందారు</translation>
 <translation id="3323577066981719144">మీరు ఇక్కడ చేసే మార్పులు Chrome బ్రౌజర్‌కు మాత్రమే వర్తిస్తాయి. మీ Lacros Chrome బ్రౌజర్ సెట్టింగ్‌లలో మార్పులు చేయడానికి, Lacros Chrome బ్రౌజర్‌ను తెరిచి, సెట్టింగ్‌లకు వెళ్లండి.</translation>
 <translation id="3325804108816646710">అందుబాటులో ఉన్న ప్రొఫైళ్ల కోసం వెతుకుతోంది...</translation>
@@ -2683,7 +2680,6 @@
 <translation id="3445925074670675829">USB-C పరికరం</translation>
 <translation id="3446274660183028131">Windowsను ఇన్‌స్టాల్ చేయడానికి, దయచేసి parallels desktopను ప్రారంభించండి.</translation>
 <translation id="344630545793878684">అనేక వెబ్‌సైట్‌ల్లోని మీ డేటాను చదవండి</translation>
-<translation id="3446650212859500694">ఈ ఫైల్‌లో గోప్యమైన కంటెంట్ ఉంది</translation>
 <translation id="3447644283769633681">అన్ని మూడవ-పార్టీ కుక్కీలను బ్లాక్ చేయండి</translation>
 <translation id="3448492834076427715">ఖాతాను అప్‌డేట్ చేయి</translation>
 <translation id="3449393517661170867">ట్యాబ్‌లు ఉన్న కొత్త విండో</translation>
@@ -3916,7 +3912,6 @@
 <translation id="4602466770786743961">మీ కెమెరా మరియు మైక్రోఫోన్‌ను యాక్సెస్ చేయడానికి <ph name="HOST" />ను ఎల్లప్పుడూ అనుమతించండి</translation>
 <translation id="4606551464649945562">మీ పరిసరాల 3D మ్యాప్‌ను రూపొందించడానికి లేదా కెమెరా పొజిషన్‌ను ట్రాక్ చేయడానికి సైట్‌లను అనుమతించవద్దు</translation>
 <translation id="4608500690299898628">&amp;కనుగొను...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" />లో గోప్యమైన కంటెంట్ ఉంది</translation>
 <translation id="4609987916561367134">JavaScriptను ఉపయోగించడానికి అనుమతించబడింది</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" />‌కు ఎర్రర్ ఎదురైంది</translation>
 <translation id="4610637590575890427">మీరు <ph name="SITE" />కు వెళ్లాలనుకుంటున్నారా?</translation>
@@ -5889,7 +5884,6 @@
 <translation id="6492396476180293140">హార్డ్‌వేర్ స్విచ్ ద్వారా అంతర్గత కెమెరా డీయాక్టివేట్ చేయబడింది</translation>
 <translation id="6494327278868541139">మెరుగైన భద్రతా వివరాలను చూపించు</translation>
 <translation id="6494445798847293442">ప్రమాణపత్రాలను మంజూరు చేసే అధికార సంస్థ కాదు</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ఈ డేటా, గోప్యమైన లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉంది}=1{ఈ ఫైల్, గోప్యమైన లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉంది}other{ఈ ఫైల్స్, గోప్యమైన లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉన్నాయి}}</translation>
 <translation id="6497548114956205206">ఎనర్జీ సేవర్ గురించి మరింత తెలుసుకోండి</translation>
 <translation id="6497784818439587832">మీ స్క్రీన్‌పై ఉన్న ఐటెమ్‌లను పెద్దగా లేదా చిన్నగా చూపడానికి డిస్‌ప్లే సైజ్‌ను మార్చండి</translation>
 <translation id="6497789971060331894">మౌస్ రివర్స్ స్క్రోలింగ్</translation>
@@ -6035,7 +6029,6 @@
 <translation id="6621391692573306628">ఈ ట్యాబ్‌ను మరొక పరికరానికి పంపడానికి, రెండు పరికరాల్లోనూ Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="6622980291894852883">చిత్రాలను నిరోధించడాన్ని కొనసాగించు</translation>
 <translation id="6624036901798307345">టాబ్లెట్ మోడ్‌లో, ప్రతి ట్యాబ్ యొక్క థంబ్‌నెయిల్స్‌ను చూపే కొత్త ట్యాబ్‌ల బార్‌ను తెరవడానికి ట్యాబ్ కౌంటర్ టూల్‌బార్ బటన్‌పై నొక్కండి.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" />, గోప్యమైన, లేదా హానికరమైన కంటెంట్‌ను కలిగి ఉంది. పరిష్కరించమని ఫైల్ యజమానిని అడగండి.</translation>
 <translation id="6624687053722465643">తియ్యదనం</translation>
 <translation id="6628328486509726751">అప్‌లోడ్ చేయబడినది <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">బలమైన సెక్యూరిటీ</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 460fa01..d7af5e0 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -407,6 +407,7 @@
 <translation id="1388253969141979417">ได้รับอนุญาตให้ใช้ไมโครโฟน</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> จะรีสตาร์ทเมื่อการอัปเดตเสร็จสมบูรณ์</translation>
 <translation id="1389601498324964367">พื้นที่เก็บข้อมูลที่มีการจัดการโควต้า</translation>
+<translation id="1390113502208199250">หากต้องการใช้ฟีเจอร์ของ Chrome Education Upgrade คุณจะต้องรีเซ็ตอุปกรณ์นี้เป็นค่าเริ่มต้น</translation>
 <translation id="139013308650923562">อนุญาตให้ใช้แบบอักษรที่ติดตั้งอยู่ในอุปกรณ์</translation>
 <translation id="1390548061267426325">เปิดเป็นแท็บทั่วไป</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> ไม่ได้รับอนุญาตให้สั่งพิมพ์ไปยัง <ph name="PRINTER_NAME" /> โปรดติดต่อผู้ดูแลระบบ</translation>
@@ -477,6 +478,7 @@
 <translation id="1436784010935106834">ลบออกแล้ว</translation>
 <translation id="1437986450143295708">อธิบายปัญหาอย่างละเอียด</translation>
 <translation id="1439671507542716852">การสนับสนุนระยะยาว</translation>
+<translation id="1440090277117135316">ลงทะเบียนโรงเรียนเรียบร้อยแล้ว</translation>
 <translation id="144283815522798837">เลือกไว้ <ph name="NUMBER_OF_ITEMS_SELECTED" /> รายการ</translation>
 <translation id="1442851588227551435">ตั้งค่าตั๋ว Kerberos ที่ใช้งานอยู่</translation>
 <translation id="1444628761356461360"><ph name="OWNER_EMAIL" /> ซึ่งเป็นเจ้าของอุปกรณ์เป็นผู้จัดการการตั้งค่านี้</translation>
@@ -907,7 +909,6 @@
 <translation id="1819721979226826163">แตะ "การแจ้งเตือนของแอป" &gt; บริการ Google Play</translation>
 <translation id="1820028137326691631">ป้อนรหัสผ่านที่ผู้ดูแลระบบให้</translation>
 <translation id="1822140782238030981">หากเป็นผู้ใช้ Chrome แล้วก็ลงชื่อเข้าใช้เลย</translation>
-<translation id="1823098433522728610">เอกสารนี้มีเนื้อหาที่ละเอียดอ่อน</translation>
 <translation id="18245044880483936">ข้อมูลสำรองจะไม่นับรวมในโควต้าพื้นที่เก็บข้อมูล Google ไดรฟ์ของบุตรหลาน</translation>
 <translation id="1825565032302550710">หมายเลขพอร์ตต้องอยู่ระหว่าง 1024 ถึง 65535</translation>
 <translation id="182577151972096764">สูตรอาหารที่ดูล่าสุด</translation>
@@ -1941,7 +1942,6 @@
 <translation id="2743387203779672305">คัดลอกไว้ที่คลิปบอร์ด</translation>
 <translation id="274362947316498129">มีแอปพยายามเข้าถึง "<ph name="DEVICE_NAME" />" ปิดสวิตช์ความเป็นส่วนตัวของ "<ph name="DEVICE_NAME" />" เพื่ออนุญาตการเข้าถึง</translation>
 <translation id="2745080116229976798">ตัวย่อยที่เหมาะสมของ Microsoft</translation>
-<translation id="2747266560080989517">ไฟล์นี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย โปรดขอให้เจ้าของไฟล์แก้ไข</translation>
 <translation id="2749756011735116528">ลงชื่อเข้าใช้ <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">ตรวจสอบไวยากรณ์และตัวสะกด</translation>
@@ -2397,6 +2397,7 @@
 <translation id="3170072451822350649">คุณสามารถข้ามการลงชื่อเข้าใช้และ<ph name="LINK_START" />เรียกดูในฐานะผู้เยี่ยมชม<ph name="LINK_END" />ได้ด้วย</translation>
 <translation id="31774765611822736">แท็บใหม่อยู่ด้านซ้าย</translation>
 <translation id="3177909033752230686">ภาษาหน้าเว็บ:</translation>
+<translation id="3177914167275935955">อุปกรณ์ของคุณมี Chrome Education Upgrade แต่ชื่อผู้ใช้ไม่ได้เชื่อมโยงกับบัญชี Google for Education โปรดสร้างบัญชี Google for Education โดยไปที่ g.co/workspace/edusignup บนอุปกรณ์สำรอง</translation>
 <translation id="3179982752812949580">แบบอักษรของข้อความ</translation>
 <translation id="3181954750937456830">Google Safe Browsing (ปกป้องคุณและอุปกรณ์จากเว็บไซต์ที่เป็นอันตราย)</translation>
 <translation id="3182749001423093222">ตรวจตัวสะกด</translation>
@@ -2536,7 +2537,6 @@
 <translation id="3317459757438853210">สองด้าน</translation>
 <translation id="3317678681329786349">บล็อกกล้องถ่ายรูปและไมโครโฟน</translation>
 <translation id="3320630259304269485">Google Safe Browsing (การปกป้องจากเว็บไซต์ที่เป็นอันตราย) และการตั้งค่าด้านความปลอดภัยอื่นๆ</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{ข้อมูลนี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย นำเนื้อหานี้ออกแล้วลองอีกครั้ง}=1{ไฟล์นี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย นำเนื้อหานี้ออกแล้วลองอีกครั้ง}other{ไฟล์เหล่านี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย นำเนื้อหานี้ออกแล้วลองอีกครั้ง}}</translation>
 <translation id="3323521181261657960">พิเศษสุด คุณได้เวลาอยู่หน้าจอเพิ่มขึ้น</translation>
 <translation id="3323577066981719144">การเปลี่ยนแปลงที่คุณทำที่นี่จะมีผลกับเบราว์เซอร์ Chrome เท่านั้น หากต้องการเปลี่ยนแปลงการตั้งค่าเบราว์เซอร์ Lacros Chrome ให้เปิดเบราว์เซอร์ Lacros Chrome แล้วไปที่การตั้งค่า</translation>
 <translation id="3325804108816646710">กำลังหาโปรไฟล์ที่พร้อมใช้งาน...</translation>
@@ -2670,7 +2670,6 @@
 <translation id="3445925074670675829">อุปกรณ์ USB-C</translation>
 <translation id="3446274660183028131">โปรดเปิด Parallels Desktop เพื่อติดตั้ง Windows</translation>
 <translation id="344630545793878684">อ่านข้อมูลบนเว็บไซต์จำนวนมาก</translation>
-<translation id="3446650212859500694">ไฟล์นี้มีเนื้อหาที่ละเอียดอ่อน</translation>
 <translation id="3447644283769633681">ปิดกั้นคุกกี้ของบุคคลที่สามทั้งหมด</translation>
 <translation id="3448492834076427715">อัปเดตบัญชี</translation>
 <translation id="3449393517661170867">หน้าต่างแท็บใหม่</translation>
@@ -3904,7 +3903,6 @@
 <translation id="4602466770786743961">อนุญาตให้ <ph name="HOST" /> เข้าถึงกล้องและไมโครโฟนของคุณเสมอ</translation>
 <translation id="4606551464649945562">ไม่อนุญาตให้เว็บไซต์สร้างแผนที่ 3 มิติของสิ่งที่อยู่รอบตัวคุณหรือติดตามตำแหน่งของกล้อง</translation>
 <translation id="4608500690299898628">&amp;ค้นหา...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> มีเนื้อหาที่ละเอียดอ่อน</translation>
 <translation id="4609987916561367134">ได้รับอนุญาตให้ใช้ JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> พบข้อผิดพลาด</translation>
 <translation id="4610637590575890427">คุณหมายความว่าต้องการไปที่ <ph name="SITE" /> หรือไม่</translation>
@@ -4069,6 +4067,7 @@
 <translation id="4762489666082647806">สีของตัวชี้</translation>
 <translation id="4762718786438001384">พื้นที่ดิสก์ของอุปกรณ์ใกล้จะเต็มแล้ว</translation>
 <translation id="4763408175235639573">มีการวางคุกกี้ต่อไปนี้เมื่อคุณดูหน้าเว็บนี้</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> ไม่ใช่บัญชี Google for Education ที่ถูกต้อง โปรดติดต่อผู้ดูแลระบบ หากคุณเป็นผู้ดูแลระบบ ให้ตั้งค่าองค์กรโดยไปที่ g.co/workspace/edusignup</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{อุปกรณ์นี้จะได้รับการบันทึกไว้เป็นเวลา 1 เดือนและคุณสามารถเชื่อมต่อโดยไม่ใช้รหัสได้ในครั้งถัดไป ผู้ดูแลระบบเป็นคนตั้งค่านี้}other{อุปกรณ์นี้จะได้รับการบันทึกไว้เป็นเวลา {MONTHS} เดือนและคุณสามารถเชื่อมต่อโดยไม่ใช้รหัสได้ในครั้งถัดไป ผู้ดูแลระบบเป็นคนตั้งค่านี้}}</translation>
 <translation id="4765582662863429759">อนุญาตให้ Android Messages นำส่งข้อความจากโทรศัพท์ไปยัง Chromebook ของคุณ</translation>
 <translation id="4766598565665644999">ส่วนขยายทั้งหมดอ่านและเปลี่ยนแปลง <ph name="HOST" /> ได้</translation>
@@ -4730,6 +4729,7 @@
 <translation id="5407167491482639988">ไม่สามารถเข้าใจได้</translation>
 <translation id="5408750356094797285">ซูม: <ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">จากบัญชี Google</translation>
+<translation id="5411022484772257615">ลงทะเบียนโรงเรียนไม่สำเร็จ</translation>
 <translation id="5413640305322530561">ดูรายละเอียดเกี่ยวกับข้อมูลการวินิจฉัยและการใช้งาน</translation>
 <translation id="5414198321558177633">กำลังรีเฟรชรายการโปรไฟล์ การดำเนินการนี้อาจใช้เวลาสักครู่</translation>
 <translation id="5414566801737831689">อ่านไอคอนของเว็บไซต์ที่คุณเข้าชม</translation>
@@ -5512,6 +5512,7 @@
 <translation id="6129953537138746214">ช่องว่าง</translation>
 <translation id="6130692320435119637">เพิ่ม Wi-Fi</translation>
 <translation id="6130887916931372608">ปุ่มบนแป้นพิมพ์</translation>
+<translation id="6132714462430777655">ข้ามการลงทะเบียนโรงเรียนไหม</translation>
 <translation id="6135823405800500595">ตรวจสอบว่าโทรศัพท์อยู่ใกล้ๆ ปลดล็อกแล้ว และเปิดบลูทูธกับ Wi-Fi ไว้</translation>
 <translation id="6135826623269483856">ไม่อนุญาตให้จัดการหน้าต่างบนจอแสดงผลทั้งหมด</translation>
 <translation id="6136114942382973861">ปิดแถบดาวน์โหลด</translation>
@@ -5876,7 +5877,6 @@
 <translation id="6492396476180293140">กล้องภายในถูกปิดใช้งานโดยสวิตช์ฮาร์ดแวร์</translation>
 <translation id="6494327278868541139">แสดงรายละเอียดการปกป้องที่ปรับปรุงแล้ว</translation>
 <translation id="6494445798847293442">ไม่ใช่ผู้ออกใบรับรอง</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{ข้อมูลนี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย}=1{ไฟล์นี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย}other{ไฟล์เหล่านี้มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย}}</translation>
 <translation id="6497548114956205206">ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมดประหยัดพลังงาน</translation>
 <translation id="6497784818439587832">เปลี่ยนขนาดการแสดงผลเพื่อทำให้รายการในหน้าจอมีขนาดเล็กลงหรือใหญ่ขึ้น</translation>
 <translation id="6497789971060331894">การเลื่อนเมาส์แบบย้อนกลับ</translation>
@@ -6022,7 +6022,6 @@
 <translation id="6621391692573306628">หากต้องการส่งแท็บนี้ไปยังอุปกรณ์อื่น ให้ลงชื่อเข้าใช้ Chrome ในอุปกรณ์ทั้ง 2 เครื่อง</translation>
 <translation id="6622980291894852883">บล็อกการแสดงภาพ</translation>
 <translation id="6624036901798307345">ในโหมดแท็บเล็ต ให้แตะปุ่มแถบเครื่องมือตัวนับแท็บเพื่อเปิดแนวแท็บใหม่ซึ่งแสดงภาพขนาดย่อของแต่ละแท็บ</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> มีเนื้อหาที่ละเอียดอ่อนหรือเป็นอันตราย โปรดขอให้เจ้าของไฟล์แก้ไข</translation>
 <translation id="6624687053722465643">สวีทเนส</translation>
 <translation id="6628328486509726751">อัปโหลด <ph name="WEBRTC_LOG_UPLOAD_TIME" /> แล้ว</translation>
 <translation id="6630117778953264026">รักษาความปลอดภัยได้รัดกุมยิ่งขึ้น</translation>
@@ -6734,6 +6733,7 @@
 <translation id="7310598146671372464">เข้าสู่ระบบไม่สำเร็จ เซิร์ฟเวอร์ไม่รองรับประเภทการเข้ารหัส Kerberos ที่ระบุ โปรดติดต่อผู้ดูแลระบบ</translation>
 <translation id="7311089766378749632">กำลังขออ่านและเปลี่ยนแปลง <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">ผู้ดูแลระบบกำลังรีเซ็ต eSIM การดำเนินการนี้อาจใช้เวลาสักครู่</translation>
+<translation id="7317831949569936035">การลงทะเบียนโรงเรียน</translation>
 <translation id="7320213904474460808">เครือข่ายเริ่มต้น</translation>
 <translation id="7321545336522791733">ไม่สามารถเข้าถึงเซิร์ฟเวอร์</translation>
 <translation id="7323315405936922211">ขนาดพื้นที่เคอร์เซอร์</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index 9f84467..82c3055 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -907,7 +907,6 @@
 <translation id="1819721979226826163">Uygulama bildirimleri &gt; Google Play hizmetlerine dokunun.</translation>
 <translation id="1820028137326691631">Yönetici tarafından sağlanan şifreyi girin</translation>
 <translation id="1822140782238030981">Zaten Chrome kullanıcısı mısınız? Oturum açın</translation>
-<translation id="1823098433522728610">Bu doküman hassas içeriğe sahip.</translation>
 <translation id="18245044880483936">Yedekleme verileri, çocuğunuzun Drive depolama alanı kotasından düşülmez.</translation>
 <translation id="1825565032302550710">Bağlantı noktası 1024 ile 65535 arasında olmalıdır.</translation>
 <translation id="182577151972096764">son görüntülenen tarifler</translation>
@@ -1938,7 +1937,6 @@
 <translation id="2743301740238894839">Başlat</translation>
 <translation id="2743387203779672305">Panoya kopyala</translation>
 <translation id="2745080116229976798">Microsoft Nitelikli Yardımlaşma</translation>
-<translation id="2747266560080989517">Bu dosya, hassas veya tehlikeli içeriğe sahip. Dosyanın sahibinden düzeltmesini isteyin.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> uygulamasında oturum aç...</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Dilbilgisini Yazım ile Denetle</translation>
@@ -2533,7 +2531,6 @@
 <translation id="3317459757438853210">İki taraflı</translation>
 <translation id="3317678681329786349">Kamera ve mikrofon engellendi</translation>
 <translation id="3320630259304269485">Güvenli Tarama (tehlikeli sitelere karşı koruma) ve diğer güvenlik ayarları</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Bu veriler, hassas veya tehlikeli içeriğe sahip. Bu içeriği kaldırıp tekrar deneyin.}=1{Bu dosya, hassas veya tehlikeli içeriğe sahip. Bu içeriği kaldırıp tekrar deneyin.}other{Bu dosyalar, hassas veya tehlikeli içeriğe sahip. Bu içeriği kaldırıp tekrar deneyin.}}</translation>
 <translation id="3323521181261657960">Bonus! Ekran süreniz arttı</translation>
 <translation id="3323577066981719144">Burada yaptığınız değişiklikler yalnızca Chrome Tarayıcı'ya uygulanır. Lacros Chrome Tarayıcı ayarlarınızda değişiklik yapmak için Lacros Chrome Tarayıcı'yı açıp ayarlara gidin.</translation>
 <translation id="3325804108816646710">Mevcut profiller aranıyor...</translation>
@@ -2667,7 +2664,6 @@
 <translation id="3445925074670675829">USB-C cihaz</translation>
 <translation id="3446274660183028131">Windows'u yüklemek için Parallels Desktop'u başlatın.</translation>
 <translation id="344630545793878684">Birden fazla web sitesindeki verilerinize erişme</translation>
-<translation id="3446650212859500694">Bu dosya hassas içeriğe sahip</translation>
 <translation id="3447644283769633681">Tüm üçüncü taraf çerezlerini engelle</translation>
 <translation id="3448492834076427715">Hesabı güncelle</translation>
 <translation id="3449393517661170867">Sekmeli yeni pencere</translation>
@@ -3899,7 +3895,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> sitesinin kamerama ve mikrofonuma erişmesine her zaman izin ver</translation>
 <translation id="4606551464649945562">Sitelerin çevremin 3D haritasını oluşturmasına veya kamera konumunu takip etmesine izin verme</translation>
 <translation id="4608500690299898628">&amp;Bul...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> hassas içeriğe sahip</translation>
 <translation id="4609987916561367134">JavaScript kullanmasına izin verilen siteler</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> eklentisi bir hatayla karşılaştı</translation>
 <translation id="4610637590575890427"><ph name="SITE" /> sitesine mi gitmek istediniz?</translation>
@@ -5873,7 +5868,6 @@
 <translation id="6492396476180293140">Dahili kamera, donanım anahtarı tarafından devre dışı bırakıldı</translation>
 <translation id="6494327278868541139">Gelişmiş koruma ayrıntılarını göster</translation>
 <translation id="6494445798847293442">Sertifika Yetkilisi değil</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Bu veriler, hassas veya tehlikeli içeriğe sahip}=1{Bu dosya, hassas veya tehlikeli içeriğe sahip}other{Bu dosyalar, hassas veya tehlikeli içeriğe sahip}}</translation>
 <translation id="6497548114956205206">Enerji tasarrufu hakkında daha fazla bilgi</translation>
 <translation id="6497784818439587832">Ekranınızdaki öğeleri küçültmek veya büyütmek için ekran boyutunu değiştirin</translation>
 <translation id="6497789971060331894">Fare ters kaydırma</translation>
@@ -6019,7 +6013,6 @@
 <translation id="6621391692573306628">Bu sekmeyi başka bir cihaza göndermek için her iki cihazda da Chrome'da oturum açın.</translation>
 <translation id="6622980291894852883">Görselleri engellemeye devam et</translation>
 <translation id="6624036901798307345">Tablet modunda, her sekmenin küçük resimlerini gösteren yeni sekme şeridini açmak için sekme sayacı araç çubuğu düğmesine dokunun.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> adlı dosya, hassas veya tehlikeli içeriğe sahip. Dosyanın sahibinden düzeltmesini isteyin.</translation>
 <translation id="6624687053722465643">Tatlı</translation>
 <translation id="6628328486509726751">Yüklenme zamanı: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Daha güçlü güvenlik</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 7aecda2..89aba7f 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -921,7 +921,6 @@
 <translation id="1819721979226826163">Торкніться меню "Сповіщення додатків" &gt; "Сервіси Google Play".</translation>
 <translation id="1820028137326691631">Введіть наданий адміністратором пароль</translation>
 <translation id="1822140782238030981">Уже користуєтеся Chrome? Увійдіть в обліковий запис</translation>
-<translation id="1823098433522728610">Цей документ містить конфіденційний контент.</translation>
 <translation id="18245044880483936">Резервні копії даних не займають простір на Диску вашої дитини.</translation>
 <translation id="1825565032302550710">Укажіть порт зі значенням від 1024 до 65535</translation>
 <translation id="182577151972096764">нещодавно переглянуті рецепти</translation>
@@ -1958,7 +1957,6 @@
 <translation id="2743301740238894839">Почати</translation>
 <translation id="2743387203779672305">Копіювати в буфер</translation>
 <translation id="2745080116229976798">Посилене підпорядкування Microsoft</translation>
-<translation id="2747266560080989517">Цей файл містить конфіденційний або небезпечний контент. Попросіть його власника вирішити цю проблему.</translation>
 <translation id="2749756011735116528">Увійти в <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Перевірити граматику та правопис</translation>
@@ -2553,7 +2551,6 @@
 <translation id="3317459757438853210">Двосторонній</translation>
 <translation id="3317678681329786349">Заборонено використовувати камеру та мікрофон</translation>
 <translation id="3320630259304269485">Безпечний перегляд (захист від небезпечних сайтів) та інші налаштування безпеки</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Ці дані містять конфіденційний або небезпечний контент. Видаліть його та повторіть спробу.}=1{Цей файл містить конфіденційний або небезпечний контент. Видаліть такий контент і повторіть спробу.}one{Ці файли містять конфіденційний або небезпечний контент. Видаліть його та повторіть спробу.}few{Ці файли містять конфіденційний або небезпечний контент. Видаліть його та повторіть спробу.}many{Ці файли містять конфіденційний або небезпечний контент. Видаліть його та повторіть спробу.}other{Ці файли містять конфіденційний або небезпечний контент. Видаліть його та повторіть спробу.}}</translation>
 <translation id="3323521181261657960">Бонус! Подовжено час використання пристрою</translation>
 <translation id="3323577066981719144">Внесені сюди зміни застосуються лише до веб-переглядача Chrome. Щоб змінити параметри веб-переглядача Chrome Lacros, відкрийте його та перейдіть у налаштування.</translation>
 <translation id="3325804108816646710">Пошук доступних профілів…</translation>
@@ -2687,7 +2684,6 @@
 <translation id="3445925074670675829">Пристрій із портом USB типу C</translation>
 <translation id="3446274660183028131">Щоб установити Windows, запустіть додаток Parallels Desktop.</translation>
 <translation id="344630545793878684">Переглядати ваші дані на декількох веб-сайтах</translation>
-<translation id="3446650212859500694">Цей файл містить конфіденційний контент</translation>
 <translation id="3447644283769633681">Заблокувати всі файли cookie третіх сторін</translation>
 <translation id="3448492834076427715">Оновити обліковий запис</translation>
 <translation id="3449393517661170867">Нове вікно з вкладками</translation>
@@ -3920,7 +3916,6 @@
 <translation id="4602466770786743961">Завжди дозволяти хосту <ph name="HOST" /> доступ до ваших камери та мікрофона</translation>
 <translation id="4606551464649945562">Заборонити сайтам створювати 3D-карту вашого оточення або відстежувати положення камери</translation>
 <translation id="4608500690299898628">&amp;Знайти...</translation>
-<translation id="4608703838363792434">Файл "<ph name="FILE_NAME" />" містить конфіденційний контент</translation>
 <translation id="4609987916561367134">Дозволено використовувати JavaScript</translation>
 <translation id="4610162781778310380">У плагіні <ph name="PLUGIN_NAME" /> сталася помилка</translation>
 <translation id="4610637590575890427">Ви мали на увазі перейти до <ph name="SITE" />?</translation>
@@ -5890,7 +5885,6 @@
 <translation id="6492396476180293140">Перемикач апаратного забезпечення для внутрішньої камери переведено в положення "Вимкнено"</translation>
 <translation id="6494327278868541139">Показати детальний опис покращеного захисту</translation>
 <translation id="6494445798847293442">Не є Центром сертифікації</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Ці дані містять конфіденційний або небезпечний контент}=1{Цей файл містить конфіденційний або небезпечний контент}one{Ці файли містять конфіденційний або небезпечний контент}few{Ці файли містять конфіденційний або небезпечний контент}many{Ці файли містять конфіденційний або небезпечний контент}other{Ці файли містять конфіденційний або небезпечний контент}}</translation>
 <translation id="6497548114956205206">Докладніше про режим енергозбереження</translation>
 <translation id="6497784818439587832">Зменшуйте або збільшуйте розмір елементів на екрані</translation>
 <translation id="6497789971060331894">Зворотне прокручування мишею</translation>
@@ -6042,7 +6036,6 @@
 <translation id="6621391692573306628">Щоб надіслати цю вкладку на інший пристрій, увійдіть у Chrome на обох пристроях</translation>
 <translation id="6622980291894852883">Продовжити блокування зображень</translation>
 <translation id="6624036901798307345">Щоб відкрити нову панель зі зменшеним зображенням кожної вкладки, натисніть кнопку з кількістю вкладок на панелі інструментів у режимі планшета.</translation>
-<translation id="6624535038674360844">Файл "<ph name="FILE_NAME" />" містить конфіденційний або небезпечний контент. Попросіть його власника вирішити цю проблему.</translation>
 <translation id="6624687053722465643">Смакота</translation>
 <translation id="6628328486509726751">Завантажено: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Надійніший захист</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 41d5eaa..010162a3 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -237,6 +237,7 @@
 <translation id="121384500095351701">اس فائل کو محفوظ طریقے سے ڈاؤن لوڈ نہیں کیا جا سکتا ہے</translation>
 <translation id="1215411991991485844">نئی پس منظر ایپ شامل کی گئی</translation>
 <translation id="1216542092748365687">فنگر پرنٹ ہٹائیں</translation>
+<translation id="1216891999012841486">اپ ڈیٹ کی خرابیوں کو درست کرنے کے بارے میں مزید جانیں</translation>
 <translation id="1217114730239853757">‏کیا آپ ChromeOS Flex کے لئے پہلے سے موجود اسکرین ریڈر، ChromeVox کو فعال کرنا چاہتے ہیں؟ اگر ایسا ہے تو اسپیس بار کو دبائیں۔</translation>
 <translation id="1217483152325416304">آپ کا مقامی ڈیٹا جلد ہی حذف ہو جائے گا</translation>
 <translation id="1217668622537098248">کارروائی کے بعد بائیں کلک پر واپس جائیں</translation>
@@ -909,7 +910,6 @@
 <translation id="1819721979226826163">‏ایپ کی اطلاعات &gt; Google Play سروسز پر تھپتھپائيں۔</translation>
 <translation id="1820028137326691631">منتظم کی طرف سے فراہم کردہ پاس ورڈ درج کریں</translation>
 <translation id="1822140782238030981">‏پہلے سے ہی Chrome صارف ہیں؟ سائن ان کریں</translation>
-<translation id="1823098433522728610">اس دستاویز میں حساس مواد ہے۔</translation>
 <translation id="18245044880483936">‏بیک اپ ڈیٹا کا شمار آپ کے بچے کے Drive اسٹوریج کوٹہ میں نہیں کیا جائے گا۔</translation>
 <translation id="1825565032302550710">پورٹ 1024 اور 65535 کے درمیان ہونی چاہیے</translation>
 <translation id="182577151972096764">حال ہی میں دیکھی گئی ترکیبیں</translation>
@@ -1944,7 +1944,6 @@
 <translation id="2743301740238894839">شروع کریں</translation>
 <translation id="2743387203779672305">کلپ بورڈ پر کاپی کریں</translation>
 <translation id="2745080116229976798">‏Microsoft کوالیفائڈ سب آرڈینیشن</translation>
-<translation id="2747266560080989517">اس فائل میں حساس یا خطرناک مواد ہے۔ اس کے مالک سے درست کرنے کو کہیں۔</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> میں سائن ان کریں</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">ہجے کے ساتھ گرامر چیک کریں</translation>
@@ -2540,7 +2539,6 @@
 <translation id="3317459757438853210">دو طرفہ</translation>
 <translation id="3317678681329786349">کیمرا اور مائیکروفون مسدود ہے</translation>
 <translation id="3320630259304269485">محفوظ براؤزنگ (خطرناک سائٹس سے تحفظ) اور سیکیورٹی کی دیگر ترتیبات</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{اس ڈیٹا میں حساس یا خطرناک مواد ہے۔ اس مواد کو ہٹائیں اور دوبارہ کوشش کریں۔}=1{اس فائل میں حساس یا خطرناک مواد ہے۔ اس مواد کو ہٹائیں اور دوبارہ کوشش کریں۔}other{ان فائلز میں حساس یا خطرناک مواد ہے۔ اس مواد کو ہٹائیں اور دوبارہ کوشش کریں۔}}</translation>
 <translation id="3323521181261657960">بونس! آپ کو اسکرین کا مزید وقت ملا</translation>
 <translation id="3323577066981719144">‏آپ یہاں جو تبدیلیاں کرتے ہیں وہ صرف Chrome براؤزر پر لاگو ہوتی ہیں۔ اپنے Lacros Chrome براؤزر کی ترتیبات میں تبدیلیاں کرنے کے لیے، Lacros Chrome براؤزر کھولیں اور ترتیبات پر جائیں۔</translation>
 <translation id="3325804108816646710">دستیاب پروفائلز کو تلاش کیا جا رہا ہے...</translation>
@@ -2674,7 +2672,6 @@
 <translation id="3445925074670675829">‏USB-C آلہ</translation>
 <translation id="3446274660183028131">‏براہ کرم Windows انسٹال کرنے کیلئے Parallels ڈیسک ٹاپ شروع کریں۔</translation>
 <translation id="344630545793878684">متعدد ویب سائٹس پر اپنا ڈیٹا پڑھیں</translation>
-<translation id="3446650212859500694">اس فائل میں حساس مواد ہے</translation>
 <translation id="3447644283769633681">سبھی فریق ثالث کوکیز کو مسدود کریں</translation>
 <translation id="3448492834076427715">اکاؤنٹ اپ ڈیٹ کریں</translation>
 <translation id="3449393517661170867">نئی ٹیب والی ونڈو</translation>
@@ -3906,7 +3903,6 @@
 <translation id="4602466770786743961"><ph name="HOST" /> کو ہمیشہ اپنے کیمرے اور مائیکروفون تک رسائی حاصل کرنے کی اجازت دیں</translation>
 <translation id="4606551464649945562">‏سائٹس کو اپنے اطراف کا 3D نقشہ تخلیق یا کمرے کی پوزیشن ٹریک کرنے کی اجازت نہ دیں</translation>
 <translation id="4608500690299898628">&amp;تلاش کریں…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> میں حساس مواد ہے</translation>
 <translation id="4609987916561367134">‏JavaScript کو استعمال کرنے کی اجازت ہے</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> میں ایک خرابی پیش آ گئی ہے</translation>
 <translation id="4610637590575890427">کیا آپ کا مطلب <ph name="SITE" /> پر جانے سے ہے؟</translation>
@@ -4983,6 +4979,7 @@
 <translation id="5632059346822207074">‏اجازت کی درخواست کی گئی، جواب دینے کے ليے Ctrl + Forward دبائیں</translation>
 <translation id="5632566673632479864">آپ کا اکاؤنٹ <ph name="EMAIL" /> اب بنیادی اکاؤنٹ کے طور پر اجازت یافتہ نہیں ہے۔ چونکہ یہ اکاؤنٹ <ph name="DOMAIN" /> کے زیر انتظام ہے، لہذا آپ کے بُک مارکس، سرگزشت، پاس ورڈز اور دیگر ترتیبات کو اس آلہ سے صاف کر دیا جائے گا۔</translation>
 <translation id="5632592977009207922">ڈاؤن لوڈ ہو رہا ہے، <ph name="PERCENT_REMAINING" /> فیصد باقی ہے</translation>
+<translation id="5633149627228920745">سسٹم کی ضروریات کے بارے میں مزید جانیں</translation>
 <translation id="563371367637259496">موبائل</translation>
 <translation id="5634446357546764049">اپنے حالیہ دوروں کی یادیں اور مزید دیکھیں</translation>
 <translation id="5635312199252507107">مخصوص سائٹس پر اجازت دیں</translation>
@@ -5881,7 +5878,6 @@
 <translation id="6492396476180293140">ہارڈویئر سوئچ نے اندرونی کیمرا کو غیر فعال کر دیا</translation>
 <translation id="6494327278868541139">بہتر کردہ تحفظ کی تفصیلات دکھائیں</translation>
 <translation id="6494445798847293442">سرٹیفیکیشن ادارہ نہیں ہے</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{اس ڈیٹا میں حساس یا خطرناک مواد ہے}=1{اس فائل میں حساس یا خطرناک مواد ہے}other{ان فائلز میں حساس یا خطرناک مواد ہے}}</translation>
 <translation id="6497548114956205206">اپنے انرجی سیور کے بارے میں مزید جانیں</translation>
 <translation id="6497784818439587832">اپنی اسکرین پر موجود آئٹمز کو چھوٹا یا بڑا کرنے کے لیے ڈسپلے کا سائز تبدیل کریں</translation>
 <translation id="6497789971060331894">ماؤس کی معکوس اسکرولنگ</translation>
@@ -6027,7 +6023,6 @@
 <translation id="6621391692573306628">‏اس ٹیب کو کسی اور آلے میں بھیجنے کے لیے دونوں آلات پر Chrome میں سائن ان کریں</translation>
 <translation id="6622980291894852883">تصاویر کو مسدود کرنا جاری رکھیں</translation>
 <translation id="6624036901798307345">ٹیبلیٹ موڈ میں، ٹیب کاؤنٹر ٹول بار کے بٹن پر تھپتھپائیں تاکہ نئی ٹیب کی اسٹرپ کھل سکے جو ہر ٹیب کے تھمب نیلز دکھاتی ہے۔</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> میں حساس یا خطرناک مواد ہے۔ اس کے مالک سے درست کرنے کو کہیں۔</translation>
 <translation id="6624687053722465643">مٹھاس</translation>
 <translation id="6628328486509726751">اپ لوڈ کرنے کا وقت <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">مضبوط سیکیورٹی</translation>
@@ -8332,6 +8327,7 @@
 <translation id="8785622406424941542">اسٹائلس</translation>
 <translation id="8786824282808281903">جب آپ کا بچہ یہ آئیکن دیکھتا ہے تو شناخت کے لیے یا خریداریوں کو منظوری دینے کے لیے فنگر پرنٹ کا استعمال کیا جا سکتا ہے۔</translation>
 <translation id="8787575090331305835">{NUM_TABS,plural, =1{بغیر نام کا گروپ - 1 ٹیب}other{بغیر نام کا گروپ - # ٹیبز}}</translation>
+<translation id="8791157330927639737">اپ ڈیٹ کرنے کے بارے میں مزید جانیں</translation>
 <translation id="8791534160414513928">اپنے براؤزنگ ٹریفک کے ساتھ ایک "ٹریک نہ کریں" درخواست بھیجیں</translation>
 <translation id="879413103056696865">ہاٹ اسپاٹ آن ہونے پر، آپ کا <ph name="PHONE_NAME" /> درج ذيل کام کرے گا:</translation>
 <translation id="8795916974678578410">نئی ونڈو</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 2608bed2..a0aac34 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -908,7 +908,6 @@
 <translation id="1819721979226826163">Ilova bildirishnomalari &gt; Google Play xizmatlari ustiga bosing.</translation>
 <translation id="1820028137326691631">Administrator belgilagan parolni kiriting</translation>
 <translation id="1822140782238030981">Chrome ishlatasizmi? Hisobga kiring</translation>
-<translation id="1823098433522728610">Bu hujjatda maxfiy kontent bor.</translation>
 <translation id="18245044880483936">Zaxiralangan maʼlumotlar farzandingiz Google Drive omboridagi ajratilgan joyga taʼsir qilmaydi.</translation>
 <translation id="1825565032302550710">Port 1024 va 65535 orasida boʻlishi lozim</translation>
 <translation id="182577151972096764">yaqinda ochilgan retseptlar</translation>
@@ -1944,8 +1943,8 @@
 <translation id="274318651891194348">Klaviatura qidirilmoqda</translation>
 <translation id="2743301740238894839">Boshlash</translation>
 <translation id="2743387203779672305">Vaqtincha xotiraga nusxalash</translation>
+<translation id="274362947316498129">Ilova <ph name="DEVICE_NAME" />dan foydalanmoqchi. Ruxsat berish uchun <ph name="DEVICE_NAME" /> maxfiylik kalitini oʻchiring.</translation>
 <translation id="2745080116229976798">Microsoft Malakalilarga Bo‘ysunish sertifikatlar xizmati</translation>
-<translation id="2747266560080989517">Bu faylda maxfiy yoki xavfli kontent bor. Egasidan uni tuzatishni soʻrang.</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> hisobiga kirish</translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Grammatikani imlo bilan tekshirish</translation>
@@ -2541,7 +2540,6 @@
 <translation id="3317459757438853210">Ikki tomonlik chop etish</translation>
 <translation id="3317678681329786349">Kamera va mikrofon bloklandi</translation>
 <translation id="3320630259304269485">Saytlarni xavfsiz kezish (zararli saytlardan himoya) va boshqa xavfsizlik sozlamalari</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Bu maʼlumotlarda maxfiy yoki xavfli kontent bor. Shu kontentni olib tashlang va qayta urining.}=1{Bu faylda maxfiy yoki xavfli kontent bor. Shu kontentni olib tashlang va qayta urining.}other{Bu fayllarda maxfiy yoki xavfli kontent bor. Shu kontentni olib tashlang va qayta urining.}}</translation>
 <translation id="3323521181261657960">Bonus! Foydalanish vaqtingiz oshdi</translation>
 <translation id="3323577066981719144">Siz kiritgan oʻzgarishlar faqat Chrome brauzeriga tatbiq etiladi. Lacros Chrome brauzeri sozlamalariga oʻzgartirish kiritish uchun uning sozlamalarini oching.</translation>
 <translation id="3325804108816646710">Mavjud profillar qidirilmoqda...</translation>
@@ -2675,7 +2673,6 @@
 <translation id="3445925074670675829">USB-C qurilma</translation>
 <translation id="3446274660183028131">Windowsni oʻrnatish uchun Parallels Desktopni ishga tushiring.</translation>
 <translation id="344630545793878684">Bir nechta saytlardagi ma’lumotlarni ko‘rish</translation>
-<translation id="3446650212859500694">Bu faylda maxfiy kontent bor</translation>
 <translation id="3447644283769633681">Barcha tashqi cookie fayllarni bloklash</translation>
 <translation id="3448492834076427715">Hisobni yangilash</translation>
 <translation id="3449393517661170867">Varaqlari bor yangi oyna</translation>
@@ -3117,6 +3114,7 @@
 <translation id="385051799172605136">Orqaga</translation>
 <translation id="3851428669031642514">Havfsiz bo‘lmagan skriptlarni yuklash</translation>
 <translation id="3852215160863921508">Matn kiritishda yordam</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" /> yoqildi</translation>
 <translation id="3854599674806204102">Kalit turini tanlang</translation>
 <translation id="3854967233147778866">Boshqa tildagi sahifalarni tarjima qilish taklif qilinsin</translation>
 <translation id="3854976556788175030">Chiqarish tarnovida joy qolmadi</translation>
@@ -3450,6 +3448,7 @@
 <translation id="4163560723127662357">Noma’lum klaviatura</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> ishonchli tashkilotga tegishli emas. Administratorga murojaat qiling. Administrator boʻlsangiz, tashkilotingizni quyidagi sahifa orqali sozlang: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Sayt sozlamalari</translation>
+<translation id="4167212649627589331"><ph name="APP_NAME" /> <ph name="DEVICE_NAME" />dan foydalanmoqchi. Ruxsat berish uchun <ph name="DEVICE_NAME" /> maxfiylik kalitini oʻchiring.</translation>
 <translation id="4167393659000039775">Google maʼlumotlar yoʻqolish uchun javobgar emas va <ph name="DEVICE_OS" /> sertifikatlanmagan modellarda ishlamasligi mumkin. Batafsil: g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Saytlar odatda video oʻyinlar yoki veb shakllarni aks ettirish maqsadida JavaScript ishlatadi</translation>
 <translation id="4168015872538332605"><ph name="PRIMARY_EMAIL" /> foydalanuvchisining ba`zi sozlamalari multi-kirish (bir nechta hisobdan) vaqtida hisobingizga ta`sir qiladi.</translation>
@@ -3908,11 +3907,11 @@
 <translation id="4602466770786743961"><ph name="HOST" /> saytiga kamera va mikrofondan foydalanishga har doim ruxsat berilsin</translation>
 <translation id="4606551464649945562">Saytlarga atrofingiz 3D xaritasini yaratish yoki kamera holatini kuzatishni taqiqlash</translation>
 <translation id="4608500690299898628">&amp;Qidirish...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> faylida maxfiy kontent bor</translation>
 <translation id="4609987916561367134">JavaScript ishlatishga ruxsat berilgan</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> jarayonida xatolik yuz berdi</translation>
 <translation id="4610637590575890427">Balki <ph name="SITE" /> saytiga o‘tmoqchi bo‘lgandirsiz?</translation>
 <translation id="4611114513649582138">Mobil internet mavjud</translation>
+<translation id="4612841084470706111">Barcha soʻralgan saytlarga kirishga ruxsat bering.</translation>
 <translation id="4613144866899789710">Linux tizimini oʻrnatish bekor qilinmoqda...</translation>
 <translation id="4613271546271159013">Kengaytmalardan biri yangi ichki oynada ko‘rsatiladigan sahifani o‘zgartirdi.</translation>
 <translation id="4615586811063744755">cookie fayllari tanlanmadi</translation>
@@ -5680,6 +5679,7 @@
 <translation id="6291949900244949761">Sayt USB qurilmalardan foydalanmoqchi bo‘lganda ruxsat so‘ralsin (tavsiya etiladi)</translation>
 <translation id="6291953229176937411">&amp;Finder’da ko‘rsatish</translation>
 <translation id="6292699686837272722">Varaqlar toʻrt marta kichraytiriladi</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" /> oʻchirildi</translation>
 <translation id="6294759976468837022">Avtomatik skanerlash tezligi</translation>
 <translation id="6295158916970320988">Barcha saytlar</translation>
 <translation id="6295855836753816081">Saqlanmoqda...</translation>
@@ -5885,7 +5885,6 @@
 <translation id="6492396476180293140">Ichki kamera apparat tugmasi orqali faolsizlantirildi</translation>
 <translation id="6494327278868541139">Kuchaytirilgan himoya tafsilotlarini ochish</translation>
 <translation id="6494445798847293442">Sertifikatlashtirish markazi emas</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Bu maʼlumotlarda maxfiy yoki xavfli kontent bor}=1{Bu faylda maxfiy yoki xavfli kontent bor}other{Bu fayllarda maxfiy yoki xavfli kontent bor}}</translation>
 <translation id="6497548114956205206">Energiya tejalishi haqida batafsil</translation>
 <translation id="6497784818439587832">Ekrandagi elementlarni kichiklashtirish yoki kattalashtirish uchun ekran oʻlchamini oʻzgartiring</translation>
 <translation id="6497789971060331894">Sichqoncha bilan teskari aylantirish</translation>
@@ -6031,7 +6030,6 @@
 <translation id="6621391692573306628">Bu varaqni boshqa qurilmaga yuborish uchun har ikki qurilmada Chrome hisobiga kiring</translation>
 <translation id="6622980291894852883">Tasvirlar doim bloklansin</translation>
 <translation id="6624036901798307345">Planshet rejimida har bir varaq eskizi aks etadigan yangi varaqlar qatorini ochish uchun asboblar panelida varaqlar soni tugmasiga bosing.</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> faylida maxfiy yoki xavfli kontent bor. Egasidan uni tuzatishni soʻrang.</translation>
 <translation id="6624687053722465643">Shirinlik</translation>
 <translation id="6628328486509726751">Yuklangan vaqti: <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Kuchliroq xavfsizlik</translation>
@@ -8491,6 +8489,7 @@
 <translation id="8940081510938872932">Ayni paytda kompyuteringiz o‘ta ko‘p ishlarni bajarmoqda. Keyinroq urinib ko‘ring.</translation>
 <translation id="8940381019874223173">Google Photos xizmatidan</translation>
 <translation id="8941173171815156065">“<ph name="PERMISSION" />” ruxsatnomalarini bekor qilish</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" /> yoqilmagan</translation>
 <translation id="894191600409472540">Kuchli parollar yarating</translation>
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Batareya quvvati tezroq sarflanadi (hozirda: <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index a9f896c..13fd4b42 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -921,7 +921,6 @@
 <translation id="1819721979226826163">Nhấn vào Thông báo ứng dụng &gt; Dịch vụ Google Play.</translation>
 <translation id="1820028137326691631">Nhập mật khẩu do quản trị viên cung cấp</translation>
 <translation id="1822140782238030981">Bạn đã là người dùng Chrome? Hãy đăng nhập</translation>
-<translation id="1823098433522728610">Tài liệu này có nội dung nhạy cảm.</translation>
 <translation id="18245044880483936">Dữ liệu sao lưu sẽ không tính vào định mức bộ nhớ Drive của con bạn.</translation>
 <translation id="1825565032302550710">Cổng phải nằm trong khoảng 1024 và 65535</translation>
 <translation id="182577151972096764">công thức mới xem gần đây</translation>
@@ -1959,7 +1958,6 @@
 <translation id="2743387203779672305">Sao chép vào bảng nhớ tạm</translation>
 <translation id="274362947316498129">Một ứng dụng đang cố truy cập vào <ph name="DEVICE_NAME" />. Hãy tắt nút chuyển quyền riêng tư của <ph name="DEVICE_NAME" /> để cho phép truy cập.</translation>
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
-<translation id="2747266560080989517">Tệp này có chứa nội dung nhạy cảm hoặc nguy hiểm. Hãy yêu cầu chủ sở hữu tệp khắc phục vấn đề.</translation>
 <translation id="2749756011735116528">Đăng nhập vào <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Kiểm tra Ngữ pháp và Chính tả</translation>
@@ -2555,7 +2553,6 @@
 <translation id="3317459757438853210">Hai mặt</translation>
 <translation id="3317678681329786349">Máy ảnh và micrô bị chặn</translation>
 <translation id="3320630259304269485">Tính năng Duyệt web an toàn (bảo vệ trước các trang web nguy hiểm) và các tùy chọn cài đặt bảo mật khác</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Dữ liệu này có chứa nội dung nhạy cảm hoặc nguy hiểm. Hãy xóa nội dung này rồi thử lại.}=1{Tệp này có chứa nội dung nhạy cảm hoặc nguy hiểm. Hãy xóa nội dung này rồi thử lại.}other{Các tệp này có chứa nội dung nhạy cảm hoặc nguy hiểm. Hãy xóa nội dung này rồi thử lại.}}</translation>
 <translation id="3323521181261657960">Phần thưởng! Bạn có thêm thời gian sử dụng thiết bị</translation>
 <translation id="3323577066981719144">Các thay đổi bạn thực hiện tại đây chỉ áp dụng cho Trình duyệt Chrome. Để thực hiện các thay đổi đối với chế độ cài đặt trên Trình duyệt Lacros Chrome của bạn, hãy mở Trình duyệt Lacros Chrome và chuyển đến phần cài đặt.</translation>
 <translation id="3325804108816646710">Đang tìm hồ sơ có sẵn...</translation>
@@ -2689,7 +2686,6 @@
 <translation id="3445925074670675829">Thiết bị USB-C</translation>
 <translation id="3446274660183028131">Vui lòng chạy ứng dụng Parallels Desktop để cài đặt Windows.</translation>
 <translation id="344630545793878684">Đọc dữ liệu của bạn trên một số trang web</translation>
-<translation id="3446650212859500694">Tệp này có chứa nội dung nhạy cảm</translation>
 <translation id="3447644283769633681">Chặn tất cả cookie của bên thứ ba</translation>
 <translation id="3448492834076427715">Cập nhật tài khoản</translation>
 <translation id="3449393517661170867">Cửa sổ mới dạng thẻ</translation>
@@ -3924,7 +3920,6 @@
 <translation id="4602466770786743961">Luôn cho phép <ph name="HOST" /> truy cập vào máy ảnh và micrô của bạn</translation>
 <translation id="4606551464649945562">Không cho phép trang web tạo bản đồ 3D về các khu vực xung quanh bạn hoặc theo dõi thông tin vị trí của máy ảnh</translation>
 <translation id="4608500690299898628">&amp;Tìm...</translation>
-<translation id="4608703838363792434">Tệp <ph name="FILE_NAME" /> có chứa nội dung nhạy cảm</translation>
 <translation id="4609987916561367134">Được phép sử dụng JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> đã gặp lỗi</translation>
 <translation id="4610637590575890427">Có phải ý bạn là chuyển đến <ph name="SITE" /> không?</translation>
@@ -5903,7 +5898,6 @@
 <translation id="6492396476180293140">Máy ảnh bên trong đã bị tắt bởi công tắc phần cứng</translation>
 <translation id="6494327278868541139">Hiển thị thông tin chi tiết về phương thức bảo vệ nâng cao</translation>
 <translation id="6494445798847293442">Không phải tổ chức phát hành chứng chỉ</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Dữ liệu này có chứa nội dung nhạy cảm hoặc nguy hiểm}=1{Tệp này có chứa nội dung nhạy cảm hoặc nguy hiểm}other{Các tệp này có chứa nội dung nhạy cảm hoặc nguy hiểm}}</translation>
 <translation id="6497548114956205206">Tìm hiểu thêm về trình tiết kiệm pin</translation>
 <translation id="6497784818439587832">Thay đổi kích thước hiển thị để thu nhỏ hoặc phóng to các mục trên màn hình</translation>
 <translation id="6497789971060331894">Đảo ngược hướng cuộn chuột</translation>
@@ -6049,7 +6043,6 @@
 <translation id="6621391692573306628">Để gửi thẻ này cho một thiết bị khác, hãy đăng nhập vào Chrome trên cả hai thiết bị</translation>
 <translation id="6622980291894852883">Tiếp tục chặn hình ảnh</translation>
 <translation id="6624036901798307345">Ở chế độ máy tính bảng, hãy nhấn vào nút trên thanh công cụ của bộ đếm thẻ để mở dải thẻ mới cho thấy hình thu nhỏ của mỗi thẻ.</translation>
-<translation id="6624535038674360844">Tệp <ph name="FILE_NAME" /> có chứa nội dung nhạy cảm hoặc nguy hiểm. Hãy yêu cầu chủ sở hữu tệp khắc phục vấn đề.</translation>
 <translation id="6624687053722465643">Ngọt ngào</translation>
 <translation id="6628328486509726751">Đã tải lên vào <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Khả năng bảo mật mạnh mẽ hơn</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 1b797e6d..2bcbe2b 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -902,7 +902,6 @@
 <translation id="1819721979226826163">依次点按“应用通知”&gt;“Google Play 服务”。</translation>
 <translation id="1820028137326691631">请输入管理员提供的密码</translation>
 <translation id="1822140782238030981">已是 Chrome 用户?请登录</translation>
-<translation id="1823098433522728610">此文档含有敏感内容。</translation>
 <translation id="18245044880483936">备份数据不会计入您孩子的云端硬盘存储空间配额。</translation>
 <translation id="1825565032302550710">端口必须介于 1024 到 65535 之间</translation>
 <translation id="182577151972096764">最近查看过的食谱</translation>
@@ -1931,8 +1930,8 @@
 <translation id="274318651891194348">正在搜索键盘</translation>
 <translation id="2743301740238894839">开始</translation>
 <translation id="2743387203779672305">复制到剪贴板</translation>
+<translation id="274362947316498129">有一款应用正在尝试使用<ph name="DEVICE_NAME" />。若要允许使用<ph name="DEVICE_NAME" />,请关闭它的隐私保护开关。</translation>
 <translation id="2745080116229976798">Microsoft 合格的部署</translation>
-<translation id="2747266560080989517">此文件包含敏感或危险内容。请让此文件的所有者解决这一问题。</translation>
 <translation id="2749756011735116528">登录<ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM 卡</translation>
 <translation id="2749881179542288782">检查拼写和语法</translation>
@@ -2527,7 +2526,6 @@
 <translation id="3317459757438853210">双面</translation>
 <translation id="3317678681329786349">已禁止使用摄像头和麦克风</translation>
 <translation id="3320630259304269485">安全浏览(保护您免受危险网站的侵害)和其他安全设置</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{此数据包含敏感或危险内容。请移除此内容,然后重试。}=1{这个文件包含敏感或危险内容。请移除此内容,然后重试。}other{这些文件包含敏感或危险内容。请移除此内容,然后重试。}}</translation>
 <translation id="3323521181261657960">恭喜!您获得了更多的设备使用时间</translation>
 <translation id="3323577066981719144">您在此处所做的更改仅会应用到 Chrome 浏览器。若要更改您的 Lacros Chrome 浏览器设置,请打开 Lacros Chrome 浏览器,然后转到“设置”。</translation>
 <translation id="3325804108816646710">正在查找可用的配置文件…</translation>
@@ -2661,7 +2659,6 @@
 <translation id="3445925074670675829">USB-C 设备</translation>
 <translation id="3446274660183028131">请启动 Parallels Desktop 以安装 Windows。</translation>
 <translation id="344630545793878684">读取您在一些网站上的数据</translation>
-<translation id="3446650212859500694">此文件包含敏感内容</translation>
 <translation id="3447644283769633681">拦截所有第三方 Cookie</translation>
 <translation id="3448492834076427715">更新帐号</translation>
 <translation id="3449393517661170867">打开新的标签页窗口</translation>
@@ -3103,6 +3100,7 @@
 <translation id="385051799172605136">返回</translation>
 <translation id="3851428669031642514">加载不安全的脚本</translation>
 <translation id="3852215160863921508">输入帮助</translation>
+<translation id="3853549894831560772"><ph name="DEVICE_NAME" />已开启</translation>
 <translation id="3854599674806204102">选择一个选项</translation>
 <translation id="3854967233147778866">询问是否翻译以其他语言显示的网站</translation>
 <translation id="3854976556788175030">出纸盘已满</translation>
@@ -3435,6 +3433,7 @@
 <translation id="4163560723127662357">未知键盘</translation>
 <translation id="4165942112764990069"><ph name="USER_EMAIL" /> 不属于任何有效的组织。请与您的管理员联系。如果您本人就是管理员,则可通过访问 g.co/ChromeEnterpriseAccount 来设置贵组织</translation>
 <translation id="4165986682804962316">网站设置</translation>
+<translation id="4167212649627589331">“<ph name="APP_NAME" />”正在尝试使用<ph name="DEVICE_NAME" />。若要允许使用<ph name="DEVICE_NAME" />,请关闭它的隐私保护开关。</translation>
 <translation id="4167393659000039775">Google 不对任何数据损失承担责任,<ph name="DEVICE_OS" /> 在未经认证的型号上可能无法正常运行。如需了解详情,请访问 g.co/flex/InstallGuide。</translation>
 <translation id="4167686856635546851">网站通常会使用 JavaScript 来显示互动功能(例如视频游戏或网络表单)</translation>
 <translation id="4168015872538332605">属于<ph name="PRIMARY_EMAIL" />的部分设置现在也会用于您的帐号。仅当您使用多帐号登录时,这些设置才会影响您的帐号。</translation>
@@ -3890,11 +3889,11 @@
 <translation id="4602466770786743961">始终允许 <ph name="HOST" /> 使用您的摄像头和麦克风</translation>
 <translation id="4606551464649945562">不允许网站为您的周边环境创建 3D 地图或跟踪摄像头位置</translation>
 <translation id="4608500690299898628">查找(&amp;F)...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> 包含敏感内容</translation>
 <translation id="4609987916561367134">允许使用 JavaScript</translation>
 <translation id="4610162781778310380">“<ph name="PLUGIN_NAME" />”遇到了错误</translation>
 <translation id="4610637590575890427">您是不是要访问 <ph name="SITE" />?</translation>
 <translation id="4611114513649582138">有可用的数据网络连接</translation>
+<translation id="4612841084470706111">授权访问所请求的全部网站。</translation>
 <translation id="4613144866899789710">正在取消安装 Linux…</translation>
 <translation id="4613271546271159013">某个扩展程序更改了您打开新标签页时系统显示的页面。</translation>
 <translation id="4615586811063744755">未选择任何 Cookie</translation>
@@ -5655,6 +5654,7 @@
 <translation id="6291949900244949761">当网站要访问 USB 设备时询问您(推荐)</translation>
 <translation id="6291953229176937411">在 Finder 中显示(&amp;S)</translation>
 <translation id="6292699686837272722">将标签页收缩至中等宽度</translation>
+<translation id="6293862149782163840"><ph name="DEVICE_NAME" />已关闭</translation>
 <translation id="6294759976468837022">自动扫描速度</translation>
 <translation id="6295158916970320988">所有网站</translation>
 <translation id="6295855836753816081">正在保存…</translation>
@@ -5860,7 +5860,6 @@
 <translation id="6492396476180293140">内部摄像头已被硬件开关禁用</translation>
 <translation id="6494327278868541139">显示增强型保护详情</translation>
 <translation id="6494445798847293442">不是证书授权中心</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{此数据包含敏感或危险内容}=1{这个文件包含敏感或危险内容}other{这些文件包含敏感或危险内容}}</translation>
 <translation id="6497548114956205206">详细了解节能模式</translation>
 <translation id="6497784818439587832">更改显示大小以缩小或放大屏幕上的内容</translation>
 <translation id="6497789971060331894">鼠标反向滚动</translation>
@@ -6006,7 +6005,6 @@
 <translation id="6621391692573306628">若要将此标签页发送到另一设备,请在这两部设备上都登录 Chrome</translation>
 <translation id="6622980291894852883">继续拦截图片</translation>
 <translation id="6624036901798307345">在平板电脑模式下,只需点按工具栏中的标签页计数器按钮,即可打开会显示每个标签页的缩略图的新标签页栏。</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> 包含敏感或危险内容。请让此文件的所有者解决这一问题。</translation>
 <translation id="6624687053722465643">杯型蛋糕</translation>
 <translation id="6628328486509726751">上传时间:<ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">更高的安全性</translation>
@@ -8466,6 +8464,7 @@
 <translation id="8940081510938872932">计算机当前处理的内容过多。请稍后重试。</translation>
 <translation id="8940381019874223173">来自您的 Google 相册</translation>
 <translation id="8941173171815156065">撤消“<ph name="PERMISSION" />”权限</translation>
+<translation id="8941688920560496412"><ph name="DEVICE_NAME" />处于关闭状态</translation>
 <translation id="894191600409472540">创建安全系数高的密码</translation>
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">这样会更快消耗电量(目前电量:<ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index a02bfed8..f9ad8d8 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -410,6 +410,7 @@
 <translation id="1388253969141979417">已允許使用麥克風</translation>
 <translation id="1388728792929436380"><ph name="DEVICE_TYPE" /> 將在更新完成時重新啟動。</translation>
 <translation id="1389601498324964367">受配額管理的儲存空間</translation>
+<translation id="1390113502208199250">你必須將這部裝置恢復原廠設定,才能使用 Chrome Education 升級版功能。</translation>
 <translation id="139013308650923562">可以使用裝置上安裝的字型</translation>
 <translation id="1390548061267426325">在一般分頁中開啟</translation>
 <translation id="1390907927270446471">「<ph name="PROFILE_USERNAME" />」無權透過「<ph name="PRINTER_NAME" />」列印。請聯絡您的管理員。</translation>
@@ -480,6 +481,7 @@
 <translation id="1436784010935106834">已移除</translation>
 <translation id="1437986450143295708">請詳細描述問題</translation>
 <translation id="1439671507542716852">長期支援</translation>
+<translation id="1440090277117135316">學校註冊程序完成</translation>
 <translation id="144283815522798837">已選取 <ph name="NUMBER_OF_ITEMS_SELECTED" /> 個項目</translation>
 <translation id="1442851588227551435">設定使用中的 Kerberos 票證</translation>
 <translation id="1444628761356461360">這項設定是由裝置擁有者「<ph name="OWNER_EMAIL" />」管理。</translation>
@@ -918,7 +920,6 @@
 <translation id="1819721979226826163">輕按 [應用程式通知] &gt; [Google Play 服務]。</translation>
 <translation id="1820028137326691631">輸入管理員提供的密碼</translation>
 <translation id="1822140782238030981">已是 Chrome 使用者嗎?請登入</translation>
-<translation id="1823098433522728610">此文件含有敏感內容。</translation>
 <translation id="18245044880483936">備份資料將不會佔用您子女的「雲端硬碟」儲存空間配額。</translation>
 <translation id="1825565032302550710">連接埠必須介乎 1024 和 65535 之間</translation>
 <translation id="182577151972096764">最近查看過的食譜</translation>
@@ -1957,7 +1958,6 @@
 <translation id="2743387203779672305">複製到剪貼簿</translation>
 <translation id="274362947316498129">一個應用程式正在嘗試存取<ph name="DEVICE_NAME" />。如要允許存取,請將<ph name="DEVICE_NAME" />的私隱開關切換至關閉。</translation>
 <translation id="2745080116229976798">Microsoft 合格分類</translation>
-<translation id="2747266560080989517">此檔案含有敏感或危險的內容。請要求擁有者修正。</translation>
 <translation id="2749756011735116528">登入 <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM 卡</translation>
 <translation id="2749881179542288782">檢查拼字及文法</translation>
@@ -2413,6 +2413,7 @@
 <translation id="3170072451822350649">您也可以略過登入程序,<ph name="LINK_START" />以訪客身分瀏覽<ph name="LINK_END" />。</translation>
 <translation id="31774765611822736">新分頁位於左側</translation>
 <translation id="3177909033752230686">網頁語言:</translation>
+<translation id="3177914167275935955">你的裝置含有 Chrome Education 升級版,但你的使用者名稱沒有相關聯的 Google for Education 帳戶。請在次要裝置上前往 g.co/workspace/edusignup 建立 Google for Education 帳戶。</translation>
 <translation id="3179982752812949580">文字字型</translation>
 <translation id="3181954750937456830">安全瀏覽 (保護您和裝置免受危險網站攻擊)</translation>
 <translation id="3182749001423093222">拼字檢查</translation>
@@ -2552,7 +2553,6 @@
 <translation id="3317459757438853210">雙面</translation>
 <translation id="3317678681329786349">已禁止使用相機和麥克風</translation>
 <translation id="3320630259304269485">安全瀏覽功能 (可防範危險網站) 和其他安全性設定</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{此資料含有敏感或危險的內容。請移除這類內容,然後再試一次。}=1{此檔案含有敏感或危險的內容。請移除這類內容,然後再試一次。}other{這些檔案含有敏感或危險的內容。請移除這類內容,然後再試一次。}}</translation>
 <translation id="3323521181261657960">恭喜!您的裝置使用時間增加了</translation>
 <translation id="3323577066981719144">您在這裡作出的變更只會套用到 Chrome 瀏覽器。如要變更 Lacros Chrome 瀏覽器設定,請開啟 Lacros Chrome 瀏覽器並前往設定頁面。</translation>
 <translation id="3325804108816646710">正在尋找可用的設定檔…</translation>
@@ -2686,7 +2686,6 @@
 <translation id="3445925074670675829">USB-C 裝置</translation>
 <translation id="3446274660183028131">請啟動 Parallels Desktop 以安裝 Windows。</translation>
 <translation id="344630545793878684">讀取您在部分網站上的資料</translation>
-<translation id="3446650212859500694">此檔案含有敏感內容</translation>
 <translation id="3447644283769633681">封鎖所有第三方 Cookie</translation>
 <translation id="3448492834076427715">更新帳戶</translation>
 <translation id="3449393517661170867">新分頁視窗</translation>
@@ -3921,7 +3920,6 @@
 <translation id="4602466770786743961">永遠允許 <ph name="HOST" /> 存取您的相機和麥克風</translation>
 <translation id="4606551464649945562">不允許網站建立您身處環境的 3D 地圖或追蹤攝錄機位置</translation>
 <translation id="4608500690299898628">尋找(&amp;F)…</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> 含有敏感內容</translation>
 <translation id="4609987916561367134">已允許使用 JavaScript</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> 發生錯誤</translation>
 <translation id="4610637590575890427">您的意思是想瀏覽 <ph name="SITE" /> 嗎?</translation>
@@ -4086,6 +4084,7 @@
 <translation id="4762489666082647806">指標顏色</translation>
 <translation id="4762718786438001384">裝置磁碟的儲存空間嚴重不足</translation>
 <translation id="4763408175235639573">系統在您瀏覽此網頁時已設定下列 Cookie</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> 不是有效的 Google for Education 帳戶,請與系統管理員聯絡。如果你是系統管理員,可以前往 g.co/workspace/edusignup 設定貴機構</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{系統會記住此裝置,在 1 個月內無需輸入驗證碼即可再次連接。此設定由管理員設定。}other{系統會記住此裝置,在 {MONTHS} 個月內無需輸入驗證碼即可再次連接。此設定由管理員設定。}}</translation>
 <translation id="4765582662863429759">允許「Android 訊息」由您的手機轉送短訊至 Chromebook</translation>
 <translation id="4766598565665644999">所有擴充程式都可以讀取並變更 <ph name="HOST" /></translation>
@@ -4747,6 +4746,7 @@
 <translation id="5407167491482639988">無法辨識</translation>
 <translation id="5408750356094797285">縮放:<ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">您 Google 帳戶中的密碼</translation>
+<translation id="5411022484772257615">無法完成學校註冊程序</translation>
 <translation id="5413640305322530561">進一步瞭解診斷和使用情況資料</translation>
 <translation id="5414198321558177633">正在重新整理設定檔清單。這項操作可能需時數分鐘。</translation>
 <translation id="5414566801737831689">讀取您所瀏覽網站的圖示</translation>
@@ -5531,6 +5531,7 @@
 <translation id="6129953537138746214">空格</translation>
 <translation id="6130692320435119637">新增 Wi-Fi</translation>
 <translation id="6130887916931372608">鍵盤按鍵</translation>
+<translation id="6132714462430777655">要略過學校註冊程序嗎?</translation>
 <translation id="6135823405800500595">請確認您的手機在附近且已解鎖,並已開啟藍牙和 Wi-Fi</translation>
 <translation id="6135826623269483856">不允許在您所有的顯示屏上管理視窗</translation>
 <translation id="6136114942382973861">閂下載內容列</translation>
@@ -5895,7 +5896,6 @@
 <translation id="6492396476180293140">已透過硬件開關停用內部相機</translation>
 <translation id="6494327278868541139">顯示進階保護功能詳情</translation>
 <translation id="6494445798847293442">不是憑證授權單位</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{此資料含有敏感或危險的內容}=1{此檔案含有敏感或危險的內容}other{這些檔案含有敏感或危險的內容}}</translation>
 <translation id="6497548114956205206">進一步了解節能模式</translation>
 <translation id="6497784818439587832">變更顯示大小以縮小或放大畫面上的項目</translation>
 <translation id="6497789971060331894">滑鼠反向捲動</translation>
@@ -6041,7 +6041,6 @@
 <translation id="6621391692573306628">如要將此分頁傳送至其他裝置,請在這兩部裝置上登入 Chrome</translation>
 <translation id="6622980291894852883">繼續封鎖圖片</translation>
 <translation id="6624036901798307345">在平板電腦模式中,輕按分頁計數器工具列按鈕便可開啟新的分頁列,並顯示每個分頁的縮圖。</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> 含有敏感或危險的內容。請要求擁有者修正。</translation>
 <translation id="6624687053722465643">小蛋糕</translation>
 <translation id="6628328486509726751">上載時間:<ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">安全再升級</translation>
@@ -6753,6 +6752,7 @@
 <translation id="7310598146671372464">無法登入。伺服器不支援特定的 Kerberos 加密類型。請聯絡您的管理員。</translation>
 <translation id="7311089766378749632">正在要求讀取並變更 <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">管理員正在重設您的 eSIM 卡。這項操作可能需時數分鐘。</translation>
+<translation id="7317831949569936035">學校註冊程序</translation>
 <translation id="7320213904474460808">預設網絡</translation>
 <translation id="7321545336522791733">無法連接伺服器</translation>
 <translation id="7323315405936922211">游標區域大小</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 632c07a..16be22d 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -408,6 +408,7 @@
 <translation id="1388253969141979417">可以使用麥克風</translation>
 <translation id="1388728792929436380">「<ph name="DEVICE_TYPE" />」會在更新完成時重新啟動。</translation>
 <translation id="1389601498324964367">以配額管理的儲存空間</translation>
+<translation id="1390113502208199250">你必須將這部裝置恢復原廠設定,才能使用 Chrome Education 升級版功能。</translation>
 <translation id="139013308650923562">可以使用裝置上安裝的字型</translation>
 <translation id="1390548061267426325">在一般分頁中開啟</translation>
 <translation id="1390907927270446471"><ph name="PROFILE_USERNAME" /> 未獲授權,因此無法透過「<ph name="PRINTER_NAME" />」列印。請與管理員聯絡。</translation>
@@ -478,6 +479,7 @@
 <translation id="1436784010935106834">已移除</translation>
 <translation id="1437986450143295708">請詳細說明問題</translation>
 <translation id="1439671507542716852">長期支援</translation>
+<translation id="1440090277117135316">學校註冊程序完成</translation>
 <translation id="144283815522798837">已選取 <ph name="NUMBER_OF_ITEMS_SELECTED" /> 個項目</translation>
 <translation id="1442851588227551435">設定使用中的 Kerberos 票證</translation>
 <translation id="1444628761356461360">這項設定是由裝置擁有者「<ph name="OWNER_EMAIL" />」管理。</translation>
@@ -908,7 +910,6 @@
 <translation id="1819721979226826163">依序輕觸 [應用程式通知] &gt; [Google Play 服務]。</translation>
 <translation id="1820028137326691631">請輸入管理員提供的密碼</translation>
 <translation id="1822140782238030981">已經是 Chrome 使用者了嗎?請登入帳戶</translation>
-<translation id="1823098433522728610">這份文件含有敏感內容。</translation>
 <translation id="18245044880483936">備份資料不會計入貴子女的雲端硬碟儲存空間配額。</translation>
 <translation id="1825565032302550710">連接埠必須介於 1024 與 65535 之間</translation>
 <translation id="182577151972096764">最近瀏覽過的食譜</translation>
@@ -1942,7 +1943,6 @@
 <translation id="2743387203779672305">複製到剪貼簿</translation>
 <translation id="274362947316498129">一個應用程式正在嘗試存取<ph name="DEVICE_NAME" />。如要允許存取,請關閉<ph name="DEVICE_NAME" />隱私權切換按鈕。</translation>
 <translation id="2745080116229976798">Microsoft 合格分類</translation>
-<translation id="2747266560080989517">這個檔案含有敏感內容或危險內容。請要求檔案擁有者修正。</translation>
 <translation id="2749756011735116528">登入 <ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">SIM 卡</translation>
 <translation id="2749881179542288782">檢查拼字及文法</translation>
@@ -2398,6 +2398,7 @@
 <translation id="3170072451822350649">你也可以略過登入程序,<ph name="LINK_START" />以訪客身分瀏覽<ph name="LINK_END" />。</translation>
 <translation id="31774765611822736">新分頁位於左側</translation>
 <translation id="3177909033752230686">網頁語言:</translation>
+<translation id="3177914167275935955">你的裝置含有 Chrome Education 升級版,但你的使用者名稱沒有相關聯的 Google for Education 帳戶。請在次要裝置上前往 g.co/workspace/edusignup 建立 Google for Education 帳戶。</translation>
 <translation id="3179982752812949580">文字字型</translation>
 <translation id="3181954750937456830">安全瀏覽 (保護你和你的裝置不受危險網站攻擊)</translation>
 <translation id="3182749001423093222">拼字檢查</translation>
@@ -2537,7 +2538,6 @@
 <translation id="3317459757438853210">雙面</translation>
 <translation id="3317678681329786349">無法使用攝影機和麥克風</translation>
 <translation id="3320630259304269485">安全瀏覽功能 (可防範不安全的網站) 和其他安全性設定</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{這項資料含有敏感內容或危險內容。請移除這類內容,然後再試一次。}=1{這個檔案含有敏感內容或危險內容。請移除這類內容,然後再試一次。}other{這些檔案含有敏感內容或危險內容。請移除這類內容,然後再試一次。}}</translation>
 <translation id="3323521181261657960">恭喜!你的裝置使用時間增加了</translation>
 <translation id="3323577066981719144">你在這裡所做的變更僅適用於 Chrome 瀏覽器。如要變更 Lacros Chrome 瀏覽器設定,請開啟 Lacros Chrome 瀏覽器並前往設定頁面。</translation>
 <translation id="3325804108816646710">正在尋找可用的設定檔…</translation>
@@ -2671,7 +2671,6 @@
 <translation id="3445925074670675829">USB-C 裝置</translation>
 <translation id="3446274660183028131">請啟動 Parallels Desktop 以安裝 Windows。</translation>
 <translation id="344630545793878684">讀取你在多個網站上產生的資料</translation>
-<translation id="3446650212859500694">這個檔案含有敏感內容</translation>
 <translation id="3447644283769633681">封鎖所有第三方 Cookie</translation>
 <translation id="3448492834076427715">更新帳戶</translation>
 <translation id="3449393517661170867">新分頁視窗</translation>
@@ -3904,7 +3903,6 @@
 <translation id="4602466770786743961">一律允許 <ph name="HOST" /> 存取你的攝影機和麥克風</translation>
 <translation id="4606551464649945562">不允許網站根據你的周遭環境建立 3D 地圖或追蹤攝影機位置</translation>
 <translation id="4608500690299898628">尋找(&amp;F)...</translation>
-<translation id="4608703838363792434"><ph name="FILE_NAME" /> 含有敏感內容</translation>
 <translation id="4609987916561367134">可以使用 JavaScript</translation>
 <translation id="4610162781778310380">「<ph name="PLUGIN_NAME" />」發生錯誤</translation>
 <translation id="4610637590575890427">你的意思是想瀏覽 <ph name="SITE" /> 嗎?</translation>
@@ -4069,6 +4067,7 @@
 <translation id="4762489666082647806">指標顏色</translation>
 <translation id="4762718786438001384">裝置磁碟空間嚴重不足</translation>
 <translation id="4763408175235639573">系統在你瀏覽這個網頁時設定了下列 Cookie</translation>
+<translation id="4763757134413542119"><ph name="USER_EMAIL" /> 不是有效的 Google for Education 帳戶,請與系統管理員聯絡。如果你是系統管理員,可以前往 g.co/workspace/edusignup 設定貴機構</translation>
 <translation id="4765524037138975789">{MONTHS,plural, =1{系統會記住這部裝置,在 1 個月內無需輸入驗證碼即可再次連接。這項設定是由你系統管理員指定。}other{系統會記住這部裝置,在 {MONTHS} 個月內無需輸入驗證碼即可再次連接。這項設定是由你系統管理員指定。}}</translation>
 <translation id="4765582662863429759">允許 Android 訊息將簡訊內容從手機轉送到 Chromebook</translation>
 <translation id="4766598565665644999">所有擴充功能都可以讀取及變更 <ph name="HOST" /></translation>
@@ -4730,6 +4729,7 @@
 <translation id="5407167491482639988">無法辨識</translation>
 <translation id="5408750356094797285">縮放比例:<ph name="PERCENT" /></translation>
 <translation id="5409044712155737325">從 Google 帳戶</translation>
+<translation id="5411022484772257615">無法完成學校註冊程序</translation>
 <translation id="5413640305322530561">進一步瞭解診斷與使用資料</translation>
 <translation id="5414198321558177633">正在重新整理設定檔清單。請稍候片刻。</translation>
 <translation id="5414566801737831689">讀取你所瀏覽網站的圖示</translation>
@@ -5513,6 +5513,7 @@
 <translation id="6129953537138746214">空格</translation>
 <translation id="6130692320435119637">新增 Wi-Fi</translation>
 <translation id="6130887916931372608">鍵盤按鍵</translation>
+<translation id="6132714462430777655">要略過學校註冊程序嗎?</translation>
 <translation id="6135823405800500595">請確認你的手機在附近且處於解鎖狀態,並已開啟藍牙和 Wi-Fi</translation>
 <translation id="6135826623269483856">不允許管理所有螢幕上的視窗</translation>
 <translation id="6136114942382973861">關閉下載內容列</translation>
@@ -5877,7 +5878,6 @@
 <translation id="6492396476180293140">內部相機已透過硬體切換按鈕停用</translation>
 <translation id="6494327278868541139">顯示強化防護功能詳細資料</translation>
 <translation id="6494445798847293442">這不是憑證授權單位</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{這項資料含有敏感內容或危險內容}=1{這個檔案含有敏感內容或危險內容}other{這些檔案含有敏感內容或危險內容}}</translation>
 <translation id="6497548114956205206">進一步瞭解節能模式</translation>
 <translation id="6497784818439587832">變更顯示大小以縮小或放大畫面上的項目</translation>
 <translation id="6497789971060331894">滑鼠反向捲動</translation>
@@ -6023,7 +6023,6 @@
 <translation id="6621391692573306628">如要將這個分頁傳送到其他裝置,請在這兩部裝置上登入 Chrome</translation>
 <translation id="6622980291894852883">繼續封鎖圖片</translation>
 <translation id="6624036901798307345">在平板電腦模式中,輕觸分頁計數器的工具列按鈕即可開啟新的分頁列,當中會顯示各分頁的縮圖。</translation>
-<translation id="6624535038674360844"><ph name="FILE_NAME" /> 含有敏感內容或危險內容。請要求檔案擁有者修正。</translation>
 <translation id="6624687053722465643">小蛋糕</translation>
 <translation id="6628328486509726751">上傳時間:<ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">安全再升級</translation>
@@ -6735,6 +6734,7 @@
 <translation id="7310598146671372464">無法登入,伺服器不支援指定的 Kerberos 加密類型。請與你的管理員聯絡。</translation>
 <translation id="7311089766378749632">正在要求讀取及變更 <ph name="SITE_NAME" /></translation>
 <translation id="7312210124139670355">管理員正在重設 eSIM 卡,請稍候片刻。</translation>
+<translation id="7317831949569936035">學校註冊程序</translation>
 <translation id="7320213904474460808">預設網路</translation>
 <translation id="7321545336522791733">無法連上伺服器</translation>
 <translation id="7323315405936922211">游標區域大小</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 31d7c531..af923291 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -917,7 +917,6 @@
 <translation id="1819721979226826163">Thepha izaziso zohlelo lokusebenza &gt; Amasevisi e-Google Play.</translation>
 <translation id="1820028137326691631">Faka iphasiwedi enikezwe umphathi</translation>
 <translation id="1822140782238030981">Usuvele ungumsebenzisi we-Chrome? Ngena ngemvume</translation>
-<translation id="1823098433522728610">Le dokhumenti inokuqukethwe okuzwelayo.</translation>
 <translation id="18245044880483936">Idatha yesipele ngeke ibalwe ukuya kusitoreji se-quota ye-Drayivu yengane yakho.</translation>
 <translation id="1825565032302550710">Imbobo kufanele ibe phakathi kuka-1024 no-65535</translation>
 <translation id="182577151972096764">amarisiphu asanda kubukwa</translation>
@@ -1955,8 +1954,8 @@
 <translation id="274318651891194348">Isesha ikhibhodi</translation>
 <translation id="2743301740238894839">Qala</translation>
 <translation id="2743387203779672305">Kopisha kubhodi lokunamathisela</translation>
+<translation id="274362947316498129">I-app izama ukufinyelela ku-<ph name="DEVICE_NAME" />. Vala iswishi ye-<ph name="DEVICE_NAME" /> yobumfihlo ukuze uvumele ukufinyelela.</translation>
 <translation id="2745080116229976798">Ukuthobela abafanelekayo be-Microsoft</translation>
-<translation id="2747266560080989517">Leli fayela linokuqukethwe okuzwelayo noma okuyingozi. Cela umnikazi wayo ukuze alungise.</translation>
 <translation id="2749756011735116528">Ngena ngemvume ku-<ph name="PRODUCT_NAME" /></translation>
 <translation id="2749836841884031656">I-SIM</translation>
 <translation id="2749881179542288782">Hlola i-Grammar ngesipelingi</translation>
@@ -2551,7 +2550,6 @@
 <translation id="3317459757438853210">Inezinhlangothi ezimbili</translation>
 <translation id="3317678681329786349">Ikhamera nemakrofoni ivinjelwe</translation>
 <translation id="3320630259304269485">Ukuphequlula okuphephile (ukuvikelwa kumasayithi ayingozi) nezinye izilungiselelo zokuvikeleka</translation>
-<translation id="3323295311852517824">{NUM_FILES,plural, =0{Le datha inokuqukethwe okuzwelayo noma okuyingozi. Susa lokhu okuqukethwe uphinde uzame futhi.}=1{Leli fayela linokuqukethwe okuzwelayo noma okuyingozi. Susa lokhu okuqukethwe uphinde uzame futhi.}one{Lawa mafayela anokuqukethwe okuzwelayo noma okuyingozi. Susa lokhu okuqukethwe uphinde uzame futhi.}other{Lawa mafayela anokuqukethwe okuzwelayo noma okuyingozi. Susa lokhu okuqukethwe uphinde uzame futhi.}}</translation>
 <translation id="3323521181261657960">Ibhonasi! Unesikhathi sesikrini esiningi</translation>
 <translation id="3323577066981719144">Izinguquko ozenza lapha zisebenza kwi-Browser ye-Chrome Kuphela. Ukuze wenze ushintsho kumasethingi we-Browser yakho ye-Lacros Chrome, vula i-Browser ye-Lacros Chrome bese uya kumasethingi.</translation>
 <translation id="3325804108816646710">Ifuna amaphrofayela atholakalayo...</translation>
@@ -2685,7 +2683,6 @@
 <translation id="3445925074670675829">Idivayisi ye-USB-C</translation>
 <translation id="3446274660183028131">Sicela uqalise i-Parallels Desktop ukuze ufake i-Windows.</translation>
 <translation id="344630545793878684">Funda idatha yakho kumawebhusayithi athile</translation>
-<translation id="3446650212859500694">Leli fayela linokuqukethwe okuzwelayo</translation>
 <translation id="3447644283769633681">Vimba wonke amakhukhi wenkampani yangaphandle</translation>
 <translation id="3448492834076427715">Buyekeza i-akhawunti</translation>
 <translation id="3449393517661170867">Iwindi lethebhu elisha</translation>
@@ -3127,6 +3124,7 @@
 <translation id="385051799172605136">Emuva</translation>
 <translation id="3851428669031642514">Layisha izikripthi ezingaphephile</translation>
 <translation id="3852215160863921508">I-Assistant Yokokufaka</translation>
+<translation id="3853549894831560772">I-<ph name="DEVICE_NAME" /> ivuliwe</translation>
 <translation id="3854599674806204102">Khetha inketho</translation>
 <translation id="3854967233147778866">Nikeza ukuhumusha amawebhusayithi ngezinye izilimi</translation>
 <translation id="3854976556788175030">Ithreyi yokukhishwa igcwele</translation>
@@ -3459,6 +3457,7 @@
 <translation id="4163560723127662357">Ikhibhodi engaziwa</translation>
 <translation id="4165942112764990069">I-<ph name="USER_EMAIL" /> ayiyona eyenhlangano evumelekile. Xhumana nomlawuli wakho. Uma ungumphathi, ungasetha inhlangano yakho ngokuvakashela ku-: g.co/ChromeEnterpriseAccount</translation>
 <translation id="4165986682804962316">Izilungiselelo zesayithi</translation>
+<translation id="4167212649627589331">I-<ph name="APP_NAME" /> uzama ukufinyelela i-<ph name="DEVICE_NAME" />. Vala iswishi ye-<ph name="DEVICE_NAME" /> yobumfihlo ukuze uvumele ukufinyelela.</translation>
 <translation id="4167393659000039775">I-Google ayinasibopho sokulahleka kwedatha, futhi i-<ph name="DEVICE_OS" /> kungenzeka ingasebenzi kumamodeli angaqinisekisiwe. Funda kabanzi kokuthi g.co/flex/InstallGuide.</translation>
 <translation id="4167686856635546851">Amasayithi avamise ukusebenzisa i-JavaScript ukuze abonise izici zokuhlanganyela, ezifana namageyimu evidiyo noma amafomu ewebhu</translation>
 <translation id="4168015872538332605">Ezinye izilungiselelo ze-<ph name="PRIMARY_EMAIL" /> zabiwa nawe. Lezi zilungiselelo zingathinta kuphela i-akhawunti yakho uma usebenzisa ukungena ngemvume okuningi.</translation>
@@ -3917,11 +3916,11 @@
 <translation id="4602466770786743961">Vumela njalo i-<ph name="HOST" /> ukuthi ifinyelele kukhamela yakho nemakrofoni</translation>
 <translation id="4606551464649945562">Ungavumeli amasayithi ukudala imephu ye-3D yendawo ekuzungezile noma ukulandelela indawo yekhamera</translation>
 <translation id="4608500690299898628">&amp;Thola...</translation>
-<translation id="4608703838363792434">I-<ph name="FILE_NAME" /> inokuqukethwe okuzwelayo</translation>
 <translation id="4609987916561367134">Ivumelekile ukusebenzisa i-Javascript</translation>
 <translation id="4610162781778310380">I-<ph name="PLUGIN_NAME" /> ihlangabezane nephutha</translation>
 <translation id="4610637590575890427">Ingabe bowuqonde ukuya ku-<ph name="SITE" />?</translation>
 <translation id="4611114513649582138">Ukuxhumeka kwedatha kuyatholakala</translation>
+<translation id="4612841084470706111">Nikeza ukufinyelela kuwo wonke amasayithi aceliwe.</translation>
 <translation id="4613144866899789710">Ikhansela ukufakwa kwe-Linux...</translation>
 <translation id="4613271546271159013">Isandiso siguqule ukuthi iliphi ikhasi eliboniswayo uma uvula ithebhu entsha.</translation>
 <translation id="4615586811063744755">awekho amakhukhi akhethiwe</translation>
@@ -5688,6 +5687,7 @@
 <translation id="6291949900244949761">Buma uma isayithi lifuna ukufinyelela amadivayisi e-USB (kuyanconywa)</translation>
 <translation id="6291953229176937411">Bonisa kusitholi</translation>
 <translation id="6292699686837272722">Amathebhu ancipha abe ububanzi obumaphakathi</translation>
+<translation id="6293862149782163840">I-<ph name="DEVICE_NAME" /> ivaliwe</translation>
 <translation id="6294759976468837022">Isivinini sokuskena okuzenzakalelayo</translation>
 <translation id="6295158916970320988">Wonke amasayithi</translation>
 <translation id="6295855836753816081">Iyalondoloza...</translation>
@@ -5893,7 +5893,6 @@
 <translation id="6492396476180293140">Ikhamera yangaphakathi iyekiswe ukusebenza ngeswishi yehadiwe</translation>
 <translation id="6494327278868541139">Bonisa imininingwane yokuvikeleka okuthuthukisiwe</translation>
 <translation id="6494445798847293442">Akulona Igunya Lokuqinisekisa</translation>
-<translation id="6497457470714179223">{NUM_FILES,plural, =0{Le datha inokuqukethwe okuzwelayo noma okuyingozi}=1{Leli fayela linokuqukethwe okuzwelayo noma okuyingozi}one{Lawa mafayela anokuqukethwe okuzwelayo noma okuyingozi}other{Lawa mafayela anokuqukethwe okuzwelayo noma okuyingozi}}</translation>
 <translation id="6497548114956205206">Funda kabanzi mayelana nesilondolozi samandla</translation>
 <translation id="6497784818439587832">Shintsha usayizi wokubonisa ukuze wenze izinto esikrinini sakho zibe zincane noma zibe zinkulu</translation>
 <translation id="6497789971060331894">Ukuskrola ngokuphendukezela igundane</translation>
@@ -6041,7 +6040,6 @@
 <translation id="6621391692573306628">Ukuze uthumele le thebhu kwenye idivayisi, ngena ngemvume ku-Chrome kuwo womabili amadivayisi</translation>
 <translation id="6622980291894852883">Qhubeka uvimbele izithombe</translation>
 <translation id="6624036901798307345">Kumodi yethebhulethi, thepha inkinobho yamathuluzi wokubala ithebhu ukuvula umucu wethebhu omusha okhombisa izithonjana zethebhu ngayinye.</translation>
-<translation id="6624535038674360844">I-<ph name="FILE_NAME" /> inokuqukethwe okuzwelayo noma okuyingozi. Cela umnikazi wayo ukuze alungise.</translation>
 <translation id="6624687053722465643">Ubumnandi obunoshukela</translation>
 <translation id="6628328486509726751">Ilayishwe ngomhla ka-<ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
 <translation id="6630117778953264026">Ukuvikeleka okuqinile</translation>
@@ -8500,6 +8498,7 @@
 <translation id="8940081510938872932">Ikhompyutha yakho yenza izinto eziningi kakhulu khona manje. Zama futhi emuva kwesikhathi.</translation>
 <translation id="8940381019874223173">Kusukela ku-Google Photos yakho</translation>
 <translation id="8941173171815156065">Vuselela imvume ye-'<ph name="PERMISSION" />'</translation>
+<translation id="8941688920560496412">I-<ph name="DEVICE_NAME" /> i-valiwe</translation>
 <translation id="894191600409472540">Sungula amaphasiwedi aqinile</translation>
 <translation id="894360074127026135">Ukukhuphula isitebhisi kwamazwe ngamazwe kwe-Netscape</translation>
 <translation id="8944099748578356325">Sebenzisa ibhethri ngokushesha (okwamanje <ph name="BATTERY_PERCENTAGE" />%)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb
index aa7e579..a06af35 100644
--- a/chrome/app/resources/google_chrome_strings_iw.xtb
+++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -39,6 +39,7 @@
 <translation id="1662146548738125461">‏מידע על ChromeOS Flex</translation>
 <translation id="1674870198290878346">‏פתיחת הקישור בחלון &amp;אנונימי של Chrome</translation>
 <translation id="1682634494516646069">‏Google Chrome אינו יכול לקרוא ולכתוב בספריית הנתונים שלו: <ph name="USER_DATA_DIRECTORY" /></translation>
+<translation id="1691802391966922744">{COUNT,plural, =1{‏בהתאם להגדרה של האדמין, Chrome ייסגר אם הוא לא פעיל במשך יותר מדקה.}two{‏בהתאם להגדרה של האדמין, Chrome ייסגר אם הוא לא פעיל במשך יותר מ-# דקות.}many{‏בהתאם להגדרה של האדמין, Chrome ייסגר אם הוא לא פעיל במשך יותר מ-# דקות.}other{‏בהתאם להגדרה של האדמין, Chrome ייסגר אם הוא לא פעיל במשך יותר מ-# דקות.}}</translation>
 <translation id="1698376642261615901">‏Google Chrome הוא דפדפן אינטרנט המפעיל דפי אינטרנט ואפליקציות במהירות הבזק. זהו דפדפן מהיר, יציב וקל לשימוש. הגלישה באינטרנט בטוחה יותר הודות להגנה מפני תוכנות זדוניות ופישינג, המובנית ב-Google Chrome.</translation>
 <translation id="1713301662689114961">{0,plural, =1{‏Chrome יופעל מחדש בעוד שעה}two{‏Chrome יופעל מחדש בעוד # שעות}many{‏Chrome יופעל מחדש בעוד # שעות}other{‏Chrome יופעל מחדש בעוד # שעות}}</translation>
 <translation id="1734234790201236882">‏הסיסמה הזאת תישמר על ידי Chrome בחשבון Google. אין צורך לזכור אותה.</translation>
@@ -250,6 +251,7 @@
 <translation id="5941711191222866238">מזעור</translation>
 <translation id="5941830788786076944">‏Google Chrome יהיה דפדפן ברירת המחדל</translation>
 <translation id="6003112304606738118">מתבצעת הורדה… יש עוד <ph name="HOURS" /> שע'</translation>
+<translation id="6022388122721048220">{0,plural, =0{‏Chrome נסגר עכשיו.}=1{‏Chrome ייסגר בעוד שנייה.}two{‏Chrome ייסגר בעוד # שניות.}many{‏Chrome ייסגר בעוד # שניות.}other{‏Chrome ייסגר בעוד # שניות.}}</translation>
 <translation id="6040143037577758943">סגירה</translation>
 <translation id="6070348360322141662">‏לשיפור האבטחה, Google Chrome יצפין את הנתונים</translation>
 <translation id="608006075545470555">הוספת פרופיל עבודה לדפדפן זה</translation>
@@ -361,6 +363,7 @@
 <translation id="8349795646647783032">‏<ph name="BEGIN_BOLD" />איך אנחנו משתמשים בנתונים האלה:<ph name="END_BOLD" /> אתרים יכולים לשמור מידע ב-Chrome לגבי תחומי העניין שלך. לדוגמה, אם ביקרת באתר כדי לקנות נעליים למרתון, האתר עשוי להגדיר 'ריצת מרתון' כתחום עניין שלך. לאחר מכן, בביקור באתר שונה, למשל כדי להירשם למרוץ, יכול להיות שתוצג לך מודעה לנעלי ריצה על סמך תחומי העניין שלך.</translation>
 <translation id="8370517070665726704">‏Copyright <ph name="YEAR" /> Google LLC.‎ כל הזכויות שמורות.</translation>
 <translation id="8383226135083126309">‏<ph name="BEGIN_BOLD" />איך אנחנו משתמשים בנתונים האלה:<ph name="END_BOLD" /> Chrome יכול להעריך מהם תחומי העניין שלך. לאחר מכן, אתר שבו ביקרת יכול לשלוח בקשה ל-Chrome כדי לגלות מהם תחומי העניין שלך ולהתאים אישית את המודעות שמוצגות לך.</translation>
+<translation id="8387459386171870978">‏המשך השימוש ב-Chrome</translation>
 <translation id="8394720698884623075">‏המערכת בודקת כתובות URL בעזרת רשימה של אתרים לא בטוחים ששמורה ב-Chrome</translation>
 <translation id="840084489713044809">‏Google Chrome רוצה לייצא את הסיסמאות שלך.</translation>
 <translation id="8416347857511542594">‏מידע נוסף על ההתאמה האישית של המודעות ב-Chrome</translation>
@@ -391,6 +394,7 @@
 <translation id="8825634023950448068">‏כדי להגן על הפרטיות שלך, תחומי עניין שהוגדרו לפני יותר מ-4 שבועות נמחקים אוטומטית. עם המשך הגלישה, תחום עניין כלשהו עשוי להופיע שוב ברשימה. אם ב-Chrome הוגדר תחום עניין שגוי או שאינך רוצה לראות מודעות מסוימות, יש לך אפשרות להסיר תחומי עניין.</translation>
 <translation id="8834965163890861871">‏Google Chrome מנסה לערוך את הסיסמאות. כדי לאפשר את הפעולה הזו, יש להקליד את הסיסמה שלך ל-Windows.</translation>
 <translation id="884296878221830158">‏הגדרה זו גם קובעת איזה דף מוצג כשמפעילים את Chrome או לוחצים על הלחצן 'דף הבית'.</translation>
+<translation id="8847000024471094355">‏Chrome לא פעיל</translation>
 <translation id="8862326446509486874">אין לך זכויות שמתאימות להתקנה ברמת המערכת. יש לנסות להפעיל שוב את המתקין כמנהל מערכת.</translation>
 <translation id="8914504000324227558">‏הפעלה מחדש של Chrome</translation>
 <translation id="8922193594870374009">‏כדי לשלוח מספר מ-<ph name="ORIGIN" /> לטלפון Android, יש להיכנס אל Chrome בשני המכשירים.</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index ab67d42d..fe07064b8 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -583,7 +583,7 @@
     Auto Sign-in
   </message>
   <message name="IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_DESC" desc="Text that describes the 'Auto Sign-in' functionality to users.">
-    Automatically sign in to sites and apps using stored credentials. If turned off, you'll be asked for confirmation every time before signing in to a site or app.
+    Automatically sign in to sites and apps using saved credentials. If turned off, you'll be asked for confirmation every time before signing in to a site or app.
   </message>
   <message name="IDS_SETTINGS_PASSWORDS_LEAK_DETECTION_LABEL" desc="Label for a checkbox that allows users to choose whether chrome should check that credentials have been part of a leak.">
     Warn you if passwords are exposed in a data breach
@@ -751,8 +751,8 @@
   </message>
    <message name="IDS_SETTINGS_PASSWORD_MOVE_PASSWORDS_TO_ACCOUNT_COUNT" desc="Label shown in the link that open moving multiple password dialog.">
     {COUNT, plural,
-      =1 {{COUNT} password is stored on this device}
-      other {{COUNT} passwords are stored on this device}}
+      =1 {{COUNT} password is saved on this device}
+      other {{COUNT} passwords are saved on this device}}
   </message>
   <message name="IDS_SETTINGS_PASSWORD_MOVE_PASSWORDS_TO_ACCOUNT_DIALOG_BODY_TEXT" desc="Text displayed in the dialog that asks the user to select which passwords to move to their Google Account.">
     Choose which passwords to move. You can access them whenever you're signed in.
@@ -788,7 +788,7 @@
     Delete password?
   </message>
   <message name="IDS_SETTINGS_PASSWORD_REMOVE_DIALOG_BODY" desc="Description message for the dialog that asks the user which versions of a password to remove (device, Google Account or both).">
-    Your password for <ph name="WEBSITE">&lt;b&gt;$1&lt;/b&gt;</ph> is stored on this device and in your Google Account. Which one do you want to delete?
+    Your password for <ph name="WEBSITE">&lt;b&gt;$1&lt;/b&gt;</ph> is saved on this device and to your Google Account. Which one do you want to delete?
   </message>
   <message name="IDS_SETTINGS_PASSWORD_REMOVE_DIALOG_REMOVE_BUTTON_TEXT" desc="Text for the button that confirms the action in the dialog that asks the user which versions of a password to remove (device, Google Account or both).">
     Delete
@@ -893,10 +893,10 @@
     Password is more than 1000 characters
   </message>
   <message name="IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_ACCOUNT" desc="An error message for a row that wasn't imported, because the provided credential is already stored in their Google Password Manager. It is shown on the dialog for importing passwords if some passwords weren't imported.">
-    A password for this account is already stored in your Google Password Manager (<ph name="USER_EMAIL"><ex>elisa.g.becket@gmail.com</ex>$1</ph>)
+    A password for this account is already saved to your Google Password Manager (<ph name="USER_EMAIL"><ex>elisa.g.becket@gmail.com</ex>$1</ph>)
   </message>
   <message name="IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_DEVICE" desc="An error message for a row that wasn't imported, because the provided credential is already stored on their device. It is shown on the dialog for importing passwords if some passwords weren't imported.">
-    A password for this account is already stored on this device
+    A password for this account is already saved on this device
   </message>
   <message name="IDS_SETTINGS_PASSWORDS_IMPORT_FAILURES_SUMMARY" desc="Message is shown on the dialog for importing passwords if some passwords weren't imported.">
     Passwords not imported (<ph name="COUNT"><ex>42</ex>$1</ph>)
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_DESC.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_DESC.png.sha1
index 40efb256..3781a1af 100644
--- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_DESC.png.sha1
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_DESC.png.sha1
@@ -1 +1 @@
-89febf14d59c098c3eb328a72b36f39aa954d4d0
\ No newline at end of file
+5ad401b9d6fa0623992992c73a7a4b516478be38
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_ACCOUNT.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_ACCOUNT.png.sha1
index 0411fb52..d96092f 100644
--- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_ACCOUNT.png.sha1
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_ACCOUNT.png.sha1
@@ -1 +1 @@
-e67e594f5ac96939bd4ea9c24254b6e4ef6825aa
\ No newline at end of file
+21a41ac18feb9f7042a2806a19f829fc2c2ec89d
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_DEVICE.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_DEVICE.png.sha1
index 01bcde3..d96092f 100644
--- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_DEVICE.png.sha1
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_IMPORT_CONFLICT_DEVICE.png.sha1
@@ -1 +1 @@
-09c90387e951d2ea3ac77a8c0ec2006f9e391b07
\ No newline at end of file
+21a41ac18feb9f7042a2806a19f829fc2c2ec89d
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_MOVE_PASSWORDS_TO_ACCOUNT_COUNT.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_MOVE_PASSWORDS_TO_ACCOUNT_COUNT.png.sha1
index 9d655df..8f2a611 100644
--- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_MOVE_PASSWORDS_TO_ACCOUNT_COUNT.png.sha1
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_MOVE_PASSWORDS_TO_ACCOUNT_COUNT.png.sha1
@@ -1 +1 @@
-87aa0bf98595c21dd04ae264f209c10534a40285
\ No newline at end of file
+e43bf01deffa1260912423febdf92df33b6b5187
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_REMOVE_DIALOG_BODY.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_REMOVE_DIALOG_BODY.png.sha1
index 9fcc9a8d..336d77e 100644
--- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_REMOVE_DIALOG_BODY.png.sha1
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORD_REMOVE_DIALOG_BODY.png.sha1
@@ -1 +1 @@
-44462b2636bd411cd843d38282745059c3ca56ca
\ No newline at end of file
+4b0d5e892cf93434fa213704ad8ef1801c1b513b
\ No newline at end of file
diff --git a/chrome/app_shim/app_shim_controller.mm b/chrome/app_shim/app_shim_controller.mm
index 8188cd7..24c18857 100644
--- a/chrome/app_shim/app_shim_controller.mm
+++ b/chrome/app_shim/app_shim_controller.mm
@@ -369,8 +369,10 @@
   app_shim_info->app_id = params_.app_id;
   app_shim_info->app_url = params_.app_url;
   app_shim_info->launch_type =
-      base::CommandLine::ForCurrentProcess()->HasSwitch(
-          app_mode::kLaunchedByChromeProcessId)
+      (base::CommandLine::ForCurrentProcess()->HasSwitch(
+           app_mode::kLaunchedByChromeProcessId) &&
+       !base::CommandLine::ForCurrentProcess()->HasSwitch(
+           app_mode::kIsNormalLaunch))
           ? chrome::mojom::AppShimLaunchType::kRegisterOnly
           : chrome::mojom::AppShimLaunchType::kNormal;
   app_shim_info->files = launch_files_;
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index b00e440a..c501302 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -4779,6 +4779,10 @@
       "apps/app_preload_service/preload_app_definition.h",
       "apps/app_provisioning_service/app_provisioning_data_manager.cc",
       "apps/app_provisioning_service/app_provisioning_data_manager.h",
+      "apps/app_service/app_icon/app_icon_reader.cc",
+      "apps/app_service/app_icon/app_icon_reader.h",
+      "apps/app_service/app_icon/app_icon_writer.cc",
+      "apps/app_service/app_icon/app_icon_writer.h",
       "apps/app_service/app_icon/arc_activity_adaptive_icon_impl.cc",
       "apps/app_service/app_icon/arc_activity_adaptive_icon_impl.h",
       "apps/app_service/app_icon/arc_icon_once_loader.cc",
@@ -6248,8 +6252,6 @@
       "mac/initial_prefs.mm",
       "mac/install_from_dmg.h",
       "mac/install_from_dmg.mm",
-      "mac/install_updater.h",
-      "mac/install_updater.mm",
       "mac/key_window_notifier.cc",
       "mac/key_window_notifier.h",
       "mac/mac_startup_profiler.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 4da1d52..80258d0 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -600,6 +600,23 @@
 };
 
 const FeatureEntry::FeatureParam
+    kContextualPageActionReaderMode_NoRateLimiting[] = {
+        {"reader_mode_session_rate_limiting", "false"},
+};
+const FeatureEntry::FeatureParam kContextualPageActionReaderMode_RateLimited[] =
+    {
+        {"reader_mode_session_rate_limiting", "true"},
+};
+
+const FeatureEntry::FeatureVariation
+    kContextualPageActionReaderModeVariations[] = {
+        {"Use rate limiting", kContextualPageActionReaderMode_RateLimited,
+         std::size(kContextualPageActionReaderMode_RateLimited), nullptr},
+        {"Don't rate limit", kContextualPageActionReaderMode_NoRateLimiting,
+         std::size(kContextualPageActionReaderMode_NoRateLimiting), nullptr},
+};
+
+const FeatureEntry::FeatureParam
     kOmniboxRemoveSuggestionHeaderChevron_DisallowCollapse[] = {
         {"allow_group_collapsed_state", "false"}};
 const FeatureEntry::FeatureVariation
@@ -2941,15 +2958,6 @@
 constexpr char kWallpaperPerDeskName[] = "per-desk-wallpaper";
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
-#if BUILDFLAG(ENABLE_PAINT_PREVIEW) && BUILDFLAG(IS_ANDROID)
-const FeatureEntry::FeatureParam kPaintPreviewStartupWithAccessibility[] = {
-    {"has_accessibility_support", "true"}};
-
-const FeatureEntry::FeatureVariation kPaintPreviewStartupVariations[] = {
-    {"with accessibility support", kPaintPreviewStartupWithAccessibility,
-     std::size(kPaintPreviewStartupWithAccessibility), nullptr}};
-#endif  // BUILDFLAG(ENABLE_PAINT_PREVIEW) && BUILDFLAG(IS_ANDROID)
-
 #if BUILDFLAG(IS_CHROMEOS_ASH)
 constexpr char kBorealisBigGlInternalName[] = "borealis-big-gl";
 constexpr char kBorealisDiskManagementInternalName[] =
@@ -4440,8 +4448,10 @@
     {"contextual-page-actions-reader-mode",
      flag_descriptions::kContextualPageActionsReaderModeName,
      flag_descriptions::kContextualPageActionsReaderModeDescription, kOsAndroid,
-     FEATURE_VALUE_TYPE(
-         segmentation_platform::features::kContextualPageActionReaderMode)},
+     FEATURE_WITH_PARAMS_VALUE_TYPE(
+         segmentation_platform::features::kContextualPageActionReaderMode,
+         kContextualPageActionReaderModeVariations,
+         "ContextualPageActions")},
     {"reader-mode-heuristics", flag_descriptions::kReaderModeHeuristicsName,
      flag_descriptions::kReaderModeHeuristicsDescription, kOsAndroid,
      MULTI_VALUE_TYPE(kReaderModeHeuristicsChoices)},
@@ -7630,11 +7640,6 @@
     {"paint-preview-demo", flag_descriptions::kPaintPreviewDemoName,
      flag_descriptions::kPaintPreviewDemoDescription, kOsAndroid,
      FEATURE_VALUE_TYPE(paint_preview::kPaintPreviewDemo)},
-    {"paint-preview-startup", flag_descriptions::kPaintPreviewStartupName,
-     flag_descriptions::kPaintPreviewStartupDescription, kOsAndroid,
-     FEATURE_WITH_PARAMS_VALUE_TYPE(paint_preview::kPaintPreviewShowOnStartup,
-                                    kPaintPreviewStartupVariations,
-                                    "PaintPreviewShowOnStartup")},
 #endif  // BUILDFLAG(ENABLE_PAINT_PREVIEW) && BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(IS_ANDROID)
diff --git a/chrome/browser/accuracy_tips/accuracy_service_factory.cc b/chrome/browser/accuracy_tips/accuracy_service_factory.cc
index 1f00e41..c23568d 100644
--- a/chrome/browser/accuracy_tips/accuracy_service_factory.cc
+++ b/chrome/browser/accuracy_tips/accuracy_service_factory.cc
@@ -35,6 +35,7 @@
 
 AccuracyServiceFactory::AccuracyServiceFactory()
     : ProfileKeyedServiceFactory("AccuracyServiceFactory") {
+  DependsOn(HistoryServiceFactory::GetInstance());
   DependsOn(site_engagement::SiteEngagementServiceFactory::GetInstance());
 }
 
diff --git a/chrome/browser/android/context_menu/context_menu_native_delegate_impl.cc b/chrome/browser/android/context_menu/context_menu_native_delegate_impl.cc
index bf5e49a..c2f643f 100644
--- a/chrome/browser/android/context_menu/context_menu_native_delegate_impl.cc
+++ b/chrome/browser/android/context_menu/context_menu_native_delegate_impl.cc
@@ -174,7 +174,7 @@
   auto* thumbnail_capturer_proxy = chrome_render_frame.get();
   thumbnail_capturer_proxy->RequestImageForContextNode(
       max_width_px * max_height_px, gfx::Size(max_width_px, max_height_px),
-      image_format,
+      image_format, chrome::mojom::kDefaultQuality,
       base::BindOnce(
           std::move(retrieve_callback), std::move(chrome_render_frame),
           base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
diff --git a/chrome/browser/apps/app_service/app_icon/app_icon_reader.cc b/chrome/browser/apps/app_service/app_icon/app_icon_reader.cc
new file mode 100644
index 0000000..96eb25cc
--- /dev/null
+++ b/chrome/browser/apps/app_service/app_icon/app_icon_reader.cc
@@ -0,0 +1,20 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/apps/app_service/app_icon/app_icon_reader.h"
+
+namespace apps {
+
+AppIconReader::AppIconReader() = default;
+
+AppIconReader::~AppIconReader() = default;
+
+void AppIconReader::ReadIcons(const std::string& app_id,
+                              int32_t size_hint_in_dip,
+                              IconEffects icon_effects,
+                              LoadIconCallback callback) {
+  // TODO(crbug.com/1380608): Implement the icon reading function.
+}
+
+}  // namespace apps
diff --git a/chrome/browser/apps/app_service/app_icon/app_icon_reader.h b/chrome/browser/apps/app_service/app_icon/app_icon_reader.h
new file mode 100644
index 0000000..79762a8
--- /dev/null
+++ b/chrome/browser/apps/app_service/app_icon/app_icon_reader.h
@@ -0,0 +1,36 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_APP_ICON_READER_H_
+#define CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_APP_ICON_READER_H_
+
+#include <string>
+
+#include "chrome/browser/apps/app_service/app_icon/app_icon_util.h"
+#include "components/services/app_service/public/cpp/icon_types.h"
+
+namespace apps {
+
+// AppIconReader reads app icons from the icon image files in the local
+// disk and provides an ImageSkia for UI code to use.
+//
+// TODO(crbug.com/1380608): Implement the icon reading function.
+class AppIconReader {
+ public:
+  AppIconReader();
+  AppIconReader(const AppIconReader&) = delete;
+  AppIconReader& operator=(const AppIconReader&) = delete;
+  ~AppIconReader();
+
+  // Reads specified app icons from the local disk for an app identified by
+  // `app_id`.
+  void ReadIcons(const std::string& app_id,
+                 int32_t size_hint_in_dip,
+                 IconEffects icon_effects,
+                 LoadIconCallback callback);
+};
+
+}  // namespace apps
+
+#endif  // CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_APP_ICON_READER_H_
diff --git a/chrome/browser/apps/app_service/app_icon/app_icon_writer.cc b/chrome/browser/apps/app_service/app_icon/app_icon_writer.cc
new file mode 100644
index 0000000..baefad6
--- /dev/null
+++ b/chrome/browser/apps/app_service/app_icon/app_icon_writer.cc
@@ -0,0 +1,13 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/apps/app_service/app_icon/app_icon_writer.h"
+
+namespace apps {
+
+AppIconWriter::AppIconWriter() = default;
+
+AppIconWriter::~AppIconWriter() = default;
+
+}  // namespace apps
diff --git a/chrome/browser/apps/app_service/app_icon/app_icon_writer.h b/chrome/browser/apps/app_service/app_icon/app_icon_writer.h
new file mode 100644
index 0000000..bafba27
--- /dev/null
+++ b/chrome/browser/apps/app_service/app_icon/app_icon_writer.h
@@ -0,0 +1,23 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_APP_ICON_WRITER_H_
+#define CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_APP_ICON_WRITER_H_
+
+namespace apps {
+
+// AppIconWriter writes app icons to the icon image files in the local disk.
+//
+// TODO(crbug.com/1380608): Implement the icon writing function.
+class AppIconWriter {
+ public:
+  AppIconWriter();
+  AppIconWriter(const AppIconWriter&) = delete;
+  AppIconWriter& operator=(const AppIconWriter&) = delete;
+  ~AppIconWriter();
+};
+
+}  // namespace apps
+
+#endif  // CHROME_BROWSER_APPS_APP_SERVICE_APP_ICON_APP_ICON_WRITER_H_
diff --git a/chrome/browser/apps/app_service/publishers/arc_apps_factory.cc b/chrome/browser/apps/app_service/publishers/arc_apps_factory.cc
index ef021ff..53512283 100644
--- a/chrome/browser/apps/app_service/publishers/arc_apps_factory.cc
+++ b/chrome/browser/apps/app_service/publishers/arc_apps_factory.cc
@@ -33,9 +33,9 @@
 }
 
 ArcAppsFactory::ArcAppsFactory() : ProfileKeyedServiceFactory("ArcApps") {
+  DependsOn(AppServiceProxyFactory::GetInstance());
   DependsOn(ArcAppListPrefsFactory::GetInstance());
   DependsOn(arc::ArcIntentHelperBridge::GetFactory());
-  DependsOn(apps::AppServiceProxyFactory::GetInstance());
 }
 
 KeyedService* ArcAppsFactory::BuildServiceInstanceFor(
diff --git a/chrome/browser/apps/app_service/publishers/standalone_browser_extension_apps_factory.cc b/chrome/browser/apps/app_service/publishers/standalone_browser_extension_apps_factory.cc
index 19fe9e69..c9780839 100644
--- a/chrome/browser/apps/app_service/publishers/standalone_browser_extension_apps_factory.cc
+++ b/chrome/browser/apps/app_service/publishers/standalone_browser_extension_apps_factory.cc
@@ -43,7 +43,7 @@
           ProfileSelections::Builder()
               .WithGuest(ProfileSelection::kOffTheRecordOnly)
               .Build()) {
-  DependsOn(apps::AppServiceProxyFactory::GetInstance());
+  DependsOn(AppServiceProxyFactory::GetInstance());
 }
 
 KeyedService*
@@ -88,7 +88,7 @@
           ProfileSelections::Builder()
               .WithGuest(ProfileSelection::kOffTheRecordOnly)
               .Build()) {
-  DependsOn(apps::AppServiceProxyFactory::GetInstance());
+  DependsOn(AppServiceProxyFactory::GetInstance());
 }
 
 KeyedService*
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn
index 638d880..e97def21 100644
--- a/chrome/browser/ash/BUILD.gn
+++ b/chrome/browser/ash/BUILD.gn
@@ -2158,8 +2158,8 @@
     "policy/enrollment/enrollment_status.h",
     "policy/enrollment/fake_auto_enrollment_client.cc",
     "policy/enrollment/fake_auto_enrollment_client.h",
-    "policy/enrollment/psm/fake_rlwe_client.cc",
-    "policy/enrollment/psm/fake_rlwe_client.h",
+    "policy/enrollment/psm/construct_rlwe_id.cc",
+    "policy/enrollment/psm/construct_rlwe_id.h",
     "policy/enrollment/psm/fake_rlwe_dmserver_client.cc",
     "policy/enrollment/psm/fake_rlwe_dmserver_client.h",
     "policy/enrollment/psm/rlwe_client.h",
@@ -2168,11 +2168,6 @@
     "policy/enrollment/psm/rlwe_dmserver_client.h",
     "policy/enrollment/psm/rlwe_dmserver_client_impl.cc",
     "policy/enrollment/psm/rlwe_dmserver_client_impl.h",
-    "policy/enrollment/psm/rlwe_id_provider.h",
-    "policy/enrollment/psm/rlwe_id_provider_impl.cc",
-    "policy/enrollment/psm/rlwe_id_provider_impl.h",
-    "policy/enrollment/psm/testing_rlwe_id_provider.cc",
-    "policy/enrollment/psm/testing_rlwe_id_provider.h",
     "policy/enrollment/tpm_enrollment_key_signing_service.cc",
     "policy/enrollment/tpm_enrollment_key_signing_service.h",
     "policy/external_data/cloud_external_data_manager_base.cc",
diff --git a/chrome/browser/ash/accessibility/dictation_browsertest.cc b/chrome/browser/ash/accessibility/dictation_browsertest.cc
index 9c5705a..937a9d9 100644
--- a/chrome/browser/ash/accessibility/dictation_browsertest.cc
+++ b/chrome/browser/ash/accessibility/dictation_browsertest.cc
@@ -1287,7 +1287,12 @@
   SendFinalResultAndWaitForEditableValue("the weather outside", expected);
 }
 
-IN_PROC_BROWSER_TEST_P(DictationCommandsTest, NavEndTextSimple) {
+#if BUILDFLAG(IS_CHROMEOS) && defined(MEMORY_SANITIZER)
+#define MAYBE_NavEndTextSimple DISABLED_NavEndTextSimple
+#else
+#define MAYBE_NavEndTextSimple NavEndTextSimple
+#endif
+IN_PROC_BROWSER_TEST_P(DictationCommandsTest, MAYBE_NavEndTextSimple) {
   SendFinalResultAndWaitForEditableValue("The weather outside is",
                                          "The weather outside is");
   SendFinalResultAndWaitForCaretBoundsChanged("move to the start");
diff --git a/chrome/browser/ash/app_restore/app_restore_arc_task_handler.cc b/chrome/browser/ash/app_restore/app_restore_arc_task_handler.cc
index a32413f7..8b51cd32 100644
--- a/chrome/browser/ash/app_restore/app_restore_arc_task_handler.cc
+++ b/chrome/browser/ash/app_restore/app_restore_arc_task_handler.cc
@@ -84,6 +84,10 @@
     if (launcher->IsAppPendingRestore(arc_app_id))
       return true;
   }
+  for (auto& [unused, launcher] : arc_app_single_restore_handlers_) {
+    if (launcher->IsAppPendingRestore(arc_app_id))
+      return true;
+  }
   return false;
 }
 
diff --git a/chrome/browser/ash/arc/tracing/arc_cpu_event.cc b/chrome/browser/ash/arc/tracing/arc_cpu_event.cc
index 108fda09..1c7bc10 100644
--- a/chrome/browser/ash/arc/tracing/arc_cpu_event.cc
+++ b/chrome/browser/ash/arc/tracing/arc_cpu_event.cc
@@ -120,10 +120,10 @@
   return AddCpuEvent(&(*all_cpu_events)[cpu_id], timestamp, type, tid);
 }
 
-base::ListValue SerializeCpuEvents(const CpuEvents& cpu_events) {
-  base::ListValue list;
+base::Value::List SerializeCpuEvents(const CpuEvents& cpu_events) {
+  base::Value::List list;
   for (const auto& event : cpu_events) {
-    base::ListValue event_value;
+    base::Value::List event_value;
     event_value.Append(base::Value(static_cast<int>(event.type)));
     event_value.Append(base::Value(static_cast<double>(event.timestamp)));
     event_value.Append(base::Value(static_cast<int>(event.tid)));
@@ -132,8 +132,8 @@
   return list;
 }
 
-base::ListValue SerializeAllCpuEvents(const AllCpuEvents& all_cpu_events) {
-  base::ListValue list;
+base::Value::List SerializeAllCpuEvents(const AllCpuEvents& all_cpu_events) {
+  base::Value::List list;
   for (const auto& cpu_events : all_cpu_events)
     list.Append(SerializeCpuEvents(cpu_events));
   return list;
diff --git a/chrome/browser/ash/arc/tracing/arc_cpu_event.h b/chrome/browser/ash/arc/tracing/arc_cpu_event.h
index ac78fbd5..ecdd048 100644
--- a/chrome/browser/ash/arc/tracing/arc_cpu_event.h
+++ b/chrome/browser/ash/arc/tracing/arc_cpu_event.h
@@ -51,15 +51,15 @@
                     ArcCpuEvent::Type type,
                     uint32_t tid);
 
-// Serializes CPU events into |base::ListValue|.
-base::ListValue SerializeCpuEvents(const CpuEvents& cpu_events);
-// Serializes all CPU events into |base::ListValue|.
-base::ListValue SerializeAllCpuEvents(const AllCpuEvents& all_cpu_events);
+// Serializes CPU events into |base::Value::List|.
+base::Value::List SerializeCpuEvents(const CpuEvents& cpu_events);
+// Serializes all CPU events into |base::Value::List|.
+base::Value::List SerializeAllCpuEvents(const AllCpuEvents& all_cpu_events);
 
-// Loads CPU events from |base::ListValue|. Returns true in case CPU events were
+// Loads CPU events from |base::Value::List|. Returns true in case CPU events were
 // loaded successfully.
 bool LoadCpuEvents(const base::Value* value, CpuEvents* cpu_events);
-// Loads all CPU events from |base::ListValue|. Returns true in case CPU events
+// Loads all CPU events from |base::Value::List|. Returns true in case CPU events
 // were loaded successfully.
 bool LoadAllCpuEvents(const base::Value* value, AllCpuEvents* all_cpu_events);
 
diff --git a/chrome/browser/ash/arc/tracing/arc_system_model.cc b/chrome/browser/ash/arc/tracing/arc_system_model.cc
index ee40ea3..ebd3fd8 100644
--- a/chrome/browser/ash/arc/tracing/arc_system_model.cc
+++ b/chrome/browser/ash/arc/tracing/arc_system_model.cc
@@ -47,15 +47,15 @@
   return true;
 }
 
-base::DictionaryValue SerializeThreads(
+base::Value::Dict SerializeThreads(
     const ArcSystemModel::ThreadMap& threads) {
-  base::DictionaryValue result;
+  base::Value::Dict result;
 
   for (auto& thread_info : threads) {
-    base::DictionaryValue entry;
-    entry.SetKey(kKeyPid, base::Value(thread_info.second.pid));
-    entry.SetKey(kKeyName, base::Value(thread_info.second.name));
-    result.SetKey(base::StringPrintf("%d", thread_info.first),
+    base::Value::Dict entry;
+    entry.Set(kKeyPid, base::Value(thread_info.second.pid));
+    entry.Set(kKeyName, base::Value(thread_info.second.name));
+    result.Set(base::StringPrintf("%d", thread_info.first),
                   std::move(entry));
   }
 
@@ -152,11 +152,11 @@
   memory_events_ = other.memory_events_;
 }
 
-base::DictionaryValue ArcSystemModel::Serialize() const {
-  base::DictionaryValue result;
-  result.SetKey(kKeyThreads, SerializeThreads(thread_map_));
-  result.SetKey(kKeyCpu, SerializeAllCpuEvents(all_cpu_events_));
-  result.SetKey(kKeyMemory, SerializeValueEvents(memory_events_));
+base::Value::Dict ArcSystemModel::Serialize() const {
+  base::Value::Dict result;
+  result.Set(kKeyThreads, SerializeThreads(thread_map_));
+  result.Set(kKeyCpu, SerializeAllCpuEvents(all_cpu_events_));
+  result.Set(kKeyMemory, SerializeValueEvents(memory_events_));
   return result;
 }
 
diff --git a/chrome/browser/ash/arc/tracing/arc_system_model.h b/chrome/browser/ash/arc/tracing/arc_system_model.h
index efd2445..99d09005 100644
--- a/chrome/browser/ash/arc/tracing/arc_system_model.h
+++ b/chrome/browser/ash/arc/tracing/arc_system_model.h
@@ -53,7 +53,7 @@
   void CloseRangeForValueEvents(uint64_t max_timestamp);
 
   void CopyFrom(const ArcSystemModel& other);
-  base::DictionaryValue Serialize() const;
+  base::Value::Dict Serialize() const;
   bool Load(const base::Value* root);
 
   bool operator==(const ArcSystemModel& other) const;
diff --git a/chrome/browser/ash/arc/tracing/arc_value_event.cc b/chrome/browser/ash/arc/tracing/arc_value_event.cc
index 28e8579..eb16266 100644
--- a/chrome/browser/ash/arc/tracing/arc_value_event.cc
+++ b/chrome/browser/ash/arc/tracing/arc_value_event.cc
@@ -14,10 +14,10 @@
          value == other.value;
 }
 
-base::ListValue SerializeValueEvents(const ValueEvents& value_events) {
-  base::ListValue list;
+base::Value::List SerializeValueEvents(const ValueEvents& value_events) {
+  base::Value::List list;
   for (const auto& event : value_events) {
-    base::ListValue event_value;
+    base::Value::List event_value;
     event_value.Append(base::Value(static_cast<int>(event.type)));
     event_value.Append(base::Value(static_cast<double>(event.timestamp)));
     event_value.Append(base::Value(event.value));
diff --git a/chrome/browser/ash/arc/tracing/arc_value_event.h b/chrome/browser/ash/arc/tracing/arc_value_event.h
index 1525ca0..b9891654 100644
--- a/chrome/browser/ash/arc/tracing/arc_value_event.h
+++ b/chrome/browser/ash/arc/tracing/arc_value_event.h
@@ -60,10 +60,10 @@
 
 using ValueEvents = std::vector<ArcValueEvent>;
 
-// Serializes value events into |base::ListValue|.
-base::ListValue SerializeValueEvents(const ValueEvents& value_events);
+// Serializes value events into |base::Value::List|.
+base::Value::List SerializeValueEvents(const ValueEvents& value_events);
 
-// Loads value events from |base::ListValue|. Returns true in case value
+// Loads value events from |base::Value::List|. Returns true in case value
 // events were loaded successfully.
 bool LoadValueEvents(const base::Value* value, ValueEvents* value_events);
 
diff --git a/chrome/browser/ash/arc/tracing/arc_value_event_unittest.cc b/chrome/browser/ash/arc/tracing/arc_value_event_unittest.cc
index 63c29b9..876101a 100644
--- a/chrome/browser/ash/arc/tracing/arc_value_event_unittest.cc
+++ b/chrome/browser/ash/arc/tracing/arc_value_event_unittest.cc
@@ -67,7 +67,7 @@
       {103 /* timestamp */, ArcValueEvent::Type::kSwapWrite, 40 /* value */},
       {104 /* timestamp */, ArcValueEvent::Type::kSwapWait, 50 /* value */}};
 
-  const base::ListValue value = SerializeValueEvents(events);
+  const base::Value value = base::Value(SerializeValueEvents(events));
 
   ValueEvents loaded_events;
   EXPECT_TRUE(LoadValueEvents(&value, &loaded_events));
diff --git a/chrome/browser/ash/crosapi/browser_data_back_migrator.cc b/chrome/browser/ash/crosapi/browser_data_back_migrator.cc
index bacef2be..2c34fa3 100644
--- a/chrome/browser/ash/crosapi/browser_data_back_migrator.cc
+++ b/chrome/browser/ash/crosapi/browser_data_back_migrator.cc
@@ -44,8 +44,12 @@
 }  // namespace
 
 BrowserDataBackMigrator::BrowserDataBackMigrator(
-    const base::FilePath& ash_profile_dir)
-    : ash_profile_dir_(ash_profile_dir) {}
+    const base::FilePath& ash_profile_dir,
+    const std::string& user_id_hash,
+    PrefService* local_state)
+    : ash_profile_dir_(ash_profile_dir),
+      user_id_hash_(user_id_hash),
+      local_state_(local_state) {}
 
 BrowserDataBackMigrator::~BrowserDataBackMigrator() = default;
 
@@ -453,9 +457,30 @@
     return;
   }
 
+  SetProgress(MigrationStep::kMarkMigrationComplete);
+  // MarkMigrationComplete needs to run on the UI thread first to update prefs.
+  MarkMigrationComplete();
+}
+
+// static
+BrowserDataBackMigrator::TaskResult
+BrowserDataBackMigrator::MarkMigrationComplete() {
+  LOG(WARNING) << "Running MarkMigrationComplete()";
+
+  crosapi::browser_util::SetProfileDataBackwardMigrationCompletedForUser(
+      local_state_, user_id_hash_);
+
+  local_state_->CommitPendingWrite(
+      base::BindOnce(&BrowserDataBackMigrator::OnMarkMigrationComplete,
+                     weak_factory_.GetWeakPtr()));
+
+  return {TaskStatus::kSucceeded};
+}
+
+void BrowserDataBackMigrator::OnMarkMigrationComplete() {
   LOG(WARNING) << "Backward migration completed successfully.";
   SetProgress(MigrationStep::kDone);
-  std::move(finished_callback_).Run(ToResult(result));
+  std::move(finished_callback_).Run(ToResult({TaskStatus::kSucceeded}));
 }
 
 // static
diff --git a/chrome/browser/ash/crosapi/browser_data_back_migrator.h b/chrome/browser/ash/crosapi/browser_data_back_migrator.h
index 91522fa..b13b276 100644
--- a/chrome/browser/ash/crosapi/browser_data_back_migrator.h
+++ b/chrome/browser/ash/crosapi/browser_data_back_migrator.h
@@ -14,6 +14,8 @@
 #include "components/account_id/account_id.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
+class PrefService;
+
 namespace ash {
 
 namespace browser_data_back_migrator {
@@ -33,7 +35,9 @@
       base::OnceCallback<void(BrowserDataBackMigrator::Result)>;
   using BackMigrationProgressCallback = base::RepeatingCallback<void(int)>;
 
-  explicit BrowserDataBackMigrator(const base::FilePath& ash_profile_dir);
+  explicit BrowserDataBackMigrator(const base::FilePath& ash_profile_dir,
+                                   const std::string& user_id_hash,
+                                   PrefService* local_state);
   BrowserDataBackMigrator(const BrowserDataBackMigrator&) = delete;
   BrowserDataBackMigrator& operator=(const BrowserDataBackMigrator&) = delete;
   ~BrowserDataBackMigrator();
@@ -98,7 +102,8 @@
     kMoveMergedItemsBackToAsh = 5,
     kDeleteLacrosDir = 6,
     kDeleteTmpDir = 7,
-    kDone = 8,
+    kMarkMigrationComplete = 8,
+    kDone = 9,
     kMaxValue = kDone,
   };
 
@@ -160,12 +165,18 @@
   // Called as a reply to `DeleteLacrosDir()`.
   void OnDeleteLacrosDir(TaskResult result);
 
-  // Deletes the temporary directory and completes the backward migration.
+  // Deletes the temporary directory.
   static TaskResult DeleteTmpDir(const base::FilePath& ash_profile_dir);
 
   // Called as a reply to `DeleteTmpDir()`.
   void OnDeleteTmpDir(TaskResult result);
 
+  // Marks backward migration as complete.
+  TaskResult MarkMigrationComplete();
+
+  // Called as a reply to `MarkMigrationComplete()`.
+  void OnMarkMigrationComplete();
+
   // For `target_dir` copy subdirectories belonging to extensions that are in
   // both Chromes from `lacros_profile_dir` to `tmp_user_dir`.
   static bool MergeCommonExtensionsDataFiles(
@@ -242,6 +253,12 @@
   // Path to the ash profile directory.
   const base::FilePath ash_profile_dir_;
 
+  // A hash string of the profile user ID.
+  const std::string user_id_hash_;
+
+  // Local state prefs, not owned.
+  PrefService* local_state_ = nullptr;
+
   base::WeakPtrFactory<BrowserDataBackMigrator> weak_factory_{this};
 };
 
diff --git a/chrome/browser/ash/crosapi/browser_util.cc b/chrome/browser/ash/crosapi/browser_util.cc
index 115f43d..8fe7d78 100644
--- a/chrome/browser/ash/crosapi/browser_util.cc
+++ b/chrome/browser/ash/crosapi/browser_util.cc
@@ -304,6 +304,8 @@
     "lacros.profile_migration_completed_for_user";
 const char kProfileMoveMigrationCompletedForUserPref[] =
     "lacros.profile_move_migration_completed_for_user";
+const char kProfileDataBackwardMigrationCompletedForUserPref[] =
+    "lacros.profile_data_backward_migration_completed_for_user";
 // This pref is to record whether the user clicks "Go to files" button
 // on error page of the data migration.
 const char kGotoFilesPref[] = "lacros.goto_files";
@@ -317,9 +319,11 @@
 void RegisterLocalStatePrefs(PrefRegistrySimple* registry) {
   registry->RegisterDictionaryPref(kDataVerPref);
   registry->RegisterDictionaryPref(kProfileMigrationCompletedForUserPref,
-                                   base::DictionaryValue());
+                                   base::Value::Dict());
   registry->RegisterDictionaryPref(kProfileMoveMigrationCompletedForUserPref,
-                                   base::DictionaryValue());
+                                   base::Value::Dict());
+  registry->RegisterDictionaryPref(
+      kProfileDataBackwardMigrationCompletedForUserPref, base::Value::Dict());
   registry->RegisterListPref(kGotoFilesPref);
 }
 
@@ -991,6 +995,23 @@
   }
 }
 
+void SetProfileDataBackwardMigrationCompletedForUser(
+    PrefService* local_state,
+    const std::string& user_id_hash) {
+  ScopedDictPrefUpdate update(
+      local_state, kProfileDataBackwardMigrationCompletedForUserPref);
+  update->Set(user_id_hash, true);
+}
+
+void ClearProfileDataBackwardMigrationCompletedForUser(
+    PrefService* local_state,
+    const std::string& user_id_hash) {
+  ScopedDictPrefUpdate update(
+      local_state, kProfileDataBackwardMigrationCompletedForUserPref);
+  base::Value::Dict& dict = update.Get();
+  dict.Remove(user_id_hash);
+}
+
 void SetProfileMigrationCompletedForTest(bool is_completed) {
   g_profile_migration_completed_for_test = is_completed;
 }
diff --git a/chrome/browser/ash/crosapi/browser_util.h b/chrome/browser/ash/crosapi/browser_util.h
index 9282248e..eaccf12 100644
--- a/chrome/browser/ash/crosapi/browser_util.h
+++ b/chrome/browser/ash/crosapi/browser_util.h
@@ -362,6 +362,18 @@
 void ClearProfileMigrationCompletedForUser(PrefService* local_state,
                                            const std::string& user_id_hash);
 
+// Sets the value of `kProfileDataBackwardMigrationCompletedForUserPref` for the
+// user identified by `user_id_hash`;
+void SetProfileDataBackwardMigrationCompletedForUser(
+    PrefService* local_state,
+    const std::string& user_id_hash);
+
+// Clears the value of `kProfileDataBackwardMigrationCompletedForUserPref` for
+// the user identified by `user_id_hash`.
+void ClearProfileDataBackwardMigrationCompletedForUser(
+    PrefService* local_state,
+    const std::string& user_id_hash);
+
 // Makes `IsProfileMigrationCompletedForUser()` return true without actually
 // updating Local State. It allows tests to avoid marking profile migration as
 // completed by getting user_id_hash of the logged in user and updating
diff --git a/chrome/browser/ash/device_sync/device_sync_client_factory.cc b/chrome/browser/ash/device_sync/device_sync_client_factory.cc
index 04a39393..3f8e16e 100644
--- a/chrome/browser/ash/device_sync/device_sync_client_factory.cc
+++ b/chrome/browser/ash/device_sync/device_sync_client_factory.cc
@@ -105,6 +105,7 @@
 
 DeviceSyncClientFactory::DeviceSyncClientFactory()
     : ProfileKeyedServiceFactory("DeviceSyncClient") {
+  DependsOn(ClientAppMetadataProviderServiceFactory::GetInstance());
   DependsOn(IdentityManagerFactory::GetInstance());
   DependsOn(gcm::GCMProfileServiceFactory::GetInstance());
 
diff --git a/chrome/browser/ash/login/auth/cryptohome_authenticator_unittest.cc b/chrome/browser/ash/login/auth/cryptohome_authenticator_unittest.cc
index bb59006..2bd47e79 100644
--- a/chrome/browser/ash/login/auth/cryptohome_authenticator_unittest.cc
+++ b/chrome/browser/ash/login/auth/cryptohome_authenticator_unittest.cc
@@ -291,8 +291,11 @@
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kLoginManager);
 
-    fake_userdataauth_client_ = new TestUserDataAuthClient;
-
+    // The TestUserDataAuthClient we create here is deleted via the call to
+    // UserDataAuthClient::Shutdown() in TearDown();
+    fake_userdataauth_client_ = new TestUserDataAuthClient();
+    UserDataAuthClient::OverrideGlobalInstanceForTesting(
+        fake_userdataauth_client_);
     CryptohomeMiscClient::InitializeFake();
     SystemSaltGetter::Initialize();
 
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc b/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc
index e8f33e8d..94f57b0 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.cc
@@ -202,7 +202,7 @@
   local_and_remote_devices.push_back(remote_devices[0]);
   local_and_remote_devices.push_back(*local_device);
 
-  base::ListValue device_list;
+  base::Value::List device_list;
   for (const auto& device : local_and_remote_devices) {
     base::Value::Dict dict;
     std::string b64_public_key, b64_psk;
@@ -254,13 +254,13 @@
                     << ", unlock_key: " << unlock_key
                     << ", id: " << device.GetTruncatedDeviceIdForLogs()
                     << " }.";
-    device_list.GetList().Append(std::move(dict));
+    device_list.Append(std::move(dict));
   }
 
-  if (device_list.GetList().size() != 2u) {
+  if (device_list.size() != 2u) {
     PA_LOG(ERROR) << "There should only be 2 devices persisted, the host and "
                      "the client, but there are: "
-                  << device_list.GetList().size();
+                  << device_list.size();
     NOTREACHED();
   }
 
@@ -268,14 +268,14 @@
 }
 
 void EasyUnlockServiceRegular::SetStoredRemoteDevices(
-    const base::ListValue& devices) {
+    const base::Value::List& devices) {
   std::string remote_devices_json;
   JSONStringValueSerializer serializer(&remote_devices_json);
   serializer.Serialize(devices);
 
   ScopedDictPrefUpdate pairing_update(profile()->GetPrefs(),
                                       prefs::kEasyUnlockPairing);
-  if (devices.GetList().empty())
+  if (devices.empty())
     pairing_update->Remove(kKeyDevices);
   else
     pairing_update->Set(kKeyDevices, devices.Clone());
diff --git a/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.h b/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.h
index 3bcff384..270a9349 100644
--- a/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.h
+++ b/chrome/browser/ash/login/easy_unlock/easy_unlock_service_regular.h
@@ -74,7 +74,7 @@
   // Persists Smart Lock host and local device to prefs, and then informs
   // the base class to potentially update Smart Lock host and local device
   // stored in the TPM.
-  void SetStoredRemoteDevices(const base::ListValue& devices);
+  void SetStoredRemoteDevices(const base::Value::List& devices);
 
   // EasyUnlockService implementation:
   proximity_auth::ProximityAuthPrefManager* GetProximityAuthPrefManager()
diff --git a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc
index 20b05252..61e7d31a 100644
--- a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc
+++ b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc
@@ -19,11 +19,10 @@
 #include "base/time/time.h"
 #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
 #include "chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.h"
-#include "chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.h"
+#include "chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_client.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.h"
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.h"
 #include "chrome/browser/ash/policy/server_backed_state/server_backed_state_keys_broker.h"
 #include "chrome/browser/ash/settings/device_settings_service.h"
 #include "chrome/browser/browser_process.h"
@@ -170,24 +169,9 @@
 
 }  // namespace
 
-// static
-bool AutoEnrollmentController::ShouldUseFakePsmRlweClient() {
-  return base::CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kEnterpriseUseFakePsmRlweClientForTesting);
-}
-
-AutoEnrollmentController::AutoEnrollmentController() {
-  // Create the PSM (private set membership) RLWE client factory depending on
-  // whether switches::kEnterpriseUseFakePsmRlweClient is set.
-  if (ShouldUseFakePsmRlweClient()) {
-    CHECK_IS_TEST();
-    psm_rlwe_client_factory_ =
-        std::make_unique<policy::psm::FakeRlweClient::FactoryImpl>();
-  } else {
-    psm_rlwe_client_factory_ =
-        std::make_unique<policy::psm::RlweClientImpl::FactoryImpl>();
-  }
-}
+AutoEnrollmentController::AutoEnrollmentController()
+    : psm_rlwe_client_factory_(
+          base::BindRepeating(&policy::psm::RlweClientImpl::Create)) {}
 
 AutoEnrollmentController::~AutoEnrollmentController() {}
 
@@ -286,6 +270,12 @@
   return progress_callbacks_.Add(callback);
 }
 
+void AutoEnrollmentController::SetRlweClientFactoryForTesting(
+    RlweClientFactory test_factory) {
+  CHECK_IS_TEST();
+  psm_rlwe_client_factory_ = std::move(test_factory);
+}
+
 void AutoEnrollmentController::SetAutoEnrollmentClientFactoryForTesting(
     policy::AutoEnrollmentClient::Factory* auto_enrollment_client_factory) {
   CHECK_IS_TEST();
@@ -433,6 +423,7 @@
   CHECK(!serial_number.empty() && rlz_brand_code_found &&
         !rlz_brand_code.empty());
 
+  const auto plaintext_id = policy::psm::ConstructRlweId();
   client_ = GetAutoEnrollmentClientFactory()->CreateForInitialEnrollment(
       base::BindRepeating(&AutoEnrollmentController::UpdateState,
                           weak_ptr_factory_.GetWeakPtr()),
@@ -444,7 +435,7 @@
           service,
           g_browser_process->system_network_context_manager()
               ->GetSharedURLLoaderFactory(),
-          psm_rlwe_client_factory_.get(), &psm_rlwe_id_provider_));
+          psm_rlwe_client_factory_.Run({plaintext_id}), plaintext_id));
 
   LOG(WARNING) << "Starting auto-enrollment client for Initial Enrollment.";
   client_->Start();
diff --git a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h
index dfbf1957..54b49b3 100644
--- a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h
+++ b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h
@@ -9,13 +9,13 @@
 #include <string>
 #include <vector>
 
+#include "base/callback.h"
 #include "base/callback_list.h"
 #include "base/memory/weak_ptr.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/policy/enrollment/auto_enrollment_client.h"
 #include "chrome/browser/ash/policy/enrollment/auto_enrollment_type_checker.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_client.h"
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.h"
 #include "chrome/browser/ash/settings/device_settings_service.h"
 #include "chromeos/ash/components/dbus/cryptohome/UserDataAuth.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -31,6 +31,9 @@
  public:
   using ProgressCallbackList =
       base::RepeatingCallbackList<void(policy::AutoEnrollmentState)>;
+  using RlweClientFactory =
+      base::RepeatingCallback<std::unique_ptr<policy::psm::RlweClient>(
+          const std::vector<private_membership::rlwe::RlwePlaintextId>&)>;
 
   // State of the system clock.
   enum class SystemClockSyncState {
@@ -45,10 +48,6 @@
     kSynchronized
   };
 
-  // Returns true if it is determined to use the fake PSM (private set
-  // membership) RLWE client based on command-line flags.
-  static bool ShouldUseFakePsmRlweClient();
-
   AutoEnrollmentController();
 
   AutoEnrollmentController(const AutoEnrollmentController&) = delete;
@@ -76,6 +75,10 @@
     return auto_enrollment_check_type_;
   }
 
+  // Sets the factory function that will be used to create the
+  // `psm::RlweClient` for tests.
+  void SetRlweClientFactoryForTesting(RlweClientFactory test_factory);
+
   // Sets the factory that will be used to create the `AutoEnrollmentClient`.
   // Ownership is not transferred when calling this - the caller must ensure
   // that the `Factory` pointed to by `auto_enrollment_client_factory` remains
@@ -163,11 +166,7 @@
   // Constructs the PSM RLWE client. It will either create a fake or real
   // implementation of the client.
   // It is only used for PSM during creating the client for initial enrollment.
-  std::unique_ptr<policy::psm::RlweClient::Factory> psm_rlwe_client_factory_;
-
-  // Constructs the PSM RLWE device ID.
-  // For more information, see go/psm-rlwe-id-provider.
-  policy::psm::RlweIdProviderImpl psm_rlwe_id_provider_;
+  RlweClientFactory psm_rlwe_client_factory_;
 
   policy::AutoEnrollmentState state_ = policy::AUTO_ENROLLMENT_STATE_IDLE;
   ProgressCallbackList progress_callbacks_;
diff --git a/chrome/browser/ash/login/enrollment/enrollment_embedded_policy_server_browsertest.cc b/chrome/browser/ash/login/enrollment/enrollment_embedded_policy_server_browsertest.cc
index f37f8ef..8a1468b 100644
--- a/chrome/browser/ash/login/enrollment/enrollment_embedded_policy_server_browsertest.cc
+++ b/chrome/browser/ash/login/enrollment/enrollment_embedded_policy_server_browsertest.cc
@@ -39,6 +39,7 @@
 #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
 #include "chrome/browser/ash/policy/enrollment/auto_enrollment_type_checker.h"
 #include "chrome/browser/ash/policy/enrollment/enrollment_requisition_manager.h"
+#include "chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.h"
 #include "chrome/browser/ash/policy/server_backed_state/server_backed_state_keys_broker.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/browser_process_platform_part.h"
@@ -305,10 +306,6 @@
   void SetUpCommandLine(base::CommandLine* command_line) override {
     EnrollmentEmbeddedPolicyServerBase::SetUpCommandLine(command_line);
 
-    // Enable usage of fake PSM (private set membership) RLWE client.
-    command_line->AppendSwitch(
-        switches::kEnterpriseUseFakePsmRlweClientForTesting);
-
     command_line->AppendSwitchASCII(
         switches::kEnterpriseEnableInitialEnrollment,
         policy::AutoEnrollmentTypeChecker::kInitialEnrollmentAlways);
@@ -1084,6 +1081,11 @@
       test::kTestDomain);
 
   host()->StartWizard(AutoEnrollmentCheckScreenView::kScreenId);
+  WizardController::default_controller()
+      ->GetAutoEnrollmentControllerForTesting()
+      ->SetRlweClientFactoryForTesting(
+          base::BindRepeating(&policy::psm::FakeRlweClient::Create));
+
   OobeScreenWaiter(EnrollmentScreenView::kScreenId).Wait();
 
   // Expect PSM fields in DeviceRegisterRequest.
@@ -1121,6 +1123,11 @@
       test::kTestDomain);
 
   host()->StartWizard(AutoEnrollmentCheckScreenView::kScreenId);
+  WizardController::default_controller()
+      ->GetAutoEnrollmentControllerForTesting()
+      ->SetRlweClientFactoryForTesting(
+          base::BindRepeating(&policy::psm::FakeRlweClient::Create));
+
   OobeScreenWaiter(EnrollmentScreenView::kScreenId).Wait();
 
   // First it tries with attestation auth and should fail.
@@ -1156,6 +1163,11 @@
   policy_server_.SetUpdateDeviceAttributesPermission(true);
 
   host()->StartWizard(AutoEnrollmentCheckScreenView::kScreenId);
+  WizardController::default_controller()
+      ->GetAutoEnrollmentControllerForTesting()
+      ->SetRlweClientFactoryForTesting(
+          base::BindRepeating(&policy::psm::FakeRlweClient::Create));
+
   enrollment_ui_.WaitForStep(test::ui::kEnrollmentStepDeviceAttributes);
   enrollment_ui_.SubmitDeviceAttributes(test::values::kAssetId,
                                         test::values::kLocation);
diff --git a/chrome/browser/ash/login/oobe_interactive_ui_test.cc b/chrome/browser/ash/login/oobe_interactive_ui_test.cc
index a4b94c69..8786659 100644
--- a/chrome/browser/ash/login/oobe_interactive_ui_test.cc
+++ b/chrome/browser/ash/login/oobe_interactive_ui_test.cc
@@ -45,6 +45,7 @@
 #include "chrome/browser/ash/login/ui/login_display_host.h"
 #include "chrome/browser/ash/login/wizard_controller.h"
 #include "chrome/browser/ash/policy/enrollment/auto_enrollment_type_checker.h"
+#include "chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.h"
 #include "chrome/browser/chrome_browser_main.h"
 #include "chrome/browser/chrome_browser_main_extra_parts.h"
 #include "chrome/browser/extensions/api/quick_unlock_private/quick_unlock_private_api.h"
@@ -930,11 +931,6 @@
   void SetUpCommandLine(base::CommandLine* command_line) override {
     OobeInteractiveUITest::SetUpCommandLine(command_line);
 
-    // Enable usage of fake PSM (private set membership) RLWE client (for tests
-    // checking initial enrollment).
-    command_line->AppendSwitch(
-        switches::kEnterpriseUseFakePsmRlweClientForTesting);
-
     command_line->AppendSwitchASCII(
         switches::kEnterpriseEnableInitialEnrollment,
         policy::AutoEnrollmentTypeChecker::kInitialEnrollmentAlways);
@@ -951,6 +947,11 @@
 void OobeZeroTouchInteractiveUITest::ZeroTouchEndToEnd() {
   policy_test_server_mixin_.SetupZeroTouchForcedEnrollment();
 
+  WizardController::default_controller()
+      ->GetAutoEnrollmentControllerForTesting()
+      ->SetRlweClientFactoryForTesting(
+          base::BindRepeating(&policy::psm::FakeRlweClient::Create));
+
   PerformStepsBeforeEnrollmentCheck();
 
   test::WaitForEnrollmentScreen();
diff --git a/chrome/browser/ash/login/saml/saml_browsertest.cc b/chrome/browser/ash/login/saml/saml_browsertest.cc
index abe8bfa..d022d19 100644
--- a/chrome/browser/ash/login/saml/saml_browsertest.cc
+++ b/chrome/browser/ash/login/saml/saml_browsertest.cc
@@ -252,7 +252,15 @@
 
 class SamlTestBase : public OobeBaseTest {
  public:
-  SamlTestBase() { fake_gaia_.set_initialize_fake_merge_session(false); }
+  SamlTestBase() {
+    auto cryptohome_client =
+        std::make_unique<SecretInterceptingFakeUserDataAuthClient>();
+    cryptohome_client_ = cryptohome_client.get();
+    FakeUserDataAuthClient::TestApi::OverrideGlobalInstance(
+        std::move(cryptohome_client));
+
+    fake_gaia_.set_initialize_fake_merge_session(false);
+  }
 
   SamlTestBase(const SamlTestBase&) = delete;
   SamlTestBase& operator=(const SamlTestBase&) = delete;
@@ -270,9 +278,6 @@
   }
 
   void SetUpInProcessBrowserTestFixture() override {
-    // Creates a fake UserDataAuthClient. Will be destroyed in browser shutdown.
-    cryptohome_client_ = new SecretInterceptingFakeUserDataAuthClient();
-
     OobeBaseTest::SetUpInProcessBrowserTestFixture();
   }
 
diff --git a/chrome/browser/ash/login/screens/lacros_data_backward_migration_screen.cc b/chrome/browser/ash/login/screens/lacros_data_backward_migration_screen.cc
index 78ae34be..c19e66b 100644
--- a/chrome/browser/ash/login/screens/lacros_data_backward_migration_screen.cc
+++ b/chrome/browser/ash/login/screens/lacros_data_backward_migration_screen.cc
@@ -11,6 +11,7 @@
 #include "base/path_service.h"
 #include "chrome/browser/ash/crosapi/browser_data_back_migrator.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/common/chrome_paths.h"
 
@@ -56,7 +57,8 @@
     const base::FilePath profile_data_dir =
         user_data_dir.Append(ProfileHelper::GetUserProfileDir(user_id_hash));
 
-    migrator_ = std::make_unique<BrowserDataBackMigrator>(profile_data_dir);
+    migrator_ = std::make_unique<BrowserDataBackMigrator>(
+        profile_data_dir, user_id_hash, g_browser_process->local_state());
   }
 
   migrator_->Migrate(
diff --git a/chrome/browser/ash/login/security_token_login_browsertest.cc b/chrome/browser/ash/login/security_token_login_browsertest.cc
index faff804..94e8563 100644
--- a/chrome/browser/ash/login/security_token_login_browsertest.cc
+++ b/chrome/browser/ash/login/security_token_login_browsertest.cc
@@ -313,8 +313,13 @@
                                public LocalStateMixin::Delegate,
                                public testing::WithParamInterface<bool> {
  protected:
-  SecurityTokenLoginTest()
-      : cryptohome_client_(new ChallengeResponseFakeUserDataAuthClient) {
+  SecurityTokenLoginTest() {
+    auto cryptohome_client =
+        std::make_unique<ChallengeResponseFakeUserDataAuthClient>();
+    cryptohome_client_ = cryptohome_client.get();
+    FakeUserDataAuthClient::TestApi::OverrideGlobalInstance(
+        std::move(cryptohome_client));
+
     // TODO(b/239422391): Clean up after full migration to kUseAuthFactors.
     if (GetParam()) {
       scoped_feature_list_.InitAndEnableFeature(ash::features::kUseAuthFactors);
@@ -469,7 +474,7 @@
       feature_allowlist_{TestCertificateProviderExtension::extension_id()};
 
   // Unowned (referencing a global singleton)
-  ChallengeResponseFakeUserDataAuthClient* const cryptohome_client_;
+  raw_ptr<ChallengeResponseFakeUserDataAuthClient> cryptohome_client_ = nullptr;
   CryptohomeMixin cryptohome_mixin_{&mixin_host_};
   LoginManagerMixin login_manager_mixin_{&mixin_host_,
                                          {},
diff --git a/chrome/browser/ash/login/test/cryptohome_mixin.cc b/chrome/browser/ash/login/test/cryptohome_mixin.cc
index 1af3038..96dcbc93 100644
--- a/chrome/browser/ash/login/test/cryptohome_mixin.cc
+++ b/chrome/browser/ash/login/test/cryptohome_mixin.cc
@@ -24,12 +24,8 @@
 
 void CryptohomeMixin::MarkUserAsExisting(const AccountId& user) {
   auto account_id = cryptohome::CreateAccountIdentifierFromAccountId(user);
-  if (FakeUserDataAuthClient::TestApi::Get()) {
-    FakeUserDataAuthClient::TestApi::Get()->AddExistingUser(
-        std::move(account_id));
-  } else {
-    pending_users_.emplace(account_id);
-  }
+  FakeUserDataAuthClient::TestApi::Get()->AddExistingUser(
+      std::move(account_id));
 }
 
 void CryptohomeMixin::AddGaiaPassword(const AccountId& user,
@@ -57,12 +53,4 @@
       cryptohome::CreateAccountIdentifierFromAccountId(user));
 }
 
-void CryptohomeMixin::SetUpOnMainThread() {
-  while (!pending_users_.empty()) {
-    auto user = pending_users_.front();
-    FakeUserDataAuthClient::TestApi::Get()->AddExistingUser(std::move(user));
-    pending_users_.pop();
-  }
-}
-
 }  // namespace ash
diff --git a/chrome/browser/ash/login/test/cryptohome_mixin.h b/chrome/browser/ash/login/test/cryptohome_mixin.h
index a8b2df39..412fe4d 100644
--- a/chrome/browser/ash/login/test/cryptohome_mixin.h
+++ b/chrome/browser/ash/login/test/cryptohome_mixin.h
@@ -15,8 +15,8 @@
 
 namespace ash {
 
-// Mixin that acts as a broker between tests
-// and FakeUserDataAuthClient, handling all interactions and transformations
+// Mixin that acts as a broker between tests and FakeUserDataAuthClient,
+// handling all interactions and transformations.
 class CryptohomeMixin : public InProcessBrowserTestMixin,
                         public ash::FakeUserDataAuthClient::TestApi {
  public:
@@ -25,20 +25,9 @@
   CryptohomeMixin& operator=(const CryptohomeMixin&) = delete;
   ~CryptohomeMixin() override;
 
-  // InProcessBrowserTestMixin
-  void SetUpOnMainThread() override;
-
   void MarkUserAsExisting(const AccountId& user);
   void AddGaiaPassword(const AccountId& user, std::string password);
   bool HasPinFactor(const AccountId& user);
-
- private:
-  FRIEND_TEST_ALL_PREFIXES(CryptohomeMixinTest,
-                           PoolUsersWhenUserDataAuthClientIsNull);
-  FRIEND_TEST_ALL_PREFIXES(CryptohomeMixinTest,
-                           UserDataAuthClientCalledWhenAvailable);
-
-  std::queue<cryptohome::AccountIdentifier> pending_users_;
 };
 
 }  // namespace ash
diff --git a/chrome/browser/ash/login/test/cryptohome_mixin_unittest.cc b/chrome/browser/ash/login/test/cryptohome_mixin_unittest.cc
deleted file mode 100644
index de77192..0000000
--- a/chrome/browser/ash/login/test/cryptohome_mixin_unittest.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/login/test/cryptohome_mixin.h"
-
-#include "chrome/test/base/mixin_based_in_process_browser_test.h"
-#include "chromeos/ash/components/cryptohome/cryptohome_parameters.h"
-#include "chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h"
-#include "components/account_id/account_id.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace ash {
-
-class CryptohomeMixinTest : public ::testing::Test {
- public:
-  CryptohomeMixinTest() {
-    cryptohome_mixin_ = std::make_unique<CryptohomeMixin>(&host_);
-  }
-
-  void TearDown() override {
-    if (FakeUserDataAuthClient::Get() != nullptr) {
-      FakeUserDataAuthClient::Shutdown();
-    }
-  }
-
- protected:
-  void InitializeFakeUserDataAuthClient() {
-    UserDataAuthClient::InitializeFake();
-  }
-
-  std::unique_ptr<CryptohomeMixin> cryptohome_mixin_;
-  AccountId user_ = EmptyAccountId();
-
- private:
-  InProcessBrowserTestMixinHost host_;
-};
-
-// When users are added to CryptohomeMixin with FakeUserDataAuthClient
-// not yet initialized, users will be pooled into a queue, and added
-// all in 1 shot to FakeUserDataAuthClient during
-// SetUpOnMainThread, when we are sure that FakeUserDataAuthClient
-// has been initialized
-TEST_F(CryptohomeMixinTest, PoolUsersWhenUserDataAuthClientIsNull) {
-  cryptohome_mixin_->MarkUserAsExisting(user_);
-  ASSERT_EQ(cryptohome_mixin_->pending_users_.size(), 1u);
-  ASSERT_EQ(cryptohome_mixin_->pending_users_.front(),
-            cryptohome::CreateAccountIdentifierFromAccountId(user_));
-}
-
-// Tests the opposite of the case above, i.e, FakeUserDataAuthClient
-// is initialized and user is added to the client as soon as
-// CryptohomeMixin::MarkUserAsExisting is called
-TEST_F(CryptohomeMixinTest, UserDataAuthClientCalledWhenAvailable) {
-  InitializeFakeUserDataAuthClient();
-  cryptohome_mixin_->MarkUserAsExisting(user_);
-  ASSERT_TRUE(cryptohome_mixin_->pending_users_.empty());
-}
-
-}  // namespace ash
diff --git a/chrome/browser/ash/login/wizard_controller.h b/chrome/browser/ash/login/wizard_controller.h
index 72f37bb..58d8f71 100644
--- a/chrome/browser/ash/login/wizard_controller.h
+++ b/chrome/browser/ash/login/wizard_controller.h
@@ -254,6 +254,12 @@
   // will be started it will call `Show()` on the first screen.
   void HideCurrentScreen();
 
+  // Allows tests to call `GetAutoEnrollmentController` without making those
+  // tests friend classes with access to everything.
+  AutoEnrollmentController* GetAutoEnrollmentControllerForTesting() {
+    return GetAutoEnrollmentController();
+  }
+
  private:
   // Create BaseScreen instances. These are owned by `screen_manager_`.
   std::vector<std::pair<OobeScreenId, std::unique_ptr<BaseScreen>>>
diff --git a/chrome/browser/ash/login/wizard_controller_browsertest.cc b/chrome/browser/ash/login/wizard_controller_browsertest.cc
index a094addd..54d79f4 100644
--- a/chrome/browser/ash/login/wizard_controller_browsertest.cc
+++ b/chrome/browser/ash/login/wizard_controller_browsertest.cc
@@ -1614,11 +1614,6 @@
   void SetUpCommandLine(base::CommandLine* command_line) override {
     WizardControllerDeviceStateTest::SetUpCommandLine(command_line);
 
-    // Enable usage of fake PSM (private set membership) RLWE client (for tests
-    // checking initial enrollment).
-    command_line->AppendSwitch(
-        switches::kEnterpriseUseFakePsmRlweClientForTesting);
-
     command_line->AppendSwitchASCII(
         switches::kEnterpriseEnableInitialEnrollment,
         policy::AutoEnrollmentTypeChecker::kInitialEnrollmentAlways);
@@ -1735,6 +1730,11 @@
                                                 "0");
 
   // TODO(igorcov): Change to /*check_fre=*/false when b/238592446 is fixed.
+  // At that point we might need to add
+  //   WizardController::default_controller()
+  //    ->GetAutoEnrollmentControllerForTesting()
+  //    ->SetRlweClientFactoryForTesting(
+  //        base::BindRepeating(&policy::psm::FakeRlweClient::Create));
   DoInitialEnrollment(/*check_fre=*/true);
 }
 
diff --git a/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc b/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc
index 47f5f6c..a1fb6641 100644
--- a/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc
+++ b/chrome/browser/ash/multidevice_setup/multidevice_setup_client_factory.cc
@@ -79,6 +79,8 @@
 MultiDeviceSetupClientFactory::MultiDeviceSetupClientFactory()
     : ProfileKeyedServiceFactory("MultiDeviceSetupClient") {
   DependsOn(device_sync::DeviceSyncClientFactory::GetInstance());
+  // The MultiDeviceSetupServiceFactory dependency is omitted here, see the
+  // comment in the MultiDeviceSetupClientHolder constructor.
 }
 
 MultiDeviceSetupClientFactory::~MultiDeviceSetupClientFactory() = default;
diff --git a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service.cc b/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service.cc
index c0ee0b84..e98c613a 100644
--- a/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service.cc
+++ b/chrome/browser/ash/policy/active_directory/component_active_directory_policy_service.cc
@@ -287,7 +287,7 @@
   policy_ = std::move(policy);
 
   // Remove policies that don't match the schema.
-  current_schema_map_->FilterBundle(policy_.get(),
+  current_schema_map_->FilterBundle(*policy_,
                                     /*drop_invalid_component_policies=*/true);
 
   DVLOG(1) << "Installed policy (count = "
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
index ba467f7..9f4b8606 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
@@ -556,7 +556,7 @@
     return;
   }
 
-  FileDaemonInfo file_info({}, base::FilePath(""), download_url.spec());
+  FileDaemonInfo file_info({}, file_path, download_url.spec());
   IsFilesTransferRestricted(
       {std::move(file_info)}, DlpFileDestination(file_path.value()),
       FileAction::kDownload,
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
index b5d5b4d..1f084d6 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
@@ -1351,16 +1351,16 @@
     DlpFilesExternalDestinationTest,
     ::testing::Values(
         std::make_tuple("android_files",
-                        "path/in/android",
+                        "path/in/android/filename",
                         DlpRulesManager::Component::kArc),
         std::make_tuple("removable",
-                        "MyUSB/path/in/removable",
+                        "MyUSB/path/in/removable/filename",
                         DlpRulesManager::Component::kUsb),
         std::make_tuple("crostini_test_termina_penguin",
-                        "path/in/crostini",
+                        "path/in/crostini/filename",
                         DlpRulesManager::Component::kCrostini),
         std::make_tuple("drivefs-84675c855b63e12f384d45f033826980",
-                        "root/path/in/mydrive",
+                        "root/path/in/mydrive/filename",
                         DlpRulesManager::Component::kDrive)));
 
 TEST_P(DlpFilesExternalDestinationTest, IsFilesTransferRestricted_Component) {
@@ -1452,10 +1452,15 @@
                                             cb.Get());
 
   ASSERT_EQ(events.size(), 1u);
-  EXPECT_THAT(events[0], IsDlpPolicyEvent(CreateDlpPolicyEvent(
-                             kExampleSourcePattern1, expected_component,
-                             DlpRulesManager::Restriction::kFiles,
-                             DlpRulesManager::Level::kBlock)));
+
+  auto event_builder = DlpPolicyEventBuilder::Event(
+      kExampleSourcePattern1, DlpRulesManager::Restriction::kFiles,
+      DlpRulesManager::Level::kBlock);
+
+  event_builder->SetDestinationComponent(expected_component);
+  event_builder->SetContentName(base::FilePath(path).BaseName().value());
+
+  EXPECT_THAT(events[0], IsDlpPolicyEvent(event_builder->Create()));
   EXPECT_TRUE(
       display_service_tester.GetNotification(kDownloadBlockedNotificationId));
 }
@@ -1607,25 +1612,34 @@
   EXPECT_CALL(*rules_manager_, GetReportingManager())
       .Times(::testing::AnyNumber());
 
+  const base::FilePath file_path("MyUSB/path/in/removable/filename");
+
   auto dst_url = mount_points->CreateExternalFileSystemURL(
-      blink::StorageKey(), "removable",
-      base::FilePath("MyUSB/path/in/removable"));
+      blink::StorageKey(), "removable", file_path);
   ASSERT_TRUE(dst_url.is_valid());
 
   files_controller_->CheckIfDownloadAllowed(GURL(kExampleUrl1), dst_url.path(),
                                             cb.Get());
 
+  auto CreateEvent =
+      [&](absl::optional<DlpRulesManager::Level> level) -> DlpPolicyEvent {
+    auto event_builder =
+        level.has_value()
+            ? DlpPolicyEventBuilder::Event(kExampleSourcePattern1,
+                                           DlpRulesManager::Restriction::kFiles,
+                                           level.value())
+            : DlpPolicyEventBuilder::WarningProceededEvent(
+                  kExampleSourcePattern1, DlpRulesManager::Restriction::kFiles);
+    event_builder->SetDestinationComponent(DlpRulesManager::Component::kUsb);
+    event_builder->SetContentName(file_path.BaseName().value());
+    return event_builder->Create();
+  };
+
   ASSERT_EQ(events.size(), 1u + (choice_result ? 1 : 0));
   EXPECT_THAT(events[0],
-              IsDlpPolicyEvent(CreateDlpPolicyEvent(
-                  kExampleSourcePattern1, DlpRulesManager::Component::kUsb,
-                  DlpRulesManager::Restriction::kFiles,
-                  DlpRulesManager::Level::kWarn)));
+              IsDlpPolicyEvent(CreateEvent(DlpRulesManager::Level::kWarn)));
   if (choice_result) {
-    EXPECT_THAT(events[1],
-                IsDlpPolicyEvent(CreateDlpPolicyWarningProceededEvent(
-                    kExampleSourcePattern1, DlpRulesManager::Component::kUsb,
-                    DlpRulesManager::Restriction::kFiles)));
+    EXPECT_THAT(events[1], IsDlpPolicyEvent(CreateEvent(absl::nullopt)));
   } else {
     EXPECT_TRUE(
         display_service_tester.GetNotification(kDownloadBlockedNotificationId));
diff --git a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc
index b32cbe6..a4eef866 100644
--- a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc
+++ b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl.cc
@@ -693,12 +693,11 @@
     if (parsed_response.license_type.has_value())
       state.Set(kDeviceStateLicenseType, *parsed_response.license_type);
 
+    // Store the enrollment state obtained from the server to local state.
+    // Depending on the value, this can be used later to trigger enrollment or
+    // to disable the device.
     local_state_->SetDict(prefs::kServerBackedDeviceState, std::move(state));
 
-    // TODO(https://crbug.com/1344737) This seems unnecessary (we are not
-    // shutting down, for instance).
-    local_state_->CommitPendingWrite();
-
     device_state_available_ = true;
     RunCallback(ServerStateRetrievalResult::kSuccess);
   }
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.cc b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.cc
similarity index 90%
rename from chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.cc
rename to chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.cc
index ad3a264..84e7f33 100644
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.cc
+++ b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.h"
+#include "chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.h"
 
 #include <string>
 
@@ -15,7 +15,7 @@
 
 namespace policy::psm {
 
-psm_rlwe::RlwePlaintextId RlweIdProviderImpl::ConstructRlweId() {
+psm_rlwe::RlwePlaintextId ConstructRlweId() {
   // Retrieve the device's serial number and RLZ brand code.
   chromeos::system::StatisticsProvider* provider =
       chromeos::system::StatisticsProvider::GetInstance();
diff --git a/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.h b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.h
new file mode 100644
index 0000000..a92eca60
--- /dev/null
+++ b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.h
@@ -0,0 +1,25 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_CONSTRUCT_RLWE_ID_H_
+#define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_CONSTRUCT_RLWE_ID_H_
+
+namespace private_membership::rlwe {
+class RlwePlaintextId;
+}  // namespace private_membership::rlwe
+
+namespace policy::psm {
+
+// Constructs the encrypted PSM RLWE ID through device's serial number
+// and RLZ brand code that will be retrieved through StatisticsProvider.
+// For more information, see go/psm-rlwe-id.
+//
+// Note: The device's serial number and RLZ brand code values must exist and
+// able to be retrieved, using their corresponding keys, from the
+// StaisticsProvider. Otherwise the implementation will CHECK-fail.
+private_membership::rlwe::RlwePlaintextId ConstructRlweId();
+
+}  // namespace policy::psm
+
+#endif  // CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_CONSTRUCT_RLWE_ID_H_
diff --git a/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id_unittest.cc b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id_unittest.cc
new file mode 100644
index 0000000..94d978e0
--- /dev/null
+++ b/chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id_unittest.cc
@@ -0,0 +1,42 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ash/policy/enrollment/psm/construct_rlwe_id.h"
+
+#include "chromeos/system/fake_statistics_provider.h"
+#include "chromeos/system/statistics_provider.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/private_membership/src/private_membership_rlwe.pb.h"
+
+namespace psm_rlwe = private_membership::rlwe;
+
+namespace {
+constexpr char kTestSerialNumber[] = "111111";
+constexpr char kTestBrandCode[] = "TEST";
+
+// `kTestBrandCode` encoded in hex.
+constexpr char kTestBrandCodeHex[] = "54455354";
+}  // namespace
+
+class ConstructRlweIdTest : public testing::Test {
+ public:
+  chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_;
+};
+
+TEST_F(ConstructRlweIdTest, VerifyConstructedRlweId) {
+  // Sets the values for serial number and RLZ brand code as the values must be
+  // present to construct the RLWE ID without CHECK-failures.
+  fake_statistics_provider_.SetMachineStatistic(
+      chromeos::system::kSerialNumberKeyForTest, kTestSerialNumber);
+  fake_statistics_provider_.SetMachineStatistic(
+      chromeos::system::kRlzBrandCodeKey, kTestBrandCode);
+
+  // RLZ brand code "TEST" (as hex), "/" separator, and serial number "111111".
+  const std::string kExpectedRlweIdStr =
+      std::string(kTestBrandCodeHex) + "/" + std::string(kTestSerialNumber);
+
+  // Construct the PSM RLWE ID, and verify its value.
+  psm_rlwe::RlwePlaintextId rlwe_id = policy::psm::ConstructRlweId();
+  EXPECT_EQ(rlwe_id.sensitive_id(), kExpectedRlweIdStr);
+}
diff --git a/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.cc b/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.cc
index 2ef2405..89d66db7 100644
--- a/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.cc
+++ b/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.cc
@@ -24,12 +24,11 @@
 
 namespace policy::psm {
 
-::rlwe::StatusOr<std::unique_ptr<RlweClient>>
-FakeRlweClient::FactoryImpl::Create(
-    psm_rlwe::RlweUseCase use_case,
+// static
+std::unique_ptr<RlweClient> FakeRlweClient::Create(
     const std::vector<psm_rlwe::RlwePlaintextId>& plaintext_ids) {
-  return absl::WrapUnique<RlweClient>(
-      new FakeRlweClient(use_case, plaintext_ids));
+  return std::make_unique<FakeRlweClient>(
+      private_membership::rlwe::RlweUseCase::CROS_DEVICE_STATE, plaintext_ids);
 }
 
 FakeRlweClient::~FakeRlweClient() = default;
diff --git a/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.h b/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.h
index 8471eed..d3dcbb3 100644
--- a/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.h
+++ b/chrome/browser/ash/policy/enrollment/psm/fake_rlwe_client.h
@@ -17,31 +17,16 @@
 
 class FakeRlweClient : public RlweClient {
  public:
-  // A factory that creates |FakeRlweClient|s.
-  class FactoryImpl : public Factory {
-   public:
-    FactoryImpl() = default;
+  // Creates a fake PSM RLWE client for testing purposes.
+  static std::unique_ptr<RlweClient> Create(
+      const std::vector<PlaintextId>& plaintext_ids);
 
-    // FactoryImpl is neither copyable nor copy assignable.
-    FactoryImpl(const FactoryImpl&) = delete;
-    FactoryImpl& operator=(const FactoryImpl&) = delete;
-
-    ~FactoryImpl() override = default;
-
-    // Creates a fake PSM RLWE client for testing purposes.
-    ::rlwe::StatusOr<std::unique_ptr<RlweClient>> Create(
-        UseCase use_case,
-        const std::vector<PlaintextId>& plaintext_ids) override;
-  };
-
-  // FakeRlweClient is neither copyable nor copy assignable.
+  FakeRlweClient(UseCase use_case, std::vector<PlaintextId> plaintext_ids);
   FakeRlweClient(const FakeRlweClient&) = delete;
   FakeRlweClient& operator=(const FakeRlweClient&) = delete;
-
   ~FakeRlweClient() override;
 
   // Mocks all function calls of RlweClient.
-
   ::rlwe::StatusOr<OprfRequest> CreateOprfRequest() override;
   ::rlwe::StatusOr<QueryRequest> CreateQueryRequest(
       const OprfResponse& oprf_response) override;
@@ -49,8 +34,6 @@
       const QueryResponse& query_response) override;
 
  private:
-  FakeRlweClient(UseCase use_case, std::vector<PlaintextId> plaintext_ids);
-
   const UseCase use_case_;
   const std::vector<PlaintextId> plaintext_ids_;
 };
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_client.h b/chrome/browser/ash/policy/enrollment/psm/rlwe_client.h
index 000896c..caebe622 100644
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_client.h
+++ b/chrome/browser/ash/policy/enrollment/psm/rlwe_client.h
@@ -5,9 +5,6 @@
 #ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_CLIENT_H_
 #define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_CLIENT_H_
 
-#include <memory>
-#include <vector>
-
 #include "third_party/private_membership/src/private_membership_rlwe.pb.h"
 #include "third_party/shell-encryption/src/statusor.h"
 
@@ -33,16 +30,6 @@
       private_membership::rlwe::PrivateMembershipRlweQueryResponse;
   using MembershipResponses = private_membership::rlwe::RlweMembershipResponses;
 
-  class Factory {
-   public:
-    virtual ~Factory() = default;
-    // Creates a client for the Private Membership RLWE protocol. It will be
-    // created for |plaintext_ids| with use case as |use_case|.
-    virtual ::rlwe::StatusOr<std::unique_ptr<RlweClient>> Create(
-        UseCase use_case,
-        const std::vector<PlaintextId>& plaintext_ids) = 0;
-  };
-
   virtual ~RlweClient() = default;
 
   // Creates a request proto for the first phase of the protocol.
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.cc b/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.cc
index e366fff..d3a4fef 100644
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.cc
+++ b/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.cc
@@ -19,23 +19,28 @@
 
 namespace policy::psm {
 
-RlweClientImpl::FactoryImpl::FactoryImpl() = default;
-
-::rlwe::StatusOr<std::unique_ptr<RlweClient>>
-RlweClientImpl::FactoryImpl::Create(
-    psm_rlwe::RlweUseCase use_case,
+std::unique_ptr<RlweClient> RlweClientImpl::Create(
     const std::vector<psm_rlwe::RlwePlaintextId>& plaintext_ids) {
-  auto status_or_client =
-      psm_rlwe::PrivateMembershipRlweClient::Create(use_case, plaintext_ids);
-  if (!status_or_client.ok()) {
-    return absl::InvalidArgumentError(status_or_client.status().message());
-  }
+  auto status_or_client = psm_rlwe::PrivateMembershipRlweClient::Create(
+      private_membership::rlwe::RlweUseCase::CROS_DEVICE_STATE, plaintext_ids);
+  DCHECK(status_or_client.ok()) << status_or_client.status().message();
 
-  return absl::WrapUnique<psm::RlweClient>(
-      new RlweClientImpl(std::move(status_or_client).value()));
+  return std::make_unique<psm::RlweClientImpl>(
+      std::move(status_or_client).value());
 }
 
-RlweClientImpl::FactoryImpl::~FactoryImpl() = default;
+std::unique_ptr<RlweClient> RlweClientImpl::CreateForTesting(
+    const std::string& ec_cipher_key,
+    const std::string& seed,
+    const std::vector<psm_rlwe::RlwePlaintextId>& plaintext_ids) {
+  auto status_or_client =
+      psm_rlwe::PrivateMembershipRlweClient::CreateForTesting(
+          private_membership::rlwe::RlweUseCase::CROS_DEVICE_STATE,
+          plaintext_ids, ec_cipher_key, seed);
+  DCHECK(status_or_client.ok()) << status_or_client.status().message();
+
+  return std::make_unique<RlweClientImpl>(std::move(status_or_client).value());
+}
 
 RlweClientImpl::~RlweClientImpl() = default;
 
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.h b/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.h
index 690c722b..d2448b54 100644
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.h
+++ b/chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.h
@@ -22,25 +22,22 @@
 
 class RlweClientImpl : public RlweClient {
  public:
-  // A factory that creates |RlweClientImpl|s.
-  class FactoryImpl : public Factory {
-   public:
-    FactoryImpl();
+  // Creates PSM RLWE client that generates and holds a randomly generated
+  // key.
+  static std::unique_ptr<RlweClient> Create(
+      const std::vector<PlaintextId>& plaintext_ids);
 
-    // FactoryImpl is neither copyable nor copy assignable.
-    FactoryImpl(const FactoryImpl&) = delete;
-    FactoryImpl& operator=(const FactoryImpl&) = delete;
+  // In contrast to `Create` this creates a PSM RLWE client for testing with a
+  // fixed `ec_cipher_key` and `seed`.
+  static std::unique_ptr<RlweClient> CreateForTesting(
+      const std::string& ec_cipher_key,
+      const std::string& seed,
+      const std::vector<PlaintextId>& plaintext_ids);
 
-    ~FactoryImpl() override;
+  explicit RlweClientImpl(
+      std::unique_ptr<private_membership::rlwe::PrivateMembershipRlweClient>
+          psm_rlwe_client);
 
-    // Creates PSM RLWE client that generates and holds a randomly generated
-    // key.
-    ::rlwe::StatusOr<std::unique_ptr<RlweClient>> Create(
-        UseCase use_case,
-        const std::vector<PlaintextId>& plaintext_ids) override;
-  };
-
-  // RlweClientImpl is neither copyable nor copy assignable.
   RlweClientImpl(const RlweClientImpl&) = delete;
   RlweClientImpl& operator=(const RlweClientImpl&) = delete;
 
@@ -56,10 +53,6 @@
       const QueryResponse& query_response) override;
 
  private:
-  explicit RlweClientImpl(
-      std::unique_ptr<private_membership::rlwe::PrivateMembershipRlweClient>
-          psm_rlwe_client);
-
   const std::unique_ptr<private_membership::rlwe::PrivateMembershipRlweClient>
       psm_rlwe_client_;
 };
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.cc b/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.cc
index 60bf18a..84d6f22 100644
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.cc
+++ b/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.cc
@@ -16,7 +16,6 @@
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_client.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client.h"
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h"
 #include "chrome/common/pref_names.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
 #include "components/policy/core/common/cloud/device_management_service.h"
@@ -36,34 +35,16 @@
 RlweDmserverClientImpl::RlweDmserverClientImpl(
     DeviceManagementService* device_management_service,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
-    RlweClient::Factory* psm_rlwe_client_factory,
-    RlweIdProvider* psm_rlwe_id_provider)
-    : random_device_id_(base::GenerateGUID()),
+    std::unique_ptr<RlweClient> psm_rlwe_client,
+    PlaintextId plaintext_id)
+    : psm_rlwe_client_(std::move(psm_rlwe_client)),
+      random_device_id_(base::GenerateGUID()),
       url_loader_factory_(url_loader_factory),
-      device_management_service_(device_management_service) {
-  CHECK(device_management_service);
-  CHECK(psm_rlwe_client_factory);
-  CHECK(psm_rlwe_id_provider);
-
-  psm_rlwe_id_ = psm_rlwe_id_provider->ConstructRlweId();
-
-  // Create PSM client for |psm_rlwe_id_| with use case as CROS_DEVICE_STATE.
-  std::vector<psm_rlwe::RlwePlaintextId> psm_ids = {psm_rlwe_id_};
-  auto status_or_client = psm_rlwe_client_factory->Create(
-      psm_rlwe::RlweUseCase::CROS_DEVICE_STATE, psm_ids);
-  if (!status_or_client.ok()) {
-    // If the PSM RLWE client hasn't been created successfully, then report
-    // the error and don't run the protocol.
-    LOG(ERROR) << "PSM error: unexpected internal logic error during creating "
-                  "PSM RLWE client";
-    last_psm_execution_result_ =
-        ResultHolder(RlweResult::kCreateRlweClientLibraryError);
-    base::UmaHistogramEnumeration(kUMAPsmResult + uma_suffix_,
-                                  RlweResult::kCreateRlweClientLibraryError);
-    return;
-  }
-
-  psm_rlwe_client_ = std::move(status_or_client).value();
+      device_management_service_(device_management_service),
+      psm_rlwe_id_(plaintext_id) {
+  CHECK(psm_rlwe_client_);
+  CHECK(url_loader_factory_);
+  CHECK(device_management_service_);
 }
 
 RlweDmserverClientImpl::~RlweDmserverClientImpl() {
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.h b/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.h
index 47fd9b3..9abe7c91 100644
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.h
+++ b/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl.h
@@ -15,7 +15,6 @@
 #include "base/timer/timer.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_client.h"
 #include "chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client.h"
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h"
 #include "components/policy/core/common/cloud/device_management_service.h"
 #include "components/policy/core/common/cloud/dmserver_job_configurations.h"
 #include "components/policy/core/common/cloud/enterprise_metrics.h"
@@ -29,22 +28,19 @@
 
 namespace policy::psm {
 
-class RlweIdProvider;
-
 class RlweDmserverClientImpl : public RlweDmserverClient {
  public:
   using PlaintextId = private_membership::rlwe::RlwePlaintextId;
   using OprfResponse =
       private_membership::rlwe::PrivateMembershipRlweOprfResponse;
-  // The RlweDmserverClientImpl doesn't take ownership of
-  // |device_management_service|, |psm_rlwe_client_factory| and
-  // |psm_rlwe_id_provider|. All of them must not be nullptr. Also,
-  // |device_management_service| must outlive RlweDmserverClientImpl.
+  // `device_management_service`, `url_loader_factory` and
+  // `psm_rlwe_client` must not be nullptr. Also,
+  // `device_management_service` must outlive RlweDmserverClientImpl.
   RlweDmserverClientImpl(
       DeviceManagementService* device_management_service,
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
-      RlweClient::Factory* psm_rlwe_client_factory,
-      RlweIdProvider* psm_rlwe_id_provider);
+      std::unique_ptr<RlweClient> psm_rlwe_client,
+      PlaintextId plaintext_id);
 
   // Disallow copy constructor and assignment operator.
   RlweDmserverClientImpl(const RlweDmserverClientImpl&) = delete;
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl_unittest.cc b/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl_unittest.cc
index b2775a1b..f498474 100644
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl_unittest.cc
+++ b/chrome/browser/ash/policy/enrollment/psm/rlwe_dmserver_client_impl_unittest.cc
@@ -18,10 +18,7 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/test_future.h"
 #include "base/time/time.h"
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_client.h"
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h"
-#include "chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.h"
-#include "chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.h"
+#include "chrome/browser/ash/policy/enrollment/psm/rlwe_client_impl.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "components/policy/core/common/cloud/cloud_policy_constants.h"
@@ -114,13 +111,13 @@
 
     psm_client_ = std::make_unique<RlweDmserverClientImpl>(
         service_.get(), shared_url_loader_factory_,
-        psm_rlwe_test_client_factory_.get(),
-        testing_psm_rlwe_id_provider_.get());
+        std::move(psm_rlwe_test_client_), psm_test_case_.plaintext_id());
   }
 
   void CreatePsmTestCase() {
     // Verify PSM test case index is valid.
     ASSERT_GE(GetPsmTestCaseIndex(), 0);
+    ASSERT_LT(GetPsmTestCaseIndex(), kNumberOfPsmTestCases);
 
     // Retrieve the PSM test case.
     base::FilePath src_root_dir;
@@ -138,18 +135,10 @@
     EXPECT_EQ(test_data.test_cases_size(), kNumberOfPsmTestCases);
     psm_test_case_ = test_data.test_cases(GetPsmTestCaseIndex());
 
-    std::vector<private_membership::rlwe::RlwePlaintextId> plaintext_ids{
-        psm_test_case_.plaintext_id()};
-
-    // Sets the PSM RLWE client factory to testing client.
-    psm_rlwe_test_client_factory_ =
-        std::make_unique<TestingRlweClient::FactoryImpl>(
-            psm_test_case_.ec_cipher_key(), psm_test_case_.seed(),
-            plaintext_ids);
-
-    // Sets the PSM RLWE ID.
-    testing_psm_rlwe_id_provider_ =
-        std::make_unique<TestingRlweIdProvider>(psm_test_case_.plaintext_id());
+    // Create PSM RLWE test client.
+    psm_rlwe_test_client_ = RlweClientImpl::CreateForTesting(
+        psm_test_case_.ec_cipher_key(), psm_test_case_.seed(),
+        {psm_test_case_.plaintext_id()});
   }
 
   // Start the `RlweDmserverClient` to retrieve the device state.
@@ -162,14 +151,10 @@
   void VerifyResultHolder(PsmResultHolder expected_result_holder) {
     PsmResultHolder psm_params = future_result_holder_.Take();
     EXPECT_EQ(expected_result_holder.psm_result, psm_params.psm_result);
-    if (expected_result_holder.membership_result.has_value()) {
-      EXPECT_EQ(expected_result_holder.membership_result.value(),
-                psm_params.membership_result.value());
-    }
-    if (expected_result_holder.membership_determination_time.has_value()) {
-      EXPECT_EQ(expected_result_holder.membership_determination_time.value(),
-                psm_params.membership_determination_time.value());
-    }
+    EXPECT_EQ(expected_result_holder.membership_result,
+              psm_params.membership_result);
+    EXPECT_EQ(expected_result_holder.membership_determination_time,
+              psm_params.membership_determination_time);
   }
 
   void ServerWillReplyWithPsmOprfResponse() {
@@ -301,10 +286,7 @@
 
   // Sets which PSM RLWE client will be created, depending on the factory. It
   // is only used for PSM during creating the client for initial enrollment.
-  std::unique_ptr<TestingRlweClient::FactoryImpl> psm_rlwe_test_client_factory_;
-
-  // Sets the PSM RLWE ID directly for testing.
-  std::unique_ptr<TestingRlweIdProvider> testing_psm_rlwe_id_provider_;
+  std::unique_ptr<RlweClient> psm_rlwe_test_client_;
 
   base::HistogramTester histogram_tester_;
   std::unique_ptr<FakeDeviceManagementService> service_;
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h b/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h
deleted file mode 100644
index 02fc1c40..0000000
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_ID_PROVIDER_H_
-#define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_ID_PROVIDER_H_
-
-namespace private_membership {
-namespace rlwe {
-class RlwePlaintextId;
-}  // namespace rlwe
-}  // namespace private_membership
-
-namespace policy::psm {
-
-// Interface for the PSM RLWE device ID, allowing to discard the
-// PSM ID encryption for tests.
-class RlweIdProvider {
- public:
-  virtual ~RlweIdProvider() = default;
-
-  virtual private_membership::rlwe::RlwePlaintextId ConstructRlweId() = 0;
-};
-
-}  // namespace policy::psm
-
-#endif  // CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_ID_PROVIDER_H_
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.h b/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.h
deleted file mode 100644
index e76a4d07..0000000
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_ID_PROVIDER_IMPL_H_
-#define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_ID_PROVIDER_IMPL_H_
-
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h"
-
-namespace private_membership {
-namespace rlwe {
-class RlwePlaintextId;
-}  // namespace rlwe
-}  // namespace private_membership
-
-namespace policy::psm {
-
-// Real implementation for the PSM RLWE device ID which is encrypting the PSM
-// ID.
-class RlweIdProviderImpl : public RlweIdProvider {
- public:
-  RlweIdProviderImpl() = default;
-
-  // `RlweIdProviderImpl` is neither copyable nor copy assignable.
-  RlweIdProviderImpl(const RlweIdProviderImpl&) = delete;
-  RlweIdProviderImpl& operator=(const RlweIdProviderImpl&) = delete;
-
-  ~RlweIdProviderImpl() override = default;
-
-  // Constructs the encrypted PSM RLWE ID through device's serial number
-  // and RLZ brand code that will be retrieved through StatisticsProvider.
-  // For more information, see go/psm-rlwe-id.
-  //
-  // Note: The device's serial number and RLZ brand code values must exist and
-  // able to be retrieved, using their corresponding keys, from the
-  // StaisticsProvider. Otherwise the implementation will CHECK-fail.
-  private_membership::rlwe::RlwePlaintextId ConstructRlweId() override;
-};
-
-}  // namespace policy::psm
-
-#endif  // CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_RLWE_ID_PROVIDER_IMPL_H_
diff --git a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl_unittest.cc b/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl_unittest.cc
deleted file mode 100644
index 9e719cb..0000000
--- a/chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl_unittest.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider_impl.h"
-
-#include "chromeos/system/fake_statistics_provider.h"
-#include "chromeos/system/statistics_provider.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/private_membership/src/private_membership_rlwe.pb.h"
-
-namespace psm_rlwe = private_membership::rlwe;
-
-namespace policy::psm {
-
-class RlweIdProviderImplTest : public testing::Test {
- public:
-  RlweIdProviderImplTest() = default;
-
-  RlweIdProviderImplTest(const RlweIdProviderImplTest&) = delete;
-  RlweIdProviderImplTest& operator=(const RlweIdProviderImplTest&) = delete;
-  ~RlweIdProviderImplTest() override = default;
-
-  chromeos::system::ScopedFakeStatisticsProvider fake_statistics_provider_;
-  RlweIdProviderImpl psm_rlwe_impl;
-  const std::string kTestSerialNumber = "111111";
-  const std::string kTestBrandCode = "TEST";
-
-  // `kTestBrandCode` encoded in hex.
-  const std::string kTestBrandCodeHex = "54455354";
-};
-
-TEST_F(RlweIdProviderImplTest, VerifyConstructedRlweId) {
-  // Sets the values for serial number and RLZ brand code as the values must be
-  // present to construct the RLWE ID without CHECK-failures.
-  fake_statistics_provider_.SetMachineStatistic(
-      chromeos::system::kSerialNumberKeyForTest, kTestSerialNumber);
-  fake_statistics_provider_.SetMachineStatistic(
-      chromeos::system::kRlzBrandCodeKey, kTestBrandCode);
-
-  // RLZ brand code "TEST" (as hex), "/" separator, and serial number "111111".
-  const std::string kExpectedRlweIdStr =
-      kTestBrandCodeHex + "/" + kTestSerialNumber;
-
-  // Construct the PSM RLWE ID, and verify its value.
-  psm_rlwe::RlwePlaintextId rlwe_id = psm_rlwe_impl.ConstructRlweId();
-  EXPECT_EQ(rlwe_id.sensitive_id(), kExpectedRlweIdStr);
-}
-
-}  // namespace policy::psm
diff --git a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.cc b/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.cc
deleted file mode 100644
index b4aaea2..0000000
--- a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.h"
-
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/check.h"
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_client.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
-#include "third_party/private_membership/src/private_membership_rlwe.pb.h"
-#include "third_party/private_membership/src/private_membership_rlwe_client.h"
-#include "third_party/shell-encryption/src/statusor.h"
-
-namespace psm_rlwe = private_membership::rlwe;
-
-namespace policy::psm {
-
-TestingRlweClient::FactoryImpl::FactoryImpl(
-    const std::string& ec_cipher_key,
-    const std::string& seed,
-    std::vector<PlaintextId> plaintext_testing_ids)
-    : ec_cipher_key_(ec_cipher_key),
-      seed_(seed),
-      plaintext_testing_ids_(std::move(plaintext_testing_ids)) {}
-
-::rlwe::StatusOr<std::unique_ptr<RlweClient>>
-TestingRlweClient::FactoryImpl::Create(
-    psm_rlwe::RlweUseCase use_case,
-    const std::vector<psm_rlwe::RlwePlaintextId>& plaintext_ids) {
-  auto status_or_client =
-      psm_rlwe::PrivateMembershipRlweClient::CreateForTesting(
-          use_case, plaintext_testing_ids_, ec_cipher_key_, seed_);
-  if (!status_or_client.ok()) {
-    return absl::InvalidArgumentError(status_or_client.status().message());
-  }
-  return absl::WrapUnique<RlweClient>(
-      new TestingRlweClient(std::move(status_or_client).value()));
-}
-
-TestingRlweClient::FactoryImpl::~FactoryImpl() = default;
-
-TestingRlweClient::~TestingRlweClient() = default;
-
-::rlwe::StatusOr<psm_rlwe::PrivateMembershipRlweOprfRequest>
-TestingRlweClient::CreateOprfRequest() {
-  return psm_rlwe_client_->CreateOprfRequest();
-}
-
-::rlwe::StatusOr<psm_rlwe::PrivateMembershipRlweQueryRequest>
-TestingRlweClient::CreateQueryRequest(
-    const psm_rlwe::PrivateMembershipRlweOprfResponse& oprf_response) {
-  return psm_rlwe_client_->CreateQueryRequest(oprf_response);
-}
-
-::rlwe::StatusOr<psm_rlwe::RlweMembershipResponses>
-TestingRlweClient::ProcessQueryResponse(
-    const psm_rlwe::PrivateMembershipRlweQueryResponse& query_response) {
-  return psm_rlwe_client_->ProcessQueryResponse(query_response);
-}
-
-TestingRlweClient::TestingRlweClient(
-    std::unique_ptr<psm_rlwe::PrivateMembershipRlweClient> psm_rlwe_client)
-    : psm_rlwe_client_(std::move(psm_rlwe_client)) {
-  DCHECK(psm_rlwe_client_);
-}
-
-}  // namespace policy::psm
diff --git a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.h b/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.h
deleted file mode 100644
index bea24aa..0000000
--- a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_client.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_TESTING_RLWE_CLIENT_H_
-#define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_TESTING_RLWE_CLIENT_H_
-
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_client.h"
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "third_party/private_membership/src/private_membership_rlwe.pb.h"
-#include "third_party/shell-encryption/src/statusor.h"
-
-namespace private_membership::rlwe {
-class PrivateMembershipRlweClient;
-}  // namespace private_membership::rlwe
-
-namespace policy::psm {
-
-class TestingRlweClient : public RlweClient {
- public:
-  // A factory that creates |TestingRlweClient|s.
-  class FactoryImpl : public Factory {
-   public:
-    // TODO(crbug.com/1239329): Remove |plaintext_ids| from the factory
-    // constructor, and create a delegate for PSM ID.
-    FactoryImpl(const std::string& ec_cipher_key,
-                const std::string& seed,
-                std::vector<PlaintextId> plaintext_testing_ids);
-
-    // FactoryImpl is neither copyable nor copy assignable.
-    FactoryImpl(const FactoryImpl&) = delete;
-    FactoryImpl& operator=(const FactoryImpl&) = delete;
-
-    ~FactoryImpl() override;
-
-    // Creates PSM RLWE client for testing with a given cipher key
-    // |ec_cipher_key_| and deterministic PRNG |seed_|.
-    // Note: |plaintext_ids| value will be ignored while creating the client,
-    // and |plaintext_testing_ids_| member will be used instead for testing.
-    ::rlwe::StatusOr<std::unique_ptr<RlweClient>> Create(
-        UseCase use_case,
-        const std::vector<PlaintextId>& plaintext_ids) override;
-
-   private:
-    // The following members are used to create the PSM RLWE client for testing.
-
-    const std::string ec_cipher_key_;
-    const std::string seed_;
-    const std::vector<PlaintextId> plaintext_testing_ids_;
-  };
-
-  // TestingRlweClient is neither copyable nor copy assignable.
-  TestingRlweClient(const TestingRlweClient&) = delete;
-  TestingRlweClient& operator=(const TestingRlweClient&) = delete;
-
-  ~TestingRlweClient() override;
-
-  // Delegates all function calls into RlweClient by
-  // |psm_rlwe_client_|.
-
-  ::rlwe::StatusOr<OprfRequest> CreateOprfRequest() override;
-  ::rlwe::StatusOr<QueryRequest> CreateQueryRequest(
-      const OprfResponse& oprf_response) override;
-  ::rlwe::StatusOr<MembershipResponses> ProcessQueryResponse(
-      const QueryResponse& query_response) override;
-
- private:
-  explicit TestingRlweClient(
-      std::unique_ptr<private_membership::rlwe::PrivateMembershipRlweClient>
-          psm_rlwe_client);
-
-  const std::unique_ptr<private_membership::rlwe::PrivateMembershipRlweClient>
-      psm_rlwe_client_;
-};
-
-}  // namespace policy::psm
-
-#endif  // CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_TESTING_RLWE_CLIENT_H_
diff --git a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.cc b/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.cc
deleted file mode 100644
index d66bc10af..0000000
--- a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.h"
-
-#include "third_party/private_membership/src/private_membership_rlwe.pb.h"
-
-namespace psm_rlwe = private_membership::rlwe;
-
-namespace policy::psm {
-
-TestingRlweIdProvider::TestingRlweIdProvider(
-    const private_membership::rlwe::RlwePlaintextId& testing_psm_device_rlwe_id)
-    : testing_psm_device_rlwe_id_(testing_psm_device_rlwe_id) {}
-
-psm_rlwe::RlwePlaintextId TestingRlweIdProvider::ConstructRlweId() {
-  return testing_psm_device_rlwe_id_;
-}
-
-}  // namespace policy::psm
diff --git a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.h b/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.h
deleted file mode 100644
index 211328fa..0000000
--- a/chrome/browser/ash/policy/enrollment/psm/testing_rlwe_id_provider.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2022 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_TESTING_RLWE_ID_PROVIDER_H_
-#define CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_TESTING_RLWE_ID_PROVIDER_H_
-
-#include "chrome/browser/ash/policy/enrollment/psm/rlwe_id_provider.h"
-#include "third_party/private_membership/src/private_membership_rlwe.pb.h"
-
-namespace policy::psm {
-
-// PSM RLWE device ID for testing purposes which is returning the passed RLWE ID
-// without encryption.
-class TestingRlweIdProvider : public RlweIdProvider {
- public:
-  explicit TestingRlweIdProvider(
-      const private_membership::rlwe::RlwePlaintextId&
-          testing_psm_device_rlwe_id);
-
-  // `TestingRlweIdProvider` is neither copyable nor copy assignable.
-  TestingRlweIdProvider(const TestingRlweIdProvider&) = delete;
-  TestingRlweIdProvider& operator=(const TestingRlweIdProvider&) = delete;
-
-  ~TestingRlweIdProvider() override = default;
-
-  // Returns `testing_psm_device_rlwe_id_` directly for testing purposes.
-  private_membership::rlwe::RlwePlaintextId ConstructRlweId() override;
-
- private:
-  // PSM RLWE device ID used for testing purposes.
-  const private_membership::rlwe::RlwePlaintextId testing_psm_device_rlwe_id_;
-};
-
-}  // namespace policy::psm
-
-#endif  // CHROME_BROWSER_ASH_POLICY_ENROLLMENT_PSM_TESTING_RLWE_ID_PROVIDER_H_
diff --git a/chrome/browser/ash/policy/handlers/bluetooth_policy_handler_unittest.cc b/chrome/browser/ash/policy/handlers/bluetooth_policy_handler_unittest.cc
index 48b53b6..ef95fab8 100644
--- a/chrome/browser/ash/policy/handlers/bluetooth_policy_handler_unittest.cc
+++ b/chrome/browser/ash/policy/handlers/bluetooth_policy_handler_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/ash/policy/handlers/bluetooth_policy_handler.h"
 
+#include <utility>
+
 #include "base/test/task_environment.h"
 #include "chrome/browser/ash/settings/scoped_testing_cros_settings.h"
 #include "chrome/browser/ash/settings/stub_cros_settings_provider.h"
@@ -16,11 +18,8 @@
 class BluetoothPolicyHandlerTest : public testing::Test {
  protected:
   class TestingBluetoothAdapter : public device::MockBluetoothAdapter {
-   protected:
-    ~TestingBluetoothAdapter() override {}
-
    public:
-    TestingBluetoothAdapter() : is_shutdown_(false), is_powered_(true) {}
+    TestingBluetoothAdapter() = default;
 
     void Shutdown() override { is_shutdown_ = true; }
     void SetPowered(bool powered,
@@ -38,13 +37,16 @@
     const UUIDList& GetAllowList() const { return uuids_; }
 
    protected:
-    bool is_shutdown_;
-    bool is_powered_;
+    ~TestingBluetoothAdapter() override = default;
+
+    bool is_shutdown_ = false;
+    bool is_powered_ = true;
     UUIDList uuids_;
   };
 
-  BluetoothPolicyHandlerTest() : adapter_(new TestingBluetoothAdapter) {}
-  ~BluetoothPolicyHandlerTest() override {}
+  BluetoothPolicyHandlerTest()
+      : adapter_(base::MakeRefCounted<TestingBluetoothAdapter>()) {}
+  ~BluetoothPolicyHandlerTest() override = default;
 
   // testing::Test
   void SetUp() override {
@@ -52,17 +54,16 @@
     device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_);
   }
 
-  void TearDown() override {}
-
  protected:
   void SetAllowBluetooth(bool allow_bluetooth) {
     scoped_testing_cros_settings_.device_settings()->SetBoolean(
         ash::kAllowBluetooth, allow_bluetooth);
   }
 
-  void SetDeviceAllowedBluetoothServices(const base::ListValue& allowlist) {
+  void SetDeviceAllowedBluetoothServices(base::Value::List allowlist) {
     scoped_testing_cros_settings_.device_settings()->Set(
-        ash::kDeviceAllowedBluetoothServices, allowlist);
+        ash::kDeviceAllowedBluetoothServices,
+        base::Value(std::move(allowlist)));
   }
 
   base::test::TaskEnvironment task_environment_;
@@ -100,19 +101,20 @@
 }
 
 TEST_F(BluetoothPolicyHandlerTest, TestSetServiceAllowList) {
-  base::ListValue allowlist;
-  const char* test_uuid1_str = "0x1124";
-  const char* test_uuid2_str = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
-  allowlist.Append(base::Value(test_uuid1_str));
-  allowlist.Append(base::Value(test_uuid2_str));
-  SetDeviceAllowedBluetoothServices(allowlist);
+  base::Value::List allowlist;
+  const char kTestUuid1[] = "0x1124";
+  const char kTestUuid2[] = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
+  allowlist.Append(kTestUuid1);
+  allowlist.Append(kTestUuid2);
+  SetDeviceAllowedBluetoothServices(std::move(allowlist));
   BluetoothPolicyHandler bluetooth_policy_handler(ash::CrosSettings::Get());
-  const device::BluetoothUUID test_uuid1(test_uuid1_str);
-  const device::BluetoothUUID test_uuid2(test_uuid2_str);
-  const std::vector<device::BluetoothUUID>& allowlist_ =
+  const device::BluetoothUUID test_uuid1(kTestUuid1);
+  const device::BluetoothUUID test_uuid2(kTestUuid2);
+  const std::vector<device::BluetoothUUID>& allowlist_result =
       adapter_->GetAllowList();
-  EXPECT_EQ(test_uuid1, allowlist_[0]);
-  EXPECT_EQ(test_uuid2, allowlist_[1]);
+  ASSERT_EQ(2u, allowlist_result.size());
+  EXPECT_EQ(test_uuid1, allowlist_result[0]);
+  EXPECT_EQ(test_uuid2, allowlist_result[1]);
 }
 
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.cc b/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.cc
index cb193906..d12672f 100644
--- a/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.cc
+++ b/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.cc
@@ -16,6 +16,7 @@
 #include "base/time/time.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/policy/proto/device_management_backend.pb.h"
+#include "third_party/cros_system_api/dbus/power_manager/dbus-constants.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
 
 namespace policy {
@@ -26,9 +27,6 @@
   CHECK(power_manager_client_);
 }
 
-DeviceCommandRebootJob::~DeviceCommandRebootJob() {
-}
-
 enterprise_management::RemoteCommand_Type DeviceCommandRebootJob::GetType()
     const {
   return enterprise_management::RemoteCommand_Type_DEVICE_REBOOT;
@@ -55,8 +53,9 @@
   }
 
   SYSLOG(INFO) << "Rebooting immediately.";
-  power_manager_client_->RequestRestart(power_manager::REQUEST_RESTART_OTHER,
-                                        "policy device command");
+  power_manager_client_->RequestRestart(
+      power_manager::REQUEST_RESTART_REMOTE_ACTION_REBOOT,
+      "policy device command");
 }
 
 }  // namespace policy
diff --git a/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.h b/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.h
index 6bf07f7b..74aac46 100644
--- a/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.h
+++ b/chrome/browser/ash/policy/remote_commands/device_command_reboot_job.h
@@ -23,7 +23,7 @@
   DeviceCommandRebootJob(const DeviceCommandRebootJob&) = delete;
   DeviceCommandRebootJob& operator=(const DeviceCommandRebootJob&) = delete;
 
-  ~DeviceCommandRebootJob() override;
+  ~DeviceCommandRebootJob() override = default;
 
   // RemoteCommandJob:
   enterprise_management::RemoteCommand_Type GetType() const override;
diff --git a/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc b/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc
index e348e8b..72723818 100644
--- a/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc
+++ b/chrome/browser/ash/policy/scheduled_task_handler/device_scheduled_reboot_handler.cc
@@ -26,6 +26,7 @@
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/user_manager/user_manager.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/cros_system_api/dbus/power_manager/dbus-constants.h"
 
 namespace policy {
 
@@ -237,7 +238,8 @@
 void DeviceScheduledRebootHandler::RebootDevice(
     const std::string& reboot_description) const {
   chromeos::PowerManagerClient::Get()->RequestRestart(
-      power_manager::REQUEST_RESTART_OTHER, reboot_description);
+      power_manager::REQUEST_RESTART_SCHEDULED_REBOOT_POLICY,
+      reboot_description);
 }
 
 }  // namespace policy
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc
index c0b0d407..fdb9e1b 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.cc
@@ -6,6 +6,7 @@
 
 #include <stdint.h>
 #include <algorithm>
+#include <cstdint>
 #include <iterator>
 #include <memory>
 #include <string>
@@ -72,6 +73,7 @@
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/image/image_skia.h"
 #include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/image/image_util.h"
 #include "url/gurl.h"
 
 namespace ash::personalization_app {
@@ -107,17 +109,21 @@
              : base::UnguessableToken::Create().ToString();
 }
 
-scoped_refptr<base::RefCountedMemory> ResizeAndEncodeWallpaperImage() {
-  auto* wallpaper_controller = ash::WallpaperController::Get();
-  // Get wallpaper image on worker thread for performance reasons. This avoids
-  // having to call |image.MakeThreadSafe| in a performance critical path while
-  // changing wallpaper, and instead calling it in the thread pool.
-  auto image = wallpaper_controller->GetWallpaperImage();
-  image.MakeThreadSafe();
-  auto resized = GetResizedImage(image);
-  scoped_refptr<base::RefCountedMemory> png_bytes =
-      gfx::Image(resized).As1xPNGBytes();
-  return png_bytes;
+scoped_refptr<base::RefCountedMemory> ResizeAndEncodeWallpaperImage(
+    gfx::ImageSkia image) {
+  auto resized = gfx::Image(GetResizedImage(image));
+  scoped_refptr<base::RefCountedMemory> jpg_bytes = new base::RefCountedBytes();
+  std::vector<uint8_t> jpg_buffer;
+  // Conversion quality between 0 - 100. Manually tested to use 90 for good
+  // performance with reasonable quality.
+  const int quality = 90;
+  if (gfx::JPEG1xEncodedDataFromImage(resized, quality, &jpg_buffer)) {
+    jpg_bytes = base::RefCountedBytes::TakeVector(&jpg_buffer);
+  } else {
+    // Cannot convert to JPEG, use PNG
+    jpg_bytes = resized.As1xPNGBytes();
+  }
+  return jpg_bytes;
 }
 
 std::string GetJpegDataUrl(const unsigned char* data, size_t size) {
@@ -164,17 +170,21 @@
   wallpaper_receiver_.Bind(std::move(receiver));
 }
 
-void PersonalizationAppWallpaperProviderImpl::GetWallpaperAsPngBytes(
+void PersonalizationAppWallpaperProviderImpl::GetWallpaperAsJpegBytes(
     content::WebUIDataSource::GotDataCallback callback) {
-  // |GetWallpaperAsPngBytes| is called in the hot path of switching wallpaper
+  // |GetWallpaperAsJpegBytes| is called in the hot path of switching wallpaper
   // on the UI thread right after user makes a new selection. Make sure to do
   // resizing and encoding on a task runner to avoid locking up the UI as the
   // user's wallpaper is being set.
+  auto* wallpaper_controller = ash::WallpaperController::Get();
+  auto image = wallpaper_controller->GetWallpaperImage();
+  image.MakeThreadSafe();
   base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE,
       {base::TaskPriority::USER_VISIBLE,
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-      base::BindOnce(&ResizeAndEncodeWallpaperImage), std::move(callback));
+      base::BindOnce(&ResizeAndEncodeWallpaperImage, image),
+      std::move(callback));
 }
 
 bool PersonalizationAppWallpaperProviderImpl::IsEligibleForGooglePhotos() {
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h
index 49bfa47..eac060b7 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl.h
@@ -81,7 +81,7 @@
       mojo::PendingReceiver<ash::personalization_app::mojom::WallpaperProvider>
           receiver) override;
 
-  void GetWallpaperAsPngBytes(
+  void GetWallpaperAsJpegBytes(
       content::WebUIDataSource::GotDataCallback callback) override;
 
   // Not all users can see google photos. Requires a gaia account to be able to
diff --git a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc
index 7b7562e..9b41e7e 100644
--- a/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc
+++ b/chrome/browser/ash/web_applications/personalization_app/personalization_app_wallpaper_provider_impl_unittest.cc
@@ -58,6 +58,7 @@
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/webui/web_ui_util.h"
+#include "ui/gfx/codec/jpeg_codec.h"
 #include "ui/gfx/codec/png_codec.h"
 
 namespace ash::personalization_app {
@@ -484,31 +485,30 @@
   ResetWallpaperProvider();
 }
 
-TEST_P(PersonalizationAppWallpaperProviderImplTest, GetWallpaperAsPngBytes) {
+TEST_P(PersonalizationAppWallpaperProviderImplTest, GetWallpaperAsJpegBytes) {
   test_wallpaper_controller()->ShowWallpaperImage(
       CreateSolidImageSkia(/*width=*/1, /*height=*/1, SK_ColorRED));
 
-  scoped_refptr<base::RefCountedMemory> png_bytes;
+  scoped_refptr<base::RefCountedMemory> jpeg_bytes;
 
   base::RunLoop loop;
-  delegate()->GetWallpaperAsPngBytes(base::BindLambdaForTesting(
+  delegate()->GetWallpaperAsJpegBytes(base::BindLambdaForTesting(
       [quit = loop.QuitClosure(),
-       &png_bytes](scoped_refptr<base::RefCountedMemory> bytes) {
-        bytes.swap(png_bytes);
+       &jpeg_bytes](scoped_refptr<base::RefCountedMemory> bytes) {
+        bytes.swap(jpeg_bytes);
         std::move(quit).Run();
       }));
   loop.Run();
 
-  // Png bytes of a solid black image scaled up to 1024x1024.
-  scoped_refptr<base::RefCountedBytes> expected_png_bytes =
+  // Jpeg bytes of a solid black image scaled up to 1024x1024.
+  scoped_refptr<base::RefCountedBytes> expected_jpeg_bytes =
       base::MakeRefCounted<base::RefCountedBytes>();
-  gfx::PNGCodec::EncodeBGRASkBitmap(
-      CreateSolidImageSkia(1024, 1024, SK_ColorRED)
-          .GetRepresentation(/*scale=*/1)
-          .GetBitmap(),
-      /*discard_transparency=*/false, &expected_png_bytes->data());
+  gfx::JPEGCodec::Encode(CreateSolidImageSkia(1024, 1024, SK_ColorRED)
+                             .GetRepresentation(/*scale=*/1)
+                             .GetBitmap(),
+                         /*quality=*/90, &expected_jpeg_bytes->data());
 
-  EXPECT_TRUE(expected_png_bytes->Equals(png_bytes));
+  EXPECT_TRUE(expected_jpeg_bytes->Equals(jpeg_bytes));
 }
 
 TEST_P(PersonalizationAppWallpaperProviderImplTest,
diff --git a/chrome/browser/browsing_data/site_data_size_collector_unittest.cc b/chrome/browser/browsing_data/site_data_size_collector_unittest.cc
index 3c39a953..ff263d8 100644
--- a/chrome/browser/browsing_data/site_data_size_collector_unittest.cc
+++ b/chrome/browser/browsing_data/site_data_size_collector_unittest.cc
@@ -14,13 +14,8 @@
 #include "chrome/browser/browsing_data/mock_browsing_data_quota_helper.h"
 #include "chrome/common/chrome_constants.h"
 #include "chrome/test/base/testing_profile.h"
-#include "components/browsing_data/content/mock_cache_storage_helper.h"
 #include "components/browsing_data/content/mock_cookie_helper.h"
-#include "components/browsing_data/content/mock_database_helper.h"
-#include "components/browsing_data/content/mock_file_system_helper.h"
-#include "components/browsing_data/content/mock_indexed_db_helper.h"
 #include "components/browsing_data/content/mock_local_storage_helper.h"
-#include "components/browsing_data/content/mock_service_worker_helper.h"
 #include "content/public/common/content_constants.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/buildflags.gni b/chrome/browser/buildflags.gni
index 4513b2a..f8aed79 100644
--- a/chrome/browser/buildflags.gni
+++ b/chrome/browser/buildflags.gni
@@ -7,11 +7,6 @@
 import("//build/toolchain/gcc_toolchain.gni")
 
 declare_args() {
-  # Chromium Updater is a cross-platform updater for desktop clients built using
-  # Chromium code and tools. Code is in //chrome/updater. The design doc is
-  # located at http://bit.ly/chromium-updater. Chrome is currently installed and
-  # updated with proprietary updater (Omaha & Keystone). This build flag allows
-  # integration with the open source, cross-platform Chromium updater.
-  # TODO(crbug.com/1054060)
-  enable_chromium_updater = false
+  # By default, only branded builds integrate with automatic updates.
+  enable_chromium_updater = is_chrome_branded
 }
diff --git a/chrome/browser/chrome_browser_main_mac.mm b/chrome/browser/chrome_browser_main_mac.mm
index 62a30dd..d12abb3 100644
--- a/chrome/browser/chrome_browser_main_mac.mm
+++ b/chrome/browser/chrome_browser_main_mac.mm
@@ -26,10 +26,10 @@
 #include "chrome/browser/chrome_for_testing/buildflags.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/mac/install_from_dmg.h"
-#include "chrome/browser/mac/install_updater.h"
 #import "chrome/browser/mac/keystone_glue.h"
 #include "chrome/browser/mac/mac_startup_profiler.h"
 #include "chrome/browser/ui/cocoa/main_menu_builder.h"
+#include "chrome/browser/updater/browser_updater_client_util.h"
 #include "chrome/browser/updater/scheduler.h"
 #include "chrome/common/channel_info.h"
 #include "chrome/common/chrome_features.h"
@@ -82,7 +82,7 @@
 
 #if !BUILDFLAG(GOOGLE_CHROME_FOR_TESTING_BRANDING)
   if (base::FeatureList::IsEnabled(features::kUseChromiumUpdater)) {
-    InstallUpdaterAndRegisterBrowser();
+    EnsureUpdater(base::DoNothing(), base::DoNothing());
   } else {
     // This is a no-op if the KeystoneRegistration framework is not present.
     // The framework is only distributed with branded Google Chrome builds.
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index ceff44e1..267d65c 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1575,7 +1575,6 @@
     "../ash/login/signin/offline_signin_limiter_unittest.cc",
     "../ash/login/signin/signin_error_notifier_unittest.cc",
     "../ash/login/signin_partition_manager_unittest.cc",
-    "../ash/login/test/cryptohome_mixin_unittest.cc",
     "../ash/login/ui/login_screen_extension_ui/dialog_delegate_unittest.cc",
     "../ash/login/ui/login_screen_extension_ui/web_dialog_view_unittest.cc",
     "../ash/login/ui/oobe_dialog_size_utils_unittest.cc",
@@ -1685,10 +1684,8 @@
     "../ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc",
     "../ash/policy/enrollment/auto_enrollment_type_checker_unittest.cc",
     "../ash/policy/enrollment/enrollment_config_unittest.cc",
+    "../ash/policy/enrollment/psm/construct_rlwe_id_unittest.cc",
     "../ash/policy/enrollment/psm/rlwe_dmserver_client_impl_unittest.cc",
-    "../ash/policy/enrollment/psm/rlwe_id_provider_impl_unittest.cc",
-    "../ash/policy/enrollment/psm/testing_rlwe_client.cc",
-    "../ash/policy/enrollment/psm/testing_rlwe_client.h",
     "../ash/policy/enrollment/tpm_enrollment_key_signing_service_unittest.cc",
     "../ash/policy/external_data/cloud_external_data_manager_base_unittest.cc",
     "../ash/policy/external_data/cloud_external_data_policy_observer_unittest.cc",
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
index bb3c4122..bb0a104 100644
--- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
+++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -5832,6 +5832,8 @@
 
   // This disables accessibility for all other accessibility trees including
   // ARC++, Ash web contents.
+  AutomationEventRouter::GetInstance()
+      ->UnregisterAllListenersWithDesktopPermission();
   AutomationEventRouter::GetInstance()->NotifyAllAutomationExtensionsGone();
 
   // Finally, this disables accessibility in Lacros.
diff --git a/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc b/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc
index f5a977263..2a6c333e 100644
--- a/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc
+++ b/chrome/browser/content_settings/content_settings_policy_provider_unittest.cc
@@ -192,8 +192,8 @@
   base::Value* cert_filters =
       cert_filter_setting.FindKeyOfType("filters", base::Value::Type::LIST);
   ASSERT_TRUE(cert_filters);
-  ASSERT_FALSE(cert_filters->GetListDeprecated().empty());
-  auto& filter = cert_filters->GetListDeprecated().front();
+  ASSERT_FALSE(cert_filters->GetList().empty());
+  auto& filter = cert_filters->GetList().front();
   ASSERT_TRUE(filter.is_dict());
   const std::string* actual_common_name = filter.FindStringPath("ISSUER.CN");
   ASSERT_TRUE(actual_common_name);
diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.cc b/chrome/browser/content_settings/host_content_settings_map_factory.cc
index 7848825..c8a0156b69 100644
--- a/chrome/browser/content_settings/host_content_settings_map_factory.cc
+++ b/chrome/browser/content_settings/host_content_settings_map_factory.cc
@@ -57,6 +57,9 @@
 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
   DependsOn(SupervisedUserSettingsServiceFactory::GetInstance());
 #endif
+#if BUILDFLAG(IS_ANDROID)
+  DependsOn(TemplateURLServiceFactory::GetInstance());
+#endif
 #if BUILDFLAG(ENABLE_EXTENSIONS)
   DependsOn(extensions::ContentSettingsService::GetFactoryInstance());
 #endif
diff --git a/chrome/browser/device_reauth/win/biometric_authenticator_win.cc b/chrome/browser/device_reauth/win/biometric_authenticator_win.cc
index 31d4a49..d97279e 100644
--- a/chrome/browser/device_reauth/win/biometric_authenticator_win.cc
+++ b/chrome/browser/device_reauth/win/biometric_authenticator_win.cc
@@ -70,7 +70,7 @@
   authenticator_->AuthenticateUser(
       message,
       base::BindOnce(&BiometricAuthenticatorWin::RecordAuthenticationResult,
-                     base::Unretained(this))
+                     base::UnsafeDanglingUntriaged(this))
           .Then(std::move(callback)));
 }
 
diff --git a/chrome/browser/dips/dips_database.cc b/chrome/browser/dips/dips_database.cc
index 48a3092..127d88b 100644
--- a/chrome/browser/dips/dips_database.cc
+++ b/chrome/browser/dips/dips_database.cc
@@ -339,19 +339,51 @@
 
   if (type == DIPSEventRemovalType::kAll) {
     static constexpr char kAllTypesSql[] =  // clang-format off
-      "DELETE FROM bounces "
-          "WHERE (first_user_interaction_time>=?1 AND "
-                 "last_user_interaction_time<=?2 AND "
-                 "first_site_storage_time>=?1 AND "
-                 "last_site_storage_time<=?2) OR "
-                 "(first_user_interaction_time=0 AND "
-                 "last_user_interaction_time=0 AND "
-                 "first_site_storage_time>=?1 AND "
-                 "last_site_storage_time<=?2) OR "
-                 "(first_user_interaction_time>=?1 AND "
-                 "last_user_interaction_time<=?2 AND "
-                 "first_site_storage_time=0 AND "
-                 "last_site_storage_time=0)";
+        "DELETE FROM bounces "
+            "WHERE (first_site_storage_time>=?1 AND "
+                   "last_site_storage_time<=?2 AND "
+                   "first_user_interaction_time>=?1 AND "
+                   "last_user_interaction_time<=?2 AND "
+                   "first_stateful_bounce_time>=?1 AND "
+                   "last_stateful_bounce_time<=?2 AND "
+                   "first_stateless_bounce_time>=?1 AND "
+                   "last_stateless_bounce_time<=?2) OR "
+
+                   "(first_site_storage_time>=?1 AND "
+                   "last_site_storage_time<=?2 AND "
+                   "first_user_interaction_time=0 AND "
+                   "last_user_interaction_time=0 AND "
+                   "first_stateful_bounce_time=0 AND "
+                   "last_stateful_bounce_time=0 AND "
+                   "first_stateless_bounce_time=0 AND "
+                   "last_stateless_bounce_time=0) OR "
+
+                   "(first_site_storage_time=0 AND "
+                   "last_site_storage_time=0 AND "
+                   "first_user_interaction_time>=?1 AND "
+                   "last_user_interaction_time<=?2 AND "
+                   "first_stateful_bounce_time=0 AND "
+                   "last_stateful_bounce_time=0 AND "
+                   "first_stateless_bounce_time=0 AND "
+                   "last_stateless_bounce_time=0) OR "
+
+                   "(first_site_storage_time=0 AND "
+                   "last_site_storage_time=0 AND "
+                   "first_user_interaction_time=0 AND "
+                   "last_user_interaction_time=0 AND "
+                   "first_stateful_bounce_time>=?1 AND "
+                   "last_stateful_bounce_time<=?2 AND "
+                   "first_stateless_bounce_time=0 AND "
+                   "last_stateless_bounce_time=0) OR "
+
+                   "(first_site_storage_time=0 AND "
+                   "last_site_storage_time=0 AND "
+                   "first_user_interaction_time=0 AND "
+                   "last_user_interaction_time=0 AND "
+                   "first_stateful_bounce_time=0 AND "
+                   "last_stateful_bounce_time=0 AND "
+                   "first_stateless_bounce_time>=?1 AND "
+                   "last_stateless_bounce_time<=?2)";
     // clang-format on
     DCHECK(db_->IsSQLValid(kAllTypesSql));
 
@@ -363,8 +395,8 @@
       return false;
   }
 
-  if ((type & DIPSEventRemovalType::kInteraction) ==
-      DIPSEventRemovalType::kInteraction) {
+  if ((type & DIPSEventRemovalType::kHistory) ==
+      DIPSEventRemovalType::kHistory) {
     static constexpr char kClearInteractionSql[] =  // clang-format off
         "UPDATE bounces SET "
             "first_user_interaction_time=0,"
@@ -381,6 +413,23 @@
 
     if (!s_clear_interaction.Run())
       return false;
+
+    static constexpr char kClearStatelessSql[] =  // clang-format off
+        "UPDATE bounces SET "
+            "first_stateless_bounce_time=0,"
+            "last_stateless_bounce_time=0 "
+            "WHERE first_stateless_bounce_time>=? AND "
+                  "last_stateless_bounce_time<=?";
+    // clang-format on
+    DCHECK(db_->IsSQLValid(kClearStatelessSql));
+
+    sql::Statement s_clear_stateless(
+        db_->GetCachedStatement(SQL_FROM_HERE, kClearStatelessSql));
+    s_clear_stateless.BindTime(0, delete_begin);
+    s_clear_stateless.BindTime(1, delete_end);
+
+    if (!s_clear_stateless.Run())
+      return false;
   }
 
   if ((type & DIPSEventRemovalType::kStorage) ==
@@ -401,6 +450,23 @@
 
     if (!s_clear_storage.Run())
       return false;
+
+    static constexpr char kClearStatefulSql[] =  // clang-format off
+        "UPDATE bounces SET "
+            "first_stateful_bounce_time=0,"
+            "last_stateful_bounce_time=0 "
+            "WHERE first_stateful_bounce_time>=? AND "
+                  "last_stateful_bounce_time<=?";
+    // clang-format on
+    DCHECK(db_->IsSQLValid(kClearStatefulSql));
+
+    sql::Statement s_clear_stateful(
+        db_->GetCachedStatement(SQL_FROM_HERE, kClearStatefulSql));
+    s_clear_stateful.BindTime(0, delete_begin);
+    s_clear_stateful.BindTime(1, delete_end);
+
+    if (!s_clear_stateful.Run())
+      return false;
   }
 
   static constexpr char kCleanUpSql[] =  // clang-format off
@@ -408,7 +474,11 @@
           "WHERE first_site_storage_time=0 AND "
                 "last_site_storage_time=0 AND "
                 "first_user_interaction_time=0 AND "
-                "last_user_interaction_time=0";
+                "last_user_interaction_time=0 AND "
+                "first_stateful_bounce_time=0 AND "
+                "last_stateful_bounce_time=0 AND "
+                "first_stateless_bounce_time=0 AND "
+                "last_stateless_bounce_time=0";
   // clang-format on
   DCHECK(db_->IsSQLValid(kCleanUpSql));
 
@@ -422,8 +492,8 @@
                                          const DIPSEventRemovalType type) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if ((type & DIPSEventRemovalType::kInteraction) ==
-      DIPSEventRemovalType::kInteraction) {
+  if ((type & DIPSEventRemovalType::kHistory) ==
+      DIPSEventRemovalType::kHistory) {
     static constexpr char kUpdateFirstInteractionSql[] =  // clang-format off
         "UPDATE bounces SET first_user_interaction_time=?1 "
             "WHERE first_user_interaction_time>=?2 AND "
@@ -438,6 +508,21 @@
 
     if (!s_first_interaction.Run())
       return false;
+
+    static constexpr char kUpdateFirstStatelessSql[] =  // clang-format off
+        "UPDATE bounces SET first_stateless_bounce_time=?1 "
+            "WHERE first_stateless_bounce_time>=?2 AND "
+                  "first_stateless_bounce_time<?1";
+    // clang-format on
+    DCHECK(db_->IsSQLValid(kUpdateFirstStatelessSql));
+
+    sql::Statement s_first_stateless(
+        db_->GetCachedStatement(SQL_FROM_HERE, kUpdateFirstStatelessSql));
+    s_first_stateless.BindTime(0, delete_end);
+    s_first_stateless.BindTime(1, delete_begin);
+
+    if (!s_first_stateless.Run())
+      return false;
   }
 
   if ((type & DIPSEventRemovalType::kStorage) ==
@@ -456,6 +541,21 @@
 
     if (!s_first_storage.Run())
       return false;
+
+    static constexpr char kUpdateFirstStatefulSql[] =  // clang-format off
+        "UPDATE bounces SET first_stateful_bounce_time=?1 "
+            "WHERE first_stateful_bounce_time>=?2 AND "
+                  "first_stateful_bounce_time<?1";
+    // clang-format on
+    DCHECK(db_->IsSQLValid(kUpdateFirstStatefulSql));
+
+    sql::Statement s_first_stateful(
+        db_->GetCachedStatement(SQL_FROM_HERE, kUpdateFirstStatefulSql));
+    s_first_stateful.BindTime(0, delete_end);
+    s_first_stateful.BindTime(1, delete_begin);
+
+    if (!s_first_stateful.Run())
+      return false;
   }
 
   return true;
@@ -466,8 +566,8 @@
                                         const DIPSEventRemovalType type) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if ((type & DIPSEventRemovalType::kInteraction) ==
-      DIPSEventRemovalType::kInteraction) {
+  if ((type & DIPSEventRemovalType::kHistory) ==
+      DIPSEventRemovalType::kHistory) {
     static constexpr char kUpdateLastInteractionSql[] =  // clang-format off
         "UPDATE bounces SET last_user_interaction_time=?1 "
             "WHERE last_user_interaction_time>?1 AND "
@@ -482,6 +582,21 @@
 
     if (!s_last_interaction.Run())
       return false;
+
+    static constexpr char kUpdateLastStatelessSql[] =  // clang-format off
+        "UPDATE bounces SET last_stateless_bounce_time=?1 "
+            "WHERE last_stateless_bounce_time>?1 AND "
+                  "last_stateless_bounce_time<=?2";
+    // clang-format on
+    DCHECK(db_->IsSQLValid(kUpdateLastStatelessSql));
+
+    sql::Statement s_last_stateless(
+        db_->GetCachedStatement(SQL_FROM_HERE, kUpdateLastStatelessSql));
+    s_last_stateless.BindTime(0, delete_begin);
+    s_last_stateless.BindTime(1, delete_end);
+
+    if (!s_last_stateless.Run())
+      return false;
   }
 
   if ((type & DIPSEventRemovalType::kStorage) ==
@@ -500,6 +615,21 @@
 
     if (!s_last_storage.Run())
       return false;
+
+    static constexpr char kUpdateLastStatefulSql[] =  // clang-format off
+        "UPDATE bounces SET last_stateful_bounce_time=?1 "
+            "WHERE last_stateful_bounce_time>?1 AND "
+                  "last_stateful_bounce_time<=?2";
+    // clang-format on
+    DCHECK(db_->IsSQLValid(kUpdateLastStatefulSql));
+
+    sql::Statement s_last_stateful(
+        db_->GetCachedStatement(SQL_FROM_HERE, kUpdateLastStatefulSql));
+    s_last_stateful.BindTime(0, delete_begin);
+    s_last_stateful.BindTime(1, delete_end);
+
+    if (!s_last_stateful.Run())
+      return false;
   }
 
   return true;
diff --git a/chrome/browser/dips/dips_storage_unittest.cc b/chrome/browser/dips/dips_storage_unittest.cc
index f08ff95..69b025d 100644
--- a/chrome/browser/dips/dips_storage_unittest.cc
+++ b/chrome/browser/dips/dips_storage_unittest.cc
@@ -276,7 +276,7 @@
              {base::Time::FromDoubleT(3), base::Time::FromDoubleT(5)}});
   storage_.RemoveEvents(delete_begin, delete_end,
                         base::RepeatingCallback<bool(const GURL&)>(),
-                        DIPSEventRemovalType::kInteraction);
+                        DIPSEventRemovalType::kHistory);
 
   DIPSState state1 = storage_.Read(url1);
   EXPECT_EQ(state1.site_storage_times().first,
@@ -292,6 +292,77 @@
   EXPECT_FALSE(state2.was_loaded());  // removed
 }
 
+TEST_F(DIPSStorageTest, RemoveByTimeStatefulOnly) {
+  GURL url1("https://example1.com");
+  GURL url2("https://example2.com");
+  base::Time delete_begin = base::Time::FromDoubleT(2);
+  base::Time delete_end = base::Time::FromDoubleT(6);
+
+  storage_.WriteForTesting(
+      url1, {{absl::nullopt, absl::nullopt},
+             {absl::nullopt, absl::nullopt},
+             {base::Time::FromDoubleT(1), base::Time::FromDoubleT(3)},
+             {base::Time::FromDoubleT(5), base::Time::FromDoubleT(8)}});
+  storage_.WriteForTesting(
+      url2, {{absl::nullopt, absl::nullopt},
+             {absl::nullopt, absl::nullopt},
+             {absl::nullopt, absl::nullopt},
+             {base::Time::FromDoubleT(3), base::Time::FromDoubleT(5)}});
+  storage_.RemoveEvents(delete_begin, delete_end,
+                        base::RepeatingCallback<bool(const GURL&)>(),
+                        DIPSEventRemovalType::kStorage);
+
+  DIPSState state1 = storage_.Read(url1);
+  EXPECT_EQ(state1.stateful_bounce_times().first,
+            absl::make_optional(base::Time::FromDoubleT(1)));  // no change
+  EXPECT_EQ(state1.stateful_bounce_times().last,
+            absl::make_optional(delete_begin));  // adjusted
+  EXPECT_EQ(state1.stateless_bounce_times().first,
+            absl::make_optional(base::Time::FromDoubleT(5)));  // no change
+  EXPECT_EQ(state1.stateless_bounce_times().last,
+            absl::make_optional(base::Time::FromDoubleT(8)));  // no change
+
+  DIPSState state2 = storage_.Read(url2);
+  EXPECT_EQ(state2.stateless_bounce_times().first,
+            absl::make_optional(base::Time::FromDoubleT(3)));  // no change
+  EXPECT_EQ(state2.stateless_bounce_times().last,
+            absl::make_optional(base::Time::FromDoubleT(5)));  // no change
+}
+
+TEST_F(DIPSStorageTest, RemoveByTimeStatelessOnly) {
+  GURL url1("https://example1.com");
+  GURL url2("https://example2.com");
+  base::Time delete_begin = base::Time::FromDoubleT(2);
+  base::Time delete_end = base::Time::FromDoubleT(6);
+
+  storage_.WriteForTesting(
+      url1, {{absl::nullopt, absl::nullopt},
+             {absl::nullopt, absl::nullopt},
+             {base::Time::FromDoubleT(1), base::Time::FromDoubleT(3)},
+             {base::Time::FromDoubleT(5), base::Time::FromDoubleT(8)}});
+  storage_.WriteForTesting(
+      url2, {{absl::nullopt, absl::nullopt},
+             {absl::nullopt, absl::nullopt},
+             {absl::nullopt, absl::nullopt},
+             {base::Time::FromDoubleT(3), base::Time::FromDoubleT(5)}});
+  storage_.RemoveEvents(delete_begin, delete_end,
+                        base::RepeatingCallback<bool(const GURL&)>(),
+                        DIPSEventRemovalType::kHistory);
+
+  DIPSState state1 = storage_.Read(url1);
+  EXPECT_EQ(state1.stateful_bounce_times().first,
+            absl::make_optional(base::Time::FromDoubleT(1)));  // no change
+  EXPECT_EQ(state1.stateful_bounce_times().last,
+            absl::make_optional(base::Time::FromDoubleT(3)));  // no change
+  EXPECT_EQ(state1.stateless_bounce_times().first,
+            absl::make_optional(delete_end));  // adjusted
+  EXPECT_EQ(state1.stateless_bounce_times().last,
+            absl::make_optional(base::Time::FromDoubleT(8)));  // no change
+
+  DIPSState state2 = storage_.Read(url2);
+  EXPECT_FALSE(state2.was_loaded());  // removed
+}
+
 class DIPSStoragePrepopulateTest : public testing::Test {
  public:
   DIPSStoragePrepopulateTest()
diff --git a/chrome/browser/dips/dips_utils.h b/chrome/browser/dips/dips_utils.h
index b42a6b4..cdc9e681 100644
--- a/chrome/browser/dips/dips_utils.h
+++ b/chrome/browser/dips/dips_utils.h
@@ -57,7 +57,7 @@
 // NOTE: We use this type as a bitfield don't change the values.
 enum class DIPSEventRemovalType {
   kNone = 0,
-  kInteraction = 1,
+  kHistory = 1,
   kStorage = 2,
   kAll = 3
 };
diff --git a/chrome/browser/download/download_danger_prompt_browsertest.cc b/chrome/browser/download/download_danger_prompt_browsertest.cc
index 45147ef..e592bab3 100644
--- a/chrome/browser/download/download_danger_prompt_browsertest.cc
+++ b/chrome/browser/download/download_danger_prompt_browsertest.cc
@@ -20,6 +20,7 @@
 #include "chrome/test/base/ui_test_utils.h"
 #include "components/download/public/common/mock_download_item.h"
 #include "components/safe_browsing/core/browser/db/database_manager.h"
+#include "components/safe_browsing/core/common/features.h"
 #include "components/safe_browsing/core/common/proto/csd.pb.h"
 #include "content/public/browser/download_item_utils.h"
 #include "content/public/test/browser_test.h"
@@ -50,7 +51,10 @@
         expected_action_(DownloadDangerPrompt::CANCEL),
         did_receive_callback_(false),
         test_safe_browsing_factory_(
-            std::make_unique<TestSafeBrowsingServiceFactory>()) {}
+            std::make_unique<TestSafeBrowsingServiceFactory>()) {
+    feature_list_.InitAndDisableFeature(
+        safe_browsing::kSafeBrowsingCsbrrNewDownloadTrigger);
+  }
 
   DownloadDangerPromptTest(const DownloadDangerPromptTest&) = delete;
   DownloadDangerPromptTest& operator=(const DownloadDangerPromptTest&) = delete;
@@ -192,6 +196,7 @@
   bool did_receive_callback_;
   std::unique_ptr<TestSafeBrowsingServiceFactory> test_safe_browsing_factory_;
   std::string expected_serialized_report_;
+  base::test::ScopedFeatureList feature_list_;
 };
 
 // Disabled for flaky timeouts on Windows. crbug.com/446696
@@ -317,6 +322,81 @@
   VerifyExpectations(true);
 }
 
+class DownloadDangerPromptTestNewCsbrrTrigger
+    : public DownloadDangerPromptTest {
+ public:
+  DownloadDangerPromptTestNewCsbrrTrigger() {
+    feature_list_.InitAndEnableFeature(
+        safe_browsing::kSafeBrowsingCsbrrNewDownloadTrigger);
+  }
+
+  DownloadDangerPromptTestNewCsbrrTrigger(
+      const DownloadDangerPromptTestNewCsbrrTrigger&) = delete;
+  DownloadDangerPromptTestNewCsbrrTrigger& operator=(
+      const DownloadDangerPromptTestNewCsbrrTrigger&) = delete;
+
+  ~DownloadDangerPromptTestNewCsbrrTrigger() override = default;
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(DownloadDangerPromptTestNewCsbrrTrigger, TestAll) {
+  GURL download_url(kTestDownloadUrl);
+  ON_CALL(download(), GetURL()).WillByDefault(ReturnRef(download_url));
+  ON_CALL(download(), GetReferrerUrl())
+      .WillByDefault(ReturnRef(GURL::EmptyGURL()));
+  base::FilePath empty_file_path;
+  ON_CALL(download(), GetTargetFilePath())
+      .WillByDefault(ReturnRef(empty_file_path));
+
+  OpenNewTab(browser());
+
+  // Clicking the Accept button should invoke the ACCEPT action. A report will
+  // be sent with type DANGEROUS_DOWNLOAD_RECOVERY. Same as the old trigger.
+  SetUpExpectations(DownloadDangerPrompt::ACCEPT,
+                    download::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL,
+                    ClientDownloadResponse::DANGEROUS, kDownloadResponseToken,
+                    false, browser());
+  EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
+  SimulatePromptAction(DownloadDangerPrompt::ACCEPT);
+  VerifyExpectations(true);
+
+  // Clicking the Cancel button should invoke the CANCEL action. A report will
+  // NOT be sent with type DANGEROUS_DOWNLOAD_RECOVERY. New behavior.
+  SetUpExpectations(DownloadDangerPrompt::CANCEL,
+                    download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT,
+                    ClientDownloadResponse::UNCOMMON, std::string(), false,
+                    browser());
+  EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
+  SimulatePromptAction(DownloadDangerPrompt::CANCEL);
+  VerifyExpectations(false);
+
+  // If file is downloaded through download api, a confirm download dialog
+  // instead of a recovery dialog is shown. Clicking the Accept button should
+  // invoke the ACCEPT action, a report will be sent with type
+  // DANGEROUS_DOWNLOAD_BY_API. Same as the old trigger.
+  SetUpExpectations(DownloadDangerPrompt::ACCEPT,
+                    download::DOWNLOAD_DANGER_TYPE_DANGEROUS_URL,
+                    ClientDownloadResponse::DANGEROUS, kDownloadResponseToken,
+                    true, browser());
+  EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
+  SimulatePromptAction(DownloadDangerPrompt::ACCEPT);
+  VerifyExpectations(true);
+
+  // If file is downloaded through download api, a confirm download dialog
+  // instead of a recovery dialog is shown. Clicking the Cancel button should
+  // invoke the CANCEL action, a report will NOT be sent with type
+  // DANGEROUS_DOWNLOAD_BY_API. New behavior.
+  SetUpExpectations(DownloadDangerPrompt::CANCEL,
+                    download::DOWNLOAD_DANGER_TYPE_UNCOMMON_CONTENT,
+                    ClientDownloadResponse::UNCOMMON, std::string(), true,
+                    browser());
+  EXPECT_CALL(download(), IsDangerous()).WillRepeatedly(Return(true));
+  SimulatePromptAction(DownloadDangerPrompt::CANCEL);
+  VerifyExpectations(false);
+}
+
 // Class for testing interactive dialogs.
 class DownloadDangerPromptBrowserTest : public DialogBrowserTest {
  protected:
diff --git a/chrome/browser/download/download_session_durations_metrics_recorder.cc b/chrome/browser/download/download_session_durations_metrics_recorder.cc
index cf187f2e..f268552 100644
--- a/chrome/browser/download/download_session_durations_metrics_recorder.cc
+++ b/chrome/browser/download/download_session_durations_metrics_recorder.cc
@@ -11,12 +11,27 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
 
+namespace {
+bool IsDownloadBubbleShowing() {
+  Browser* browser = chrome::FindLastActive();
+  return browser && browser->window() &&
+         browser->window()->GetDownloadBubbleUIController() &&
+         browser->window()
+             ->GetDownloadBubbleUIController()
+             ->GetDownloadDisplayController()
+             ->IsDisplayShowingDetails();
+}
+}  // namespace
+
 DownloadSessionDurationsMetricsRecorder::
     DownloadSessionDurationsMetricsRecorder()
     : session_start_(base::TimeTicks::Now()) {}
 
 void DownloadSessionDurationsMetricsRecorder::OnSessionStarted(
     base::TimeTicks session_start) {
+  base::UmaHistogramBoolean(
+      "Download.Session.IsDownloadBubbleShowingWhenSessionStarts",
+      IsDownloadBubbleShowing());
   // Do not reset the session start time if the bubble is showing when the last
   // session ends. Assume user is spending time on the bubble during this
   // period.
@@ -27,14 +42,7 @@
 
 void DownloadSessionDurationsMetricsRecorder::OnSessionEnded(
     base::TimeTicks session_end) {
-  Browser* browser = chrome::FindLastActive();
-  is_bubble_showing_when_session_end_ =
-      browser && browser->window() &&
-      browser->window()->GetDownloadBubbleUIController() &&
-      browser->window()
-          ->GetDownloadBubbleUIController()
-          ->GetDownloadDisplayController()
-          ->IsDisplayShowingDetails();
+  is_bubble_showing_when_session_end_ = IsDownloadBubbleShowing();
   base::UmaHistogramBoolean(
       "Download.Session.IsDownloadBubbleShowingWhenSessionEnds",
       is_bubble_showing_when_session_end_);
diff --git a/chrome/browser/enterprise/signals/device_info_fetcher_mac.mm b/chrome/browser/enterprise/signals/device_info_fetcher_mac.mm
index dd2cab63..907255d 100644
--- a/chrome/browser/enterprise/signals/device_info_fetcher_mac.mm
+++ b/chrome/browser/enterprise/signals/device_info_fetcher_mac.mm
@@ -7,6 +7,8 @@
 #import <Foundation/Foundation.h>
 
 #include <IOKit/IOKitLib.h>
+#include <MacTypes.h>
+#include <dlfcn.h>
 #include <ifaddrs.h>
 #include <net/if.h>
 #include <net/if_dl.h>
@@ -46,17 +48,26 @@
 }
 
 SettingValue GetScreenlockSecured() {
-  CFStringRef screen_saver_application = CFSTR("com.apple.screensaver");
-  CFStringRef ask_for_password_key = CFSTR("askForPassword");
-  base::ScopedCFTypeRef<CFTypeRef> ask_for_password(CFPreferencesCopyAppValue(
-      ask_for_password_key, screen_saver_application));
+  // Use the login private framework since there is no official way to
+  // obtain the screen lock value (at least for now).
+  using SACScreenLockEnabledType = Boolean (*)();
+  static const auto SACScreenLockEnabled = []() -> SACScreenLockEnabledType {
+    void* const login_framework = dlopen(
+        "/System/Library/PrivateFrameworks/login.framework/Versions/A/login",
+        RTLD_LAZY | RTLD_LOCAL);
+    if (!login_framework) {
+      return nullptr;
+    }
+    return reinterpret_cast<SACScreenLockEnabledType>(
+        dlsym(login_framework, "SACScreenLockEnabled"));
+  }();
 
-  if (!ask_for_password || !base::mac::CFCast<CFBooleanRef>(ask_for_password))
+  if (!SACScreenLockEnabled) {
     return SettingValue::UNKNOWN;
+  }
 
-  bool screen_lock_enabled =
-      base::mac::CFCastStrict<CFBooleanRef>(ask_for_password) == kCFBooleanTrue;
-  return screen_lock_enabled ? SettingValue::ENABLED : SettingValue::DISABLED;
+  return SACScreenLockEnabled() ? SettingValue::ENABLED
+                                : SettingValue::DISABLED;
 }
 
 SettingValue GetDiskEncrypted() {
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
index 0c20c7e..35c0a424 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/enterprise_reporting_private_apitest.cc
@@ -585,14 +585,14 @@
 
   std::string kOptions = "";
 
-  std::string registry_path = "SOFTWARE/Chromium/DeviceTrust/Test";
+  std::string registry_path = "SOFTWARE\\\\Chromium\\\\DeviceTrust\\\\Test";
   std::string valid_key = "test_key";
 
   kOptions = base::StringPrintf(
       R"(
     const test_hive = 'HKEY_LOCAL_MACHINE';
     const registry_path = '%s';
-    const invalid_path = 'SOFTWARE/Chromium/DeviceTrust/Invalid';
+    const invalid_path = 'SOFTWARE\\Chromium\\DeviceTrust\\Invalid';
     const valid_key = '%s';
     const invalid_key = 'invalid_key';
 
diff --git a/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc b/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
index cfacadc..8a54b088 100644
--- a/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
+++ b/chrome/browser/extensions/api/runtime/chrome_runtime_api_delegate.cc
@@ -336,7 +336,7 @@
   if (user_manager::UserManager::Get()->IsLoggedInAsKioskApp() ||
       user_manager::UserManager::Get()->IsLoggedInAsWebKioskApp()) {
     chromeos::PowerManagerClient::Get()->RequestRestart(
-        power_manager::REQUEST_RESTART_OTHER, "chrome.runtime API");
+        power_manager::REQUEST_RESTART_API, "chrome.runtime API");
     return true;
   }
 #endif
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index d3a9ab8f..b0dbefd 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -22,6 +22,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/test_future.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
@@ -646,6 +647,8 @@
   ExtensionRegistry* registry = extension_registry();
   size_t num_before = registry->enabled_extensions().size();
 
+  scoped_refptr<CrxInstaller> installer;
+  absl::optional<CrxInstallError> install_error;
   {
     std::unique_ptr<ScopedTestDialogAutoConfirm> prompt_auto_confirm;
     if (ui_type == INSTALL_UI_TYPE_CANCEL) {
@@ -680,8 +683,8 @@
       install_ui = std::make_unique<ExtensionInstallPrompt>(
           browser->tab_strip_model()->GetActiveWebContents());
     }
-    scoped_refptr<CrxInstaller> installer(
-        CrxInstaller::Create(extension_service(), std::move(install_ui)));
+    installer =
+        CrxInstaller::Create(extension_service(), std::move(install_ui));
     installer->set_expected_id(id);
     installer->set_creation_flags(creation_flags);
     installer->set_install_source(install_source);
@@ -692,12 +695,15 @@
           CrxInstaller::OffStoreInstallAllowedInTest);
     }
 
-    observer_->Watch(NOTIFICATION_CRX_INSTALLER_DONE,
-                     content::Source<CrxInstaller>(installer.get()));
+    base::test::TestFuture<absl::optional<CrxInstallError>>
+        installer_done_future;
+    installer->AddInstallerCallback(
+        installer_done_future
+            .GetCallback<const absl::optional<CrxInstallError>&>());
 
     installer->InstallCrx(crx_path);
 
-    observer_->Wait();
+    install_error = installer_done_future.Get();
   }
 
   size_t num_after = registry->enabled_extensions().size();
@@ -722,7 +728,13 @@
 
   if (!observer_->WaitForExtensionViewsToLoad())
     return nullptr;
-  return registry->GetExtensionById(last_loaded_extension_id(),
+
+  if (install_error)
+    return nullptr;
+
+  // Even though we can already get the Extension from the CrxInstaller,
+  // ensure it's also in the list of enabled extensions.
+  return registry->GetExtensionById(installer->extension()->id(),
                                     ExtensionRegistry::ENABLED);
 }
 
diff --git a/chrome/browser/extensions/updater/extension_updater.cc b/chrome/browser/extensions/updater/extension_updater.cc
index 5924acf7..6bc7111 100644
--- a/chrome/browser/extensions/updater/extension_updater.cc
+++ b/chrome/browser/extensions/updater/extension_updater.cc
@@ -21,7 +21,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "build/chromeos_buildflags.h"
-#include "chrome/browser/extensions/crx_installer.h"
 #include "chrome/browser/extensions/extension_management.h"
 #include "chrome/browser/extensions/extension_service.h"
 #include "chrome/browser/extensions/forced_extensions/install_stage_tracker.h"
@@ -290,6 +289,11 @@
   updating_started_callback_ = callback;
 }
 
+void ExtensionUpdater::SetCrxInstallerResultCallbackForTesting(
+    CrxInstaller::InstallerResultCallback callback) {
+  installer_result_callback_for_testing_ = std::move(callback);
+}
+
 void ExtensionUpdater::DoCheckSoon() {
   if (!will_check_soon_) {
     // Another caller called CheckNow() between CheckSoon() and now. Skip this
@@ -837,6 +841,10 @@
   }
 
   running_crx_installs_.erase(iter);
+
+  if (installer_result_callback_for_testing_) {
+    std::move(installer_result_callback_for_testing_).Run(error);
+  }
 }
 
 void ExtensionUpdater::NotifyStarted() {
diff --git a/chrome/browser/extensions/updater/extension_updater.h b/chrome/browser/extensions/updater/extension_updater.h
index 56bf960..69d73a7 100644
--- a/chrome/browser/extensions/updater/extension_updater.h
+++ b/chrome/browser/extensions/updater/extension_updater.h
@@ -19,6 +19,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "base/unguessable_token.h"
+#include "chrome/browser/extensions/crx_installer.h"
 #include "extensions/browser/extension_registry_observer.h"
 #include "extensions/browser/updater/extension_downloader.h"
 #include "extensions/browser/updater/extension_downloader_delegate.h"
@@ -33,7 +34,6 @@
 
 namespace extensions {
 
-class CrxInstaller;
 class CrxInstallError;
 class ExtensionCache;
 class ExtensionPrefs;
@@ -161,6 +161,11 @@
   // Set a callback to invoke when updating has started.
   void SetUpdatingStartedCallbackForTesting(base::RepeatingClosure callback);
 
+  // A callback that is invoked when the next invocation of CxrInstaller
+  // finishes (successfully or not).
+  void SetCrxInstallerResultCallbackForTesting(
+      CrxInstaller::InstallerResultCallback callback);
+
  private:
   friend class ExtensionUpdaterTest;
   friend class ExtensionUpdaterFileHandler;
@@ -330,6 +335,8 @@
 
   base::RepeatingClosure updating_started_callback_;
 
+  CrxInstaller::InstallerResultCallback installer_result_callback_for_testing_;
+
   base::WeakPtrFactory<ExtensionUpdater> weak_ptr_factory_{this};
 };
 
diff --git a/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc b/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc
index 1a46b6f..431fc608 100644
--- a/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc
+++ b/chrome/browser/feature_guide/notifications/feature_notification_guide_service_factory.cc
@@ -89,6 +89,7 @@
 FeatureNotificationGuideServiceFactory::FeatureNotificationGuideServiceFactory()
     : ProfileKeyedServiceFactory("FeatureNotificationGuideService") {
   DependsOn(NotificationScheduleServiceFactory::GetInstance());
+  DependsOn(feature_engagement::TrackerFactory::GetInstance());
   DependsOn(
       segmentation_platform::SegmentationPlatformServiceFactory::GetInstance());
 }
diff --git a/chrome/browser/first_run/upgrade_util_win.cc b/chrome/browser/first_run/upgrade_util_win.cc
index a6b30b5..3dc6139 100644
--- a/chrome/browser/first_run/upgrade_util_win.cc
+++ b/chrome/browser/first_run/upgrade_util_win.cc
@@ -77,7 +77,7 @@
     }
   }
 
-  ULONG_PTR process_handle;
+  ULONG_PTR process_handle = 0;
   {
     TRACE_EVENT0("startup", "InvokeGoogleUpdateForRename LaunchCmdElevated");
     HRESULT hr = ipl->LaunchCmdElevated(
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index a70accc..90f10a6 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1901,7 +1901,7 @@
   {
     "name": "enable-critical-persisted-tab-data",
     "owners": [ "chrome-shopping@google.com" ],
-    "expiry_milestone": 108
+    "expiry_milestone": 120
   },
   {
     "name": "enable-cros-action-recorder",
@@ -5429,12 +5429,12 @@
   {
     "name": "page-info-about-this-page-description-placeholder",
     "owners": [ "dullweber", "olesiamarukhno@google.com" ],
-    "expiry_milestone": 109
+    "expiry_milestone": 112
   },
   {
     "name": "page-info-about-this-page-persistent-side-panel-entry",
     "owners": [ "dullweber", "olesiamarukhno@google.com" ],
-    "expiry_milestone": 109
+    "expiry_milestone": 112
   },
   {
     "name": "page-info-about-this-site",
@@ -5444,7 +5444,7 @@
   {
     "name": "page-info-cookies-subpage",
     "owners": [ "zsalata@google.com", "olesiamarukhno@google.com", "dullweber" ],
-    "expiry_milestone": 109
+    "expiry_milestone": 112
   },
   {
     "name": "page-info-hide-site-settings",
@@ -5466,12 +5466,12 @@
       "dullweber",
       "olesiamarukhno@google.com"
     ],
-    "expiry_milestone": 109
+    "expiry_milestone": 112
   },
   {
     "name": "page-info-more-about-this-page",
     "owners": [ "dullweber", "olesiamarukhno@google.com" ],
-    "expiry_milestone": 109
+    "expiry_milestone": 112
   },
   {
     "name": "page-info-store-info",
@@ -5489,11 +5489,6 @@
     "expiry_milestone": 111
   },
   {
-    "name": "paint-preview-startup",
-    "owners": [ "ckitagawa", "fredmello", "chrome-fdt@google.com" ],
-    "expiry_milestone": 109
-  },
-  {
     "name": "partial-split",
     "owners": [ "sophiewen", "chromeos-wmp-eng@google.com" ],
     "expiry_milestone": 110
@@ -6338,7 +6333,7 @@
   {
     "name": "signin-intercept-bubble-v2",
     "owners": [ "gabolvr@google.com", "alexilin", "my-chrome-everywhere@google.com" ],
-    "expiry_milestone": 108
+    "expiry_milestone": 110
   },
   {
     "name": "sim-lock-policy",
@@ -6489,7 +6484,7 @@
   {
     "name": "sync-promo-after-signin-intercept",
     "owners": [ "gabolvr@google.com", "alexilin", "my-chrome-everywhere@google.com" ],
-    "expiry_milestone": 108
+    "expiry_milestone": 110
   },
   {
     "name": "sync-standalone-invalidations",
@@ -7064,8 +7059,8 @@
   },
   {
     "name": "web-midi",
-    "owners": [ "reillyg", "hongchan", "deviceapi-team@google.com" ],
-    "expiry_milestone": 109
+    "owners": [ "//third_party/blink/renderer/modules/webaudio/OWNERS", "reillyg", "deviceapi-team@google.com" ],
+    "expiry_milestone": 112
   },
   {
     "name": "web-otp-backend",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 31124b2..022da6bd 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -6523,12 +6523,6 @@
 const char kPaintPreviewDemoDescription[] =
     "If enabled a menu item is added to the Android main menu to demo paint "
     "previews.";
-const char kPaintPreviewStartupName[] = "Paint Preview Startup";
-const char kPaintPreviewStartupDescription[] =
-    "If enabled, paint previews for each tab are captured when a tab is hidden "
-    "and are deleted when a tab is closed. If a paint preview was captured for "
-    "the tab to be restored on startup, the paint preview will be shown "
-    "instead.";
 #endif  // ENABLE_PAINT_PREVIEW && BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 5b6b680..bdff541 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -3764,8 +3764,6 @@
 #if BUILDFLAG(ENABLE_PAINT_PREVIEW) && BUILDFLAG(IS_ANDROID)
 extern const char kPaintPreviewDemoName[];
 extern const char kPaintPreviewDemoDescription[];
-extern const char kPaintPreviewStartupName[];
-extern const char kPaintPreviewStartupDescription[];
 #endif  // ENABLE_PAINT_PREVIEW && BUILDFLAG(IS_ANDROID)
 
 #if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
index a99258c..f17b9754 100644
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -344,7 +344,6 @@
     &features::kDnsOverHttps,
     &notifications::features::kUseChimeAndroidSdk,
     &paint_preview::kPaintPreviewDemo,
-    &paint_preview::kPaintPreviewShowOnStartup,
     &language::kAppLanguagePrompt,
     &language::kAppLanguagePromptULP,
     &language::kDetailedLanguageSettings,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
index f49b52b2..68de27c0 100644
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -718,8 +718,6 @@
     public static final CachedFlag sOSKResizesVisualViewportByDefault =
             new CachedFlag(OSK_RESIZES_VISUAL_VIEWPORT, false);
     public static final CachedFlag sPaintPreviewDemo = new CachedFlag(PAINT_PREVIEW_DEMO, false);
-    public static final CachedFlag sPaintPreviewShowOnStartup =
-            new CachedFlag(PAINT_PREVIEW_SHOW_ON_STARTUP, false);
     public static final CachedFlag sPrefetchNotificationSchedulingIntegration =
             new CachedFlag(PREFETCH_NOTIFICATION_SCHEDULING_INTEGRATION, false);
     public static final CachedFlag sQueryTiles = new CachedFlag(QUERY_TILES, false);
diff --git a/chrome/browser/history/web_history_service_factory.cc b/chrome/browser/history/web_history_service_factory.cc
index 6d499ba5..700a3d9 100644
--- a/chrome/browser/history/web_history_service_factory.cc
+++ b/chrome/browser/history/web_history_service_factory.cc
@@ -54,6 +54,7 @@
 WebHistoryServiceFactory::WebHistoryServiceFactory()
     : ProfileKeyedServiceFactory("WebHistoryServiceFactory") {
   DependsOn(IdentityManagerFactory::GetInstance());
+  DependsOn(SyncServiceFactory::GetInstance());
 }
 
 WebHistoryServiceFactory::~WebHistoryServiceFactory() {
diff --git a/chrome/browser/invalidation/profile_invalidation_provider_factory.cc b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc
index a960c92..5d1acce 100644
--- a/chrome/browser/invalidation/profile_invalidation_provider_factory.cc
+++ b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc
@@ -98,6 +98,7 @@
     : ProfileKeyedServiceFactory("InvalidationService") {
   DependsOn(IdentityManagerFactory::GetInstance());
   DependsOn(gcm::GCMProfileServiceFactory::GetInstance());
+  DependsOn(instance_id::InstanceIDProfileServiceFactory::GetInstance());
 }
 
 ProfileInvalidationProviderFactory::~ProfileInvalidationProviderFactory() =
diff --git a/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc b/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc
index d104639e..1fc7318 100644
--- a/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc
+++ b/chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.cc
@@ -4,6 +4,9 @@
 
 #include "chrome/browser/k_anonymity_service/k_anonymity_trust_token_getter.h"
 
+#include <atomic>
+
+#include "base/debug/dump_without_crashing.h"
 #include "base/json/json_writer.h"
 #include "base/json/values_util.h"
 #include "base/sequence_checker.h"
@@ -12,6 +15,7 @@
 #include "chrome/browser/k_anonymity_service/k_anonymity_service_metrics.h"
 #include "chrome/browser/k_anonymity_service/k_anonymity_service_urls.h"
 #include "chrome/common/chrome_features.h"
+#include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/google_api_keys.h"
@@ -52,6 +56,22 @@
       ""
     )");
 
+// This should only be called by the UI thread (as the main code and the
+// callbacks are supposed to be on that thread.). For some reason this is does
+// not seem to be true sometimes on Android. So we forward the call to this
+// function to the correct thread to avoid a crash from a race condition.
+void CheckThreadAndMaybeForward(base::OnceClosure callback) {
+  if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
+    // Only dump the first time, but always forward the call.
+    static std::atomic<bool> dumped = false;
+    if (!dumped.exchange(true)) {
+      base::debug::DumpWithoutCrashing();
+    }
+    content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE,
+                                                 std::move(callback));
+  }
+}
+
 }  // namespace
 
 KAnonymityTrustTokenGetter::PendingRequest::PendingRequest(
@@ -98,6 +118,8 @@
 
 void KAnonymityTrustTokenGetter::TryGetTrustTokenAndKey(
     TryGetTrustTokenAndKeyCallback callback) {
+  // TODO(crbug.com/1376858): Change this back to a DCHECK
+  CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!base::FeatureList::IsEnabled(network::features::kTrustTokens) ||
       !identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) {
@@ -524,12 +546,23 @@
 }
 
 void KAnonymityTrustTokenGetter::FailAllCallbacks() {
+  // TODO(crbug.com/1376858): Remove this check once it is no longer needed.
+  // Ensure we are in the right thread.
+  CheckThreadAndMaybeForward(
+      base::BindOnce(&KAnonymityTrustTokenGetter::FailAllCallbacks,
+                     weak_ptr_factory_.GetWeakPtr()));
+
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   while (!pending_callbacks_.empty())
     DoCallback(false);
 }
 
 void KAnonymityTrustTokenGetter::CompleteOneRequest() {
+  // TODO(crbug.com/1376858): Remove this check once it is no longer needed.
+  // Ensure we are in the right thread.
+  CheckThreadAndMaybeForward(
+      base::BindOnce(&KAnonymityTrustTokenGetter::CompleteOneRequest,
+                     weak_ptr_factory_.GetWeakPtr()));
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   CHECK(!pending_callbacks_.empty());
   RecordTrustTokenGetterAction(
@@ -545,8 +578,7 @@
 
 void KAnonymityTrustTokenGetter::DoCallback(bool status) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  // TODO(behamilton): Change this back to a DCHECK once we have resolved
-  // https://crbug.com/1376858
+  // TODO(crbug.com/1376858): Change this back to a DCHECK
   CHECK(!pending_callbacks_.empty());
 
   absl::optional<KeyAndNonUniqueUserId> result;
diff --git a/chrome/browser/mac/install_updater.h b/chrome/browser/mac/install_updater.h
deleted file mode 100644
index c495158d..0000000
--- a/chrome/browser/mac/install_updater.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_MAC_INSTALL_UPDATER_H_
-#define CHROME_BROWSER_MAC_INSTALL_UPDATER_H_
-
-// Invokes the executable within the updater bundle at
-// ../Versions/$(Version)/Helpers/Updater.app/Contents/Updater with the argument
-// --install. That will copy the updater to its install directory and set up
-// launchd plists. After the updater is installed, the IPC Registration API is
-// invoked to register the browser to the updater.
-void InstallUpdaterAndRegisterBrowser();
-
-#endif  // CHROME_BROWSER_MAC_INSTALL_UPDATER_H_
diff --git a/chrome/browser/mac/install_updater.mm b/chrome/browser/mac/install_updater.mm
deleted file mode 100644
index f5451bd..0000000
--- a/chrome/browser/mac/install_updater.mm
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/mac/install_updater.h"
-
-#include <string>
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/mac/bundle_locations.h"
-#include "base/memory/scoped_refptr.h"
-#include "base/process/launch.h"
-#include "base/process/process.h"
-#include "base/strings/strcat.h"
-#include "base/task/task_traits.h"
-#include "base/task/thread_pool.h"
-#include "base/time/time.h"
-#include "chrome/browser/updater/browser_updater_client.h"
-#include "chrome/browser/updater/browser_updater_client_util.h"
-#include "chrome/updater/updater_scope.h"
-
-namespace {
-
-constexpr char kInstallCommand[] = "install";
-
-int RunCommand(const base::FilePath& exe_path, const char* cmd_switch) {
-  base::CommandLine command(exe_path);
-  command.AppendSwitch(cmd_switch);
-
-  int exit_code = -1;
-  auto process = base::LaunchProcess(command, {});
-  if (!process.IsValid())
-    return exit_code;
-
-  process.WaitForExitWithTimeout(base::Seconds(120), &exit_code);
-
-  return exit_code;
-}
-}  // namespace
-
-void InstallUpdaterAndRegisterBrowser() {
-  // Only install the updater if the path of the browser is owned by the current
-  // user.
-  base::ThreadPool::PostTaskAndReplyWithResult(
-      FROM_HERE,
-      {base::MayBlock(), base::WithBaseSyncPrimitives(),
-       base::TaskPriority::BEST_EFFORT,
-       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
-      base::BindOnce(
-          []() {
-            if (CanInstallUpdater()) {
-              // The updater executable should be in
-              // BRANDING.app/Contents/Frameworks/BRANDING.framework/Versions/V/
-              // Helpers/Updater.app/Contents/MacOS/Updater
-              const base::FilePath updater_executable_path =
-                  base::mac::FrameworkBundlePath()
-                      .Append(FILE_PATH_LITERAL("Helpers"))
-                      .Append(GetUpdaterExecutablePath());
-
-              if (!base::PathExists(updater_executable_path)) {
-                VLOG(1) << "The updater does not exist in the bundle.";
-                return false;
-              }
-
-              int exit_code =
-                  RunCommand(updater_executable_path, kInstallCommand);
-              if (exit_code != 0) {
-                VLOG(1) << "Couldn't install the updater. Exit code: "
-                        << exit_code;
-                return false;
-              }
-            }
-            return true;
-          }),
-      base::BindOnce([](bool success) {
-        if (success) {
-          BrowserUpdaterClient::Create(updater::UpdaterScope::kUser)
-              ->Register();
-        }
-      }));
-}
diff --git a/chrome/browser/media/webrtc/get_display_media_set_browsertest.cc b/chrome/browser/media/webrtc/get_display_media_set_browsertest.cc
index 3ece436..7f209b1 100644
--- a/chrome/browser/media/webrtc/get_display_media_set_browsertest.cc
+++ b/chrome/browser/media/webrtc/get_display_media_set_browsertest.cc
@@ -32,16 +32,22 @@
 
 bool RunGetDisplayMediaSet(content::WebContents* tab,
                            const std::string& constraints,
-                           std::vector<std::string>& track_ids) {
+                           std::vector<std::string>& track_ids,
+                           std::string* error_name_out = nullptr) {
   std::string result;
   EXPECT_TRUE(content::ExecuteScriptAndExtractString(
       tab->GetPrimaryMainFrame(),
       base::StringPrintf("runGetDisplayMediaSet(%s);", constraints.c_str()),
       &result));
-  if (result == "capture-failure")
+  std::vector<std::string> split_result = base::SplitString(
+      result, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
+  if (split_result.empty() || split_result[0] == "capture-failure") {
+    if (error_name_out && split_result.size() == 2) {
+      *error_name_out = split_result[1];
+    }
     return false;
-  track_ids = base::SplitString(result, ",", base::KEEP_WHITESPACE,
-                                base::SPLIT_WANT_ALL);
+  }
+  track_ids = split_result;
   return true;
 }
 
@@ -63,8 +69,15 @@
   bool IsGetDisplayMediaSetSelectAllScreensAllowed(
       content::BrowserContext* context,
       const url::Origin& origin) override {
-    return true;
+    return is_get_display_media_set_select_all_screens_allowed_;
   }
+
+  void SetIsGetDisplayMediaSetSelectAllScreensAllowed(bool is_allowed) {
+    is_get_display_media_set_select_all_screens_allowed_ = is_allowed;
+  }
+
+ private:
+  bool is_get_display_media_set_select_all_screens_allowed_ = true;
 };
 
 }  // namespace
@@ -109,10 +122,10 @@
 
  protected:
   content::WebContents* contents_ = nullptr;
+  std::unique_ptr<ContentBrowserClientMock> browser_client_;
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-  std::unique_ptr<ContentBrowserClientMock> browser_client_;
   std::vector<aura::Window*> windows_;
 };
 
@@ -174,4 +187,16 @@
   }
 }
 
+IN_PROC_BROWSER_TEST_F(GetDisplayMediaSetBrowserTest,
+                       AutoSelectAllScreensNotAllowed) {
+  SetScreens(/*screen_count=*/1u);
+  browser_client_->SetIsGetDisplayMediaSetSelectAllScreensAllowed(
+      /*is_allowed=*/false);
+  std::vector<std::string> track_ids;
+  std::string error_name;
+  EXPECT_FALSE(RunGetDisplayMediaSet(contents_, "{autoSelectAllScreens: true}",
+                                     track_ids, &error_name));
+  EXPECT_EQ("NotAllowedError", error_name);
+}
+
 #endif
diff --git a/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc b/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc
index c2b85ee..36e0692 100644
--- a/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc
+++ b/chrome/browser/new_tab_page/modules/drive/drive_service_factory.cc
@@ -24,6 +24,7 @@
 DriveServiceFactory::DriveServiceFactory()
     : ProfileKeyedServiceFactory("DriveService") {
   DependsOn(CookieSettingsFactory::GetInstance());
+  DependsOn(IdentityManagerFactory::GetInstance());
 }
 
 DriveServiceFactory::~DriveServiceFactory() = default;
diff --git a/chrome/browser/page_load_metrics/integration_tests/README.md b/chrome/browser/page_load_metrics/integration_tests/README.md
index a73b8e3..a097f77 100644
--- a/chrome/browser/page_load_metrics/integration_tests/README.md
+++ b/chrome/browser/page_load_metrics/integration_tests/README.md
@@ -39,13 +39,13 @@
     - Trace Events can be queried and aggregated with a TraceAnalyzer
 
 ## Examples
-See the [source](metric_browsertest.cc)!
+See the [source](metric_integration_test.cc)!
 
 ## Tips and Tricks
 Use [`content::EvalJS`][evaljs] to pass JavaScript values back to C++ and check for
 consistency.
 
-Use [`xvfb-run`][xvfb-run] when running the `browser_test` executable.
+Use [`xvfb-run`][xvfb-run] when running the `browser_tests` executable.
 
 - no more flashing windows
 - no chance to accidentally send real input to the test
diff --git a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java
index 0f48eb5d..0061d4f 100644
--- a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java
+++ b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/StartupPaintPreview.java
@@ -14,7 +14,6 @@
 import org.chromium.base.Callback;
 import org.chromium.base.supplier.Supplier;
 import org.chromium.chrome.browser.browser_controls.BrowserStateBrowserControlsVisibilityDelegate;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.paint_preview.StartupPaintPreviewMetrics.ExitCause;
 import org.chromium.chrome.browser.paint_preview.StartupPaintPreviewMetrics.PaintPreviewMetricsObserver;
 import org.chromium.chrome.browser.tab.EmptyTabObserver;
@@ -57,7 +56,6 @@
     private Supplier<Boolean> mIsOfflinePage;
 
     private static final int DEFAULT_INITIAL_REMOVE_DELAY_MS = 0;
-    private static final String INITIAL_REMOVE_DELAY_PARAM = "initial_remove_delay_ms";
     private static final int SNACKBAR_DURATION_MS = 8 * 1000;
 
     @IntDef({
@@ -229,16 +227,12 @@
 
         if (mState != State.SHOWING) return;
 
-        long delayMs = ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
-                ChromeFeatureList.PAINT_PREVIEW_SHOW_ON_STARTUP, INITIAL_REMOVE_DELAY_PARAM,
-                DEFAULT_INITIAL_REMOVE_DELAY_MS);
         // Delay removing paint preview after didFirstVisuallyNonEmptyPaint and no user
         // interaction by |delayMs|. This is to account for 'heavy' pages that take a while
         // to finish painting and avoid having flickers when switching from paint preview
         // to the live page.
-        new Handler().postDelayed(() -> {
-            remove(ExitCause.TAB_FINISHED_LOADING);
-        }, delayMs);
+        new Handler().postDelayed(
+                () -> { remove(ExitCause.TAB_FINISHED_LOADING); }, DEFAULT_INITIAL_REMOVE_DELAY_MS);
     }
 
     @Override
diff --git a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabService.java b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabService.java
index 30507da..ebcad01 100644
--- a/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabService.java
+++ b/chrome/browser/paint_preview/android/java/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabService.java
@@ -14,8 +14,6 @@
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.task.PostTask;
-import org.chromium.chrome.browser.flags.BooleanCachedFieldTrialParameter;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
@@ -36,10 +34,6 @@
  */
 @JNINamespace("paint_preview")
 public class PaintPreviewTabService implements NativePaintPreviewServiceProvider {
-    public static final BooleanCachedFieldTrialParameter ALLOW_SRP =
-            new BooleanCachedFieldTrialParameter(
-                    ChromeFeatureList.PAINT_PREVIEW_SHOW_ON_STARTUP, "allow_srp", false);
-
     private static final long AUDIT_START_DELAY_MS = 2 * 60 * 1000; // Two minutes;
     private static boolean sIsAccessibilityEnabledForTesting;
 
@@ -98,8 +92,6 @@
         }
 
         private boolean allowIfSrp(Tab tab) {
-            if (ALLOW_SRP.getValue()) return true;
-
             return !UrlUtilitiesJni.get().isGoogleSearchUrl(tab.getUrl().getSpec());
         }
     }
diff --git a/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabServiceTest.java b/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabServiceTest.java
index b9b6373..cb815e3 100644
--- a/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabServiceTest.java
+++ b/chrome/browser/paint_preview/android/javatests/src/org/chromium/chrome/browser/paint_preview/services/PaintPreviewTabServiceTest.java
@@ -70,7 +70,6 @@
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mPaintPreviewTabService = PaintPreviewTabServiceFactory.getServiceInstance();
-            mPaintPreviewTabService.onRestoreCompleted(mTabModelSelector, true);
             mTab.loadUrl(new LoadUrlParams(url));
         });
         // Give the tab time to complete layout before hiding.
@@ -126,7 +125,6 @@
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mPaintPreviewTabService = PaintPreviewTabServiceFactory.getServiceInstance();
-            mPaintPreviewTabService.onRestoreCompleted(mTabModelSelector, true);
             mTab.loadUrl(new LoadUrlParams(url));
         });
         // Give the tab time to complete layout before hiding.
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
index 56176a95..66a02e5e 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
@@ -417,9 +417,9 @@
   EXPECT_EQ(password_manager::SyncState::kSyncingNormalEncryption,
             client->GetPasswordSyncState());
 
-  // Persistent auth error other than web signout (sync continues active).
+  // Sync paused due to a persistent auth error other than web signout.
   sync_service_->SetPersistentAuthErrorOtherThanWebSignout();
-  EXPECT_EQ(password_manager::SyncState::kSyncingNormalEncryption,
+  EXPECT_EQ(password_manager::SyncState::kNotSyncing,
             client->GetPasswordSyncState());
 
   // Sync paused due to web signout.
diff --git a/chrome/browser/password_manager/password_scripts_fetcher_factory.cc b/chrome/browser/password_manager/password_scripts_fetcher_factory.cc
index 841daa7..db60b70 100644
--- a/chrome/browser/password_manager/password_scripts_fetcher_factory.cc
+++ b/chrome/browser/password_manager/password_scripts_fetcher_factory.cc
@@ -28,6 +28,7 @@
 
 PasswordScriptsFetcherFactory::PasswordScriptsFetcherFactory()
     : ProfileKeyedServiceFactory("PasswordScriptsFetcher") {
+  DependsOn(AffiliationServiceFactory::GetInstance());
   DependsOn(PasswordStoreFactory::GetInstance());
   DependsOn(AccountPasswordStoreFactory::GetInstance());
 }
diff --git a/chrome/browser/payments/android/java/src/org/chromium/chrome/browser/payments/AutofillContactTest.java b/chrome/browser/payments/android/java/src/org/chromium/chrome/browser/payments/AutofillContactTest.java
index 7299f3b..a8640e5e 100644
--- a/chrome/browser/payments/android/java/src/org/chromium/chrome/browser/payments/AutofillContactTest.java
+++ b/chrome/browser/payments/android/java/src/org/chromium/chrome/browser/payments/AutofillContactTest.java
@@ -9,7 +9,6 @@
 import static org.mockito.Mockito.spy;
 
 import android.content.Context;
-import android.os.Build;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -28,7 +27,7 @@
  * Parametrized unit tests for the AutofillContact class.
  */
 @RunWith(ParameterizedRobolectricTestRunner.class)
-@Config(sdk = Build.VERSION_CODES.M, manifest = Config.NONE)
+@Config(manifest = Config.NONE)
 public class AutofillContactTest {
     @Parameters
     public static Collection<Object[]> data() {
diff --git a/chrome/browser/permissions/notifications_engagement_service_unittest.cc b/chrome/browser/permissions/notifications_engagement_service_unittest.cc
index 1413c3cc..58414a54 100644
--- a/chrome/browser/permissions/notifications_engagement_service_unittest.cc
+++ b/chrome/browser/permissions/notifications_engagement_service_unittest.cc
@@ -49,9 +49,12 @@
   GURL hosts[] = {GURL("https://google.com/"),
                   GURL("https://www.youtube.com/")};
 
+  // Otherwise the test time and the service time will be out of sync and cause
+  // the tests to fail.
+  task_environment_.FastForwardBy(base::Days(2));
+
   // Record initial display date to enable comparing dictionaries.
-  std::string displayedDate =
-      service()->GetBucketLabelForLastMonday(base::Time::Now());
+  std::string displayedDate = service()->GetBucketLabel(base::Time::Now());
 
   ContentSettingsForOneType notifications_engagement_setting;
   HostContentSettingsMap* host_content_settings_map =
@@ -74,8 +77,7 @@
 
   // Advance time to set same URL entries in different dates.
   task_environment_.FastForwardBy(base::Days(8));
-  std::string displayedDateLater =
-      service()->GetBucketLabelForLastMonday(base::Time::Now());
+  std::string displayedDateLater = service()->GetBucketLabel(base::Time::Now());
 
   // Test that the same URL entry is not duplicated.
   service()->RecordNotificationDisplayed(hosts[0]);
@@ -135,11 +137,10 @@
 
   HostContentSettingsMap* host_content_settings_map =
       HostContentSettingsMapFactory::GetForProfile(profile());
-  // Test notifications sent within the same week constitute one date entry.
+  // Test notifications sent within the same day constitute one date entry.
 
+  task_environment_.FastForwardBy(base::Days(2));
   service()->RecordNotificationDisplayed(url1);
-
-  task_environment_.FastForwardBy(base::Days(1));
   service()->RecordNotificationDisplayed(url1);
 
   base::Value website_engagement_value1 =
@@ -152,13 +153,13 @@
 
   ASSERT_EQ(1U, website_engagement_dict1.size());
 
-  // Test notifications sent in different weeks constitute different entries.
+  // Test notifications sent in different days constitute different entries.
   service()->RecordNotificationDisplayed(url2);
 
   task_environment_.FastForwardBy(base::Days(14));
   service()->RecordNotificationDisplayed(url2);
 
-  task_environment_.FastForwardBy(base::Days(28));
+  task_environment_.FastForwardBy(base::Days(7));
   service()->RecordNotificationDisplayed(url2);
 
   base::Value website_engagement_value2 =
@@ -187,8 +188,7 @@
   base::Value::Dict& website_engagement_dict3 =
       website_engagement_value3.GetDict();
 
-  std::string displayedDate =
-      service()->GetBucketLabelForLastMonday(base::Time::Now());
+  std::string displayedDate = service()->GetBucketLabel(base::Time::Now());
   base::Value* entryForDate = website_engagement_dict3.Find(displayedDate);
 
   ASSERT_EQ(2, entryForDate->FindIntKey(kDisplayedKey).value());
@@ -198,10 +198,10 @@
 TEST_F(NotificationsEngagementServiceTest, EraseStaleEntries) {
   GURL url("https://www.google.com/");
 
-  // Test that only entries older than 90 days are deleted.
+  // Test that only entries older than 30 days are deleted.
   task_environment_.FastForwardBy(base::Days(10950));
   service()->RecordNotificationDisplayed(url);
-  task_environment_.FastForwardBy(base::Days(91));
+  task_environment_.FastForwardBy(base::Days(31));
   service()->RecordNotificationDisplayed(url);
 
   task_environment_.FastForwardBy(base::Days(8));
@@ -223,67 +223,58 @@
   ASSERT_EQ(2u, website_engagement.size());
 }
 
-TEST_F(NotificationsEngagementServiceTest, GetBucketLabelForLastMonday) {
+TEST_F(NotificationsEngagementServiceTest, GetBucketLabel) {
   base::Time date1, date2, date3, date4;
-  base::Time expected_monday1, expected_monday2, expected_monday3,
-      expected_monday4;
+  base::Time expected_date1, expected_date2, expected_date3, expected_date4;
 
   ASSERT_TRUE(base::Time::FromString("23 Oct 2009 11:30 GMT", &date1));
   ASSERT_TRUE(
-      base::Time::FromString("2009-10-19 00:00:00.000 GMT", &expected_monday1));
-  ASSERT_EQ(NotificationsEngagementService::GetBucketLabelForLastMonday(date1),
-            base::NumberToString(expected_monday1.base::Time::ToTimeT()));
-  std::string label1 =
-      NotificationsEngagementService::GetBucketLabelForLastMonday(date1);
-  ASSERT_EQ(label1,
-            base::NumberToString(expected_monday1.base::Time::ToTimeT()));
+      base::Time::FromString("2009-10-23 00:00:00.000 GMT", &expected_date1));
+  ASSERT_EQ(NotificationsEngagementService::GetBucketLabel(date1),
+            base::NumberToString(expected_date1.base::Time::ToTimeT()));
+  std::string label1 = NotificationsEngagementService::GetBucketLabel(date1);
+  ASSERT_EQ(label1, base::NumberToString(expected_date1.base::Time::ToTimeT()));
   absl::optional<base::Time> begin1 =
       NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label1);
   ASSERT_TRUE(begin1.has_value());
-  EXPECT_EQ(label1, NotificationsEngagementService::GetBucketLabelForLastMonday(
-                        begin1.value()));
+  EXPECT_EQ(label1,
+            NotificationsEngagementService::GetBucketLabel(begin1.value()));
 
   ASSERT_TRUE(base::Time::FromString("Mon Oct 15 12:45 PDT 2007", &date2));
   ASSERT_TRUE(
-      base::Time::FromString("2007-10-15 00:00:00.000 GMT", &expected_monday2));
-  ASSERT_EQ(NotificationsEngagementService::GetBucketLabelForLastMonday(date2),
-            base::NumberToString(expected_monday2.base::Time::ToTimeT()));
-  std::string label2 =
-      NotificationsEngagementService::GetBucketLabelForLastMonday(date2);
-  ASSERT_EQ(label2,
-            base::NumberToString(expected_monday2.base::Time::ToTimeT()));
+      base::Time::FromString("2007-10-15 00:00:00.000 GMT", &expected_date2));
+  ASSERT_EQ(NotificationsEngagementService::GetBucketLabel(date2),
+            base::NumberToString(expected_date2.base::Time::ToTimeT()));
+  std::string label2 = NotificationsEngagementService::GetBucketLabel(date2);
+  ASSERT_EQ(label2, base::NumberToString(expected_date2.base::Time::ToTimeT()));
   absl::optional<base::Time> begin2 =
       NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label2);
   ASSERT_TRUE(begin2.has_value());
-  EXPECT_EQ(label2, NotificationsEngagementService::GetBucketLabelForLastMonday(
-                        begin2.value()));
+  EXPECT_EQ(label2,
+            NotificationsEngagementService::GetBucketLabel(begin2.value()));
 
-  ASSERT_TRUE(base::Time::FromString("Thu Jan 01 00:59:58 +0100 1970", &date3));
+  ASSERT_TRUE(base::Time::FromString("Mon Jan 01 13:59:58 +0100 1973", &date3));
   ASSERT_TRUE(
-      base::Time::FromString("1969-12-29 00:00:00.000 GMT", &expected_monday3));
-  ASSERT_EQ(NotificationsEngagementService::GetBucketLabelForLastMonday(date3),
-            base::NumberToString(expected_monday3.base::Time::ToTimeT()));
-  std::string label3 =
-      NotificationsEngagementService::GetBucketLabelForLastMonday(date3);
-  ASSERT_EQ(label3,
-            base::NumberToString(expected_monday3.base::Time::ToTimeT()));
+      base::Time::FromString("1973-01-01 00:00:00.000 GMT", &expected_date3));
+  ASSERT_EQ(NotificationsEngagementService::GetBucketLabel(date3),
+            base::NumberToString(expected_date3.base::Time::ToTimeT()));
+  std::string label3 = NotificationsEngagementService::GetBucketLabel(date3);
+  ASSERT_EQ(label3, base::NumberToString(expected_date3.base::Time::ToTimeT()));
   absl::optional<base::Time> begin3 =
       NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label3);
   ASSERT_TRUE(begin3.has_value());
-  EXPECT_EQ(label3, NotificationsEngagementService::GetBucketLabelForLastMonday(
-                        begin3.value()));
+  EXPECT_EQ(label3,
+            NotificationsEngagementService::GetBucketLabel(begin3.value()));
 
   ASSERT_TRUE(base::Time::FromString("Wed Mar 23 04:38:58 -1000 2022", &date4));
   ASSERT_TRUE(
-      base::Time::FromString("2022-03-21 00:00:00.000 GMT", &expected_monday4));
-  std::string label4 =
-      NotificationsEngagementService::GetBucketLabelForLastMonday(date4);
-  ASSERT_EQ(label4,
-            base::NumberToString(expected_monday4.base::Time::ToTimeT()));
+      base::Time::FromString("2022-03-23 00:00:00.000 GMT", &expected_date4));
+  std::string label4 = NotificationsEngagementService::GetBucketLabel(date4);
+  ASSERT_EQ(label4, base::NumberToString(expected_date4.base::Time::ToTimeT()));
   absl::optional<base::Time> begin4 =
       NotificationsEngagementService::ParsePeriodBeginFromBucketLabel(label4);
   ASSERT_TRUE(begin4.has_value());
-  EXPECT_EQ(label4, NotificationsEngagementService::GetBucketLabelForLastMonday(
-                        begin4.value()));
+  EXPECT_EQ(label4,
+            NotificationsEngagementService::GetBucketLabel(begin4.value()));
 }
 }  // namespace permissions
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 8b98876..5e11fb735 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -724,10 +724,14 @@
     prefs::kManagedDefaultGeolocationSetting,
     base::Value::Type::INTEGER },
 #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) \
-    || BUILDFLAG(IS_FUCHSIA)
+    || BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_MAC)
   { key::kRequireOnlineRevocationChecksForLocalAnchors,
     prefs::kCertRevocationCheckingRequiredLocalAnchors,
     base::Value::Type::BOOLEAN },
+#endif  // #if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
+        // || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_MAC)
+#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) \
+    || BUILDFLAG(IS_FUCHSIA)
   { key::kFullscreenAllowed,
     prefs::kFullscreenAllowed,
     base::Value::Type::BOOLEAN },
diff --git a/chrome/browser/policy/extension_policy_browsertest.cc b/chrome/browser/policy/extension_policy_browsertest.cc
index 981d37c5..4d5d282 100644
--- a/chrome/browser/policy/extension_policy_browsertest.cc
+++ b/chrome/browser/policy/extension_policy_browsertest.cc
@@ -14,13 +14,13 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/test_future.h"
 #include "base/threading/thread_restrictions.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/background/background_contents_service.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/extensions/chrome_content_verifier_delegate.h"
-#include "chrome/browser/extensions/chrome_extension_test_notification_observer.h"
 #include "chrome/browser/extensions/component_loader.h"
 #include "chrome/browser/extensions/crx_installer.h"
 #include "chrome/browser/extensions/extension_browsertest.h"
@@ -94,6 +94,9 @@
 #include "chrome/browser/web_applications/web_app_id_constants.h"
 #endif
 
+using base::test::TestFuture;
+using extensions::CrxInstallError;
+using extensions::TestExtensionRegistryObserver;
 using extensions::mojom::ManifestLocation;
 using testing::AtLeast;
 using testing::Sequence;
@@ -200,6 +203,39 @@
       ->ForwardMouseEvent(click_event);
 }
 
+const extensions::Extension* InstallExtensionWithContext(
+    const base::FilePath::StringType& name,
+    content::BrowserContext* browser_context) {
+  base::FilePath extension_path(ui_test_utils::GetTestFilePath(
+      base::FilePath(kTestExtensionsDir), base::FilePath(name)));
+
+  extensions::ExtensionSystem* system =
+      extensions::ExtensionSystem::Get(browser_context);
+
+  scoped_refptr<extensions::CrxInstaller> installer =
+      extensions::CrxInstaller::CreateSilent(system->extension_service());
+  installer->set_allow_silent_install(true);
+  installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE);
+  installer->set_creation_flags(extensions::Extension::FROM_WEBSTORE);
+  installer->set_off_store_install_allow_reason(
+      extensions::CrxInstaller::OffStoreInstallAllowReason::
+          OffStoreInstallAllowedInTest);
+
+  TestFuture<absl::optional<CrxInstallError>> installer_done_future;
+
+  installer->AddInstallerCallback(
+      installer_done_future
+          .GetCallback<const absl::optional<CrxInstallError>&>());
+  installer->InstallCrx(extension_path);
+
+  const absl::optional<CrxInstallError>& error = installer_done_future.Get();
+  if (error) {
+    return nullptr;
+  }
+
+  return installer->extension();
+}
+
 class ExtensionPolicyTest : public ExtensionPolicyTestBase {
  public:
   ExtensionPolicyTest() = default;
@@ -252,24 +288,7 @@
 
   const extensions::Extension* InstallExtension(
       const base::FilePath::StringType& name) {
-    base::FilePath extension_path(ui_test_utils::GetTestFilePath(
-        base::FilePath(kTestExtensionsDir), base::FilePath(name)));
-    scoped_refptr<extensions::CrxInstaller> installer =
-        extensions::CrxInstaller::CreateSilent(extension_service());
-    installer->set_allow_silent_install(true);
-    installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE);
-    installer->set_creation_flags(extensions::Extension::FROM_WEBSTORE);
-    installer->set_off_store_install_allow_reason(
-        extensions::CrxInstaller::OffStoreInstallAllowReason::
-            OffStoreInstallAllowedInTest);
-
-    content::WindowedNotificationObserver observer(
-        extensions::NOTIFICATION_CRX_INSTALLER_DONE,
-        content::NotificationService::AllSources());
-    installer->InstallCrx(extension_path);
-    observer.Wait();
-    content::Details<const extensions::Extension> details = observer.details();
-    return details.ptr();
+    return InstallExtensionWithContext(name, browser()->profile());
   }
 
   void UninstallExtension(const std::string& id, bool expect_success) {
@@ -798,21 +817,22 @@
   GURL url = embedded_test_server()->GetURL(
       "/extensions/good_v1_wrong_version_update_manifest.xml");
   PolicyMap policies;
+
+  TestFuture<absl::optional<CrxInstallError>> installer_done_future;
+  extension_service()->updater()->SetCrxInstallerResultCallbackForTesting(
+      installer_done_future
+          .GetCallback<const absl::optional<CrxInstallError>&>());
+
   // Add an entry in the extension force list policy.
   AddExtensionToForceList(&policies, kGoodCrxId, url);
 
-  content::WindowedNotificationObserver observer(
-      extensions::NOTIFICATION_CRX_INSTALLER_DONE,
-      content::NotificationService::AllSources());
-
   // Updating the policy triggers the extension installation process.
   UpdateProviderPolicy(policies);
-  // Wait till the installer has finished by receiving the notification
-  // NOTIFICATION_CRX_INSTALLER_DONE.
-  observer.Wait();
-  content::Details<const extensions::Extension> details = observer.details();
+  // Wait till the installer has finished.
+  const absl::optional<CrxInstallError>& install_error =
+      installer_done_future.Get();
   // Check the extension is not installed.
-  EXPECT_FALSE(details.ptr());
+  EXPECT_TRUE(install_error);
   EXPECT_FALSE(registry->GetExtensionById(
       kGoodCrxId, extensions::ExtensionRegistry::EVERYTHING));
   // Check the extension in not inserted in the cache.
@@ -878,37 +898,29 @@
   GURL url =
       embedded_test_server()->GetURL("/extensions/good2_update_manifest.xml");
   PolicyMap policies;
+
+  TestFuture<absl::optional<CrxInstallError>> installer_done_future;
+  extension_service()->updater()->SetCrxInstallerResultCallbackForTesting(
+      installer_done_future
+          .GetCallback<const absl::optional<CrxInstallError>&>());
+
   // Add an entry in the extension force list policy.
   AddExtensionToForceList(&policies, kGoodCrxId, url);
 
-  // Observes notification for failed crx installation.
-  content::WindowedNotificationObserver failed_installation_observer(
-      extensions::NOTIFICATION_CRX_INSTALLER_DONE,
-      base::BindLambdaForTesting(
-          [&](const content::NotificationSource& source,
-              const content::NotificationDetails& details) {
-            return content::Details<const extensions::Extension>(details)
-                       .ptr() == nullptr;
-          }));
-  // Observes notification for passed crx installation.
-  content::WindowedNotificationObserver passed_installation_observer(
-      extensions::NOTIFICATION_CRX_INSTALLER_DONE,
-      base::BindLambdaForTesting(
-          [&](const content::NotificationSource& source,
-              const content::NotificationDetails& details) {
-            return content::Details<const extensions::Extension>(details)
-                       .ptr() != nullptr;
-          }));
+  TestExtensionRegistryObserver registry_observer(extension_registry());
+
   // Updating the policy triggers the extension installation process.
   UpdateProviderPolicy(policies);
   // Wait till extension entry is found in the cache and installation fails due
   // to version mismatch as the cache entry informs extension version as
   // "1.0.0.1" while the crx file it points to belongs to "1.0.0.0".
-  failed_installation_observer.Wait();
+  const absl::optional<CrxInstallError>& install_error =
+      installer_done_future.Get();
+  EXPECT_TRUE(install_error);
 
   // Wait till extension is freshly downloaded from the server and installation
   // succeeds.
-  passed_installation_observer.Wait();
+  ASSERT_TRUE(registry_observer.WaitForExtensionLoaded());
 
   EXPECT_TRUE(registry->GetExtensionById(
       kGoodCrxId, extensions::ExtensionRegistry::EVERYTHING));
@@ -2439,36 +2451,6 @@
   }
 
  protected:
-  const extensions::Extension* InstallExtension(
-      const base::FilePath::StringType& path,
-      const base::FilePath::StringType& name,
-      content::BrowserContext* browser_context,
-      extensions::ExtensionService* extension_service,
-      extensions::ExtensionRegistry* extension_registry) {
-    base::FilePath extension_path(ui_test_utils::GetTestFilePath(
-        base::FilePath(path), base::FilePath(name)));
-    scoped_refptr<extensions::CrxInstaller> installer =
-        extensions::CrxInstaller::CreateSilent(extension_service);
-    installer->set_allow_silent_install(true);
-    installer->set_install_cause(extension_misc::INSTALL_CAUSE_AUTOMATION);
-    installer->set_creation_flags(extensions::Extension::FROM_WEBSTORE);
-    installer->set_off_store_install_allow_reason(
-        extensions::CrxInstaller::OffStoreInstallAllowReason::
-            OffStoreInstallAllowedInTest);
-
-    extensions::ChromeExtensionTestNotificationObserver observer(
-        browser_context);
-    observer.Watch(extensions::NOTIFICATION_CRX_INSTALLER_DONE,
-                   content::Source<extensions::CrxInstaller>(installer.get()));
-    installer->InstallCrx(extension_path);
-    observer.Wait();
-    if (!observer.WaitForExtensionViewsToLoad())
-      return nullptr;
-    return extension_registry->GetExtensionById(
-        observer.last_loaded_extension_id(),
-        extensions::ExtensionRegistry::ENABLED);
-  }
-
   void SetTabSpecificPermissionsForURL(const extensions::Extension* extension,
                                        int tab_id,
                                        GURL& url,
@@ -2548,12 +2530,10 @@
   int tab_id = 1;
 
   const extensions::Extension* app1 =
-      InstallExtension(kTestExtensionsDir, kGoodCrxName, GetProfile1(),
-                       GetExtensionService1(), GetExtensionRegistry1());
+      InstallExtensionWithContext(kGoodCrxName, GetProfile1());
   ASSERT_TRUE(app1);
   const extensions::Extension* app2 =
-      InstallExtension(kTestExtensionsDir, kGoodCrxName, GetProfile2(),
-                       GetExtensionService2(), GetExtensionRegistry2());
+      InstallExtensionWithContext(kGoodCrxName, GetProfile2());
   ASSERT_TRUE(app2);
   SetTabSpecificPermissionsForURL(app1, tab_id, test_url,
                                   URLPattern::SCHEME_ALL);
diff --git a/chrome/browser/policy/value_provider/chrome_policies_value_provider.cc b/chrome/browser/policy/value_provider/chrome_policies_value_provider.cc
index a594966..ca5d16c 100644
--- a/chrome/browser/policy/value_provider/chrome_policies_value_provider.cc
+++ b/chrome/browser/policy/value_provider/chrome_policies_value_provider.cc
@@ -47,7 +47,7 @@
   auto client =
       std::make_unique<policy::ChromePolicyConversionsClient>(profile_);
   auto policy_conversions = policy::ChromePolicyConversions(std::move(client));
-  return policy_conversions.EnableConvertValues(true).ToValueDict();
+  return policy_conversions.ToValueDict();
 }
 
 base::Value::Dict ChromePoliciesValueProvider::GetNames() {
diff --git a/chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_link_manager_factory.cc b/chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_link_manager_factory.cc
index 32655c3..9f87ca8 100644
--- a/chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_link_manager_factory.cc
+++ b/chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_link_manager_factory.cc
@@ -28,7 +28,7 @@
     : ProfileKeyedServiceFactory(
           "NoStatePrefetchLinkManager",
           ProfileSelections::BuildForRegularAndIncognito()) {
-  DependsOn(prerender::NoStatePrefetchManagerFactory::GetInstance());
+  DependsOn(NoStatePrefetchManagerFactory::GetInstance());
 }
 
 KeyedService* NoStatePrefetchLinkManagerFactory::BuildServiceInstanceFor(
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
index cd2d0ac..74475526 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -324,7 +324,7 @@
     std::string response_file_extension;
     std::vector<lens::mojom::LatencyLogPtr> response_log_data;
     chrome_render_frame->RequestImageForContextNode(
-        0, request_size, request_image_format,
+        0, request_size, request_image_format, chrome::mojom::kDefaultQuality,
         base::BindOnce(callback, &response_image_data, &response_original_size,
                        &response_file_extension, &response_log_data,
                        run_loop.QuitClosure()));
@@ -2321,6 +2321,7 @@
   bool response_received = false;
   chrome_render_frame->RequestImageForContextNode(
       0, gfx::Size(2048, 2048), chrome::mojom::ImageFormat::JPEG,
+      chrome::mojom::kDefaultQuality,
       base::BindOnce(callback, &response_received, run_loop.QuitClosure()));
   run_loop.Run();
 
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
index 88f48a5..498c53b 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
@@ -94,6 +94,8 @@
   "background/output/output_ancestry_info.js",
   "background/output/output_format_parser.js",
   "background/output/output_format_tree.js",
+  "background/output/output_formatter.js",
+  "background/output/output_interface.js",
   "background/output/output_logger.js",
   "background/output/output_role_info.js",
   "background/output/output_rules.js",
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
index f1ad9619..c7be95a 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
@@ -27,6 +27,8 @@
 import {OutputAncestryInfo} from './output_ancestry_info.js';
 import {OutputFormatParser, OutputFormatParserObserver} from './output_format_parser.js';
 import {OutputFormatTree} from './output_format_tree.js';
+import {OutputFormatter} from './output_formatter.js';
+import {OutputInterface} from './output_interface.js';
 import {OutputFormatLogger} from './output_logger.js';
 import {OutputRoleInfo} from './output_role_info.js';
 import {OutputRule, OutputRuleSpecifier} from './output_rules.js';
@@ -68,6 +70,7 @@
  * = suffix: used to specify substitution only if not previously appended.
  *     For example, $name= would insert the name attribute only if no name
  * attribute had been inserted previously.
+ * @implements {OutputInterface}
  */
 export class Output {
   constructor() {
@@ -676,148 +679,11 @@
    * @private
    */
   format_(params) {
-    let speechProps = params['opt_speechProps'];
-    const owner = this;
-    const observer =
-        new /** @implements {OutputFormatParserObserver} */ (class {
-          /** @override */
-          onTokenStart() {}
-
-          /** @override */
-          onNodeAttributeOrSpecialToken(token, tree, options) {
-            if (owner.suppressions_[token]) {
-              return true;
-            }
-
-            if (token === 'value') {
-              owner.formatValue_(params, token, options);
-            } else if (token === 'name') {
-              owner.formatName_(params, token, options);
-            } else if (token === 'description') {
-              owner.formatDescription_(params, token, options);
-            } else if (token === 'urlFilename') {
-              owner.formatUrlFilename_(params, token, options);
-            } else if (token === 'nameFromNode') {
-              owner.formatNameFromNode_(params, token, options);
-            } else if (token === 'nameOrDescendants') {
-              // This token is similar to nameOrTextContent except it gathers
-              // rich output for descendants. It also lets name from contents
-              // override the descendants text if |node| has only static text
-              // children.
-              owner.formatNameOrDescendants_(params, token, options);
-            } else if (token === 'indexInParent') {
-              owner.formatIndexInParent_(params, token, tree, options);
-            } else if (token === 'restriction') {
-              owner.formatRestriction_(params, token);
-            } else if (token === 'checked') {
-              owner.formatChecked_(params, token);
-            } else if (token === 'pressed') {
-              owner.formatPressed_(params, token);
-            } else if (token === 'state') {
-              owner.formatState_(params, token);
-            } else if (token === 'find') {
-              owner.formatFind_(params, token, tree);
-            } else if (token === 'descendants') {
-              owner.formatDescendants_(params, token);
-            } else if (token === 'joinedDescendants') {
-              owner.formatJoinedDescendants_(params, token, options);
-            } else if (token === 'role') {
-              if (localStorage['useVerboseMode'] === 'false') {
-                return true;
-              }
-              if (owner.formatOptions_.auralStyle) {
-                speechProps = new outputTypes.OutputSpeechProperties();
-                speechProps.properties['relativePitch'] = -0.3;
-              }
-
-              owner.formatRole_(params, token, options);
-            } else if (token === 'inputType') {
-              owner.formatInputType_(params, token, options);
-            } else if (
-                token === 'tableCellRowIndex' ||
-                token === 'tableCellColumnIndex') {
-              owner.formatTableCellIndex_(params, token, options);
-            } else if (token === 'cellIndexText') {
-              owner.formatCellIndexText_(params, token, options);
-            } else if (token === 'node') {
-              owner.formatNode_(params, token, tree, options);
-            } else if (
-                token === 'nameOrTextContent' || token === 'textContent') {
-              owner.formatTextContent_(params, token, options);
-            } else if (params.node[token] !== undefined) {
-              owner.formatAsFieldAccessor_(params, token, options);
-            } else if (outputTypes.OUTPUT_STATE_INFO[token]) {
-              owner.formatAsStateValue_(params, token, options);
-            } else if (token === 'phoneticReading') {
-              owner.formatPhoneticReading_(params);
-            } else if (token === 'listNestedLevel') {
-              owner.formatListNestedLevel_(params);
-            } else if (token === 'precedingBullet') {
-              owner.formatPrecedingBullet_(params);
-            } else if (tree.firstChild) {
-              owner.formatCustomFunction_(params, token, tree, options);
-            }
-          }
-
-          /** @override */
-          onMessageToken(token, tree, options) {
-            params.outputFormatLogger.write(' @');
-            if (owner.formatOptions_.auralStyle) {
-              if (!speechProps) {
-                speechProps = new outputTypes.OutputSpeechProperties();
-              }
-              speechProps.properties['relativePitch'] = -0.2;
-            }
-            owner.formatMessage_(params, token, tree, options);
-          }
-
-          /** @override */
-          onSpeechPropertyToken(token, tree, options) {
-            params.outputFormatLogger.write(' ! ' + token + '\n');
-            speechProps = new outputTypes.OutputSpeechProperties();
-            speechProps.properties[token] = true;
-            if (tree.firstChild) {
-              if (!owner.formatOptions_.auralStyle) {
-                speechProps = undefined;
-                return true;
-              }
-
-              let value = tree.firstChild.value;
-
-              // Currently, speech params take either attributes or floats.
-              let float = 0;
-              if (float = parseFloat(value)) {
-                value = float;
-              } else {
-                value = parseFloat(params.node[value]) / -10.0;
-              }
-              speechProps.properties[token] = value;
-              return true;
-            }
-          }
-
-          /** @override */
-          onTokenEnd() {
-            const buff = params.outputBuffer;
-
-            // Post processing.
-            if (speechProps) {
-              if (buff.length > 0) {
-                buff[buff.length - 1].setSpan(speechProps, 0, 0);
-                speechProps = null;
-              }
-            }
-          }
-        })();
-
-    new OutputFormatParser(observer).parse(params.outputFormat);
+    const formatter = new OutputFormatter(this, params);
+    new OutputFormatParser(formatter).parse(params.outputFormat);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatValue_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -851,11 +717,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatName_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -884,11 +746,7 @@
     formatLog.writeTokenWithValue(token, node.name);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatDescription_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -903,11 +761,7 @@
     formatLog.writeTokenWithValue(token, node.description);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatUrlFilename_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -928,11 +782,7 @@
     formatLog.writeTokenWithValue(token, filename);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatNameFromNode_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -947,11 +797,7 @@
     formatLog.writeTokenWithValue(token, node.name);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatNameOrDescendants_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -974,12 +820,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!OutputFormatTree} tree
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatIndexInParent_(data, token, tree, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1009,10 +850,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   */
+  /** @override */
   formatRestriction_(data, token) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1030,10 +868,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   */
+  /** @override */
   formatChecked_(data, token) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1051,10 +886,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   */
+  /** @override */
   formatPressed_(data, token) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1072,10 +904,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   */
+  /** @override */
   formatState_(data, token) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1097,11 +926,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!OutputFormatTree} tree
-   */
+  /** @override */
   formatFind_(data, token, tree) {
     const buff = data.outputBuffer;
     const formatLog = data.outputFormatLogger;
@@ -1125,10 +950,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   */
+  /** @override */
   formatDescendants_(data, token) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1174,11 +996,7 @@
         {suppressStartEndAncestry: true});
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatJoinedDescendants_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1197,11 +1015,7 @@
         '}: ' + (unjoined.length ? unjoined.join(' ') : 'EMPTY') + '\n');
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatRole_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1227,11 +1041,7 @@
     formatLog.writeTokenWithValue(token, msg);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatInputType_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1250,11 +1060,7 @@
     formatLog.writeTokenWithValue(token, Msgs.getMsg(msgId));
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatTableCellIndex_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1270,11 +1076,7 @@
     formatLog.writeTokenWithValue(token, value);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatCellIndexText_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1306,12 +1108,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!OutputFormatTree} tree
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatNode_(data, token, tree, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1362,11 +1159,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatTextContent_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1408,11 +1201,7 @@
     formatLog.writeTokenWithValue(token, finalOutput);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatAsFieldAccessor_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1427,11 +1216,7 @@
     formatLog.writeTokenWithValue(token, value);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatAsStateValue_(data, token, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1457,9 +1242,7 @@
     formatLog.writeTokenWithValue(token, msg);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   */
+  /** @override */
   formatPhoneticReading_(data) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1469,9 +1252,7 @@
     this.append_(buff, text);
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   */
+  /** @override */
   formatListNestedLevel_(data) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1487,9 +1268,7 @@
     this.append_(buff, level.toString());
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   */
+  /** @override */
   formatPrecedingBullet_(data) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1507,12 +1286,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!OutputFormatTree} tree
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatCustomFunction_(data, token, tree, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -1574,12 +1348,7 @@
     }
   }
 
-  /**
-   * @param {!outputTypes.OutputFormattingData} data
-   * @param {string} token
-   * @param {!OutputFormatTree} tree
-   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
-   */
+  /** @override */
   formatMessage_(data, token, tree, options) {
     const buff = data.outputBuffer;
     const node = data.node;
@@ -2596,6 +2365,16 @@
       buff[buff.length - 1].setSpan(speechProps, 0, 0);
     }
   }
+
+  /** @override */
+  shouldSuppress(token) {
+    return this.suppressions_[token];
+  }
+
+  /** @override */
+  get useAuralStyle() {
+    return this.formatOptions_.auralStyle;
+  }
 }
 
 /**
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_formatter.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_formatter.js
new file mode 100644
index 0000000..c3f8cfdf
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_formatter.js
@@ -0,0 +1,154 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Class that formats the parsed output tree.
+ */
+import {OutputFormatParserObserver} from './output_format_parser.js';
+import {OutputInterface} from './output_interface.js';
+import * as outputTypes from './output_types.js';
+
+// TODO(anastasi): Move formatting logic to this class.
+/** @implements {OutputFormatParserObserver} */
+export class OutputFormatter {
+  /**
+   * @param {!OutputInterface} output
+   * @param {!outputTypes.OutputFormattingData} params
+   */
+  constructor(output, params) {
+    /** @private {outputTypes.OutputSpeechProperties|undefined} */
+    this.speechProps_ = params.opt_speechProps;
+    /** @private {!OutputInterface} */
+    this.output_ = output;
+    /** @private {!outputTypes.OutputFormattingData} */
+    this.params_ = params;
+  }
+
+  /** @override */
+  onTokenStart() {}
+
+  /** @override */
+  onNodeAttributeOrSpecialToken(token, tree, options) {
+    if (this.output_.shouldSuppress(token)) {
+      return true;
+    }
+
+    if (token === 'value') {
+      this.output_.formatValue_(this.params_, token, options);
+    } else if (token === 'name') {
+      this.output_.formatName_(this.params_, token, options);
+    } else if (token === 'description') {
+      this.output_.formatDescription_(this.params_, token, options);
+    } else if (token === 'urlFilename') {
+      this.output_.formatUrlFilename_(this.params_, token, options);
+    } else if (token === 'nameFromNode') {
+      this.output_.formatNameFromNode_(this.params_, token, options);
+    } else if (token === 'nameOrDescendants') {
+      // This token is similar to nameOrTextContent except it gathers
+      // rich output for descendants. It also lets name from contents
+      // override the descendants text if |node| has only static text
+      // children.
+      this.output_.formatNameOrDescendants_(this.params_, token, options);
+    } else if (token === 'indexInParent') {
+      this.output_.formatIndexInParent_(this.params_, token, tree, options);
+    } else if (token === 'restriction') {
+      this.output_.formatRestriction_(this.params_, token);
+    } else if (token === 'checked') {
+      this.output_.formatChecked_(this.params_, token);
+    } else if (token === 'pressed') {
+      this.output_.formatPressed_(this.params_, token);
+    } else if (token === 'state') {
+      this.output_.formatState_(this.params_, token);
+    } else if (token === 'find') {
+      this.output_.formatFind_(this.params_, token, tree);
+    } else if (token === 'descendants') {
+      this.output_.formatDescendants_(this.params_, token);
+    } else if (token === 'joinedDescendants') {
+      this.output_.formatJoinedDescendants_(this.params_, token, options);
+    } else if (token === 'role') {
+      if (localStorage['useVerboseMode'] === String(false)) {
+        return true;
+      }
+      if (this.output_.useAuralStyle) {
+        this.speechProps_ = new outputTypes.OutputSpeechProperties();
+        this.speechProps_.properties['relativePitch'] = -0.3;
+      }
+
+      this.output_.formatRole_(this.params_, token, options);
+    } else if (token === 'inputType') {
+      this.output_.formatInputType_(this.params_, token, options);
+    } else if (
+        token === 'tableCellRowIndex' || token === 'tableCellColumnIndex') {
+      this.output_.formatTableCellIndex_(this.params_, token, options);
+    } else if (token === 'cellIndexText') {
+      this.output_.formatCellIndexText_(this.params_, token, options);
+    } else if (token === 'node') {
+      this.output_.formatNode_(this.params_, token, tree, options);
+    } else if (token === 'nameOrTextContent' || token === 'textContent') {
+      this.output_.formatTextContent_(this.params_, token, options);
+    } else if (this.params_.node[token] !== undefined) {
+      this.output_.formatAsFieldAccessor_(this.params_, token, options);
+    } else if (outputTypes.OUTPUT_STATE_INFO[token]) {
+      this.output_.formatAsStateValue_(this.params_, token, options);
+    } else if (token === 'phoneticReading') {
+      this.output_.formatPhoneticReading_(this.params_);
+    } else if (token === 'listNestedLevel') {
+      this.output_.formatListNestedLevel_(this.params_);
+    } else if (token === 'precedingBullet') {
+      this.output_.formatPrecedingBullet_(this.params_);
+    } else if (tree.firstChild) {
+      this.output_.formatCustomFunction_(this.params_, token, tree, options);
+    }
+  }
+
+  /** @override */
+  onMessageToken(token, tree, options) {
+    this.params_.outputFormatLogger.write(' @');
+    if (this.output_.useAuralStyle) {
+      if (!this.speechProps_) {
+        this.speechProps_ = new outputTypes.OutputSpeechProperties();
+      }
+      this.speechProps_.properties['relativePitch'] = -0.2;
+    }
+    this.output_.formatMessage_(this.params_, token, tree, options);
+  }
+
+  /** @override */
+  onSpeechPropertyToken(token, tree, options) {
+    this.params_.outputFormatLogger.write(' ! ' + token + '\n');
+    this.speechProps_ = new outputTypes.OutputSpeechProperties();
+    this.speechProps_.properties[token] = true;
+    if (tree.firstChild) {
+      if (!this.output_.useAuralStyle) {
+        this.speechProps_ = undefined;
+        return true;
+      }
+
+      let value = tree.firstChild.value;
+
+      // Currently, speech params take either attributes or floats.
+      let float = 0;
+      if (float = parseFloat(value)) {
+        value = float;
+      } else {
+        value = parseFloat(this.params_.node[value]) / -10.0;
+      }
+      this.speechProps_.properties[token] = value;
+      return true;
+    }
+  }
+
+  /** @override */
+  onTokenEnd() {
+    const buff = this.params_.outputBuffer;
+
+    // Post processing.
+    if (this.speechProps_) {
+      if (buff.length > 0) {
+        buff[buff.length - 1].setSpan(this.speechProps_, 0, 0);
+        this.speechProps_ = null;
+      }
+    }
+  }
+}
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_interface.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_interface.js
new file mode 100644
index 0000000..97518449
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_interface.js
@@ -0,0 +1,203 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @fileoverview Interface for the central output class for ChromeVox.
+ */
+import {OutputFormatTree} from './output_format_tree.js';
+import {OutputFormattingData} from './output_types.js';
+
+/** @interface */
+export class OutputInterface {
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatAsFieldAccessor_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatAsStateValue_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatCellIndexText_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   */
+  formatChecked_(data, token) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!OutputFormatTree} tree
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatCustomFunction_(data, token, tree, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   */
+  formatDescendants_(data, token) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatDescription_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!OutputFormatTree} tree
+   */
+  formatFind_(data, token, tree) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!OutputFormatTree} tree
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatIndexInParent_(data, token, tree, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatInputType_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatJoinedDescendants_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   */
+  formatListNestedLevel_(data) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!OutputFormatTree} tree
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatMessage_(data, token, tree, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatName_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatNameFromNode_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatNameOrDescendants_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!OutputFormatTree} tree
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatNode_(data, token, tree, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   */
+  formatPhoneticReading_(data) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   */
+  formatPrecedingBullet_(data) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   */
+  formatPressed_(data, token) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   */
+  formatRestriction_(data, token) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatRole_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   */
+  formatState_(data, token) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatTableCellIndex_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatTextContent_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatUrlFilename_(data, token, options) {}
+
+  /**
+   * @param {!OutputFormattingData} data
+   * @param {string} token
+   * @param {!{annotation: Array<*>, isUnique: (boolean|undefined)}} options
+   */
+  formatValue_(data, token, options) {}
+
+  /**
+   * @param {string} token
+   * @return {boolean}
+   */
+  shouldSuppress(token) {}
+
+  /** @return {boolean} */
+  get useAuralStyle() {}
+}
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_rules.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_rules.js
index 25f34cc..f1534da 100644
--- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_rules.js
+++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_rules.js
@@ -76,11 +76,8 @@
   get event() {
     return this.event_;
   }
-  /** @return {string} */
+  /** @return {string|undefined} */
   get role() {
-    if (!this.role_) {
-      throw new Error('Cannot get the value of role before it has been set');
-    }
     return this.role_;
   }
   /** @return {string|undefined} */
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
index 4d32a40..969a1a9 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
@@ -26,6 +26,7 @@
 <translation id="1161762950103988776">Jump</translation>
 <translation id="1164857107703583584">באמצעות פקודות קפיצה אפשר לנווט ביעילות בדף אינטרנט.</translation>
 <translation id="1175914831232945926">ספרות</translation>
+<translation id="1181003590763099524">מעבר לתחילת השדה</translation>
 <translation id="1188858454923323853">משלים</translation>
 <translation id="1189258430971676908">אזור תרגול: רשימות נפתחות</translation>
 <translation id="1195238899008218998">אחרית דבר</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
index 2e228ff..cc6ebd3 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_ja.xtb
@@ -329,6 +329,7 @@
 <translation id="309749186376891736">カーソルを移動</translation>
 <translation id="3103579948980282461">ミディアム バイオレット レッド</translation>
 <translation id="3104705064753753826">アラート ダイアログ</translation>
+<translation id="3105857328626674463">前の単語を選択</translation>
 <translation id="3109724472072898302">折りたたみ表示中</translation>
 <translation id="311015743332597320">4 本の指で右にスワイプします</translation>
 <translation id="3112457281078985179">ChromeVox をオンまたはオフにするには、Ctrl+Alt+Z キーを使用します。</translation>
@@ -357,6 +358,7 @@
 <translation id="3241052487511142956">前にアクセスしたリンク</translation>
 <translation id="3241638166094654466">各行のセル数:</translation>
 <translation id="3244209481693235975"><ph name="LANGUAGE" />: <ph name="CONTENT" /></translation>
+<translation id="3247621388192105674">最後に移動</translation>
 <translation id="3260949043575829030">前の同様の項目</translation>
 <translation id="3270069636408109001">次の表はありません</translation>
 <translation id="3273791280096244679">ラベルを保存</translation>
@@ -949,6 +951,7 @@
 <translation id="743783356331413498">例</translation>
 <translation id="7439060726180460871">ディレクトリ</translation>
 <translation id="744163271241493234">パスワードを編集</translation>
+<translation id="7443479558101073378">次の単語を選択</translation>
 <translation id="7465123027577412805">自然な音声を使用しますか?</translation>
 <translation id="7491962110804786152">タブ</translation>
 <translation id="7492497529767769458">次のセクションに移動します。たとえばステータス トレイやランチャーなどです。</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb
index abaa812..38db0b4a 100644
--- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb
+++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb
@@ -151,6 +151,7 @@
 <translation id="1914424852593176649">Өлшемі: <ph name="FONT_SIZE" />.</translation>
 <translation id="1914635379910604678"><ph name="DOT" /> тіркесімі</translation>
 <translation id="1923956950274750765">Орташа күлгін</translation>
+<translation id="1928535370180099152">алдыңғы таңбаны ерекшелеу</translation>
 <translation id="1928932365747995741">Алдыңғы өзгертілетін мəтін өрісі жоқ.</translation>
 <translation id="1964135212174907577">Келесі нысан</translation>
 <translation id="1966649499058910679">Айтылған әр сөзді ерекшелеу</translation>
@@ -204,6 +205,7 @@
 <translation id="2381733276052567791">Дауыстап оқуды қосу немесе өшіру</translation>
 <translation id="2390264819538553347">Келесі бетке өту үшін Enter пернесін, ал кері қайту үшін Backspace пернесін басыңыз.</translation>
 <translation id="2398579267367951220">Беттен ізделетін мәтінді теріңіз. Нәтижелерге өту үшін Enter пернесін, ал оларды шолып шығу үшін жоғары не төмен көрсеткі пернесін басыңыз. Іздеу сұрауын өзгерту үшін мәтін теріңіз, ал бас тарту үшін Escape пернесін басыңыз.</translation>
+<translation id="2407047351320112166">келесі таңбаны ерекшелеу</translation>
 <translation id="240709722712693803">Көкшіл күлгін</translation>
 <translation id="2410298923485357543">Құрылғы желіде болғанда табиғи дауысты пайдалану</translation>
 <translation id="2416512023405990736">Белгіленбеген құсбелгі ұяшығы</translation>
diff --git a/chrome/browser/resources/intro/BUILD.gn b/chrome/browser/resources/intro/BUILD.gn
index f44ccfa2..fcb729f 100644
--- a/chrome/browser/resources/intro/BUILD.gn
+++ b/chrome/browser/resources/intro/BUILD.gn
@@ -22,7 +22,10 @@
   if (is_chromeos_lacros) {
     web_component_files = [ "lacros_app.ts" ]
   } else if (enable_dice_support) {
-    web_component_files = [ "dice_app.ts" ]
+    web_component_files = [
+      "dice_app.ts",
+      "sign_in_promo.ts",
+    ]
   }
 
   non_web_component_files = [ "browser_proxy.ts" ]
diff --git a/chrome/browser/resources/intro/dice_app.html b/chrome/browser/resources/intro/dice_app.html
index 691d065..2624aec 100644
--- a/chrome/browser/resources/intro/dice_app.html
+++ b/chrome/browser/resources/intro/dice_app.html
@@ -8,198 +8,6 @@
     font-size: 100%;
     margin: 0;
   }
-
-  #signInPromo {
-    --btn-div-vertical-margin: 24px;
-    --card-background-color: var(--google-grey-50);
-    --card-bottom-padding: 24px;
-    --card-description-color: var(--cr-secondary-text-color);
-    --card-description-font-size: 1.08em;
-    --card-height: 172px;
-    --card-horizontal-padding: 24px;
-    --card-title-font-size: 1.25em;
-    --card-top-padding: 27px;
-    --card-width: 236px;
-    --gap-between-cards: 12px;
-    --icon-color: var(--google-blue-600);
-    --left-background-image-url: url(images/left_background.svg);
-    --product-logo-size: 90px;
-    --right-background-image-url: url(images/right_background.svg);
-    --scrollbar-background: var(--google-grey-100);
-    --scrollbar-width: 4px;
-    --subtitle-font-size: 1.67em;
-    --title-font-size: 3em;
-    --title-line-height: 44px;
-    font-family: 'Google Sans', Roboto, sans-serif;
-  }
-
-  @media (prefers-color-scheme: dark) {
-    #signInPromo {
-      --card-background-color: var(--google-grey-800);
-      --card-description-color: white;
-      --icon-color: var(--google-blue-300);
-      --left-background-image-url: url(images/left_background_dark_mode.svg);
-      --right-background-image-url: url(images/right_background_dark_mode.svg);
-      --scrollbar-background: var(--google-grey-800);
-    }
-  }
-
-  @media screen and ((max-width: 780px) or (max-height: 600px)) {
-    #signInPromo {
-      --card-description-font-size: 1em;
-      --card-height: 164px;
-      --card-title-font-size: 1.08em;
-      --card-width: 200px;
-      --title-font-size: 2em;
-      --title-line-height: 32px;
-      --subtitle-font-size: 1.25em;
-      --product-logo-size: 60px;
-    }
-  }
-
-  @media screen and (max-width: 780px) {
-    #signInPromo {
-      --card-horizontal-padding: 8px;
-    }
-  }
-
-  @media screen and (max-height: 600px) {
-    #signInPromo {
-      --card-bottom-padding: 12px;
-      --card-top-padding: 15px;
-    }
-  }
-
-  p {
-    margin: 0;
-  }
-
-  h1 {
-    font-size: var(--title-font-size);
-    font-weight: 500;
-    line-height: var(--title-line-height);
-    margin: 24px 0 16px;
-  }
-
-  h2 {
-    font-size: var(--card-title-font-size);
-    font-weight: 500;
-    line-height: 22px;
-    margin: 0 0 4px;
-  }
-
-  iron-icon {
-    --iron-icon-fill-color: var(--icon-color);
-    --iron-icon-height: 36px;
-    --iron-icon-width: 36px;
-    margin-bottom: 16px;
-  }
-
-  #content-area {
-    --card-horizontal-size: calc(var(--card-width) + 2 * var(--card-horizontal-padding));
-    align-items: center;
-    display: flex;
-    flex-direction: column;
-    margin: auto 0;
-    text-align: center ;
-    width: calc(3 * var(--card-horizontal-size) + 2 * var(--gap-between-cards));
-  }
-
-  #product-logo {
-    height: var(--product-logo-size);
-    margin-top: 50px;
-    width: var(--product-logo-size);
-  }
-
-  #benefit-cards-container {
-    display: flex;
-    flex-direction: row;
-    gap: var(--gap-between-cards);
-  }
-
-  .benefit-card {
-    align-items: center;
-    background: var(--card-background-color);
-    border-radius: 24px;
-    display: flex;
-    flex-direction: column;
-    min-height: var(--card-height);
-    padding: var(--card-top-padding) var(--card-horizontal-padding) var(--card-bottom-padding);
-    width: var(--card-width);
-  }
-
-  #benefit-card-description {
-    color: var(--card-description-color);
-    font-size: var(--card-description-font-size);
-    font-weight: 400;
-    line-height: 20px;
-  }
-
-  #button-container {
-    bottom: var(--btn-div-vertical-margin);
-    display: flex;
-    flex-direction: row;
-    gap: 8px;
-    position: fixed;
-    right: 24px;
-  }
-
-  #button-container > cr-button {
-    font-size: 1.08em;
-    min-width: 133px;
-  }
-
-  #subtitle {
-    color: var(--cr-secondary-text-color);
-    font-size: var(--subtitle-font-size);
-    font-weight: 400;
-    line-height: 24px;
-    margin: 0 0 24px;
-  }
-
-  .custom-scrollbar::-webkit-scrollbar {
-    width: var(--scrollbar-width);
-  }
-
-  .custom-scrollbar::-webkit-scrollbar-track {
-    border-radius: var(--scrollbar-width);
-  }
-
-  .custom-scrollbar::-webkit-scrollbar-thumb {
-    background: var(--scrollbar-background);
-    border-radius: var(--scrollbar-width);
-  }
-
-  .background-image {
-    position: fixed;
-    top: 0;
-    width: calc(100vw * 17/100);
-  }
-
-  #left-background-image {
-    content: var(--left-background-image-url);
-    left: 0;
-  }
-
-  #right-background-image {
-    content: var(--right-background-image-url);
-    right: 0;
-  }
-
-  #safeZone {
-    box-sizing: border-box;
-    display: flex;
-    height: calc(100% - (2 * var(--btn-div-vertical-margin) + var(--cr-button-height)));
-    justify-content: center;
-    overflow-y: auto;
-    padding: 0 var(--gap-between-cards);
-    position: fixed;
-    width: 100%;
-  }
-
-  #safeZone.division-line {
-    border-bottom: var(--cr-separator-line);
-  }
 </style>
 
 <cr-view-manager id="viewManager">
@@ -209,32 +17,5 @@
     <!-- TODO(crbug.com/1347507): Use <cr_lottie> -->
     🏐 Faster. Safer. Yours.
   </div>
-
-  <!-- TODO(crbug.com/1347507): Implement this as an element?-->
-  <div id="signInPromo" slot="view">
-    <img class="background-image" id="left-background-image">
-    <img class="background-image" id="right-background-image">
-    <div class="custom-scrollbar" id="safeZone">
-      <div id="content-area">
-        <img id="product-logo" src="product-logo.png">
-        <h1>$i18n{pageTitle}</h1>
-        <p id="subtitle">$i18n{pageSubtitle}</p>
-        <div id="benefit-cards-container">
-          <template is="dom-repeat" items="[[benefitCards_]]">
-            <div class="benefit-card">
-              <iron-icon icon="[[item.iconName]]"></iron-icon>
-              <h2>[[item.title]]</h2>
-              <p id="benefit-card-description">[[item.description]]</p>
-            </div>
-          </template>
-        </div>
-      </div>
-  </div>
-
-    <div id="button-container">
-      <cr-button id="declineSignInButton" on-click="onContinueWithoutAccountClick_">$i18n{declineSignInButtonTitle}</cr-button>
-      <cr-button class="action-button" id="acceptSignInButton" on-click="onContinueWithAccountClick_">$i18n{acceptSignInButtonTitle}
-      </cr-button>
-    </div>
-  </div>
+  <sign-in-promo id="signInPromo" slot="view"></sign-in-promo>
 </cr-view-manager>
diff --git a/chrome/browser/resources/intro/dice_app.ts b/chrome/browser/resources/intro/dice_app.ts
index 1803a502..1c8b797 100644
--- a/chrome/browser/resources/intro/dice_app.ts
+++ b/chrome/browser/resources/intro/dice_app.ts
@@ -2,93 +2,33 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js';
 import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
-import 'chrome://resources/cr_elements/icons.html.js';
-import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
-import './icons.html.js';
-import './strings.m.js';
+import './sign_in_promo.js';
 
-import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import {CrViewManagerElement} from 'chrome://resources/cr_elements/cr_view_manager/cr_view_manager.js';
-import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {IntroBrowserProxy, IntroBrowserProxyImpl} from './browser_proxy.js';
 import {getTemplate} from './dice_app.html.js';
 
 export interface IntroAppElement {
-  $: {
-    acceptSignInButton: CrButtonElement,
-    declineSignInButton: CrButtonElement,
-    safeZone: HTMLElement,
-    viewManager: CrViewManagerElement,
-  };
+  $: {viewManager: CrViewManagerElement};
 }
 
-export interface BenefitCard {
-  title: string;
-  description: string;
-  iconName: string;
-}
-
-const IntroAppElementBase = I18nMixin(PolymerElement);
-
-export class IntroAppElement extends IntroAppElementBase {
+export class IntroAppElement extends PolymerElement {
   static get is() {
     return 'intro-app';
   }
 
-  constructor() {
-    super();
-    this.benefitCards_ = [
-      {
-        title: this.i18n('devicesCardTitle'),
-        description: this.i18n('devicesCardDescription'),
-        iconName: 'intro:devices',
-      },
-      {
-        title: this.i18n('securityCardTitle'),
-        description: this.i18n('securityCardDescription'),
-        iconName: 'cr:security',
-      },
-      {
-        title: this.i18n('backupCardTitle'),
-        description: this.i18n('backupCardDescription'),
-        iconName: 'intro:cloud-upload',
-      },
-    ];
-  }
-
   static get template() {
     return getTemplate();
   }
 
-  static get properties() {
-    return {
-      benefitCards_: {
-        type: Array,
-      },
-    };
-  }
-
-  private benefitCards_: BenefitCard[];
-  private browserProxy_: IntroBrowserProxy =
-      IntroBrowserProxyImpl.getInstance();
-  private resizeObserver_: ResizeObserver|null = null;
-
   override connectedCallback() {
     super.connectedCallback();
-    this.addResizeObserver_();
     this.setupViewManager_();
   }
 
-  override disconnectedCallback() {
-    super.disconnectedCallback();
-    this.resizeObserver_!.disconnect();
-  }
-
   private async setupViewManager_() {
     const queryParams = new URLSearchParams(window.location.search);
     if (!queryParams.has('noAnimations')) {
@@ -101,23 +41,6 @@
 
     this.$.viewManager.switchView('signInPromo', 'fade-in', 'no-animation');
   }
-
-  private onContinueWithAccountClick_() {
-    this.browserProxy_.continueWithAccount();
-  }
-
-  private onContinueWithoutAccountClick_() {
-    this.browserProxy_.continueWithoutAccount();
-  }
-
-  private addResizeObserver_() {
-    const safeZone = this.$.safeZone;
-    this.resizeObserver_ = new ResizeObserver(() => {
-      this.shadowRoot!.querySelector('#safeZone')!.classList.toggle(
-          'division-line', safeZone.scrollHeight > safeZone.clientHeight);
-    });
-    this.resizeObserver_.observe(safeZone);
-  }
 }
 
 declare global {
diff --git a/chrome/browser/resources/intro/sign_in_promo.html b/chrome/browser/resources/intro/sign_in_promo.html
new file mode 100644
index 0000000..50db6bf
--- /dev/null
+++ b/chrome/browser/resources/intro/sign_in_promo.html
@@ -0,0 +1,220 @@
+<style>
+  :host {
+    --btn-div-vertical-margin: 24px;
+    --card-background-color: var(--google-grey-50);
+    --card-bottom-padding: 24px;
+    --card-description-color: var(--cr-secondary-text-color);
+    --card-description-font-size: 1.08em;
+    --card-height: 172px;
+    --card-horizontal-padding: 24px;
+    --card-title-font-size: 1.25em;
+    --card-top-padding: 27px;
+    --card-width: 236px;
+    --gap-between-cards: 12px;
+    --icon-color: var(--google-blue-600);
+    --left-background-image-url: url(images/left_background.svg);
+    --product-logo-size: 90px;
+    --right-background-image-url: url(images/right_background.svg);
+    --scrollbar-background: var(--google-grey-100);
+    --scrollbar-width: 4px;
+    --subtitle-font-size: 1.67em;
+    --title-font-size: 3em;
+    --title-line-height: 44px;
+    color: var(--cr-primary-text-color);
+    font-family: 'Google Sans', Roboto, sans-serif;
+  }
+
+  @media (prefers-color-scheme: dark) {
+    :host {
+      --card-background-color: var(--google-grey-800);
+      --card-description-color: white;
+      --icon-color: var(--google-blue-300);
+      --left-background-image-url: url(images/left_background_dark_mode.svg);
+      --right-background-image-url: url(images/right_background_dark_mode.svg);
+      --scrollbar-background: var(--google-grey-800);
+    }
+  }
+
+  @media screen and ((max-width: 780px) or (max-height: 600px)) {
+    :host {
+      --card-description-font-size: 1em;
+      --card-height: 164px;
+      --card-title-font-size: 1.08em;
+      --card-width: 200px;
+      --title-font-size: 2em;
+      --title-line-height: 32px;
+      --subtitle-font-size: 1.25em;
+      --product-logo-size: 60px;
+    }
+  }
+
+  @media screen and (max-width: 780px) {
+    :host {
+      --card-horizontal-padding: 8px;
+    }
+  }
+
+  @media screen and (max-height: 600px) {
+    :host {
+      --card-bottom-padding: 12px;
+      --card-top-padding: 15px;
+    }
+  }
+
+  p {
+    margin: 0;
+  }
+
+  h1 {
+    font-size: var(--title-font-size);
+    font-weight: 500;
+    line-height: var(--title-line-height);
+    margin: 24px 0 16px;
+  }
+
+  h2 {
+    font-size: var(--card-title-font-size);
+    font-weight: 500;
+    line-height: 22px;
+    margin: 0 0 4px;
+  }
+
+  iron-icon {
+    --iron-icon-fill-color: var(--icon-color);
+    --iron-icon-height: 36px;
+    --iron-icon-width: 36px;
+    margin-bottom: 16px;
+  }
+
+  #content-area {
+    --card-horizontal-size: calc(var(--card-width) + 2 * var(--card-horizontal-padding));
+    align-items: center;
+    display: flex;
+    flex-direction: column;
+    margin: auto 0;
+    text-align: center ;
+    width: calc(3 * var(--card-horizontal-size) + 2 * var(--gap-between-cards));
+  }
+
+  #product-logo {
+    height: var(--product-logo-size);
+    margin-top: 50px;
+    width: var(--product-logo-size);
+  }
+
+  #benefit-cards-container {
+    display: flex;
+    flex-direction: row;
+    gap: var(--gap-between-cards);
+  }
+
+  .benefit-card {
+    align-items: center;
+    background: var(--card-background-color);
+    border-radius: 24px;
+    display: flex;
+    flex-direction: column;
+    min-height: var(--card-height);
+    padding: var(--card-top-padding) var(--card-horizontal-padding) var(--card-bottom-padding);
+    width: var(--card-width);
+  }
+
+  .benefit-card-description {
+    color: var(--card-description-color);
+    font-size: var(--card-description-font-size);
+    font-weight: 400;
+    line-height: 20px;
+  }
+
+  #button-container {
+    bottom: var(--btn-div-vertical-margin);
+    display: flex;
+    flex-direction: row;
+    gap: 8px;
+    position: fixed;
+    right: 24px;
+  }
+
+  #button-container > cr-button {
+    font-size: 1.08em;
+    min-width: 133px;
+  }
+
+  #subtitle {
+    color: var(--cr-secondary-text-color);
+    font-size: var(--subtitle-font-size);
+    font-weight: 400;
+    line-height: 24px;
+    margin: 0 0 24px;
+  }
+
+  .custom-scrollbar::-webkit-scrollbar {
+    width: var(--scrollbar-width);
+  }
+
+  .custom-scrollbar::-webkit-scrollbar-track {
+    border-radius: var(--scrollbar-width);
+  }
+
+  .custom-scrollbar::-webkit-scrollbar-thumb {
+    background: var(--scrollbar-background);
+    border-radius: var(--scrollbar-width);
+  }
+
+  .background-image {
+    position: fixed;
+    top: 0;
+    width: calc(100vw * 17/100);
+  }
+
+  #left-background-image {
+    content: var(--left-background-image-url);
+    left: 0;
+  }
+
+  #right-background-image {
+    content: var(--right-background-image-url);
+    right: 0;
+  }
+
+  #safeZone {
+    box-sizing: border-box;
+    display: flex;
+    height: calc(100% - (2 * var(--btn-div-vertical-margin) + var(--cr-button-height)));
+    justify-content: center;
+    overflow-y: auto;
+    padding: 0 var(--gap-between-cards);
+    position: fixed;
+    width: 100%;
+  }
+
+  #safeZone.division-line {
+    border-bottom: var(--cr-separator-line);
+  }
+</style>
+
+<img class="background-image" id="left-background-image">
+<img class="background-image" id="right-background-image">
+
+<div class="custom-scrollbar" id="safeZone">
+  <div id="content-area">
+    <img id="product-logo" src="product-logo.png">
+    <h1>$i18n{pageTitle}</h1>
+    <p id="subtitle">$i18n{pageSubtitle}</p>
+    <div id="benefit-cards-container">
+      <template is="dom-repeat" items="[[benefitCards_]]">
+        <div class="benefit-card">
+          <iron-icon icon="[[item.iconName]]"></iron-icon>
+          <h2>[[item.title]]</h2>
+          <p class="benefit-card-description">[[item.description]]</p>
+        </div>
+      </template>
+    </div>
+  </div>
+</div>
+
+<div id="button-container">
+  <cr-button id="declineSignInButton" on-click="onContinueWithoutAccountClick_">$i18n{declineSignInButtonTitle}</cr-button>
+  <cr-button class="action-button" id="acceptSignInButton" on-click="onContinueWithAccountClick_">$i18n{acceptSignInButtonTitle}
+  </cr-button>
+</div>
diff --git a/chrome/browser/resources/intro/sign_in_promo.ts b/chrome/browser/resources/intro/sign_in_promo.ts
new file mode 100644
index 0000000..9359a4a
--- /dev/null
+++ b/chrome/browser/resources/intro/sign_in_promo.ts
@@ -0,0 +1,112 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/cr_elements/cr_shared_vars.css.js';
+import 'chrome://resources/cr_elements/icons.html.js';
+import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
+import './icons.html.js';
+import './strings.m.js';
+
+import {CrButtonElement} from 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
+import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {IntroBrowserProxy, IntroBrowserProxyImpl} from './browser_proxy.js';
+import {getTemplate} from './sign_in_promo.html.js';
+
+export interface SignInPromoElement {
+  $: {
+    acceptSignInButton: CrButtonElement,
+    declineSignInButton: CrButtonElement,
+    safeZone: HTMLElement,
+  };
+}
+
+export interface BenefitCard {
+  title: string;
+  description: string;
+  iconName: string;
+}
+
+const SignInPromoElementBase = I18nMixin(PolymerElement);
+
+export class SignInPromoElement extends SignInPromoElementBase {
+  static get is() {
+    return 'sign-in-promo';
+  }
+
+  constructor() {
+    super();
+    this.benefitCards_ = [
+      {
+        title: this.i18n('devicesCardTitle'),
+        description: this.i18n('devicesCardDescription'),
+        iconName: 'intro:devices',
+      },
+      {
+        title: this.i18n('securityCardTitle'),
+        description: this.i18n('securityCardDescription'),
+        iconName: 'cr:security',
+      },
+      {
+        title: this.i18n('backupCardTitle'),
+        description: this.i18n('backupCardDescription'),
+        iconName: 'intro:cloud-upload',
+      },
+    ];
+  }
+
+  static get template() {
+    return getTemplate();
+  }
+
+  static get properties() {
+    return {
+      benefitCards_: {
+        type: Array,
+      },
+    };
+  }
+
+  private browserProxy_: IntroBrowserProxy =
+      IntroBrowserProxyImpl.getInstance();
+  private benefitCards_: BenefitCard[];
+  private resizeObserver_: ResizeObserver|null = null;
+
+  override connectedCallback() {
+    super.connectedCallback();
+    this.addResizeObserver_();
+  }
+
+  override disconnectedCallback() {
+    super.disconnectedCallback();
+    this.resizeObserver_!.disconnect();
+  }
+
+  private addResizeObserver_() {
+    const safeZone = this.$.safeZone;
+    this.resizeObserver_ = new ResizeObserver(() => {
+      this.shadowRoot!.querySelector('#safeZone')!.classList.toggle(
+          'division-line', safeZone.scrollHeight > safeZone.clientHeight);
+    });
+    this.resizeObserver_.observe(safeZone);
+  }
+
+  private onContinueWithAccountClick_() {
+    this.browserProxy_.continueWithAccount();
+  }
+
+  private onContinueWithoutAccountClick_() {
+    this.browserProxy_.continueWithoutAccount();
+  }
+}
+
+declare global {
+  interface HTMLElementTagNameMap {
+    'sign-in-promo': SignInPromoElement;
+  }
+}
+
+customElements.define(SignInPromoElement.is, SignInPromoElement);
diff --git a/chrome/browser/resources/password_manager/passwords_section.ts b/chrome/browser/resources/password_manager/passwords_section.ts
index 2d59eb2..2548b59 100644
--- a/chrome/browser/resources/password_manager/passwords_section.ts
+++ b/chrome/browser/resources/password_manager/passwords_section.ts
@@ -8,6 +8,7 @@
 import './strings.m.js';
 import './password_list_item.js';
 
+import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
 import {IronListElement} from 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
@@ -21,7 +22,9 @@
   };
 }
 
-export class PasswordsSectionElement extends PolymerElement {
+const PasswordsSectionElementBase = I18nMixin(PolymerElement);
+
+export class PasswordsSectionElement extends PasswordsSectionElementBase {
   static get is() {
     return 'passwords-section';
   }
diff --git a/chrome/browser/resources/password_manager/settings_section.html b/chrome/browser/resources/password_manager/settings_section.html
index f3a79f7..5306c43 100644
--- a/chrome/browser/resources/password_manager/settings_section.html
+++ b/chrome/browser/resources/password_manager/settings_section.html
@@ -77,18 +77,15 @@
       [[getBlockedSitesDescription_(blockedSites_)]]
     </div>
   </div>
-  <iron-list id="blockedSitesList" preserve-focus items="[[blockedSites_]]"
-      class="hr" risk-selection hidden$="[[!blockedSites_.length]]">
-    <template>
+  <div id="blockedSitesList" class="hr" hidden="[[!blockedSites_.length]]">
+    <template is="dom-repeat" items="[[blockedSites_]]">
       <div class="flex-centered">
         <site-favicon class="favicon" url="[[item.urls.link]]"></site-favicon>
         <div class="blocked-site-content flex-centered" first$="[[!index]]">
-          <div class="label site-url">
-            [[item.urls.shown]]
-          </div>
+          <div class="label site-url">[[item.urls.shown]]</div>
           <cr-icon-button class="icon-clear"></cr-icon-button>
         </div>
       </div>
     </template>
-  </iron-list>
+  </div>
 </div>
diff --git a/chrome/browser/resources/password_manager/settings_section.ts b/chrome/browser/resources/password_manager/settings_section.ts
index 4347e9b..4703b17 100644
--- a/chrome/browser/resources/password_manager/settings_section.ts
+++ b/chrome/browser/resources/password_manager/settings_section.ts
@@ -9,7 +9,6 @@
 
 import {I18nMixin} from 'chrome://resources/cr_elements/i18n_mixin.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
-import {IronListElement} from 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {BlockedSite, BlockedSitesListChangedListener, PasswordManagerImpl} from './password_manager_proxy.js';
@@ -19,7 +18,7 @@
 export interface SettingsSectionElement {
   $: {
     autosigninToggle: PrefToggleButtonElement,
-    blockedSitesList: IronListElement,
+    blockedSitesList: HTMLElement,
     passwordToggle: PrefToggleButtonElement,
   };
 }
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_devices_subpage.js b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_devices_subpage.js
index 9b924f89..06e538f3 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_devices_subpage.js
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_devices_subpage.js
@@ -194,9 +194,6 @@
 
   /** @private */
   onSystemPropertiesChanged_() {
-    if (this.isToggleDisabled_()) {
-      return;
-    }
     this.isBluetoothToggleOn_ =
         this.systemProperties.systemState === BluetoothSystemState.kEnabled ||
         this.systemProperties.systemState === BluetoothSystemState.kEnabling;
@@ -250,8 +247,13 @@
     if (oldValue === undefined) {
       return;
     }
-    getBluetoothConfig().setBluetoothEnabledState(this.isBluetoothToggleOn_);
-    this.annouceBluetoothStateChange_();
+    // If the toggle value changed but the toggle is disabled, the change came
+    // from CrosBluetoothConfig, not the user. Don't attempt to update the
+    // enabled state.
+    if (!this.isToggleDisabled_()) {
+      getBluetoothConfig().setBluetoothEnabledState(this.isBluetoothToggleOn_);
+    }
+    this.announceBluetoothStateChange_();
   }
 
   /**
@@ -295,7 +297,7 @@
   }
 
   /** @private */
-  annouceBluetoothStateChange_() {
+  announceBluetoothStateChange_() {
     getAnnouncerInstance().announce(
         this.isBluetoothToggleOn_ ? this.i18n('bluetoothEnabledA11YLabel') :
                                     this.i18n('bluetoothDisabledA11YLabel'));
diff --git a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service_factory.cc b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service_factory.cc
index b1d23231..cc2912b 100644
--- a/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service_factory.cc
+++ b/chrome/browser/safe_browsing/extension_telemetry/extension_telemetry_service_factory.cc
@@ -42,6 +42,7 @@
 ExtensionTelemetryServiceFactory::ExtensionTelemetryServiceFactory()
     : ProfileKeyedServiceFactory("ExtensionTelemetryService",
                                  ProfileSelections::BuildForRegularProfile()) {
+  DependsOn(NetworkContextServiceFactory::GetInstance());
   DependsOn(extensions::ExtensionPrefsFactory::GetInstance());
   DependsOn(extensions::ExtensionRegistryFactory::GetInstance());
   DependsOn(extensions::ExtensionManagementFactory::GetInstance());
diff --git a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc
index 5ee0e70..0da24e78 100644
--- a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc
+++ b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc
@@ -64,8 +64,7 @@
   profile->GetPrefs()->SetBoolean(
       prefs::kAccountTailoredSecurityShownNotification, true);
 
-  if (base::Time::Now() - previous_update <=
-      base::Minutes(kThresholdForInFlowNotificationMinutes)) {
+  if (base::Time::Now() - previous_update <= kThresholdForInFlowNotification) {
 #if BUILDFLAG(IS_ANDROID)
     message_ = std::make_unique<TailoredSecurityUnconsentedMessageAndroid>(
         web_contents(),
diff --git a/chrome/browser/signin/identity_manager_factory.cc b/chrome/browser/signin/identity_manager_factory.cc
index a867e0d..ff1d5b9 100644
--- a/chrome/browser/signin/identity_manager_factory.cc
+++ b/chrome/browser/signin/identity_manager_factory.cc
@@ -71,6 +71,8 @@
       base::BindRepeating([](content::BrowserContext* context) {
         return GetForProfile(Profile::FromBrowserContext(context));
       }));
+  // TODO(crbug.com/1380593): This should declare a dependency to
+  // CookieSettingsFactory but this causes a hang for some reason.
 }
 
 IdentityManagerFactory::~IdentityManagerFactory() {
diff --git a/chrome/browser/ssl/ocsp_browsertest.cc b/chrome/browser/ssl/ocsp_browsertest.cc
index 3c5ab68e..69b12590 100644
--- a/chrome/browser/ssl/ocsp_browsertest.cc
+++ b/chrome/browser/ssl/ocsp_browsertest.cc
@@ -503,7 +503,8 @@
   EXPECT_TRUE(cert_status & net::CERT_STATUS_REV_CHECKING_ENABLED);
 }
 
-#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
+#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || \
+    BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_MAC)
 IN_PROC_BROWSER_TEST_F(OCSPBrowserTest, HardFailOnOCSPInvalid) {
   if (!ssl_test_util::SystemSupportsHardFailRevocationChecking()) {
     LOG(WARNING) << "Skipping test because system doesn't support hard fail "
@@ -706,6 +707,7 @@
   EXPECT_TRUE(cert_status & net::CERT_STATUS_REV_CHECKING_ENABLED);
 }
 #endif  // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
+        // || BUILDFLAG(IS_FUCHSIA) || BUILDFLAG(IS_MAC)
 
 using AIABrowserTest = OCSPBrowserTest;
 
diff --git a/chrome/browser/sync/session_sync_service_factory.cc b/chrome/browser/sync/session_sync_service_factory.cc
index fdc72c9..089aa5c 100644
--- a/chrome/browser/sync/session_sync_service_factory.cc
+++ b/chrome/browser/sync/session_sync_service_factory.cc
@@ -143,6 +143,7 @@
 
 SessionSyncServiceFactory::SessionSyncServiceFactory()
     : ProfileKeyedServiceFactory("SessionSyncService") {
+  DependsOn(DeviceInfoSyncServiceFactory::GetInstance());
   DependsOn(FaviconServiceFactory::GetInstance());
   DependsOn(HistoryServiceFactory::GetInstance());
   DependsOn(ModelTypeStoreServiceFactory::GetInstance());
diff --git a/chrome/browser/sync/test/integration/password_manager_sync_test.cc b/chrome/browser/sync/test/integration/password_manager_sync_test.cc
index fadc5cab..3addec7c 100644
--- a/chrome/browser/sync/test/integration/password_manager_sync_test.cc
+++ b/chrome/browser/sync/test/integration/password_manager_sync_test.cc
@@ -917,17 +917,11 @@
   EXPECT_EQ(password_manager_util::GetPasswordSyncState(GetSyncService(0)),
             password_manager::SyncState::kSyncingNormalEncryption);
 
-  // Enter a persistent auth error state (web signout).
+  // Enter a persistent auth error state.
   GetClient(0)->EnterSyncPausedStateForPrimaryAccount();
-  ASSERT_EQ(GetSyncService(0)->GetAuthError(),
-            GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
-                GoogleServiceAuthError::InvalidGaiaCredentialsReason::
-                    CREDENTIALS_REJECTED_BY_CLIENT));
 
-  // Passwords are not sync-ing actively while sync is paused due to a web
-  // signout. Note that this is not the case for other persistent auth errors.
-  // TODO(crbug.com/1156584): Update comments when the logic gets unified for
-  // all persistent auth errors.
+  // Passwords are not sync-ing actively while sync is paused (any persistent
+  // auth error).
   EXPECT_FALSE(
       password_manager::sync_util::IsPasswordSyncActive(GetSyncService(0)));
   EXPECT_EQ(password_manager_util::GetPasswordSyncState(GetSyncService(0)),
diff --git a/chrome/browser/sync/test/integration/sync_auth_test.cc b/chrome/browser/sync/test/integration/sync_auth_test.cc
index e533c20..300403fb 100644
--- a/chrome/browser/sync/test/integration/sync_auth_test.cc
+++ b/chrome/browser/sync/test/integration/sync_auth_test.cc
@@ -63,19 +63,26 @@
 // Waits until local changes are committed or an auth error is encountered.
 class TestForAuthError : public UpdatedProgressMarkerChecker {
  public:
+  static bool HasAuthError(syncer::SyncService* service) {
+    // Note that depending on the nature of the auth error, sync may become
+    // paused (for persistent auth errors) or in some other cases transient
+    // errors may be surfaced via GetSyncTokenStatusForDebugging() (e.g. 401
+    // HTTP status codes returned by the Sync server when the access token has
+    // expired).
+    return service->GetTransportState() ==
+               syncer::SyncService::TransportState::PAUSED ||
+           service->GetSyncTokenStatusForDebugging()
+                   .last_get_token_error.state() !=
+               GoogleServiceAuthError::NONE;
+  }
+
   explicit TestForAuthError(syncer::SyncServiceImpl* service)
       : UpdatedProgressMarkerChecker(service) {}
 
   // StatusChangeChecker implementation.
   bool IsExitConditionSatisfied(std::ostream* os) override {
     *os << "Waiting for auth error";
-    // Note: This is quite fragile. It relies on Sync trying to fetch a new
-    // access token, even though it might already be in a persistent auth error
-    // state.
-    return (service()
-                ->GetSyncTokenStatusForDebugging()
-                .last_get_token_error.state() !=
-            GoogleServiceAuthError::NONE) ||
+    return HasAuthError(service()) ||
            UpdatedProgressMarkerChecker::IsExitConditionSatisfied(os);
   }
 };
@@ -113,12 +120,7 @@
 
     // Run until the bookmark is committed or an auth error is encountered.
     TestForAuthError(GetSyncService(0)).Wait();
-
-    GoogleServiceAuthError oauth_error = GetSyncService(0)
-                                             ->GetSyncTokenStatusForDebugging()
-                                             .last_get_token_error;
-
-    return oauth_error.state() != GoogleServiceAuthError::NONE;
+    return TestForAuthError::HasAuthError(GetSyncService(0));
   }
 
   void DisableTokenFetchRetries() {
@@ -220,15 +222,16 @@
                          net::OK);
   ASSERT_TRUE(AttemptToTriggerAuthError());
   EXPECT_EQ(GetSyncService(0)->GetTransportState(),
-            syncer::SyncService::TransportState::ACTIVE);
+            syncer::SyncService::TransportState::PAUSED);
   EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS,
             GetSyncService(0)->GetAuthError().state());
+  EXPECT_FALSE(GetSyncService(0)->IsRetryingAccessTokenFetchForTest());
 }
 
-// Verify that SyncServiceImpl retries after SERVICE_ERROR auth error when
-// an invalid_client error is returned by the access token fetcher with an
+// Verify that SyncServiceImpl does not retry after SERVICE_ERROR auth error
+// when an invalid_client error is returned by the access token fetcher with an
 // HTTP_BAD_REQUEST (400) response code.
-IN_PROC_BROWSER_TEST_F(SyncAuthTest, RetryInvalidClient) {
+IN_PROC_BROWSER_TEST_F(SyncAuthTest, InvalidClient) {
   ASSERT_TRUE(SetupSync());
   ASSERT_FALSE(AttemptToTriggerAuthError());
   GetFakeServer()->SetHttpError(net::HTTP_UNAUTHORIZED);
@@ -237,8 +240,10 @@
                          net::OK);
   ASSERT_TRUE(AttemptToTriggerAuthError());
   EXPECT_EQ(GetSyncService(0)->GetTransportState(),
-            syncer::SyncService::TransportState::ACTIVE);
-  EXPECT_TRUE(GetSyncService(0)->IsRetryingAccessTokenFetchForTest());
+            syncer::SyncService::TransportState::PAUSED);
+  EXPECT_EQ(GoogleServiceAuthError::SERVICE_ERROR,
+            GetSyncService(0)->GetAuthError().state());
+  EXPECT_FALSE(GetSyncService(0)->IsRetryingAccessTokenFetchForTest());
 }
 
 // Verify that SyncServiceImpl retries after REQUEST_CANCELED auth error
@@ -270,7 +275,7 @@
   ASSERT_FALSE(GetClient(0)->SetupSync());
   EXPECT_FALSE(GetSyncService(0)->IsSyncFeatureActive());
   EXPECT_EQ(GetSyncService(0)->GetTransportState(),
-            syncer::SyncService::TransportState::INITIALIZING);
+            syncer::SyncService::TransportState::PAUSED);
   EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS,
             GetSyncService(0)->GetAuthError().state());
 }
diff --git a/chrome/browser/themes/theme_service_browsertest.cc b/chrome/browser/themes/theme_service_browsertest.cc
index 617857a..b60da31 100644
--- a/chrome/browser/themes/theme_service_browsertest.cc
+++ b/chrome/browser/themes/theme_service_browsertest.cc
@@ -185,8 +185,11 @@
 
   {
     test::ThemeServiceChangedWaiter waiter(theme_service);
-    InstallExtension(
-        test_data_dir_.AppendASCII("theme_test_toolbar_button_tint/"), 1);
+    // ThemeService::OnThemeBuiltFromExtension will disable the previous
+    // theme, thus the sum of enabled extensions remains unchanged even
+    // though this extension got successfully installed.
+    EXPECT_TRUE(InstallExtension(
+        test_data_dir_.AppendASCII("theme_test_toolbar_button_tint/"), 0));
     waiter.WaitForThemeChanged();
   }
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 210f67ca..5dd7ff9 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -4263,6 +4263,8 @@
       "views/autofill/address_editor_view.h",
       "views/autofill/autofill_bubble_handler_impl.cc",
       "views/autofill/autofill_bubble_handler_impl.h",
+      "views/autofill/autofill_bubble_utils.cc",
+      "views/autofill/autofill_bubble_utils.h",
       "views/autofill/autofill_popup_base_view.cc",
       "views/autofill/autofill_popup_base_view.h",
       "views/autofill/autofill_popup_view_native_views.cc",
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
index 025f0fc53..365de416 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_af.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Alle data wat deur werwe geberg is, insluitend webkoekies en ander data wat plaaslik gestoor is</translation>
 <translation id="4678082183394354975">Donkertema vir werwe is aan in Chrome</translation>
 <translation id="4684427112815847243">Sinkroniseer alles</translation>
+<translation id="4685741273709472646">Kies op die aftreklys</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" /> \u2026 en nog <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" /> \u2026 en nog <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">Gekaste prente en lêers</translation>
 <translation id="4719927025381752090">Aanbieding om te vertaal</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
index 23788d2b..6f4567d 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Всички данни, съхранявани от сайтове, включително „бисквитки“ и друга локално съхранявана информация</translation>
 <translation id="4678082183394354975">Тъмната тема за сайтовете е включена в Chrome</translation>
 <translation id="4684427112815847243">Синхронизиране на всичко</translation>
+<translation id="4685741273709472646">Избиране от падащия списък</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и още <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">Кеширани изображения и файлове</translation>
 <translation id="4719927025381752090">Предложения за превод</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index 6de6ad2..4c58233 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Svi podaci koje pohranjuju web lokacije, uključujući kolačiće i druge podatke koji se lokalno pohranjuju</translation>
 <translation id="4678082183394354975">Tamna tema za web lokacije je omogućena na Chromeu</translation>
 <translation id="4684427112815847243">Sinhroniziranje svega</translation>
+<translation id="4685741273709472646">Odaberite na padajućem popisu</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">Slike i fajlovi u keš memoriji</translation>
 <translation id="4719927025381752090">Ponudi prijevod</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
index 9984c5f8..afd3c12 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Totes les dades que emmagatzemen els llocs web, com ara les galetes i altres dades emmagatzemades localment</translation>
 <translation id="4678082183394354975">El tema fosc per als llocs web està activat a Chrome</translation>
 <translation id="4684427112815847243">Sincronitza-ho tot</translation>
+<translation id="4685741273709472646">Selecciona una opció de la llista desplegable</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> més}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> més}}</translation>
 <translation id="4699172675775169585">Imatges i fitxers desats a la memòria cau</translation>
 <translation id="4719927025381752090">Proposa traduir aquest idioma</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
index dc24b63..aa8d6b5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr-CA.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Toutes les données stockées par les sites, y compris les témoins et les autres données stockées localement</translation>
 <translation id="4678082183394354975">Le thème sombre pour les sites est activé dans Chrome</translation>
 <translation id="4684427112815847243">Tout synchroniser</translation>
+<translation id="4685741273709472646">Sélectionnez dans la liste du menu déroulant</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre option de livraison}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autre option de livraison}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 et <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> autres options de livraison}}</translation>
 <translation id="4699172675775169585">Images et fichiers dans la mémoire cache</translation>
 <translation id="4719927025381752090">Proposer une traduction</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
index 7706726..86c2c661 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">सभी तरह के डेटा को साइटों के हिसाब से सेव किया गया है. इसमें कुकी और स्थानीय रूप से सेव किया गया दूसरा डेटा भी शामिल है</translation>
 <translation id="4678082183394354975">Chrome में साइटों के लिए, गहरे रंग वाली थीम चालू है</translation>
 <translation id="4684427112815847243">सब कुछ सिंक करें</translation>
+<translation id="4685741273709472646">ड्रॉपडाउन सूची में से चुनें</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 और <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> अन्य}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 और <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> अन्य}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 और <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> अन्य}}</translation>
 <translation id="4699172675775169585">कैश इमेज और फ़ाइलें</translation>
 <translation id="4719927025381752090">अनुवाद करना ऑफ़र करें</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
index 051681e..38b65ed 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Svi podaci koje su pohranile web-lokacije, uključujući kolačiće i druge lokalno pohranjene podatke</translation>
 <translation id="4678082183394354975">Tamna tema za web-lokacije uključena je u Chromeu</translation>
 <translation id="4684427112815847243">Sinkroniziraj sve</translation>
+<translation id="4685741273709472646">Odaberite na padajućem popisu</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">Predmemorirane slike i datoteke</translation>
 <translation id="4719927025381752090">Ponudi prijevod</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
index 3872457..c3eabcde 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Öll gögn sem vefsvæði geyma, þar á meðal fótspor og önnur gögn sem eru vistuð í tækinu</translation>
 <translation id="4678082183394354975">Kveikt er á dökku þema fyrir vefsvæði í Chrome</translation>
 <translation id="4684427112815847243">Samstilla allt</translation>
+<translation id="4685741273709472646">Velja af fellilistanum</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> í viðbót}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> í viðbót}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> í viðbót}}</translation>
 <translation id="4699172675775169585">Myndir og skrár í skyndiminni</translation>
 <translation id="4719927025381752090">Boð um þýðingu</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index 31e02f8..2472e8c 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -1375,6 +1375,7 @@
 <translation id="8387617938027387193">אימות הזהות שלך</translation>
 <translation id="8393700583063109961">שליחת הודעה</translation>
 <translation id="8394720698884623075">‏המערכת בודקת כתובות URL בעזרת רשימה של אתרים לא בטוחים ששמורה ב-Chrome</translation>
+<translation id="8402673309244746971">מעבר אל הפיד 'במעקב'</translation>
 <translation id="8410695015584479363">מעקב אחר מחירים</translation>
 <translation id="8413126021676339697">להצגת ההיסטוריה המלאה</translation>
 <translation id="8414396119627470038">כניסה אל <ph name="SITE_ETLD_PLUS_ONE" /> באמצעות <ph name="IDENTITY_PROVIDER_ETLD_PLUS_ONE" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
index ed5d7bd1..d8b9943 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -659,6 +659,7 @@
 <translation id="4668347365065281350">ಕುಕೀಗಳು ಮತ್ತು ಸ್ಥಳೀಯವಾಗಿ ಸಂಗ್ರಹಣೆ ಮಾಡಲಾಗಿರುವ ಡೇಟಾ ಸೇರಿದ ಹಾಗೆ, ಸೈಟ್‌ಗಳು ಸಂಗ್ರಹಣೆ ಮಾಡಿರುವ ಎಲ್ಲಾ ಡೇಟಾ</translation>
 <translation id="4678082183394354975">ಸೈಟ್‌ಗಳಿಗಾಗಿ ಡಾರ್ಕ್ ಥೀಮ್ ಅನ್ನು Chrome ನಲ್ಲಿ ಆನ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="4684427112815847243">ಪ್ರತಿಯೊಂದನ್ನು ಸಿಂಕ್ ಮಾಡಿ</translation>
+<translation id="4685741273709472646">ಡ್ರಾಪ್‌ಡೌನ್ ಪಟ್ಟಿಯಿಂದ ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ಮತ್ತು ಇನ್ನೂ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ಮತ್ತು ಇನ್ನೂ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 ಮತ್ತು ಇನ್ನೂ <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ಚಿತ್ರಗಳು ಮತ್ತು ಫೈಲ್‌ಗಳು</translation>
 <translation id="4719927025381752090">ಅನುವಾದಿಸಲು ಅವಕಾಶಿಸಿ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
index 95ebc18..67d1808 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Semua data yang disimpan oleh tapak, termasuk kuki dan data lain yang disimpan setempat</translation>
 <translation id="4678082183394354975">Tema gelap untuk laman dihidupkan dalam Chrome</translation>
 <translation id="4684427112815847243">Segerakkan semua</translation>
+<translation id="4685741273709472646">Pilih daripada senarai lungsur</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lagi}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 dan <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> lagi}}</translation>
 <translation id="4699172675775169585">Imej dan fail dicache</translation>
 <translation id="4719927025381752090">Tawaran untuk menterjemah</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index 3e29c83..ead7228 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">ကွတ်ကီးများနှင့် စက်အတွင်း သိမ်းထားသော အခြားဒေတာအပါအဝင် ဝဘ်ဆိုက်များက သိမ်းထားသည့်ဒေတာအားလုံး</translation>
 <translation id="4678082183394354975">ဝဘ်ဆိုက်များအတွက် အမှောင်နောက်ခံကို Chrome တွင် ဖွင့်ထားသည်</translation>
 <translation id="4684427112815847243">အားလုံး စင့်ခ်ရန်</translation>
+<translation id="4685741273709472646">ဆွဲချမီနူးစာရင်းမှ ရွေးချယ်နိုင်သည်</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ခု}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ခု}}</translation>
 <translation id="4699172675775169585">ကက်ရှ်လုပ်ထားသည့် ပုံများနှင့် ဖိုင်များ</translation>
 <translation id="4719927025381752090">ဘာသာပြန်ရန် ပေးအပ်ချက်</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index 45847a1..5bccdb84 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Alle data som er lagret av nettsteder, inkludert informasjonskapsler og andre lokalt lagrede data</translation>
 <translation id="4678082183394354975">Mørkt tema for nettsteder er påslått i Chrome</translation>
 <translation id="4684427112815847243">Synkroniser alt</translation>
+<translation id="4685741273709472646">Velg fra rullegardinlisten</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> til}other{<ph name="SHIPPING_OPTION_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> til}}</translation>
 <translation id="4699172675775169585">Bufrede bilder og filer</translation>
 <translation id="4719927025381752090">Tilby å oversette</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index 02d7b15..7590068 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -661,6 +661,7 @@
 <translation id="4668347365065281350">Todos os dados armazenados por sites, incluindo cookies e outros dados armazenados localmente</translation>
 <translation id="4678082183394354975">O tema escuro para sites está ativado no Chrome</translation>
 <translation id="4684427112815847243">Sincronizar tudo</translation>
+<translation id="4685741273709472646">Selecione na lista suspensa</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 e mais <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">Imagens e arquivos armazenados em cache</translation>
 <translation id="4719927025381752090">Oferecer para traduzir</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
index f1ed1fa..2412fe61 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Všetky dáta ukladané webmi vrátane súborov cookie a ďalších miestne uložených údajov</translation>
 <translation id="4678082183394354975">Tmavý motív pre weby je v Chrome zapnutý</translation>
 <translation id="4684427112815847243">Synchronizovať všetko</translation>
+<translation id="4685741273709472646">Vybrať z rozbaľovacieho zoznamu</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalšia}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalšie}many{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalšej}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 a <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ďalších}}</translation>
 <translation id="4699172675775169585">Obrázky a súbory vo vyrovnávacej pamäti</translation>
 <translation id="4719927025381752090">Ponúkať preklad</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index e9142515..40b47c7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Svi podaci koje čuvaju sajtovi, uključujući kolačiće i druge lokalno sačuvane podatke</translation>
 <translation id="4678082183394354975">Tamna tema za sajtove je uključena u Chrome-u</translation>
 <translation id="4684427112815847243">Sinhronizuj sve</translation>
+<translation id="4685741273709472646">Izaberite sa padajuće liste</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">Keširane slike i fajlovi</translation>
 <translation id="4719927025381752090">Ponudi prevod</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index 2e860be..87a8b71 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Сви подаци које чувају сајтови, укључујући колачиће и друге локално сачуване податке</translation>
 <translation id="4678082183394354975">Тамна тема за сајтове је укључена у Chrome-у</translation>
 <translation id="4684427112815847243">Синхронизуј све</translation>
+<translation id="4685741273709472646">Изаберите са падајуће листе</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}few{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" />}}</translation>
 <translation id="4699172675775169585">Кеширане слике и фајлови</translation>
 <translation id="4719927025381752090">Понуди превод</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
index 185dc0f..fcfc31c0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Saytlar joylagan maʼlumotlar, shuningdek, cookie va qurimaga joylangan boshqa maʼlumotlar</translation>
 <translation id="4678082183394354975">Chrome brauzerida bu saytlar uchun tungi mavzu yoniq</translation>
 <translation id="4684427112815847243">Hamma narsa sinxronlansin</translation>
+<translation id="4685741273709472646">Pastga ochiluvchi roʻyxatdan tanlang</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 va yana <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ta}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 va yana <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ta}}</translation>
 <translation id="4699172675775169585">Keshda saqlangan tavsirlar va boshqa fayllar</translation>
 <translation id="4719927025381752090">Tarjima qilishni taklif qilish</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index 9599011..6f9f906 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">网站存储的所有数据,包括 Cookie 及其他本地存储的数据</translation>
 <translation id="4678082183394354975">Chrome 中已为网站开启深色主题</translation>
 <translation id="4684427112815847243">同步所有数据类型</translation>
+<translation id="4685741273709472646">从下拉列表中选择</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026以及另外 <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> 种送货方式}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026以及另外 <ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> 种送货方式}}</translation>
 <translation id="4699172675775169585">缓存的图片和文件</translation>
 <translation id="4719927025381752090">提供翻译</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
index fbdc561..6e801b6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -660,6 +660,7 @@
 <translation id="4668347365065281350">Yonke idatha egcinwe amasayithi, okufaka phakathi amakhukhi nenye idatha egcinwe endaweni</translation>
 <translation id="4678082183394354975">Itimu emnyama yamasayithi ivuliwe ku-Chrome</translation>
 <translation id="4684427112815847243">Vumelanisa yonke into</translation>
+<translation id="4685741273709472646">Khetha ohlwini lokwehlayo</translation>
 <translation id="4695891336199304370">{SHIPPING_OPTIONS,plural, =1{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 nokungu-<ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ngaphezulu}one{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 nokungu-<ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ngaphezulu}other{<ph name="SHIPPING_OPTION_PREVIEW" />\u2026 nokungu-<ph name="NUMBER_OF_ADDITIONAL_SHIPPING_OPTIONS" /> ngaphezulu}}</translation>
 <translation id="4699172675775169585">Izithombe ezifakwe kunqolobane namafayela</translation>
 <translation id="4719927025381752090">Nika ukuhumusha</translation>
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarFeatures.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarFeatures.java
index 287e5b4d..666fb807 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarFeatures.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/ToolbarFeatures.java
@@ -15,6 +15,8 @@
     // to the original ablation and controls.
     private static final String ALLOW_CAPTURES = "allow_captures";
 
+    private static Boolean sSuppressionEnabled;
+
     /** Private constructor to avoid instantiation. */
     private ToolbarFeatures() {}
 
@@ -34,4 +36,23 @@
         return !ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean(
                 ChromeFeatureList.TOOLBAR_SCROLL_ABLATION_ANDROID, ALLOW_CAPTURES, false);
     }
+
+    public static boolean shouldSuppressCaptures() {
+        if (Boolean.TRUE.equals(sSuppressionEnabled)) return true;
+        if (Boolean.FALSE.equals(sSuppressionEnabled)) return false;
+        if (!FeatureList.isInitialized()) return false;
+        if (FeatureList.hasTestFeature(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+            // Don't cache if the feature value is test-configured since it can change during the
+            // process lifetime.
+            return ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES);
+        }
+
+        if (FeatureList.isNativeInitialized()) {
+            sSuppressionEnabled =
+                    ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES);
+            return sSuppressionEnabled;
+        }
+
+        return false;
+    }
 }
\ No newline at end of file
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewResourceFrameLayout.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewResourceFrameLayout.java
index 406effff..3ccbeb5 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewResourceFrameLayout.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/bottom/ScrollingBottomViewResourceFrameLayout.java
@@ -16,7 +16,6 @@
 
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.supplier.ObservableSupplier;
-import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.chrome.browser.toolbar.ConstraintsChecker;
 import org.chromium.chrome.browser.toolbar.R;
 import org.chromium.chrome.browser.toolbar.ToolbarCaptureType;
@@ -55,7 +54,7 @@
                     return false;
                 }
 
-                if (ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+                if (ToolbarFeatures.shouldSuppressCaptures()) {
                     // Dirty rect tracking will claim changes more often than token differences due
                     // to model changes. It is also cheaper to simply check a boolean, so do it
                     // first.
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
index eb5143b9..995706e 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
@@ -22,7 +22,6 @@
 import androidx.appcompat.content.res.AppCompatResources;
 
 import org.chromium.base.Callback;
-import org.chromium.base.FeatureList;
 import org.chromium.base.TraceEvent;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.supplier.BooleanSupplier;
@@ -35,6 +34,7 @@
 import org.chromium.chrome.browser.toolbar.ControlContainer;
 import org.chromium.chrome.browser.toolbar.R;
 import org.chromium.chrome.browser.toolbar.ToolbarCaptureType;
+import org.chromium.chrome.browser.toolbar.ToolbarFeatures;
 import org.chromium.chrome.browser.toolbar.ToolbarProgressBar;
 import org.chromium.chrome.browser.toolbar.top.CaptureReadinessResult.TopToolbarBlockCaptureReason;
 import org.chromium.components.browser_ui.styles.ChromeColors;
@@ -309,8 +309,7 @@
                 return false;
             }
 
-            if (FeatureList.isInitialized()
-                    && ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+            if (ToolbarFeatures.shouldSuppressCaptures()) {
                 if (mConstraintsObserver != null && mTabSupplier != null) {
                     Tab tab = mTabSupplier.get();
 
@@ -407,9 +406,7 @@
         }
 
         private void onCompositorInMotionChange(Boolean compositorInMotion) {
-            boolean useSuppression = (FeatureList.isInitialized()
-                    && ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES));
-            if (!useSuppression || mToolbar == null
+            if (!ToolbarFeatures.shouldSuppressCaptures() || mToolbar == null
                     || mBrowserStateBrowserControlsVisibilityDelegate == null
                     || mControlContainerIsVisibleSupplier == null) {
                 return;
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
index 469c5c66..dbdff0d 100644
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -1561,7 +1561,7 @@
             return CaptureReadinessResult.notReady(TopToolbarBlockCaptureReason.SCROLL_ABLATION);
         } else if (mForceTextureCapture) {
             return CaptureReadinessResult.readyForced();
-        } else if (ChromeFeatureList.isEnabled(ChromeFeatureList.SUPPRESS_TOOLBAR_CAPTURES)) {
+        } else if (ToolbarFeatures.shouldSuppressCaptures()) {
             return getReadinessStateWithSuppression();
         } else {
             return CaptureReadinessResult.unknown(!(urlHasFocus() || mUrlFocusChangeInProgress));
diff --git a/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm b/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
index 850d3508..8321828c 100644
--- a/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
+++ b/chrome/browser/ui/cocoa/keystone_infobar_delegate.mm
@@ -10,6 +10,7 @@
 
 #include "base/bind.h"
 #include "base/command_line.h"
+#include "base/feature_list.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/first_run/first_run.h"
 #include "chrome/browser/infobars/confirm_infobar_creator.h"
@@ -18,6 +19,8 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/browser/updater/browser_updater_client_util.h"
+#include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/grit/chromium_strings.h"
@@ -88,7 +91,11 @@
 }
 
 bool KeystonePromotionInfoBarDelegate::Accept() {
-  [[KeystoneGlue defaultKeystoneGlue] promoteTicket];
+  if (base::FeatureList::IsEnabled(features::kUseChromiumUpdater)) {
+    SetupSystemUpdater();
+  } else {
+    [[KeystoneGlue defaultKeystoneGlue] promoteTicket];
+  }
   return true;
 }
 
@@ -135,20 +142,33 @@
     return;
   }
 
-  // Stay alive as long as needed.  This is balanced by a release in
-  // -updateStatus:.
-  [self retain];
-
-  AutoupdateStatus recentStatus = [keystoneGlue recentStatus];
-  if (recentStatus == kAutoupdateNone ||
-      recentStatus == kAutoupdateRegistering) {
-    NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
-    [center addObserver:self
-               selector:@selector(updateStatus:)
-                   name:kAutoupdateStatusNotification
-                 object:nil];
+  if (base::FeatureList::IsEnabled(features::kUseChromiumUpdater)) {
+    EnsureUpdater(base::BindOnce([]() {
+                    Browser* browser = chrome::GetLastActiveBrowser();
+                    if (browser) {
+                      content::WebContents* webContents =
+                          browser->tab_strip_model()->GetActiveWebContents();
+                      if (webContents)
+                        KeystonePromotionInfoBarDelegate::Create(webContents);
+                    }
+                  }),
+                  base::DoNothing());
   } else {
-    [self updateStatus:[keystoneGlue recentNotification]];
+    // Stay alive as long as needed.  This is balanced by a release in
+    // -updateStatus:.
+    [self retain];
+
+    AutoupdateStatus recentStatus = [keystoneGlue recentStatus];
+    if (recentStatus == kAutoupdateNone ||
+        recentStatus == kAutoupdateRegistering) {
+      NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
+      [center addObserver:self
+                 selector:@selector(updateStatus:)
+                     name:kAutoupdateStatusNotification
+                   object:nil];
+    } else {
+      [self updateStatus:[keystoneGlue recentNotification]];
+    }
   }
 }
 
diff --git a/chrome/browser/ui/color/tools/dump_colors.cc b/chrome/browser/ui/color/tools/dump_colors.cc
index 63f79c4f..73282a0 100644
--- a/chrome/browser/ui/color/tools/dump_colors.cc
+++ b/chrome/browser/ui/color/tools/dump_colors.cc
@@ -53,6 +53,7 @@
         ui::ColorProviderManager::FrameType::kChromium};
     ui::AddColorMixers(provider, key);
     AddChromeColorMixers(provider, key);
+    provider->GenerateColorMap();
   };
   ui::ColorProvider light_provider, dark_provider, light_high_contrast_provider,
       dark_high_contrast_provider;
diff --git a/chrome/browser/ui/tab_contents/core_tab_helper.cc b/chrome/browser/ui/tab_contents/core_tab_helper.cc
index aaaf7d7..dd957bb 100644
--- a/chrome/browser/ui/tab_contents/core_tab_helper.cc
+++ b/chrome/browser/ui/tab_contents/core_tab_helper.cc
@@ -42,6 +42,8 @@
 #include "net/http/http_request_headers.h"
 #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/codec/jpeg_codec.h"
+#include "ui/gfx/codec/webp_codec.h"
 
 #if BUILDFLAG(IS_ANDROID)
 #include "chrome/browser/android/tab_android.h"
@@ -189,14 +191,29 @@
   TemplateURLRef::SearchTermsArgs search_args =
       TemplateURLRef::SearchTermsArgs(std::u16string());
 
-  // Get the front and end of the image bytes in order to store them in the
-  // search_args to be sent as part of the PostContent in the request.
-  size_t image_bytes_size = image.As1xPNGBytes()->size();
-  const unsigned char* image_bytes_begin = image.As1xPNGBytes()->front();
-  const unsigned char* image_bytes_end = image_bytes_begin + image_bytes_size;
+  std::vector<unsigned char> data;
+  if (lens::features::IsWebpForRegionSearchEnabled() &&
+      gfx::WebpCodec::Encode(image.AsBitmap(),
+                             lens::features::GetRegionSearchEncodingQuality(),
+                             &data)) {
+    search_args.image_thumbnail_content.assign(data.begin(), data.end());
+  } else if (lens::features::IsJpegForRegionSearchEnabled() &&
+             gfx::JPEGCodec::Encode(
+                 image.AsBitmap(),
+                 lens::features::GetRegionSearchEncodingQuality(), &data)) {
+    search_args.image_thumbnail_content.assign(data.begin(), data.end());
+  } else {
+    // If the WebP/JPEG encoding fails, fall back to PNG.
+    // Get the front and end of the image bytes in order to store them in the
+    // search_args to be sent as part of the PostContent in the request.
+    size_t image_bytes_size = image.As1xPNGBytes()->size();
+    const unsigned char* image_bytes_begin = image.As1xPNGBytes()->front();
+    const unsigned char* image_bytes_end = image_bytes_begin + image_bytes_size;
 
-  search_args.image_thumbnail_content.assign(image_bytes_begin,
-                                             image_bytes_end);
+    search_args.image_thumbnail_content.assign(image_bytes_begin,
+                                               image_bytes_end);
+  }
+
   search_args.image_original_size = image_original_size;
   search_args.additional_query_params = additional_query_params;
 
@@ -229,6 +246,7 @@
       thumbnail_min_size, gfx::Size(thumbnail_max_width, thumbnail_max_height),
       lens::features::GetSendImagesAsPng() ? chrome::mojom::ImageFormat::PNG
                                            : chrome::mojom::ImageFormat::JPEG,
+      chrome::mojom::kDefaultQuality,
       base::BindOnce(&CoreTabHelper::DoSearchByImage,
                      weak_factory_.GetWeakPtr(), std::move(chrome_render_frame),
                      src_url, additional_query_params, use_side_panel));
diff --git a/chrome/browser/ui/views/autofill/autofill_bubble_utils.cc b/chrome/browser/ui/views/autofill/autofill_bubble_utils.cc
new file mode 100644
index 0000000..1eb8463
--- /dev/null
+++ b/chrome/browser/ui/views/autofill/autofill_bubble_utils.cc
@@ -0,0 +1,36 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/autofill/autofill_bubble_utils.h"
+
+#include <memory>
+
+#include "chrome/app/vector_icons/vector_icons.h"
+#include "components/strings/grit/components_strings.h"
+#include "components/vector_icons/vector_icons.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/views/controls/button/button.h"
+#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/button/image_button_factory.h"
+#include "ui/views/controls/highlight_path_generator.h"
+
+namespace autofill {
+namespace {
+
+constexpr int kIconSize = 16;
+
+}
+std::unique_ptr<views::ImageButton> CreateEditButton(
+    views::Button::PressedCallback callback) {
+  std::unique_ptr<views::ImageButton> button =
+      views::CreateVectorImageButtonWithNativeTheme(
+          callback, vector_icons::kEditIcon, kIconSize);
+  button->SetAccessibleName(l10n_util::GetStringUTF16(
+      IDS_AUTOFILL_SAVE_ADDRESS_PROMPT_EDIT_BUTTON_TOOLTIP));
+  button->SetTooltipText(l10n_util::GetStringUTF16(
+      IDS_AUTOFILL_SAVE_ADDRESS_PROMPT_EDIT_BUTTON_TOOLTIP));
+  InstallCircleHighlightPathGenerator(button.get());
+  return button;
+}
+}  // namespace autofill
diff --git a/chrome/browser/ui/views/autofill/autofill_bubble_utils.h b/chrome/browser/ui/views/autofill/autofill_bubble_utils.h
new file mode 100644
index 0000000..c07e82cd
--- /dev/null
+++ b/chrome/browser/ui/views/autofill/autofill_bubble_utils.h
@@ -0,0 +1,21 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_BUBBLE_UTILS_H_
+#define CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_BUBBLE_UTILS_H_
+
+#include <memory>
+
+#include "ui/views/controls/button/button.h"
+#include "ui/views/controls/button/image_button.h"
+
+namespace autofill {
+
+// Instantiate and set up a standard "edit" button.
+std::unique_ptr<views::ImageButton> CreateEditButton(
+    views::Button::PressedCallback callback);
+
+}  // namespace autofill
+
+#endif  // CHROME_BROWSER_UI_VIEWS_AUTOFILL_AUTOFILL_BUBBLE_UTILS_H_
diff --git a/chrome/browser/ui/views/autofill/save_address_profile_view.cc b/chrome/browser/ui/views/autofill/save_address_profile_view.cc
index ff706837..51e3b2a 100644
--- a/chrome/browser/ui/views/autofill/save_address_profile_view.cc
+++ b/chrome/browser/ui/views/autofill/save_address_profile_view.cc
@@ -14,6 +14,7 @@
 #include "chrome/browser/ui/hats/hats_service.h"
 #include "chrome/browser/ui/hats/hats_service_factory.h"
 #include "chrome/browser/ui/views/accessibility/theme_tracking_non_accessible_image_view.h"
+#include "chrome/browser/ui/views/autofill/autofill_bubble_utils.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/autofill/core/browser/autofill_address_util.h"
@@ -248,15 +249,9 @@
           views::MinimumFlexSizeRule::kPreferredSnapToMinimum,
           views::MaximumFlexSizeRule::kUnbounded));
 
-  edit_button_ = AddChildView(views::CreateVectorImageButtonWithNativeTheme(
-      base::BindRepeating(
-          &SaveUpdateAddressProfileBubbleController::OnEditButtonClicked,
-          base::Unretained(controller_)),
-      vector_icons::kEditIcon, kIconSize));
-  edit_button_->SetAccessibleName(l10n_util::GetStringUTF16(
-      IDS_AUTOFILL_SAVE_ADDRESS_PROMPT_EDIT_BUTTON_TOOLTIP));
-  edit_button_->SetTooltipText(l10n_util::GetStringUTF16(
-      IDS_AUTOFILL_SAVE_ADDRESS_PROMPT_EDIT_BUTTON_TOOLTIP));
+  edit_button_ = AddChildView(CreateEditButton(base::BindRepeating(
+      &SaveUpdateAddressProfileBubbleController::OnEditButtonClicked,
+      base::Unretained(controller_))));
 
   address_components_view_
       ->SetLayoutManager(std::make_unique<views::FlexLayout>())
diff --git a/chrome/browser/ui/views/autofill/update_address_profile_view.cc b/chrome/browser/ui/views/autofill/update_address_profile_view.cc
index ba7ec56..c633b31 100644
--- a/chrome/browser/ui/views/autofill/update_address_profile_view.cc
+++ b/chrome/browser/ui/views/autofill/update_address_profile_view.cc
@@ -8,6 +8,7 @@
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/ui/autofill/save_update_address_profile_bubble_controller.h"
+#include "chrome/browser/ui/views/autofill/autofill_bubble_utils.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/grit/theme_resources.h"
 #include "components/autofill/core/browser/autofill_address_util.h"
@@ -122,14 +123,7 @@
   layout_view->AddChildView(CreateValuesView(diff, are_new_values, icon_color));
   if (are_new_values) {
     std::unique_ptr<views::ImageButton> edit_button =
-        views::CreateVectorImageButtonWithNativeTheme(
-            std::move(edit_button_callback), vector_icons::kEditIcon,
-            kIconSize);
-
-    edit_button->SetAccessibleName(l10n_util::GetStringUTF16(
-        IDS_AUTOFILL_SAVE_ADDRESS_PROMPT_EDIT_BUTTON_TOOLTIP));
-    edit_button->SetTooltipText(l10n_util::GetStringUTF16(
-        IDS_AUTOFILL_SAVE_ADDRESS_PROMPT_EDIT_BUTTON_TOOLTIP));
+        CreateEditButton(std::move(edit_button_callback));
     layout_view->AddChildView(std::move(edit_button));
   }
 }
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 e087a43..dcbb5589 100644
--- a/chrome/browser/ui/views/download/download_danger_prompt_views.cc
+++ b/chrome/browser/ui/views/download/download_danger_prompt_views.cc
@@ -277,7 +277,13 @@
             show_context_
                 ? ClientSafeBrowsingReportRequest::DANGEROUS_DOWNLOAD_BY_API
                 : ClientSafeBrowsingReportRequest::DANGEROUS_DOWNLOAD_RECOVERY;
-        SendSafeBrowsingDownloadReport(report_type, accept, download_);
+        // Do not send cancel report under the new trigger condition since it's
+        // not a terminal action.
+        if (!base::FeatureList::IsEnabled(
+                safe_browsing::kSafeBrowsingCsbrrNewDownloadTrigger) ||
+            accept) {
+          SendSafeBrowsingDownloadReport(report_type, accept, download_);
+        }
       }
     }
     download_->RemoveObserver(this);
diff --git a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
index 7348554..0a43923 100644
--- a/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
+++ b/chrome/browser/ui/views/drag_and_drop_interactive_uitest.cc
@@ -1568,12 +1568,15 @@
                    {"dragstart", "dragleave", "dragenter", "dragend"}));
 }
 
-// TODO(crbug.com/1052397): Revisit once build flag switch of lacros-chrome is
-// complete.
-#if BUILDFLAG(IS_WIN) || (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS))
 // There is no known way to execute test-controlled tasks during
 // a drag-and-drop loop run by Windows OS.
 // Also disable the test on Linux due to flaky: crbug.com/1164442
+// TODO(crbug.com/1052397): Revisit once build flag switch of lacros-chrome is
+// complete.
+// TODO(crbug.com/1380803): Enable on ChromeOS ASAN once flakiness is fixed.
+#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || \
+    BUILDFLAG(IS_CHROMEOS_LACROS) ||            \
+    (BUILDFLAG(IS_CHROMEOS) && defined(ADDRESS_SANITIZER))
 #define MAYBE_DragImageFromDisappearingFrame \
   DISABLED_DragImageFromDisappearingFrame
 #else
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc
index ec4db62..50725e5 100644
--- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc
+++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.cc
@@ -44,14 +44,18 @@
 }
 }  // namespace
 
-// TODO(crbug.com/1318000): Implement loading screen for AboutThisSite.
 constexpr char kStaticLoadingScreenURL[] =
-    "https://www.gstatic.com/lens/chrome/lens_side_panel_loading.html";
+    "https://www.gstatic.com/diner/chrome/atp_loading.html";
 
 AboutThisSiteSidePanelView::AboutThisSiteSidePanelView(
     BrowserView* browser_view) {
   browser_view_ = browser_view;
   auto* browser_context = browser_view->GetProfile();
+
+  // Allow view to be focusable in order to receive focus when side panel is
+  // opened.
+  SetFocusBehavior(FocusBehavior::ALWAYS);
+
   // Align views vertically top to bottom.
   SetOrientation(views::LayoutOrientation::kVertical);
   SetMainAxisAlignment(views::LayoutAlignment::kStart);
@@ -173,4 +177,9 @@
   loading_indicator_web_view_->SetVisible(!visible);
 }
 
+void AboutThisSiteSidePanelView::GetAccessibleNodeData(
+    ui::AXNodeData* node_data) {
+  return static_cast<View*>(web_view_)->GetAccessibleNodeData(node_data);
+}
+
 AboutThisSiteSidePanelView::~AboutThisSiteSidePanelView() = default;
diff --git a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h
index 0c41f5d..7600746b 100644
--- a/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h
+++ b/chrome/browser/ui/views/page_info/about_this_site_side_panel_view.h
@@ -39,6 +39,9 @@
 
   void OpenUrl(const content::OpenURLParams& params);
 
+  // views::View:
+  void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
+
  private:
   // Remove parameters that shouldn't be passed to the main browser.
   GURL CleanUpQueryParams(const GURL& url);
diff --git a/chrome/browser/ui/views/page_info/page_info_view_factory.cc b/chrome/browser/ui/views/page_info/page_info_view_factory.cc
index 6c6e8d1..8b47553 100644
--- a/chrome/browser/ui/views/page_info/page_info_view_factory.cc
+++ b/chrome/browser/ui/views/page_info/page_info_view_factory.cc
@@ -442,7 +442,6 @@
 
 // static
 const ui::ImageModel PageInfoViewFactory::GetAboutThisPageIcon() {
-  // TODO(crbug.com/1318000): Use globe icon.
   return ui::ImageModel::FromVectorIcon(views::kInfoIcon, ui::kColorIcon,
                                         GetIconSize());
 }
diff --git a/chrome/browser/ui/views/side_panel/side_panel_util.cc b/chrome/browser/ui/views/side_panel/side_panel_util.cc
index 99f6e58..c7f6157 100644
--- a/chrome/browser/ui/views/side_panel/side_panel_util.cc
+++ b/chrome/browser/ui/views/side_panel/side_panel_util.cc
@@ -8,6 +8,7 @@
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/strings/strcat.h"
+#include "chrome/browser/history_clusters/history_clusters_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/ui_features.h"
@@ -21,6 +22,7 @@
 #include "chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.h"
 #include "chrome/browser/ui/views/side_panel/webview/webview_side_panel_coordinator.h"
 #include "components/feed/feed_feature_list.h"
+#include "components/history_clusters/core/history_clusters_service.h"
 #include "components/user_notes/user_notes_features.h"
 #include "ui/accessibility/accessibility_features.h"
 
@@ -61,7 +63,11 @@
       ->CreateAndRegisterEntry(global_registry);
 
   // Add history clusters.
+  auto* history_clusters_service =
+      HistoryClustersServiceFactory::GetForBrowserContext(browser->profile());
   if (base::FeatureList::IsEnabled(features::kSidePanelJourneys) &&
+      history_clusters_service &&
+      history_clusters_service->IsJourneysEnabled() &&
       !browser->profile()->IsIncognitoProfile()) {
     HistoryClustersSidePanelCoordinator::GetOrCreateForBrowser(browser)
         ->CreateAndRegisterEntry(global_registry);
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
index a30133ee..ff9cb41b 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_browsertest_mac_win_linux.cc
@@ -82,7 +82,7 @@
   helper_.CheckWindowCreated();
 }
 
-IN_PROC_BROWSER_TEST_F(WebAppIntegration, CheckLaunchFileExpectNoDialog) {
+IN_PROC_BROWSER_TEST_F(WebAppIntegration, CheckLaunchFileExpectNoDialog_Allow) {
   helper_.InstallOmniboxIcon(InstallableSite::kFileHandler);
   helper_.ClosePwa();
   // Open the file and set AskAgainOption to kRemember.
@@ -96,6 +96,23 @@
   helper_.CheckWindowCreated();
 }
 
+IN_PROC_BROWSER_TEST_F(WebAppIntegration, CheckLaunchFileExpectNoDialog_Deny) {
+  helper_.InstallOmniboxIcon(InstallableSite::kFileHandler);
+  helper_.ClosePwa();
+  // Open the file and set AskAgainOption to kRemember.
+  helper_.LaunchFileExpectDialog(Site::kFileHandler, FilesOptions::kOneTextFile,
+                                 AllowDenyOptions::kDeny,
+                                 AskAgainOptions::kRemember);
+
+  // Open the file again.
+  helper_.LaunchFileExpectNoDialog(Site::kFileHandler,
+                                   FilesOptions::kOneTextFile);
+  // Despite previous denial, a new window should still have been created. The
+  // only difference with the Allow case is that no files would have been passed
+  // to the launched app.
+  helper_.CheckWindowCreated();
+}
+
 IN_PROC_BROWSER_TEST_F(WebAppIntegration, DisableEnableFileHandling) {
   helper_.InstallMenuOption(InstallableSite::kMinimalUi);
   helper_.CheckSiteHandlesFile(Site::kMinimalUi, "qux");
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
index ee404abf..e256855 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -152,6 +152,8 @@
 #include "chrome/browser/apps/app_shim/app_shim_manager_mac.h"
 #include "chrome/browser/shell_integration.h"
 #include "chrome/browser/web_applications/app_shim_registry_mac.h"
+#include "chrome/browser/web_applications/os_integration/web_app_shortcut_mac.h"
+#include "chrome/browser/web_applications/web_app_ui_manager.h"
 #include "net/base/filename_util.h"
 #include "skia/ext/skia_utils_mac.h"
 #endif
@@ -1203,16 +1205,9 @@
                                        "FileHandlerLaunchDialogView");
   FileHandlerLaunchDialogView::SetDefaultRememberSelectionForTesting(
       ask_again == AskAgainOptions::kRemember);
-  std::vector<base::FilePath> file_paths = GetTestFilePaths(files_options);
 
-  StartupBrowserCreator browser_creator;
-  base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
-  command_line.AppendSwitchASCII(switches::kAppId, app_id);
-  for (auto file_path : file_paths) {
-    command_line.AppendArgPath(file_path);
-  }
-  browser_creator.Start(command_line, profile()->GetPath(),
-                        {profile(), StartupProfileMode::kBrowserWindow}, {});
+  LaunchFile(site, files_options);
+
   BrowserAddedWaiter browser_added_waiter;
 
   // Check the file handling dialog shows up.
@@ -1247,27 +1242,18 @@
     FilesOptions files_options) {
   BeforeStateChangeAction(__FUNCTION__);
   AppId app_id = GetAppIdBySiteMode(site);
-  std::vector<base::FilePath> file_paths = GetTestFilePaths(files_options);
   BrowserAddedWaiter browser_added_waiter;
-  base::RunLoop run_loop;
+  LaunchFile(site, files_options);
 
-  web_app::startup::SetStartupDoneCallbackForTesting(run_loop.QuitClosure());
-  StartupBrowserCreator browser_creator;
-  base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
-  command_line.AppendSwitchASCII(switches::kAppId, app_id);
-  for (auto file_path : file_paths) {
-    command_line.AppendArgPath(file_path);
-  }
-  browser_creator.Start(command_line, profile()->GetPath(),
-                        {profile(), StartupProfileMode::kBrowserWindow}, {});
-  run_loop.Run();
+  // If the user previously denied access to open files with this app, a window
+  // is still opened for the app. The only difference is that no files would
+  // have been passed to the app. Either way, we should always wait for a
+  // browser to be added.
+  browser_added_waiter.Wait();
+  app_browser_ = browser_added_waiter.browser_added();
+  ActivateBrowserAndWait(app_browser_);
+  EXPECT_EQ(app_browser()->app_controller()->app_id(), app_id);
 
-  // if the web app doesn't deny to open the file, wait for the app window.
-  if (!base::Contains(site_remember_deny_open_file, site)) {
-    app_browser_ = browser_added_waiter.browser_added();
-    ActivateBrowserAndWait(app_browser_);
-    EXPECT_EQ(app_browser()->app_controller()->app_id(), app_id);
-  }
   AfterStateChangeAction();
 }
 
@@ -1277,7 +1263,7 @@
   AppId app_id = GetAppIdBySiteMode(site);
   ASSERT_TRUE(provider()->registrar().GetAppById(app_id))
       << "No app installed for site: " << static_cast<int>(site);
-  ;
+
   WebAppRegistrar& app_registrar = provider()->registrar();
   DisplayMode display_mode = app_registrar.GetAppEffectiveDisplayMode(app_id);
   if (display_mode == blink::mojom::DisplayMode::kBrowser) {
@@ -2672,12 +2658,14 @@
   DCHECK(executing_action_level_ > 0);
   --executing_action_level_;
 #if BUILDFLAG(IS_MAC)
+  std::map<AppId, size_t> open_browsers_per_app;
   for (auto* profile : GetAllProfiles()) {
     auto* provider = GetProviderForProfile(profile);
     if (!provider)
       continue;
     std::vector<AppId> app_ids = provider->registrar().GetAppIds();
     for (auto& app_id : app_ids) {
+      // Wait for any shims to finish connecting.
       auto* app_shim_manager = apps::AppShimManager::Get();
       AppShimHost* app_shim_host = app_shim_manager->FindHost(profile, app_id);
       if (app_shim_host && !app_shim_host->HasBootstrapConnected()) {
@@ -2685,8 +2673,23 @@
         app_shim_host->SetOnShimConnectedForTesting(loop.QuitClosure());
         loop.Run();
       }
+
+      // But also wait for any shims for apps that don't have any browsers open
+      // anymore to finish quitting, as otherwise attempting to launch them
+      // again too soon could fail.
+      open_browsers_per_app[app_id] +=
+          provider->ui_manager().GetNumWindowsForApp(app_id);
     }
   }
+  for (const auto& [app_id, open_browsers] : open_browsers_per_app) {
+    if (open_browsers != 0)
+      continue;
+    std::string app_name = provider()->registrar().GetAppShortName(app_id);
+    base::FilePath app_path = GetShortcutPath(
+        override_registration_->shortcut_override->chrome_apps_folder.GetPath(),
+        app_name, app_id);
+    WaitForShimToQuitForTesting(app_path, app_id);
+  }
 #endif
   if (delegate_->IsSyncTest())
     delegate_->AwaitWebAppQuiescence();
@@ -3199,6 +3202,42 @@
 #endif
 }
 
+void WebAppIntegrationTestDriver::LaunchFile(Site site,
+                                             FilesOptions files_options) {
+  AppId app_id = GetAppIdBySiteMode(site);
+  std::vector<base::FilePath> file_paths = GetTestFilePaths(files_options);
+#if BUILDFLAG(IS_MAC)
+  std::string app_name = GetSiteConfiguration(site).app_name;
+  base::FilePath app_path = GetShortcutPath(
+      override_registration_->shortcut_override->chrome_apps_folder.GetPath(),
+      app_name, app_id);
+
+  std::vector<GURL> urls;
+  urls.reserve(file_paths.size());
+  for (const base::FilePath& path : file_paths) {
+    urls.push_back(net::FilePathToFileURL(path));
+  }
+
+  base::RunLoop loop;
+  LaunchShimForTesting(
+      app_path, urls,
+      base::BindLambdaForTesting([&](base::Process process) { loop.Quit(); }),
+      base::DoNothing());
+  loop.Run();
+#else
+  StartupBrowserCreator browser_creator;
+  base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
+  command_line.AppendSwitchASCII(switches::kAppId, app_id);
+  command_line.AppendSwitchASCII(switches::kTestType, "browser");
+  for (auto file_path : file_paths) {
+    command_line.AppendArgPath(file_path);
+  }
+  browser_creator.Start(command_line, profile()->GetPath(),
+                        {profile(), StartupProfileMode::kBrowserWindow}, {});
+  content::RunAllTasksUntilIdle();
+#endif
+}
+
 void WebAppIntegrationTestDriver::SetRunOnOsLoginMode(
     Site site,
     apps::RunOnOsLoginMode login_mode) {
@@ -3213,6 +3252,10 @@
 
 void WebAppIntegrationTestDriver::LaunchAppStartupBrowserCreator(
     const AppId& app_id) {
+  // TODO(https://crbug.com/1232763): On Mac this should use logic similar to
+  // what is in LaunchFile, using LaunchShimForTesting. Actually making that
+  // change will also require updating all the tests that currently assert
+  // incorrect behavior following a launch.
   base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
   command_line.AppendSwitchASCII(switches::kAppId, app_id);
   command_line.AppendSwitchASCII(switches::kTestType, "browser");
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
index 4116d04..965416e 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.h
@@ -381,6 +381,7 @@
 
   bool IsFileHandledBySite(Site site, std::string file_extension);
   void SetFileHandlingEnabled(Site site, bool enabled);
+  void LaunchFile(Site site, FilesOptions files_options);
 
   void SetRunOnOsLoginMode(Site site, apps::RunOnOsLoginMode login_mode);
 
diff --git a/chrome/browser/ui/webui/ash/slow_trace_ui.h b/chrome/browser/ui/webui/ash/slow_trace_ui.h
index 70de0e5..b438b0f 100644
--- a/chrome/browser/ui/webui/ash/slow_trace_ui.h
+++ b/chrome/browser/ui/webui/ash/slow_trace_ui.h
@@ -7,8 +7,11 @@
 
 #include <string>
 
+#include "chrome/common/webui_url_constants.h"
 #include "content/public/browser/url_data_source.h"
 #include "content/public/browser/web_ui_controller.h"
+#include "content/public/browser/webui_config.h"
+#include "content/public/common/url_constants.h"
 #include "ui/base/layout.h"
 
 namespace base {
@@ -44,6 +47,17 @@
                       scoped_refptr<base::RefCountedString> trace_data);
 };
 
+class SlowTraceController;
+
+// WebUIConfig for chrome://slow_trace
+class SlowTraceControllerConfig
+    : public content::DefaultWebUIConfig<SlowTraceController> {
+ public:
+  SlowTraceControllerConfig()
+      : DefaultWebUIConfig(content::kChromeUIScheme,
+                           chrome::kChromeUISlowTraceHost) {}
+};
+
 class SlowTraceController : public content::WebUIController {
  public:
   explicit SlowTraceController(content::WebUI* web_ui);
diff --git a/chrome/browser/ui/webui/ash/slow_ui.h b/chrome/browser/ui/webui/ash/slow_ui.h
index 69feff3..1f3c4d28 100644
--- a/chrome/browser/ui/webui/ash/slow_ui.h
+++ b/chrome/browser/ui/webui/ash/slow_ui.h
@@ -5,10 +5,23 @@
 #ifndef CHROME_BROWSER_UI_WEBUI_ASH_SLOW_UI_H_
 #define CHROME_BROWSER_UI_WEBUI_ASH_SLOW_UI_H_
 
+#include "chrome/common/webui_url_constants.h"
 #include "content/public/browser/web_ui_controller.h"
+#include "content/public/browser/webui_config.h"
+#include "content/public/common/url_constants.h"
 
 namespace ash {
 
+class SlowUI;
+
+// WebUIConfig for chrome://slow
+class SlowUIConfig : public content::DefaultWebUIConfig<SlowUI> {
+ public:
+  SlowUIConfig()
+      : DefaultWebUIConfig(content::kChromeUIScheme,
+                           chrome::kChromeUISlowHost) {}
+};
+
 // A custom WebUI that allows users to enable and disable performance tracing
 // for feedback reports.
 class SlowUI : public content::WebUIController {
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 994ff07..8721fec 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -1064,10 +1064,6 @@
       IsProjectorAppEnabled(profile)) {
     return &NewWebUI<ash::TrustedProjectorAnnotatorUI>;
   }
-  if (url.host_piece() == chrome::kChromeUISlowHost)
-    return &NewWebUI<ash::SlowUI>;
-  if (url.host_piece() == chrome::kChromeUISlowTraceHost)
-    return &NewWebUI<ash::SlowTraceController>;
   if (url.host_piece() == chrome::kChromeUISmbCredentialsHost)
     return &NewWebUI<ash::smb_dialog::SmbCredentialsDialogUI>;
   if (url.host_piece() == chrome::kChromeUISmbShareHost)
diff --git a/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc b/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc
index cc3ad1f..5bfce87 100644
--- a/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc
+++ b/chrome/browser/ui/webui/chromeos/chrome_web_ui_configs_chromeos.cc
@@ -28,6 +28,8 @@
 #include "chrome/browser/ui/webui/ash/parent_access/parent_access_ui.h"
 #include "chrome/browser/ui/webui/ash/power_ui.h"
 #include "chrome/browser/ui/webui/ash/set_time_ui.h"
+#include "chrome/browser/ui/webui/ash/slow_trace_ui.h"
+#include "chrome/browser/ui/webui/ash/slow_ui.h"
 #if !defined(OFFICIAL_BUILD)
 #include "ash/webui/sample_system_web_app_ui/sample_system_web_app_ui.h"
 #endif  // !defined(OFFICIAL_BUILD)
@@ -78,6 +80,8 @@
   map.AddWebUIConfig(std::make_unique<ash::PowerUIConfig>());
   map.AddWebUIConfig(std::make_unique<ash::SetTimeUIConfig>());
   map.AddWebUIConfig(std::make_unique<ash::ShortcutCustomizationAppUIConfig>());
+  map.AddWebUIConfig(std::make_unique<ash::SlowTraceControllerConfig>());
+  map.AddWebUIConfig(std::make_unique<ash::SlowUIConfig>());
 #if !defined(OFFICIAL_BUILD)
   map.AddWebUIConfig(std::make_unique<ash::SampleSystemWebAppUIConfig>());
 #endif  // !defined(OFFICIAL_BUILD)
diff --git a/chrome/browser/ui/webui/help/version_updater_mac.h b/chrome/browser/ui/webui/help/version_updater_mac.h
index 645b1b3..feb1fed 100644
--- a/chrome/browser/ui/webui/help/version_updater_mac.h
+++ b/chrome/browser/ui/webui/help/version_updater_mac.h
@@ -16,12 +16,6 @@
 #include "chrome/updater/update_service.h"
 #include "chrome/updater/updater_scope.h"
 
-namespace base {
-class Version;
-}
-
-class BrowserUpdaterHelperClientMac;
-
 @class KeystoneObserver;
 
 // OS X implementation of version update functionality, used by the WebUI
@@ -56,16 +50,8 @@
   // Updates the status from the Chromium Updater.
   void UpdateStatusFromChromiumUpdater(
       VersionUpdater::StatusCallback status_callback,
-      VersionUpdater::PromoteCallback promote_callback,
-      updater::UpdaterScope scope,
       const updater::UpdateService::UpdateState& update_state);
 
-  void UpdatePromotionStatusFromChromiumUpdater(
-      VersionUpdater::PromoteCallback promote_callback,
-      updater::UpdaterScope scope,
-      bool enable_promote_button,
-      const base::Version& version);
-
   // Callback used to communicate update status to the client.
   StatusCallback status_callback_;
 
@@ -78,7 +64,6 @@
   // The observer that will receive keystone status updates.
   base::scoped_nsobject<KeystoneObserver> keystone_observer_;
 
-  scoped_refptr<BrowserUpdaterHelperClientMac> update_helper_client_;
   base::WeakPtrFactory<VersionUpdaterMac> weak_factory_{this};
 };
 
diff --git a/chrome/browser/ui/webui/help/version_updater_mac.mm b/chrome/browser/ui/webui/help/version_updater_mac.mm
index 433f2fd..d544a678 100644
--- a/chrome/browser/ui/webui/help/version_updater_mac.mm
+++ b/chrome/browser/ui/webui/help/version_updater_mac.mm
@@ -7,7 +7,6 @@
 #include "base/memory/raw_ptr.h"
 
 #import <Foundation/Foundation.h>
-#import <ServiceManagement/ServiceManagement.h>
 
 #include <string>
 #include <utility>
@@ -33,7 +32,6 @@
 #include "chrome/browser/obsolete_system/obsolete_system.h"
 #include "chrome/browser/updater/browser_updater_client.h"
 #include "chrome/browser/updater/browser_updater_client_util.h"
-#include "chrome/browser/updater/browser_updater_helper_client_mac.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
@@ -107,20 +105,32 @@
 void VersionUpdaterMac::CheckForUpdate(StatusCallback status_callback,
                                        PromoteCallback promote_callback) {
   if (base::FeatureList::IsEnabled(features::kUseChromiumUpdater)) {
-    base::ThreadPool::PostTaskAndReplyWithResult(
-        FROM_HERE, {base::MayBlock()}, base::BindOnce(&GetUpdaterScope),
+    EnsureUpdater(
+        base::BindOnce(
+            [](PromoteCallback prompt) {
+              prompt.Run(PromotionState::PROMOTE_ENABLED);
+            },
+            promote_callback),
         base::BindOnce(
             [](base::RepeatingCallback<void(
-                   updater::UpdaterScope,
-                   const updater::UpdateService::UpdateState&)> status_callback,
-               updater::UpdaterScope scope) {
-              BrowserUpdaterClient::Create(scope)->CheckForUpdate(
-                  base::BindRepeating(status_callback, scope));
+                   const updater::UpdateService::UpdateState&)>
+                   status_callback) {
+              base::ThreadPool::PostTaskAndReplyWithResult(
+                  FROM_HERE, {base::MayBlock()},
+                  base::BindOnce(&GetUpdaterScope),
+                  base::BindOnce(
+                      [](base::RepeatingCallback<void(
+                             const updater::UpdateService::UpdateState&)>
+                             status_callback,
+                         updater::UpdaterScope scope) {
+                        BrowserUpdaterClient::Create(scope)->CheckForUpdate(
+                            status_callback);
+                      },
+                      status_callback));
             },
             base::BindRepeating(
                 &VersionUpdaterMac::UpdateStatusFromChromiumUpdater,
-                weak_factory_.GetWeakPtr(), status_callback,
-                promote_callback)));
+                weak_factory_.GetWeakPtr(), status_callback)));
   } else {
     status_callback_ = std::move(status_callback);
     promote_callback_ = std::move(promote_callback);
@@ -163,39 +173,7 @@
 
 void VersionUpdaterMac::PromoteUpdater() {
   if (base::FeatureList::IsEnabled(features::kUseChromiumUpdater)) {
-    NSString* prompt = l10n_util::GetNSStringFWithFixup(
-        IDS_PROMOTE_AUTHENTICATION_PROMPT,
-        l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
-    base::mac::ScopedAuthorizationRef authorization(
-        base::mac::AuthorizationCreateToRunAsRoot(
-            base::mac::NSToCFCast(prompt)));
-    if (!authorization.get()) {
-      VLOG(0) << "Could not get authorization to run as root.";
-      return;
-    }
-
-    base::ScopedCFTypeRef<CFErrorRef> error;
-    Boolean result =
-        SMJobBless(kSMDomainSystemLaunchd,
-                   base::SysUTF8ToCFStringRef(kPrivilegedHelperName),
-                   authorization, error.InitializeInto());
-    if (!result) {
-      base::ScopedCFTypeRef<CFStringRef> desc(CFErrorCopyDescription(error));
-      VLOG(0) << "Could not bless the privileged helper. Resulting error: "
-              << base::SysCFStringRefToUTF8(desc);
-    }
-
-    if (!update_helper_client_) {
-      update_helper_client_ =
-          base::MakeRefCounted<BrowserUpdaterHelperClientMac>();
-    }
-
-    update_helper_client_->SetupSystemUpdater(base::BindOnce([](int result) {
-      VLOG_IF(1, result != 0)
-          << "There was a problem with performing the system "
-             "updater tasks. Result: "
-          << result;
-    }));
+    SetupSystemUpdater();
   } else {
     // Tell Keystone to make software updates available for all users.
     [[KeystoneGlue defaultKeystoneGlue] promoteTicket];
@@ -359,21 +337,17 @@
 
 void VersionUpdaterMac::UpdateStatusFromChromiumUpdater(
     VersionUpdater::StatusCallback status_callback,
-    VersionUpdater::PromoteCallback promote_callback,
-    updater::UpdaterScope scope,
     const updater::UpdateService::UpdateState& update_state) {
   VersionUpdater::Status status = VersionUpdater::Status::CHECKING;
   int progress = 0;
   std::string version;
   std::string err_message;
-  bool enable_promote_button = true;
 
   switch (update_state.state) {
     case updater::UpdateService::UpdateState::State::kCheckingForUpdates:
       [[fallthrough]];
     case updater::UpdateService::UpdateState::State::kUpdateAvailable:
       status = VersionUpdater::Status::CHECKING;
-      enable_promote_button = false;
       break;
     case updater::UpdateService::UpdateState::State::kDownloading:
       progress = GetDownloadProgress(update_state.downloaded_bytes,
@@ -381,7 +355,6 @@
       [[fallthrough]];
     case updater::UpdateService::UpdateState::State::kInstalling:
       status = VersionUpdater::Status::UPDATING;
-      enable_promote_button = false;
       break;
     case updater::UpdateService::UpdateState::State::kUpdated:
       status = VersionUpdater::Status::NEARLY_UPDATED;
@@ -404,43 +377,4 @@
 
   status_callback.Run(status, progress, false, false, version, 0,
                       base::UTF8ToUTF16(err_message));
-
-  // Updater should be promoted if it meets the following criteria:
-  //    1) When browser is owned by root and updater is not yet installed.
-  //    2) When effective user is root and browser is not owned by root.
-  //    3) When effective user is not the owner of the browser and is an
-  //    administrator.
-  // To check whether the system level updater is installed or not, reset the
-  // update_clent with system scope and attempt to get version. If the version
-  // is empty, then the updater can be assumed to not be installed. If the
-  // version returns a value, then the updater is installed.
-  if (promote_callback) {
-    base::ThreadPool::PostTaskAndReplyWithResult(
-        FROM_HERE, {base::MayBlock()}, base::BindOnce(&ShouldPromoteUpdater),
-        base::BindOnce(
-            [](base::OnceCallback<void(const base::Version&)> promotion,
-               bool should_promote) {
-              if (should_promote) {
-                BrowserUpdaterClient::Create(updater::UpdaterScope::kSystem)
-                    ->GetUpdaterVersion(std::move(promotion));
-              }
-            },
-            base::BindOnce(
-                &VersionUpdaterMac::UpdatePromotionStatusFromChromiumUpdater,
-                weak_factory_.GetWeakPtr(), promote_callback, scope,
-                enable_promote_button)));
-  }
-}
-
-void VersionUpdaterMac::UpdatePromotionStatusFromChromiumUpdater(
-    VersionUpdater::PromoteCallback promote_callback,
-    updater::UpdaterScope scope,
-    bool enable_promote_button,
-    const base::Version& version) {
-  promote_callback.Run(
-      version.IsValid() && scope == updater::UpdaterScope::kSystem
-          ? VersionUpdater::PROMOTED  // Successfully communicated with the
-                                      // system updater.
-          : (enable_promote_button ? VersionUpdater::PROMOTE_ENABLED
-                                   : VersionUpdater::PROMOTE_DISABLED));
 }
diff --git a/chrome/browser/ui/webui/policy/policy_ui_browsertest.cc b/chrome/browser/ui/webui/policy/policy_ui_browsertest.cc
index 1f5e181..3a03c73 100644
--- a/chrome/browser/ui/webui/policy/policy_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/policy/policy_ui_browsertest.cc
@@ -792,7 +792,8 @@
   values.Set(policy::key::kURLBlocklist, policy::POLICY_LEVEL_MANDATORY,
              policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD,
              std::move(blocked_urls), nullptr);
-  expected_values[policy::key::kURLBlocklist] = "site1.com,site2.com,site3.com";
+  expected_values[policy::key::kURLBlocklist] =
+      R"(["site1.com","site2.com","site3.com"])";
   values.Set(policy::key::kHomepageLocation, policy::POLICY_LEVEL_MANDATORY,
              policy::POLICY_SCOPE_MACHINE, policy::POLICY_SOURCE_CLOUD,
              base::Value("http://google.com"), nullptr);
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
index 4effb19..0f4e602 100644
--- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -294,18 +294,8 @@
   void RecordNotification(permissions::NotificationsEngagementService* service,
                           GURL url,
                           int daily_avarage_count) {
-    base::Time date = base::Time::Now();
-    base::Time::Exploded date_exploded;
-    date.LocalExplode(&date_exploded);
-    // |day_of_week| returns 0 for Sunday, but NotificationEngagementService
-    // starts counting on Mondays. So here, setting Sunday as 7 to record
-    // notifications correctly and to prevent calculation errors.
-    int day_of_week =
-        !date_exploded.day_of_week ? 7 : date_exploded.day_of_week;
-
-    // Notification count holds in buckets for each monday. So to calculate
-    // necessary notification count, here the day_of_week is calculated.
-    int total_count = day_of_week * daily_avarage_count;
+    // This many notifications were recorded during the past week in total.
+    int total_count = daily_avarage_count * 7;
     service->RecordNotificationDisplayed(url, total_count);
   }
 
@@ -3356,8 +3346,7 @@
   auto* notification_engagement_service =
       NotificationsEngagementServiceFactory::GetForProfile(profile());
   std::string displayedDate =
-      notification_engagement_service->GetBucketLabelForLastMonday(
-          base::Time::Now());
+      notification_engagement_service->GetBucketLabel(base::Time::Now());
 
   auto* site_engagement_service =
       site_engagement::SiteEngagementServiceFactory::GetForProfile(profile());
diff --git a/chrome/browser/ui/webui/signin/ash/signin_helper.cc b/chrome/browser/ui/webui/signin/ash/signin_helper.cc
index 4d1cac92..a9d2373e3 100644
--- a/chrome/browser/ui/webui/signin/ash/signin_helper.cc
+++ b/chrome/browser/ui/webui/signin/ash/signin_helper.cc
@@ -105,6 +105,9 @@
 }
 
 void SigninHelper::OnClientOAuthFailure(const GoogleServiceAuthError& error) {
+  LOG(ERROR) << "SigninHelper::OnClientOAuthFailure: couldn't fetch OAuth2 "
+                "token, the error was "
+             << error.ToString();
   // TODO(sinhak): Display an error.
 
   // Notify `AccountManagerMojoService` about account addition failure and send
diff --git a/chrome/browser/updater/BUILD.gn b/chrome/browser/updater/BUILD.gn
index 1da364a..0f26340 100644
--- a/chrome/browser/updater/BUILD.gn
+++ b/chrome/browser/updater/BUILD.gn
@@ -34,15 +34,23 @@
   if (is_mac) {
     sources += [
       "browser_updater_client_mac.mm",
-      "browser_updater_client_util_mac.mm",
       "browser_updater_helper_client_mac.h",
       "browser_updater_helper_client_mac.mm",
     ]
 
+    if (enable_chromium_updater) {
+      sources += [ "browser_updater_client_util_mac.mm" ]
+    } else {
+      sources += [ "browser_updater_client_util_no_updater.cc" ]
+    }
+
     deps += [
+      "//chrome/app:chromium_strings_grit",
+      "//chrome/app:generated_resources_grit",
       "//chrome/browser/google",
       "//chrome/common:channel_info",
       "//chrome/common:chrome_features",
+      "//ui/base",
     ]
   }
 
diff --git a/chrome/browser/updater/browser_updater_client.cc b/chrome/browser/updater/browser_updater_client.cc
index 945b7dff..fa606af 100644
--- a/chrome/browser/updater/browser_updater_client.cc
+++ b/chrome/browser/updater/browser_updater_client.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/updater/browser_updater_client.h"
 
+#include <algorithm>
 #include <string>
 #include <utility>
 
@@ -26,7 +27,7 @@
 
 BrowserUpdaterClient::~BrowserUpdaterClient() = default;
 
-void BrowserUpdaterClient::Register() {
+void BrowserUpdaterClient::Register(base::OnceClosure complete) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   base::ThreadPool::PostTaskAndReplyWithResult(
       FROM_HERE, {base::MayBlock()},
@@ -39,16 +40,18 @@
           },
           base::BindPostTask(
               base::SequencedTaskRunner::GetCurrentDefault(),
-              base::BindOnce(&BrowserUpdaterClient::RegistrationCompleted,
-                             this)),
+              base::BindOnce(&BrowserUpdaterClient::RegistrationCompleted, this,
+                             std::move(complete))),
           update_service_));
 }
 
-void BrowserUpdaterClient::RegistrationCompleted(int result) {
+void BrowserUpdaterClient::RegistrationCompleted(base::OnceClosure complete,
+                                                 int result) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (result != updater::kRegistrationSuccess) {
     VLOG(1) << "Updater registration error: " << result;
   }
+  std::move(complete).Run();
 }
 
 void BrowserUpdaterClient::GetUpdaterVersion(
@@ -118,6 +121,27 @@
   std::move(callback).Run();
 }
 
+void BrowserUpdaterClient::IsBrowserRegistered(
+    base::OnceCallback<void(bool)> callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  update_service_->GetAppStates(base::BindPostTask(
+      base::SequencedTaskRunner::GetCurrentDefault(),
+      base::BindOnce(&BrowserUpdaterClient::IsBrowserRegisteredCompleted, this,
+                     std::move(callback))));
+}
+
+void BrowserUpdaterClient::IsBrowserRegisteredCompleted(
+    base::OnceCallback<void(bool)> callback,
+    const std::vector<updater::UpdateService::AppState>& apps) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  const std::string app_id = GetAppId();
+  std::move(callback).Run(
+      std::find_if(apps.begin(), apps.end(),
+                   [&](const updater::UpdateService::AppState& app) {
+                     return app.app_id == app_id;
+                   }) != apps.end());
+}
+
 scoped_refptr<BrowserUpdaterClient> BrowserUpdaterClient::Create(
     updater::UpdaterScope scope) {
   return base::MakeRefCounted<BrowserUpdaterClient>(
diff --git a/chrome/browser/updater/browser_updater_client.h b/chrome/browser/updater/browser_updater_client.h
index 6ac6c24..2428ad4 100644
--- a/chrome/browser/updater/browser_updater_client.h
+++ b/chrome/browser/updater/browser_updater_client.h
@@ -36,7 +36,8 @@
   // When registration is completed, it will call RegistrationCompleted().
   // A ref to this object is held until the registration completes. Must be
   // called on the sequence on which the BrowserUpdateClient was created.
-  void Register();
+  // `complete` will be called after registration on the same sequence.
+  void Register(base::OnceClosure complete);
 
   // Triggers an on-demand update from the Chromium updater, reporting status
   // updates to the callback. A ref to this object is held until the update
@@ -57,6 +58,12 @@
   void GetUpdaterVersion(
       base::OnceCallback<void(const base::Version&)> callback);
 
+  // Returns whether the browser is registered with the updater. A ref to the
+  // BrowserUpdaterClient is held until the callback is invoked. Must be called
+  // on the sequence on which the BrowserUpdaterClient was created. `callback`
+  // will be run on the same sequence.
+  void IsBrowserRegistered(base::OnceCallback<void(bool)> callback);
+
  protected:
   friend class base::RefCountedThreadSafe<BrowserUpdaterClient>;
   virtual ~BrowserUpdaterClient();
@@ -67,13 +74,16 @@
   updater::RegistrationRequest GetRegistrationRequest();
   std::string GetAppId();
 
-  void RegistrationCompleted(int result);
+  void RegistrationCompleted(base::OnceClosure complete, int result);
   void GetUpdaterVersionCompleted(
       base::OnceCallback<void(const base::Version&)> callback,
       const base::Version& version);
   void UpdateCompleted(updater::UpdateService::StateChangeCallback callback,
                        updater::UpdateService::Result result);
   void RunPeriodicTasksCompleted(base::OnceClosure callback);
+  void IsBrowserRegisteredCompleted(
+      base::OnceCallback<void(bool)> callback,
+      const std::vector<updater::UpdateService::AppState>& apps);
 
   scoped_refptr<updater::UpdateService> update_service_;
 };
diff --git a/chrome/browser/updater/browser_updater_client_util.h b/chrome/browser/updater/browser_updater_client_util.h
index b2b3e37..b6f7bca 100644
--- a/chrome/browser/updater/browser_updater_client_util.h
+++ b/chrome/browser/updater/browser_updater_client_util.h
@@ -7,38 +7,29 @@
 
 #include <string>
 
+#include "base/callback_forward.h"
 #include "chrome/updater/updater_scope.h"
 
-namespace base {
-class FilePath;
-}
-
 extern const char kUpdaterName[];
 extern const char kPrivilegedHelperName[];
 
-// Gets the FilePath to the updater folder (e.g. Chromium/ChromiumUpdater).
-base::FilePath GetUpdaterFolderName();
-
-// Gets the FilePath to the updater executable folder.
-base::FilePath GetUpdaterExecutablePath();
-
 // Get the current installed version of the browser.
 std::string CurrentlyInstalledVersion();
 
-// Returns whether or not the browser can install the updater.
-bool CanInstallUpdater();
-
 // System level updater should only be used if the browser is owned by root.
 // During promotion, the browser will be changed to be owned by root and wheel.
 // A browser must go through promotion before it can utilize the system-level
 // updater.
 updater::UpdaterScope GetUpdaterScope();
 
-// Updater should be promoted if it meets the following criteria:
-//    1) When browser is owned by root and updater is not yet installed.
-//    2) When effective user is root and browser is not owned by root.
-//    3) When effective user is not the owner of the browser and is an
-//    administrator.
-bool ShouldPromoteUpdater();
+// If this build should integrate with an updater, makes sure that an updater
+// is installed and that the browser is registered with it for updates. Must be
+// called on a sequenced task runner. In cases where user intervention is
+// necessary, calls `prompt` (on the same sequence).  After the updater is made
+// present (or cannot be made present), calls `complete` on the same sequence.
+void EnsureUpdater(base::OnceClosure prompt, base::OnceClosure complete);
+
+// Prompts the user for credentials and sets up a system-level updater.
+void SetupSystemUpdater();
 
 #endif  // CHROME_BROWSER_UPDATER_BROWSER_UPDATER_CLIENT_UTIL_H_
diff --git a/chrome/browser/updater/browser_updater_client_util_mac.mm b/chrome/browser/updater/browser_updater_client_util_mac.mm
index 54f629b..d3ed974c 100644
--- a/chrome/browser/updater/browser_updater_client_util_mac.mm
+++ b/chrome/browser/updater/browser_updater_client_util_mac.mm
@@ -6,24 +6,53 @@
 
 #include <Foundation/Foundation.h>
 #import <OpenDirectory/OpenDirectory.h>
+#import <ServiceManagement/ServiceManagement.h>
 
 #include <string.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/command_line.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
+#include "base/mac/authorization_util.h"
 #include "base/mac/bundle_locations.h"
 #include "base/mac/foundation_util.h"
+#include "base/mac/scoped_authorizationref.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/process/launch.h"
+#include "base/process/process.h"
 #include "base/strings/strcat.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
+#include "base/time/time.h"
+#include "build/buildflag.h"
+#include "chrome/browser/updater/browser_updater_client.h"
+#include "chrome/browser/updater/browser_updater_client_util.h"
+#include "chrome/browser/updater/browser_updater_helper_client_mac.h"
 #include "chrome/common/chrome_version.h"
+#include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/generated_resources.h"
 #include "chrome/updater/updater_scope.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/l10n/l10n_util_mac.h"
 
 namespace {
 
+constexpr char kInstallCommand[] = "install";
+
+base::FilePath GetUpdaterExecutablePath() {
+  return base::FilePath(base::StrCat({kUpdaterName, ".app"}))
+      .Append(FILE_PATH_LITERAL("Contents"))
+      .Append(FILE_PATH_LITERAL("MacOS"))
+      .Append(kUpdaterName);
+}
+
 bool BundleOwnedByUser(uid_t user_uid) {
   const base::FilePath path = base::mac::OuterBundlePath();
   base::stat_wrapper_t stat_info = {};
@@ -92,38 +121,6 @@
   return result;
 }
 
-}  // namespace
-
-base::FilePath GetUpdaterFolderName() {
-  return base::FilePath(COMPANY_SHORTNAME_STRING).Append(kUpdaterName);
-}
-
-std::string CurrentlyInstalledVersion() {
-  base::FilePath outer_bundle = base::mac::OuterBundlePath();
-  base::FilePath plist_path =
-      outer_bundle.Append("Contents").Append("Info.plist");
-  NSDictionary* info_plist = [NSDictionary
-      dictionaryWithContentsOfFile:base::mac::FilePathToNSString(plist_path)];
-  return base::SysNSStringToUTF8(
-      base::mac::ObjCCast<NSString>(info_plist[@"CFBundleShortVersionString"]));
-}
-
-base::FilePath GetUpdaterExecutablePath() {
-  return base::FilePath(base::StrCat({kUpdaterName, ".app"}))
-      .Append(FILE_PATH_LITERAL("Contents"))
-      .Append(FILE_PATH_LITERAL("MacOS"))
-      .Append(kUpdaterName);
-}
-
-bool CanInstallUpdater() {
-  return BundleOwnedByCurrentUser() && geteuid() != 0;
-}
-
-updater::UpdaterScope GetUpdaterScope() {
-  return BundleOwnedByRoot() ? updater::UpdaterScope::kSystem
-                             : updater::UpdaterScope::kUser;
-}
-
 bool ShouldPromoteUpdater() {
   // 1) Should promote if browser is owned by root and not installed. The not
   // installed part of this case is handled in version_updater_mac.mm
@@ -139,3 +136,158 @@
   // administrator.
   return !BundleOwnedByCurrentUser() && IsEffectiveUserAdmin();
 }
+
+int RunCommand(const base::FilePath& exe_path, const char* cmd_switch) {
+  base::CommandLine command(exe_path);
+  command.AppendSwitch(cmd_switch);
+
+  int exit_code = -1;
+  auto process = base::LaunchProcess(command, {});
+  if (!process.IsValid())
+    return exit_code;
+
+  process.WaitForExitWithTimeout(base::Seconds(120), &exit_code);
+
+  return exit_code;
+}
+
+// Only works in kUser scope.
+void RegisterBrowser(base::OnceClosure complete) {
+  BrowserUpdaterClient::Create(updater::UpdaterScope::kUser)
+      ->Register(std::move(complete));
+}
+
+// Only works in kUser scope.
+void InstallUpdaterAndRegisterBrowser(base::OnceClosure complete) {
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE,
+      {base::MayBlock(), base::WithBaseSyncPrimitives(),
+       base::TaskPriority::BEST_EFFORT,
+       base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+      base::BindOnce([]() {
+        // The updater executable should be in
+        // BRANDING.app/Contents/Frameworks/BRANDING.framework/Versions/V/
+        // Helpers/Updater.app/Contents/MacOS/Updater
+        const base::FilePath updater_executable_path =
+            base::mac::FrameworkBundlePath()
+                .Append(FILE_PATH_LITERAL("Helpers"))
+                .Append(GetUpdaterExecutablePath());
+
+        if (!base::PathExists(updater_executable_path)) {
+          VLOG(1) << "The updater does not exist in the bundle.";
+          return false;
+        }
+
+        int exit_code = RunCommand(updater_executable_path, kInstallCommand);
+        if (exit_code != 0) {
+          VLOG(1) << "Couldn't install the updater. Exit code: " << exit_code;
+          return false;
+        }
+        return true;
+      }),
+      base::BindOnce(
+          [](base::OnceClosure complete, bool success) {
+            if (success) {
+              RegisterBrowser(std::move(complete));
+            } else {
+              std::move(complete).Run();
+            }
+          },
+          std::move(complete)));
+}
+
+}  // namespace
+
+std::string CurrentlyInstalledVersion() {
+  base::FilePath outer_bundle = base::mac::OuterBundlePath();
+  base::FilePath plist_path =
+      outer_bundle.Append("Contents").Append("Info.plist");
+  NSDictionary* info_plist = [NSDictionary
+      dictionaryWithContentsOfFile:base::mac::FilePathToNSString(plist_path)];
+  return base::SysNSStringToUTF8(
+      base::mac::ObjCCast<NSString>(info_plist[@"CFBundleShortVersionString"]));
+}
+
+updater::UpdaterScope GetUpdaterScope() {
+  return BundleOwnedByRoot() ? updater::UpdaterScope::kSystem
+                             : updater::UpdaterScope::kUser;
+}
+
+void EnsureUpdater(base::OnceClosure prompt, base::OnceClosure complete) {
+  base::ThreadPool::PostTaskAndReplyWithResult(
+      FROM_HERE, {base::MayBlock()}, base::BindOnce(&GetUpdaterScope),
+      base::BindOnce(
+          [](base::OnceClosure prompt, base::OnceClosure complete,
+             updater::UpdaterScope scope) {
+            scoped_refptr<BrowserUpdaterClient> client =
+                BrowserUpdaterClient::Create(scope);
+            client->IsBrowserRegistered(base::BindOnce(
+                [](scoped_refptr<BrowserUpdaterClient> client,
+                   base::OnceClosure prompt, base::OnceClosure complete,
+                   bool registered) {
+                  if (registered) {
+                    std::move(complete).Run();
+                    return;
+                  }
+                  base::ThreadPool::PostTaskAndReplyWithResult(
+                      FROM_HERE, {base::MayBlock()},
+                      base::BindOnce(&ShouldPromoteUpdater),
+                      base::BindOnce(
+                          [](scoped_refptr<BrowserUpdaterClient> client,
+                             base::OnceClosure prompt,
+                             base::OnceClosure complete, bool promote) {
+                            if (promote) {
+                              // User intervention is required; prompt.
+                              std::move(prompt).Run();
+                              std::move(complete).Run();
+                              return;
+                            }
+                            // Check whether an updater exists.
+                            client->GetUpdaterVersion(base::BindOnce(
+                                [](base::OnceClosure complete,
+                                   const base::Version& version) {
+                                  if (!version.IsValid()) {
+                                    InstallUpdaterAndRegisterBrowser(
+                                        std::move(complete));
+                                  } else {
+                                    RegisterBrowser(std::move(complete));
+                                  }
+                                },
+                                std::move(complete)));
+                          },
+                          client, std::move(prompt), std::move(complete)));
+                },
+                client, std::move(prompt), std::move(complete)));
+          },
+          std::move(prompt), std::move(complete)));
+}
+
+void SetupSystemUpdater() {
+  NSString* prompt = l10n_util::GetNSStringFWithFixup(
+      IDS_PROMOTE_AUTHENTICATION_PROMPT,
+      l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
+  base::mac::ScopedAuthorizationRef authorization(
+      base::mac::AuthorizationCreateToRunAsRoot(base::mac::NSToCFCast(prompt)));
+  if (!authorization.get()) {
+    VLOG(0) << "Could not get authorization to run as root.";
+    return;
+  }
+
+  base::ScopedCFTypeRef<CFErrorRef> error;
+  Boolean result = SMJobBless(kSMDomainSystemLaunchd,
+                              base::SysUTF8ToCFStringRef(kPrivilegedHelperName),
+                              authorization, error.InitializeInto());
+  if (!result) {
+    base::ScopedCFTypeRef<CFStringRef> desc(CFErrorCopyDescription(error));
+    VLOG(0) << "Could not bless the privileged helper. Resulting error: "
+            << base::SysCFStringRefToUTF8(desc);
+  }
+
+  base::MakeRefCounted<BrowserUpdaterHelperClientMac>()->SetupSystemUpdater(
+      base::BindOnce([](int result) {
+        VLOG_IF(1, result != 0)
+            << "There was a problem with performing the system "
+               "updater tasks. Result: "
+            << result;
+      }));
+}
diff --git a/chrome/browser/updater/browser_updater_client_util_no_updater.cc b/chrome/browser/updater/browser_updater_client_util_no_updater.cc
new file mode 100644
index 0000000..3bd4444f
--- /dev/null
+++ b/chrome/browser/updater/browser_updater_client_util_no_updater.cc
@@ -0,0 +1,24 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/updater/browser_updater_client_util.h"
+
+#include <string>
+
+#include "base/callback.h"
+#include "chrome/updater/updater_scope.h"
+
+std::string CurrentlyInstalledVersion() {
+  return {};
+}
+
+updater::UpdaterScope GetUpdaterScope() {
+  return updater::UpdaterScope::kUser;
+}
+
+void EnsureUpdater(base::OnceClosure prompt, base::OnceClosure complete) {
+  std::move(complete).Run();
+}
+
+void SetupSystemUpdater() {}
diff --git a/chrome/browser/updater/browser_updater_helper_client_mac.h b/chrome/browser/updater/browser_updater_helper_client_mac.h
index 83da53b..00f2548b 100644
--- a/chrome/browser/updater/browser_updater_helper_client_mac.h
+++ b/chrome/browser/updater/browser_updater_helper_client_mac.h
@@ -25,7 +25,9 @@
 
   // Calls on the privileged helper to set up the system-level updater. Upon
   // setup completion, an integer return code will be sent back in a callback.
-  void SetupSystemUpdater(base::OnceCallback<void(int)> result);
+  // `callback` is called on the same sequence. A ref to the
+  // BrowserUpdaterHelperClientMac is held throughout the operation.
+  void SetupSystemUpdater(base::OnceCallback<void(int)> callback);
 
  protected:
   friend class base::RefCountedThreadSafe<BrowserUpdaterHelperClientMac>;
@@ -33,8 +35,10 @@
 
  private:
   SEQUENCE_CHECKER(sequence_checker_);
-  scoped_refptr<base::SequencedTaskRunner> main_task_runner_;
   base::scoped_nsobject<NSXPCConnection> xpc_connection_;
+
+  void SetupSystemUpdaterDone(base::OnceCallback<void(int)> callback,
+                              int result);
 };
 
 #endif  // CHROME_BROWSER_UPDATER_BROWSER_UPDATER_HELPER_CLIENT_MAC_H_
diff --git a/chrome/browser/updater/browser_updater_helper_client_mac.mm b/chrome/browser/updater/browser_updater_helper_client_mac.mm
index 89c65ea..a675402 100644
--- a/chrome/browser/updater/browser_updater_helper_client_mac.mm
+++ b/chrome/browser/updater/browser_updater_helper_client_mac.mm
@@ -14,8 +14,8 @@
 #include "base/mac/scoped_nsobject.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/strings/sys_string_conversions.h"
+#include "base/task/bind_post_task.h"
 #include "base/task/sequenced_task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/updater/browser_updater_client_util.h"
 #include "chrome/updater/mac/privileged_helper/service_protocol.h"
 
@@ -23,8 +23,7 @@
 const int kPrivilegedHelperConnectionFailed = -10000;
 }
 
-BrowserUpdaterHelperClientMac::BrowserUpdaterHelperClientMac()
-    : main_task_runner_(base::SequencedTaskRunnerHandle::Get()) {
+BrowserUpdaterHelperClientMac::BrowserUpdaterHelperClientMac() {
   xpc_connection_.reset([[NSXPCConnection alloc]
       initWithMachServiceName:base::SysUTF8ToNSString(kPrivilegedHelperName)
                       options:NSXPCConnectionPrivileged]);
@@ -51,13 +50,15 @@
 }
 
 void BrowserUpdaterHelperClientMac::SetupSystemUpdater(
-    base::OnceCallback<void(int)> result) {
+    base::OnceCallback<void(int)> callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  __block base::OnceCallback<void(int)> block_callback = std::move(result);
+  __block base::OnceCallback<void(int)> block_callback = base::BindPostTask(
+      base::SequencedTaskRunner::GetCurrentDefault(),
+      base::BindOnce(&BrowserUpdaterHelperClientMac::SetupSystemUpdaterDone,
+                     base::WrapRefCounted(this), std::move(callback)));
 
   auto reply = ^(int error) {
-    main_task_runner_->PostTask(
-        FROM_HERE, base::BindOnce(std::move(block_callback), error));
+    std::move(block_callback).Run(error);
   };
 
   auto errorHandler = ^(NSError* xpcError) {
@@ -71,3 +72,10 @@
                                             base::mac::OuterBundlePath())
                                   reply:reply];
 }
+
+void BrowserUpdaterHelperClientMac::SetupSystemUpdaterDone(
+    base::OnceCallback<void(int)> callback,
+    int result) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  std::move(callback).Run(result);
+}
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index d2429a0..a73242f 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -75,8 +75,6 @@
     "isolated_web_apps/pending_install_info.h",
     "isolated_web_apps/signed_web_bundle_reader.cc",
     "isolated_web_apps/signed_web_bundle_reader.h",
-    "isolated_web_apps/signed_web_bundle_signature_verifier.cc",
-    "isolated_web_apps/signed_web_bundle_signature_verifier.h",
     "isolation_data.cc",
     "isolation_data.h",
     "isolation_prefs_utils.cc",
@@ -545,8 +543,6 @@
 source_set("web_applications_unit_tests") {
   testonly = true
 
-  data = [ "test/data/" ]
-
   sources = [
     "commands/clear_browsing_data_command_unittest.cc",
     "commands/externally_managed_install_command_unittest.cc",
@@ -571,7 +567,6 @@
     "isolated_web_apps/isolated_web_app_validator_unittest.cc",
     "isolated_web_apps/pending_install_info_unittest.cc",
     "isolated_web_apps/signed_web_bundle_reader_unittest.cc",
-    "isolated_web_apps/signed_web_bundle_signature_verifier_unittest.cc",
     "isolation_prefs_utils_unittest.cc",
     "os_integration/os_integration_manager_unittest.cc",
     "os_integration/web_app_file_handler_manager_unittest.cc",
@@ -662,7 +657,6 @@
     "//chrome/browser/web_applications/extensions:extensions",
     "//chrome/common",
     "//chrome/test:test_support",
-    "//components/cbor",
     "//components/services/app_service/public/cpp:app_url_handling",
     "//components/services/app_service/public/cpp:protocol_handling",
     "//components/web_package",
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.cc b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.cc
index 044a8f7..84aeba3 100644
--- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.cc
@@ -14,9 +14,9 @@
 #include "base/strings/stringprintf.h"
 #include "base/time/time.h"
 #include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h"
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
 #include "components/web_package/signed_web_bundles/signed_web_bundle_id.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/abseil-cpp/absl/types/variant.h"
 
@@ -43,7 +43,8 @@
 
 IsolatedWebAppReaderRegistry::IsolatedWebAppReaderRegistry(
     std::unique_ptr<IsolatedWebAppValidator> validator,
-    base::RepeatingCallback<std::unique_ptr<SignedWebBundleSignatureVerifier>()>
+    base::RepeatingCallback<
+        std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>()>
         signature_verifier_factory)
     : validator_(std::move(validator)),
       signature_verifier_factory_(std::move(signature_verifier_factory)) {}
@@ -78,8 +79,8 @@
     }
   }
 
-  std::unique_ptr<SignedWebBundleSignatureVerifier> signature_verifier =
-      signature_verifier_factory_.Run();
+  std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>
+      signature_verifier = signature_verifier_factory_.Run();
   std::unique_ptr<SignedWebBundleReader> reader =
       SignedWebBundleReader::CreateAndStartReading(
           web_bundle_path,
@@ -179,7 +180,8 @@
                   "Public keys of the Isolated Web App are untrusted: %s",
                   error.message.c_str());
             },
-            [](const SignedWebBundleSignatureVerifier::Error& error) {
+            [](const web_package::SignedWebBundleSignatureVerifier::Error&
+                   error) {
               return base::StringPrintf("Failed to verify signatures: %s",
                                         error.message.c_str());
             },
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.h b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.h
index 57091aa9..0ded9f5 100644
--- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.h
+++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry.h
@@ -17,9 +17,9 @@
 #include "base/types/expected.h"
 #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_validator.h"
 #include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h"
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom-forward.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 #include "services/network/public/cpp/resource_request.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -41,7 +41,7 @@
   explicit IsolatedWebAppReaderRegistry(
       std::unique_ptr<IsolatedWebAppValidator> validator,
       base::RepeatingCallback<
-          std::unique_ptr<SignedWebBundleSignatureVerifier>()>
+          std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>()>
           signature_verifier_factory);
   ~IsolatedWebAppReaderRegistry() override;
 
@@ -230,7 +230,8 @@
   base::flat_set<base::FilePath> verified_files_;
 
   std::unique_ptr<IsolatedWebAppValidator> validator_;
-  base::RepeatingCallback<std::unique_ptr<SignedWebBundleSignatureVerifier>()>
+  base::RepeatingCallback<
+      std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>()>
       signature_verifier_factory_;
 
   SEQUENCE_CHECKER(sequence_checker_);
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_factory.cc b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_factory.cc
index 228593f..fd79c4d 100644
--- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_factory.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_factory.cc
@@ -10,9 +10,9 @@
 #include "base/feature_list.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_validator.h"
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
 #include "chrome/browser/web_applications/web_app_utils.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 #include "content/public/common/content_features.h"
 
 namespace web_app {
@@ -43,7 +43,8 @@
     content::BrowserContext* context) const {
   return new IsolatedWebAppReaderRegistry(
       std::make_unique<IsolatedWebAppValidator>(), base::BindRepeating([]() {
-        return std::make_unique<SignedWebBundleSignatureVerifier>();
+        return std::make_unique<
+            web_package::SignedWebBundleSignatureVerifier>();
       }));
 }
 
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_unittest.cc b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_unittest.cc
index 82d70c61..772aa70 100644
--- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_unittest.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_reader_registry_unittest.cc
@@ -19,10 +19,10 @@
 #include "base/test/test_future.h"
 #include "base/types/expected.h"
 #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_validator.h"
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
 #include "chrome/browser/web_applications/test/signed_web_bundle_utils.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
 #include "components/web_package/signed_web_bundles/signed_web_bundle_id.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 #include "components/web_package/test_support/mock_web_bundle_parser_factory.h"
 #include "content/public/common/content_features.h"
 #include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
@@ -59,10 +59,12 @@
   absl::optional<std::string> integrity_block_error_;
 };
 
-class FakeSignatureVerifier : public SignedWebBundleSignatureVerifier {
+class FakeSignatureVerifier
+    : public web_package::SignedWebBundleSignatureVerifier {
  public:
   explicit FakeSignatureVerifier(
-      absl::optional<SignedWebBundleSignatureVerifier::Error> error,
+      absl::optional<web_package::SignedWebBundleSignatureVerifier::Error>
+          error,
       base::RepeatingClosure on_verify_signatures = base::DoNothing())
       : error_(error), on_verify_signatures_(on_verify_signatures) {}
 
@@ -76,7 +78,7 @@
   }
 
  private:
-  absl::optional<SignedWebBundleSignatureVerifier::Error> error_;
+  absl::optional<web_package::SignedWebBundleSignatureVerifier::Error> error_;
   base::RepeatingClosure on_verify_signatures_;
 };
 
@@ -125,7 +127,8 @@
     registry_ = std::make_unique<IsolatedWebAppReaderRegistry>(
         std::make_unique<IsolatedWebAppValidator>(),
         base::BindRepeating(
-            []() -> std::unique_ptr<SignedWebBundleSignatureVerifier> {
+            []() -> std::unique_ptr<
+                     web_package::SignedWebBundleSignatureVerifier> {
               return std::make_unique<FakeSignatureVerifier>(absl::nullopt);
             }));
 
@@ -297,7 +300,8 @@
   registry_ = std::make_unique<IsolatedWebAppReaderRegistry>(
       std::make_unique<FakeIsolatedWebAppValidator>(absl::nullopt),
       base::BindLambdaForTesting(
-          [&]() -> std::unique_ptr<SignedWebBundleSignatureVerifier> {
+          [&]() -> std::unique_ptr<
+                    web_package::SignedWebBundleSignatureVerifier> {
             return std::make_unique<FakeSignatureVerifier>(
                 absl::nullopt, base::BindLambdaForTesting(
                                    [&]() { ++num_signature_verifications; }));
@@ -433,7 +437,8 @@
   registry_ = std::make_unique<IsolatedWebAppReaderRegistry>(
       std::make_unique<FakeIsolatedWebAppValidator>("test error"),
       base::BindRepeating(
-          []() -> std::unique_ptr<SignedWebBundleSignatureVerifier> {
+          []() -> std::unique_ptr<
+                   web_package::SignedWebBundleSignatureVerifier> {
             return std::make_unique<FakeSignatureVerifier>(absl::nullopt);
           }));
 
@@ -454,7 +459,7 @@
 class IsolatedWebAppReaderRegistrySignatureVerificationErrorTest
     : public IsolatedWebAppReaderRegistryTest,
       public ::testing::WithParamInterface<
-          SignedWebBundleSignatureVerifier::Error> {};
+          web_package::SignedWebBundleSignatureVerifier::Error> {};
 
 TEST_P(IsolatedWebAppReaderRegistrySignatureVerificationErrorTest,
        SignatureVerificationError) {
@@ -464,7 +469,8 @@
   registry_ = std::make_unique<IsolatedWebAppReaderRegistry>(
       std::make_unique<FakeIsolatedWebAppValidator>(absl::nullopt),
       base::BindRepeating(
-          []() -> std::unique_ptr<SignedWebBundleSignatureVerifier> {
+          []() -> std::unique_ptr<
+                   web_package::SignedWebBundleSignatureVerifier> {
             return std::make_unique<FakeSignatureVerifier>(GetParam());
           }));
 
@@ -499,10 +505,10 @@
     All,
     IsolatedWebAppReaderRegistrySignatureVerificationErrorTest,
     ::testing::Values(
-        SignedWebBundleSignatureVerifier::Error::ForInternalError(
+        web_package::SignedWebBundleSignatureVerifier::Error::ForInternalError(
             "internal error"),
-        SignedWebBundleSignatureVerifier::Error::ForInvalidSignature(
-            "invalid signature")));
+        web_package::SignedWebBundleSignatureVerifier::Error::
+            ForInvalidSignature("invalid signature")));
 
 TEST_F(IsolatedWebAppReaderRegistryTest, TestInvalidMetadata) {
   network::ResourceRequest resource_request;
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc
index 8539e41..7e2d107 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.cc
@@ -29,7 +29,8 @@
 
 SignedWebBundleReader::SignedWebBundleReader(
     const base::FilePath& web_bundle_path,
-    std::unique_ptr<SignedWebBundleSignatureVerifier> signature_verifier)
+    std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>
+        signature_verifier)
     : web_bundle_path_(web_bundle_path),
       signature_verifier_(std::move(signature_verifier)) {}
 
@@ -43,7 +44,8 @@
     const base::FilePath& web_bundle_path,
     IntegrityBlockReadResultCallback integrity_block_result_callback,
     ReadErrorCallback read_error_callback,
-    std::unique_ptr<SignedWebBundleSignatureVerifier> signature_verifier) {
+    std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>
+        signature_verifier) {
   // Using `new` to access a non-public constructor.
   auto reader = base::WrapUnique(new SignedWebBundleReader(
       web_bundle_path, std::move(signature_verifier)));
@@ -197,7 +199,7 @@
 
 void SignedWebBundleReader::OnSignaturesVerified(
     ReadErrorCallback callback,
-    absl::optional<SignedWebBundleSignatureVerifier::Error>
+    absl::optional<web_package::SignedWebBundleSignatureVerifier::Error>
         verification_error) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   CHECK_EQ(state_, State::kInitializing);
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h
index ed6fe197..a82fd774 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h
+++ b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader.h
@@ -12,10 +12,10 @@
 #include "base/files/file_path.h"
 #include "base/sequence_checker.h"
 #include "base/types/expected.h"
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom-forward.h"
 #include "components/web_package/shared_file.h"
 #include "components/web_package/signed_web_bundles/signed_web_bundle_integrity_block.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 #include "net/base/net_errors.h"
 #include "services/data_decoder/public/cpp/safe_web_bundle_parser.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -106,7 +106,7 @@
       // `integrity_block_result_callback`.
       AbortedByCaller,
       // Triggered when signature verification fails.
-      SignedWebBundleSignatureVerifier::Error,
+      web_package::SignedWebBundleSignatureVerifier::Error,
       // Triggered when metadata parsing fails.
       web_package::mojom::BundleMetadataParseErrorPtr>;
   using ReadErrorCallback =
@@ -123,8 +123,9 @@
       const base::FilePath& web_bundle_path,
       IntegrityBlockReadResultCallback integrity_block_result_callback,
       ReadErrorCallback read_error_callback,
-      std::unique_ptr<SignedWebBundleSignatureVerifier> signature_verifier =
-          std::make_unique<SignedWebBundleSignatureVerifier>());
+      std::unique_ptr<
+          web_package::SignedWebBundleSignatureVerifier> signature_verifier =
+          std::make_unique<web_package::SignedWebBundleSignatureVerifier>());
 
   // This class internally transitions through the following states:
   //
@@ -209,7 +210,8 @@
  private:
   explicit SignedWebBundleReader(
       const base::FilePath& web_bundle_path,
-      std::unique_ptr<SignedWebBundleSignatureVerifier> signature_verifier);
+      std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>
+          signature_verifier);
 
   void Initialize(
       IntegrityBlockReadResultCallback integrity_block_result_callback,
@@ -242,7 +244,7 @@
 
   void OnSignaturesVerified(
       ReadErrorCallback callback,
-      absl::optional<SignedWebBundleSignatureVerifier::Error>
+      absl::optional<web_package::SignedWebBundleSignatureVerifier::Error>
           verification_error);
 
   void ReadMetadata(ReadErrorCallback callback);
@@ -274,7 +276,8 @@
 
   bool is_disconnected_ = false;
   base::FilePath web_bundle_path_;
-  std::unique_ptr<SignedWebBundleSignatureVerifier> signature_verifier_;
+  std::unique_ptr<web_package::SignedWebBundleSignatureVerifier>
+      signature_verifier_;
 
   std::unique_ptr<data_decoder::SafeWebBundleParser> parser_;
   base::RepeatingClosure parser_disconnect_callback_for_testing_;
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc
index 55b6e02..5e96640 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc
+++ b/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_reader_unittest.cc
@@ -12,9 +12,9 @@
 #include "base/test/bind.h"
 #include "base/test/test_future.h"
 #include "base/threading/sequenced_task_runner_handle.h"
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
 #include "chrome/browser/web_applications/test/signed_web_bundle_utils.h"
 #include "components/web_package/mojom/web_bundle_parser.mojom.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 #include "components/web_package/test_support/mock_web_bundle_parser_factory.h"
 #include "content/public/test/browser_task_environment.h"
 #include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
@@ -35,10 +35,12 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 0, 0};
 
-class FakeSignatureVerifier : public SignedWebBundleSignatureVerifier {
+class FakeSignatureVerifier
+    : public web_package::SignedWebBundleSignatureVerifier {
  public:
   explicit FakeSignatureVerifier(
-      absl::optional<SignedWebBundleSignatureVerifier::Error> error)
+      absl::optional<web_package::SignedWebBundleSignatureVerifier::Error>
+          error)
       : error_(error) {}
 
   void VerifySignatures(
@@ -50,7 +52,7 @@
   }
 
  private:
-  absl::optional<SignedWebBundleSignatureVerifier::Error> error_;
+  absl::optional<web_package::SignedWebBundleSignatureVerifier::Error> error_;
 };
 
 }  // namespace
@@ -105,7 +107,7 @@
       SignedWebBundleReader::ReadErrorCallback callback,
       VerificationAction verification_action =
           VerificationAction::ContinueAndVerifySignatures(),
-      absl::optional<SignedWebBundleSignatureVerifier::Error>
+      absl::optional<web_package::SignedWebBundleSignatureVerifier::Error>
           signature_verifier_error = absl::nullopt,
       const std::string test_file_data = kResponseBody) {
     // Provide a buffer that contains the contents of just a single
@@ -272,7 +274,7 @@
 class SignedWebBundleReaderSignatureVerificationErrorTest
     : public SignedWebBundleReaderTest,
       public ::testing::WithParamInterface<
-          SignedWebBundleSignatureVerifier::Error> {};
+          web_package::SignedWebBundleSignatureVerifier::Error> {};
 
 TEST_P(SignedWebBundleReaderSignatureVerificationErrorTest,
        SignatureVerificationError) {
@@ -289,7 +291,8 @@
   ASSERT_TRUE(parse_error.has_value());
 
   auto* error =
-      absl::get_if<SignedWebBundleSignatureVerifier::Error>(&*parse_error);
+      absl::get_if<web_package::SignedWebBundleSignatureVerifier::Error>(
+          &*parse_error);
   ASSERT_TRUE(error);
   EXPECT_EQ(error->message, GetParam().message);
   EXPECT_EQ(error->type, GetParam().type);
@@ -299,17 +302,17 @@
     All,
     SignedWebBundleReaderSignatureVerificationErrorTest,
     ::testing::Values(
-        SignedWebBundleSignatureVerifier::Error::ForInternalError(
+        web_package::SignedWebBundleSignatureVerifier::Error::ForInternalError(
             "internal error"),
-        SignedWebBundleSignatureVerifier::Error::ForInvalidSignature(
-            "invalid signature")));
+        web_package::SignedWebBundleSignatureVerifier::Error::
+            ForInvalidSignature("invalid signature")));
 
 #if BUILDFLAG(IS_CHROMEOS)
 
 // Test that signatures are not verified when the
 // `integrity_block_callback` asks to skip signature verification and
-// thus the provided `SignedWebBundleSignatureVerifier::Error` is never
-// triggered.
+// thus the provided `web_package::SignedWebBundleSignatureVerifier::Error` is
+// never triggered.
 TEST_F(SignedWebBundleReaderTest,
        ReadIntegrityBlockAndSkipSignatureVerification) {
   base::test::TestFuture<absl::optional<SignedWebBundleReader::ReadError>>
@@ -317,7 +320,7 @@
   auto reader = CreateReaderAndInitialize(
       parse_error_future.GetCallback(),
       VerificationAction::ContinueAndSkipSignatureVerification(),
-      SignedWebBundleSignatureVerifier::Error::ForInvalidSignature(
+      web_package::SignedWebBundleSignatureVerifier::Error::ForInvalidSignature(
           "invalid signature"));
 
   parser_factory_->RunIntegrityBlockCallback(integrity_block_.Clone());
diff --git a/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.h b/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.h
index 095ab70..2687858 100644
--- a/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.h
+++ b/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.h
@@ -130,6 +130,24 @@
                 ShimTerminatedCallback terminated_callback,
                 std::unique_ptr<ShortcutInfo> shortcut_info);
 
+// Launch the shim specified by `shim_path` as if the user launched it directly,
+// except making sure that it connects to the currently running chrome or
+// browser_test instance.
+// If `urls` is not empty, the app is launched to handle those urls.
+// Return in `launched_callback` the pid that was launched (or an invalid pid
+// if none was launched). If `launched_callback` returns a valid pid, then
+// `terminated_callback` will be called when that process terminates.
+void LaunchShimForTesting(const base::FilePath& shim_path,
+                          const std::vector<GURL> urls,
+                          ShimLaunchedCallback launched_callback,
+                          ShimTerminatedCallback terminated_callback);
+
+// Waits for the shim with the given `app_id` and `shim_path` to terminate. If
+// there is no running application matching `app_id` and `shim_path` returns
+// immediately.
+void WaitForShimToQuitForTesting(const base::FilePath& shim_path,
+                                 const std::string& app_id);
+
 std::unique_ptr<ShortcutInfo> RecordAppShimErrorAndBuildShortcutInfo(
     const base::FilePath& bundle_path);
 
diff --git a/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.mm b/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.mm
index 688fb7e..94590a2 100644
--- a/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.mm
+++ b/chrome/browser/web_applications/os_integration/web_app_shortcut_mac.mm
@@ -35,6 +35,7 @@
 #include "base/no_destructor.h"
 #include "base/path_service.h"
 #include "base/process/process_handle.h"
+#include "base/run_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
@@ -371,6 +372,32 @@
   return false;
 }
 
+base::CommandLine BuildCommandLineForShimLaunch() {
+  base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
+  command_line.AppendSwitchASCII(
+      app_mode::kLaunchedByChromeProcessId,
+      base::NumberToString(base::GetCurrentProcId()));
+  command_line.AppendSwitchPath(app_mode::kLaunchedByChromeBundlePath,
+                                base::mac::MainBundlePath());
+
+  // When running unbundled (e.g, when running browser_tests), the path
+  // returned by base::mac::FrameworkBundlePath will not include the version.
+  // Manually append it.
+  // https://crbug.com/1286681
+  const base::FilePath framework_bundle_path =
+      base::mac::AmIBundled() ? base::mac::FrameworkBundlePath()
+                              : base::mac::FrameworkBundlePath()
+                                    .Append("Versions")
+                                    .Append(version_info::GetVersionNumber());
+  command_line.AppendSwitchPath(app_mode::kLaunchedByChromeFrameworkBundlePath,
+                                framework_bundle_path);
+  command_line.AppendSwitchPath(
+      app_mode::kLaunchedByChromeFrameworkDylibPath,
+      framework_bundle_path.Append(chrome::kFrameworkExecutableName));
+
+  return command_line;
+}
+
 void LaunchShimOnFileThread(LaunchShimUpdateBehavior update_behavior,
                             ShimLaunchedCallback launched_callback,
                             ShimTerminatedCallback terminated_callback,
@@ -411,27 +438,7 @@
     if (!base::PathExists(shim_path))
       continue;
 
-    base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
-    command_line.AppendSwitchASCII(
-        app_mode::kLaunchedByChromeProcessId,
-        base::NumberToString(base::GetCurrentProcId()));
-    command_line.AppendSwitchPath(app_mode::kLaunchedByChromeBundlePath,
-                                  base::mac::MainBundlePath());
-
-    // When running unbundled (e.g, when running browser_tests), the path
-    // returned by base::mac::FrameworkBundlePath will not include the version.
-    // Manually append it.
-    // https://crbug.com/1286681
-    const base::FilePath framework_bundle_path =
-        base::mac::AmIBundled() ? base::mac::FrameworkBundlePath()
-                                : base::mac::FrameworkBundlePath()
-                                      .Append("Versions")
-                                      .Append(version_info::GetVersionNumber());
-    command_line.AppendSwitchPath(
-        app_mode::kLaunchedByChromeFrameworkBundlePath, framework_bundle_path);
-    command_line.AppendSwitchPath(
-        app_mode::kLaunchedByChromeFrameworkDylibPath,
-        framework_bundle_path.Append(chrome::kFrameworkExecutableName));
+    base::CommandLine command_line = BuildCommandLineForShimLaunch();
 
     if (launched_after_rebuild)
       command_line.AppendSwitch(app_mode::kLaunchedAfterRebuild);
@@ -1407,6 +1414,69 @@
       std::move(shortcut_info));
 }
 
+void LaunchShimForTesting(const base::FilePath& shim_path,  // IN-TEST
+                          const std::vector<GURL> urls,
+                          ShimLaunchedCallback launched_callback,
+                          ShimTerminatedCallback terminated_callback) {
+  base::CommandLine command_line = BuildCommandLineForShimLaunch();
+  command_line.AppendSwitch(app_mode::kLaunchedForTest);
+  command_line.AppendSwitch(app_mode::kIsNormalLaunch);
+
+  std::vector<std::string> url_specs;
+  url_specs.reserve(urls.size());
+  for (const GURL& url : urls) {
+    url_specs.push_back(url.spec());
+  }
+
+  base::scoped_nsobject<NSRunningApplication> app;
+  if (urls.empty()) {
+    app.reset(
+        base::mac::OpenApplicationWithPath(
+            shim_path, command_line,
+            NSWorkspaceLaunchDefault | NSWorkspaceLaunchWithoutActivation),
+        base::scoped_policy::RETAIN);
+  } else {
+    app.reset(
+        base::mac::OpenApplicationWithPathAndURLs(
+            shim_path, command_line, url_specs,
+            NSWorkspaceLaunchDefault | NSWorkspaceLaunchWithoutActivation),
+        base::scoped_policy::RETAIN);
+  }
+  if (app) {
+    content::GetUIThreadTaskRunner({})->PostTask(
+        FROM_HERE, base::BindOnce(&RunAppLaunchCallbacks, app,
+                                  std::move(launched_callback),
+                                  std::move(terminated_callback)));
+    return;
+  }
+  LOG(ERROR) << "Failed to open application with path: " << shim_path;
+
+  content::GetUIThreadTaskRunner({})->PostTask(
+      FROM_HERE, base::BindOnce(std::move(launched_callback), base::Process()));
+}
+
+void WaitForShimToQuitForTesting(const base::FilePath& shim_path,  // IN-TEST
+                                 const std::string& app_id) {
+  std::string bundle_id = GetBundleIdentifier(app_id);
+  NSArray<NSRunningApplication*>* apps = [NSRunningApplication
+      runningApplicationsWithBundleIdentifier:base::SysUTF8ToNSString(
+                                                  bundle_id)];
+  NSRunningApplication* matching_app = nil;
+  for (NSRunningApplication* app in apps) {
+    if (base::mac::NSURLToFilePath(app.bundleURL) == shim_path) {
+      matching_app = app;
+      break;
+    }
+  }
+  if (!matching_app)
+    return;
+
+  base::RunLoop loop;
+  [[TerminationObserver alloc] initWithRunningApplication:matching_app
+                                                 callback:loop.QuitClosure()];
+  loop.Run();
+}
+
 // Removes the app shim from the list of Login Items.
 void RemoveAppShimFromLoginItems(const std::string& app_id) {
   base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index bb53f59..67e4ef1 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1667347081-83306fd2a5c80179ab7baa1da74a54991cae69db.profdata
+chrome-linux-main-1667390101-69fc5ef43375aa1d851c6b73e2cd659dd5befba7.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index dcf17f3..c4be34eb 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1667347081-7d463e89b4d7df7573b3775dee9233d462212baf.profdata
+chrome-mac-arm-main-1667390101-1e7e8b1d29fb48c57163421e2671dfd4cad813a5.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index dd6b9d0c..f2939c42c 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1667347081-86573005ed39dea6a11dee3b0c9a2b0b4d4ea0f8.profdata
+chrome-mac-main-1667390101-d771bfa0d011007b86418e89dc484c086169e30d.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index e47f1b7..a889df25 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1667347081-4feaa5de3a738d363c8830a7ce0970b1f822029f.profdata
+chrome-win32-main-1667401199-3470cbe5d668f73b099cbe9bad1f59cee0793fd7.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index ba322dd..2e532dc 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1667347081-22f353e83a943e1b08bbfccc9dbc8e974652a16b.profdata
+chrome-win64-main-1667401199-c0f6ac7aa08b8b51fca4b565777e0e0f9ed33e21.profdata
diff --git a/chrome/common/chrome_render_frame.mojom b/chrome/common/chrome_render_frame.mojom
index d89f167..2822632 100644
--- a/chrome/common/chrome_render_frame.mojom
+++ b/chrome/common/chrome_render_frame.mojom
@@ -10,6 +10,8 @@
 import "ui/gfx/geometry/mojom/geometry.mojom";
 import "url/mojom/url.mojom";
 
+const int32 kDefaultQuality = 90;
+
 enum ImageFormat {
   JPEG,
   PNG,
@@ -33,12 +35,16 @@
   // selected or there's an error capturing the image, |image_data| will be
   // empty. If the image area is larger than |image_min_area_pixels| it will be
   // downscaled to fit within |image_max_size_pixels|.
-  // If |image_format| is ORIGINAL, return orinal image data except image
+  // If |image_format| is ORIGINAL, return original image data except image
   // larger than size specified as a parameter. In that case, returns a resized
-  // JPEG static image.
+  // JPEG static image. |quality| is an integer between 0-100 where 100
+  // is the highest quality. Higher encoding quality results in a better visual
+  // image, but takes longer to encode and yields a larger image.
+  // |quality| only affects lossy |image_formats| (aka JPEG/WebP).
   RequestImageForContextNode(int32 image_min_area_pixels,
-                                 gfx.mojom.Size image_max_size_pixels,
-                                 ImageFormat image_format)
+                             gfx.mojom.Size image_max_size_pixels,
+                             ImageFormat image_format,
+                             int32 quality)
       => (array<uint8> image_data, gfx.mojom.Size original_size,
       string encoded_extension, array<lens.mojom.LatencyLog> log_data);
 
diff --git a/chrome/common/mac/app_mode_common.h b/chrome/common/mac/app_mode_common.h
index 7bb95bc..e1a19f0 100644
--- a/chrome/common/mac/app_mode_common.h
+++ b/chrome/common/mac/app_mode_common.h
@@ -70,6 +70,13 @@
 // it fails to launch again, don't trigger another rebuild.
 extern const char kLaunchedAfterRebuild[];
 
+// Indicates to the shim that even if `kLaunchedByChromeProcessId` was also
+// specified, this should still be considered a "normal" launch as opposed to a
+// "register only" launch. This is used by tests to launch a shim as if the user
+// launched it, while still making sure it connects to the correct chrome
+// process.
+extern const char kIsNormalLaunch[];
+
 // Path to an app shim bundle. Indicates to Chrome that this shim attempted to
 // launch but failed.
 extern const char kAppShimError[];
diff --git a/chrome/common/mac/app_mode_common.mm b/chrome/common/mac/app_mode_common.mm
index 972cd1f..3896207 100644
--- a/chrome/common/mac/app_mode_common.mm
+++ b/chrome/common/mac/app_mode_common.mm
@@ -27,6 +27,7 @@
     "launched-by-chrome-framework-dylib-path";
 const char kLaunchedForTest[] = "launched-for-test";
 const char kLaunchedAfterRebuild[] = "launched-after-rebuild";
+const char kIsNormalLaunch[] = "is-normal-launch";
 
 const char kAppShimError[] = "app-shim-error";
 
diff --git a/chrome/installer/BUILD.gn b/chrome/installer/BUILD.gn
index d90d7653..6b2eeecb 100644
--- a/chrome/installer/BUILD.gn
+++ b/chrome/installer/BUILD.gn
@@ -11,6 +11,8 @@
   enable_linux_installer =
       is_linux && !is_component_build && use_sysroot && !using_sanitizer &&
       !is_chromeos_lacros && !is_chrome_for_testing_branded
+
+  enable_mac_installer = !is_chrome_for_testing_branded
 }
 
 # Meta-target that forwards to the installer of the correct type (if any).
@@ -19,7 +21,7 @@
     deps = [ "//chrome/installer/linux" ]
   }
 
-  if (is_mac) {
+  if (enable_mac_installer && is_mac) {
     deps = [ "//chrome/installer/mac" ]
   }
 }
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc
index f9e5ed7..5b95eac 100644
--- a/chrome/renderer/chrome_render_frame_observer.cc
+++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -386,6 +386,7 @@
     int32_t thumbnail_min_area_pixels,
     const gfx::Size& thumbnail_max_size_pixels,
     chrome::mojom::ImageFormat image_format,
+    int32_t quality,
     RequestImageForContextNodeCallback callback) {
   WebNode context_node = render_frame()->GetWebFrame()->ContextMenuImageNode();
   std::vector<uint8_t> image_data;
@@ -448,7 +449,6 @@
     }
   }
 
-  constexpr int kDefaultQuality = 90;
   std::vector<unsigned char> data;
   if (image_format == chrome::mojom::ImageFormat::ORIGINAL) {
     // ORIGINAL will only fall back to here if the image needs to downscale.
@@ -474,7 +474,7 @@
       }
       break;
     case chrome::mojom::ImageFormat::WEBP:
-      if (gfx::WebpCodec::Encode(bitmap, kDefaultQuality, &data)) {
+      if (gfx::WebpCodec::Encode(bitmap, quality, &data)) {
         image_data.swap(data);
         image_extension = kWebpExtension;
       }
@@ -482,7 +482,7 @@
     case chrome::mojom::ImageFormat::ORIGINAL:
     // Any format other than PNG and JPEG fall back to here.
     case chrome::mojom::ImageFormat::JPEG:
-      if (gfx::JPEGCodec::Encode(bitmap, kDefaultQuality, &data)) {
+      if (gfx::JPEGCodec::Encode(bitmap, quality, &data)) {
         image_data.swap(data);
         image_extension = kJpgExtension;
       }
diff --git a/chrome/renderer/chrome_render_frame_observer.h b/chrome/renderer/chrome_render_frame_observer.h
index e96208b78..323bf23 100644
--- a/chrome/renderer/chrome_render_frame_observer.h
+++ b/chrome/renderer/chrome_render_frame_observer.h
@@ -92,6 +92,7 @@
       int32_t thumbnail_min_area_pixels,
       const gfx::Size& thumbnail_max_size_pixels,
       chrome::mojom::ImageFormat image_format,
+      int32_t quality,
       RequestImageForContextNodeCallback callback) override;
   void RequestReloadImageForContextNode() override;
 #if BUILDFLAG(IS_ANDROID)
diff --git a/chrome/services/printing/BUILD.gn b/chrome/services/printing/BUILD.gn
index 6e56fa4f..94e7afba 100644
--- a/chrome/services/printing/BUILD.gn
+++ b/chrome/services/printing/BUILD.gn
@@ -90,6 +90,7 @@
     deps += [
       "//chrome/common/printing",
       "//components/crash/core/common",
+      "//printing:printing_base",
       "//ui/gfx",
     ]
 
diff --git a/chrome/services/printing/print_backend_service_impl.cc b/chrome/services/printing/print_backend_service_impl.cc
index a4e91f5..39d61a3 100644
--- a/chrome/services/printing/print_backend_service_impl.cc
+++ b/chrome/services/printing/print_backend_service_impl.cc
@@ -50,12 +50,15 @@
 
 #if BUILDFLAG(IS_WIN)
 #include "base/containers/queue.h"
+#include "base/types/expected.h"
 #include "base/win/win_util.h"
 #include "chrome/services/printing/public/mojom/printer_xml_parser.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
+#include "printing/backend/xps_utils_win.h"
 #include "printing/emf_win.h"
 #include "printing/printed_page_win.h"
+#include "printing/printing_features.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/native_widget_types.h"
@@ -537,6 +540,20 @@
         mojom::PrinterCapsAndInfoResult::NewResultCode(result));
     return;
   }
+#if BUILDFLAG(IS_WIN)
+  if (xml_parser_remote_.is_bound() &&
+      base::FeatureList::IsEnabled(features::kReadPrinterCapabilitiesWithXps)) {
+    base::expected<XpsCapabilities, mojom::ResultCode> xps_capabilities =
+        GetXpsCapabilities(printer_name);
+    if (!xps_capabilities.has_value()) {
+      std::move(callback).Run(mojom::PrinterCapsAndInfoResult::NewResultCode(
+          xps_capabilities.error()));
+      return;
+    }
+
+    MergeXpsCapabilities(std::move(xps_capabilities.value()), caps);
+  }
+#endif  // BUILDFLAG(IS_WIN)
   mojom::PrinterCapsAndInfoPtr caps_and_info = mojom::PrinterCapsAndInfo::New(
       std::move(printer_info), std::move(user_defined_papers), std::move(caps));
   std::move(callback).Run(
@@ -824,4 +841,35 @@
   // next job waiting to be started (if any).
 }
 
+#if BUILDFLAG(IS_WIN)
+base::expected<XpsCapabilities, mojom::ResultCode>
+PrintBackendServiceImpl::GetXpsCapabilities(const std::string& printer_name) {
+  base::expected<std::string, mojom::ResultCode> xml =
+      print_backend_->GetXmlPrinterCapabilitiesForXpsDriver(printer_name);
+  if (!xml.has_value()) {
+    DLOG(ERROR) << "Failure getting XPS capabilities of printer "
+                << printer_name << ", error: " << xml.error();
+    return base::unexpected(xml.error());
+  }
+
+  mojom::PrinterCapabilitiesValueResultPtr value_result;
+  xml_parser_remote_->ParseXmlForPrinterCapabilities(xml.value(),
+                                                     &value_result);
+  if (value_result->is_result_code()) {
+    DLOG(ERROR) << "Failure parsing XML of XPS capabilities of printer "
+                << printer_name << ", error: " << xml.error();
+    return base::unexpected(value_result->get_result_code());
+  }
+
+  base::expected<XpsCapabilities, mojom::ResultCode> xps_capabilities =
+      ParseValueForXpsPrinterCapabilities(value_result->get_capabilities());
+  if (!xps_capabilities.has_value()) {
+    DLOG(ERROR) << "Failure parsing value of XPS capabilities of printer "
+                << printer_name << ", error: " << xml.error();
+    return base::unexpected(xps_capabilities.error());
+  }
+  return std::move(xps_capabilities).value();
+}
+#endif  // BUILDFLAG(IS_WIN)
+
 }  // namespace printing
diff --git a/chrome/services/printing/print_backend_service_impl.h b/chrome/services/printing/print_backend_service_impl.h
index cfd95ee..98da5a1 100644
--- a/chrome/services/printing/print_backend_service_impl.h
+++ b/chrome/services/printing/print_backend_service_impl.h
@@ -28,6 +28,7 @@
 #include "ui/gfx/native_widget_types.h"
 
 #if BUILDFLAG(IS_WIN)
+#include "base/types/expected.h"
 #include "chrome/services/printing/public/mojom/printer_xml_parser.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
@@ -208,6 +209,13 @@
   DocumentHelper* GetDocumentHelper(int document_cookie);
   void RemoveDocumentHelper(DocumentHelper& document_helper);
 
+#if BUILDFLAG(IS_WIN)
+  // Get XPS capabilities for printer `printer_name`, or return
+  // mojom::ResultCode on error.
+  base::expected<XpsCapabilities, mojom::ResultCode> GetXpsCapabilities(
+      const std::string& printer_name);
+#endif  // BUILDFLAG(IS_WIN)
+
   // Crash key is kept at class level so that we can obtain printer driver
   // information for a prior call should the process be terminated by the
   // remote.  This can happen in the case of Mojo message validation.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 26b3bf61..f43c303 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -530,6 +530,8 @@
       "../browser/ash/policy/core/device_policy_cros_browser_test.h",
       "../browser/ash/policy/core/device_policy_cros_test_helper.cc",
       "../browser/ash/policy/core/device_policy_cros_test_helper.h",
+      "../browser/ash/policy/enrollment/psm/fake_rlwe_client.cc",
+      "../browser/ash/policy/enrollment/psm/fake_rlwe_client.h",
       "../browser/ash/policy/login/signin_profile_extensions_policy_test_base.cc",
       "../browser/ash/policy/login/signin_profile_extensions_policy_test_base.h",
       "../browser/ash/printing/history/test_print_job_database.cc",
diff --git a/chrome/test/chromedriver/BUILD.gn b/chrome/test/chromedriver/BUILD.gn
index 9e2aa4fc..e083353 100644
--- a/chrome/test/chromedriver/BUILD.gn
+++ b/chrome/test/chromedriver/BUILD.gn
@@ -436,6 +436,7 @@
 test("chromedriver_unittests") {
   sources = [
     "capabilities_unittest.cc",
+    "chrome/bidi_tracker_unittest.cc",
     "chrome/browser_info_unittest.cc",
     "chrome/cast_tracker_unittest.cc",
     "chrome/chrome_finder_unittest.cc",
diff --git a/chrome/test/chromedriver/chrome/bidi_tracker.cc b/chrome/test/chromedriver/chrome/bidi_tracker.cc
index 4a32bd8..a770e20 100644
--- a/chrome/test/chromedriver/chrome/bidi_tracker.cc
+++ b/chrome/test/chromedriver/chrome/bidi_tracker.cc
@@ -9,6 +9,7 @@
 #include <utility>
 
 #include "base/logging.h"
+#include "base/strings/string_util.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/devtools_client.h"
 #include "chrome/test/chromedriver/chrome/status.h"
@@ -24,30 +25,48 @@
 Status BidiTracker::OnEvent(DevToolsClient* client,
                             const std::string& method,
                             const base::DictionaryValue& params) {
+  return OnEvent(client, method, params.GetDict());
+}
+
+Status BidiTracker::OnEvent(DevToolsClient* client,
+                            const std::string& method,
+                            const base::Value::Dict& params) {
   if (method != "Runtime.bindingCalled") {
     return Status(kOk);
   }
-
-  const base::Value* nameVal = params.FindKey("name");
-  if (nameVal == nullptr) {
+  const std::string* name = params.FindString("name");
+  if (!name) {
     return Status(kUnknownError, "Runtime.bindingCalled missing 'name'");
   }
-  std::string name = nameVal->GetString();
-  if (name != "sendBidiResponse") {
+  if (*name != "sendBidiResponse") {
     // We are not interested in this function call
     return Status(kOk);
   }
-
-  const base::Value::Dict* payload = params.GetDict().FindDict("payload");
+  const base::Value::Dict* payload = params.FindDict("payload");
   if (payload == nullptr) {
     return Status(kUnknownError, "Runtime.bindingCalled missing 'payload'");
   }
+  const std::string* channel = payload->FindString("channel");
+  if (!channel || channel->empty()) {
+    // Internally we set non-empty channel to any BiDi command.
+    // Missing or empty channel in the response means that there is a bug.
+    return Status{kUnknownError, "channel is missing in the payload"};
+  }
+  if (!base::EndsWith(*channel, channel_suffix_)) {
+    return Status{kOk};
+  }
 
-  send_bidi_response_.Run(payload->Clone());
-
-  return Status(kOk);
+  return send_bidi_response_.Run(payload->Clone());
 }
 
 void BidiTracker::SetBidiCallback(SendBidiPayloadFunc on_bidi_message) {
   send_bidi_response_ = std::move(on_bidi_message);
 }
+
+const std::string& BidiTracker::ChannelSuffix() const {
+  return channel_suffix_;
+}
+
+void BidiTracker::SetChannelSuffix(std::string channel_suffix) {
+  channel_suffix_ = channel_suffix;
+}
diff --git a/chrome/test/chromedriver/chrome/bidi_tracker.h b/chrome/test/chromedriver/chrome/bidi_tracker.h
index c67c4ec..dbbf253 100644
--- a/chrome/test/chromedriver/chrome/bidi_tracker.h
+++ b/chrome/test/chromedriver/chrome/bidi_tracker.h
@@ -18,7 +18,7 @@
 
 class DevToolsClient;
 class Status;
-typedef base::RepeatingCallback<void(base::Value::Dict)> SendBidiPayloadFunc;
+typedef base::RepeatingCallback<Status(base::Value::Dict)> SendBidiPayloadFunc;
 
 // Tracks the state of the DOM and BiDi messages coming from the browser
 class BidiTracker : public DevToolsEventListener {
@@ -35,11 +35,18 @@
   Status OnEvent(DevToolsClient* client,
                  const std::string& method,
                  const base::DictionaryValue& params) override;
+  Status OnEvent(DevToolsClient* client,
+                 const std::string& method,
+                 const base::Value::Dict& params);
 
   void SetBidiCallback(SendBidiPayloadFunc on_bidi_message);
 
+  const std::string& ChannelSuffix() const;
+  void SetChannelSuffix(std::string channel_suffix);
+
  private:
   SendBidiPayloadFunc send_bidi_response_;
+  std::string channel_suffix_;
 };
 
 #endif  // CHROME_TEST_CHROMEDRIVER_CHROME_BIDI_TRACKER_H_
diff --git a/chrome/test/chromedriver/chrome/bidi_tracker_unittest.cc b/chrome/test/chromedriver/chrome/bidi_tracker_unittest.cc
new file mode 100644
index 0000000..ce4bf44
--- /dev/null
+++ b/chrome/test/chromedriver/chrome/bidi_tracker_unittest.cc
@@ -0,0 +1,217 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string>
+#include <utility>
+
+#include "base/values.h"
+#include "chrome/test/chromedriver/chrome/bidi_tracker.h"
+#include "chrome/test/chromedriver/chrome/status.h"
+#include "chrome/test/chromedriver/net/timeout.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+using testing::Eq;
+using testing::Pointee;
+
+Status AcceptPayload(base::Value::Dict payload) {
+  return Status{kOk};
+}
+
+Status AcceptAndSavePayload(base::Value::Dict* dest,
+                            base::Value::Dict payload) {
+  *dest = std::move(payload);
+  return Status{kOk};
+}
+
+Status RejectPayload(base::Value::Dict payload) {
+  return Status{kUnknownError, "rejected"};
+}
+
+testing::AssertionResult StatusOk(const Status& status) {
+  if (status.IsOk()) {
+    return testing::AssertionSuccess();
+  } else {
+    return testing::AssertionFailure() << status.message();
+  }
+}
+
+base::Value::Dict createValidParams(std::string channel) {
+  base::Value::Dict payload;
+  payload.Set("channel", std::move(channel));
+  base::Value::Dict params;
+  params.Set("name", "sendBidiResponse");
+  params.Set("payload", std::move(payload));
+  return params;
+}
+
+}  // namespace
+
+TEST(BidiTracker, Ctor) {
+  BidiTracker tracker;
+  EXPECT_FALSE(tracker.ListensToConnections());
+  EXPECT_EQ("", tracker.ChannelSuffix());
+}
+
+TEST(BidiTracker, SetChannelSuffix) {
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/not/used/in/the/tests");
+  EXPECT_EQ("/not/used/in/the/tests", tracker.ChannelSuffix());
+}
+
+TEST(BidiTracker, ChannelAndFilter) {
+  base::Value::Dict params = createValidParams("/some");
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/some");
+  base::Value::Dict actual_payload;
+  tracker.SetBidiCallback(
+      base::BindRepeating(&AcceptAndSavePayload, &actual_payload));
+  EXPECT_TRUE(StatusOk(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))));
+  EXPECT_THAT(actual_payload.FindString("channel"), Pointee(Eq("/some")));
+}
+
+TEST(BidiTracker, ChannelLongerThanFilter) {
+  base::Value::Dict params = createValidParams("/one/two");
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/two");
+  base::Value::Dict actual_payload;
+  tracker.SetBidiCallback(
+      base::BindRepeating(&AcceptAndSavePayload, &actual_payload));
+  EXPECT_TRUE(StatusOk(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))));
+  EXPECT_THAT(actual_payload.FindString("channel"), Pointee(Eq("/one/two")));
+}
+
+TEST(BidiTracker, ChannelAndFilterAreDifferent) {
+  base::Value::Dict params = createValidParams("/uno");
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/dos");
+  base::Value::Dict actual_payload;
+  tracker.SetBidiCallback(
+      base::BindRepeating(&AcceptAndSavePayload, &actual_payload));
+  EXPECT_TRUE(StatusOk(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))));
+  EXPECT_TRUE(actual_payload.empty());
+}
+
+TEST(BidiTracker, ChannelAndNoFilter) {
+  base::Value::Dict params = createValidParams("/some");
+  BidiTracker tracker;
+  base::Value::Dict actual_payload;
+  tracker.SetBidiCallback(
+      base::BindRepeating(&AcceptAndSavePayload, &actual_payload));
+  EXPECT_TRUE(StatusOk(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))));
+  EXPECT_THAT(actual_payload.FindString("channel"), Pointee(Eq("/some")));
+}
+
+TEST(BidiTracker, NoChannelNoFilter) {
+  // The infrastructure ensures that that there are no missing or empty channels
+  // If such a channel appears in the response we treat it as an error.
+  base::Value::Dict params;
+  params.Set("name", "sendBidiResponse");
+  params.Set("payload", base::Value::Dict());
+  BidiTracker tracker;
+  tracker.SetBidiCallback(base::BindRepeating(&AcceptPayload));
+  EXPECT_TRUE(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))
+          .IsError());
+}
+
+TEST(BidiTracker, NoChannelAndFilter) {
+  // The infrastructure ensures that that there are no missing or empty channels
+  // If such a channel appears in the response we treat it as an error.
+  base::Value::Dict params;
+  params.Set("name", "sendBidiResponse");
+  params.Set("payload", base::Value::Dict());
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/yyy");
+  tracker.SetBidiCallback(base::BindRepeating(&AcceptPayload));
+  EXPECT_TRUE(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))
+          .IsError());
+}
+
+TEST(BidiTracker, EmptyChannelNoFilter) {
+  // The infrastructure ensures that that there are no missing or empty channels
+  // If such a channel appears in the response we treat it as an error.
+  base::Value::Dict payload;
+  payload.Set("channel", "");
+  base::Value::Dict params;
+  params.Set("name", "sendBidiResponse");
+  params.Set("payload", std::move(payload));
+  BidiTracker tracker;
+  tracker.SetBidiCallback(base::BindRepeating(&AcceptPayload));
+  EXPECT_TRUE(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))
+          .IsError());
+}
+
+TEST(BidiTracker, EmptyChannelAndFilter) {
+  // The infrastructure ensures that that there are no missing or empty channels
+  // If such a channel appears in the response we treat it as an error.
+  base::Value::Dict payload;
+  payload.Set("channel", "");
+  base::Value::Dict params;
+  params.Set("name", "sendBidiResponse");
+  params.Set("payload", std::move(payload));
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/x");
+  tracker.SetBidiCallback(base::BindRepeating(&AcceptPayload));
+  EXPECT_TRUE(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))
+          .IsError());
+}
+
+TEST(BidiTracker, ChannelAndFilterReject) {
+  base::Value::Dict params = createValidParams("/some");
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/some");
+  tracker.SetBidiCallback(base::BindRepeating(&RejectPayload));
+  EXPECT_TRUE(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))
+          .IsError());
+}
+
+TEST(BidiTracker, UnexpectedMethod) {
+  base::Value::Dict params = createValidParams("/one");
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/one");
+  base::Value::Dict actual_payload;
+  tracker.SetBidiCallback(
+      base::BindRepeating(&AcceptAndSavePayload, &actual_payload));
+  EXPECT_TRUE(StatusOk(
+      tracker.OnEvent(nullptr, "Unexpected.method", std::move(params))));
+  EXPECT_TRUE(actual_payload.empty());
+}
+
+TEST(BidiTracker, UnexpectedName) {
+  base::Value::Dict params = createValidParams("/some");
+  params.Set("name", "unexpected");
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/some");
+  base::Value::Dict actual_payload;
+  tracker.SetBidiCallback(
+      base::BindRepeating(&AcceptAndSavePayload, &actual_payload));
+  EXPECT_TRUE(StatusOk(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))));
+  EXPECT_TRUE(actual_payload.empty());
+}
+
+TEST(BidiTracker, MissingName) {
+  base::Value::Dict params = createValidParams("/some");
+  params.Remove("name");
+  BidiTracker tracker;
+  tracker.SetChannelSuffix("/some");
+  base::Value::Dict actual_payload;
+  tracker.SetBidiCallback(
+      base::BindRepeating(&AcceptAndSavePayload, &actual_payload));
+  EXPECT_TRUE(
+      tracker.OnEvent(nullptr, "Runtime.bindingCalled", std::move(params))
+          .IsError());
+  EXPECT_TRUE(actual_payload.empty());
+}
diff --git a/chrome/test/chromedriver/chrome/devtools_client_impl.cc b/chrome/test/chromedriver/chrome/devtools_client_impl.cc
index ebe0a50a..e7b6e64 100644
--- a/chrome/test/chromedriver/chrome/devtools_client_impl.cc
+++ b/chrome/test/chromedriver/chrome/devtools_client_impl.cc
@@ -148,7 +148,7 @@
   dict.Set("id", *cdp_cmd_id);
   dict.Set("method", "cdp.sendCommand");
   dict.Set("params", std::move(params));
-  dict.Set("channel", DevToolsClientImpl::kInfraChannel);
+  dict.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   *bidi_cmd = std::move(dict);
   return Status{kOk};
 }
@@ -196,8 +196,8 @@
 }  // namespace internal
 
 const char DevToolsClientImpl::kBrowserwideDevToolsClientId[] = "browser";
-const char DevToolsClientImpl::kInfraChannel[] = "/infra";
-const char DevToolsClientImpl::kClientChannelSuffix[] = "/channel";
+const char DevToolsClientImpl::kCdpTunnelChannel[] = "/cdp";
+const char DevToolsClientImpl::kBidiChannelSuffix[] = "/bidi";
 
 DevToolsClientImpl::DevToolsClientImpl(const std::string& id,
                                        const std::string& session_id,
@@ -366,7 +366,7 @@
     bidi_cmd.Set("id", AdvanceNextMessageId());
     bidi_cmd.Set("method", "session.subscribe");
     bidi_cmd.Set("params", std::move(params));
-    status = PostBidiCommandInternal(DevToolsClientImpl::kInfraChannel,
+    status = PostBidiCommandInternal(DevToolsClientImpl::kCdpTunnelChannel,
                                      std::move(bidi_cmd));
   }
 
@@ -554,11 +554,10 @@
 }
 
 Status DevToolsClientImpl::PostBidiCommand(base::Value::Dict command) {
-  std::string* maybe_user_channel = command.FindString("channel");
+  std::string* maybe_channel = command.FindString("channel");
   std::string channel =
-      maybe_user_channel
-          ? *maybe_user_channel + DevToolsClientImpl::kClientChannelSuffix
-          : std::string();
+      maybe_channel ? *maybe_channel + DevToolsClientImpl::kBidiChannelSuffix
+                    : std::string();
   // Corner cases:
   // In user message channel=nullptr
   //    -> the posted command has no channel
@@ -1244,7 +1243,7 @@
 
       std::string* channel = payload.FindString("channel");
 
-      if (channel && *channel == DevToolsClientImpl::kInfraChannel) {
+      if (channel && *channel == DevToolsClientImpl::kCdpTunnelChannel) {
         // handle CDP over BiDi events and responses
         std::string* payload_method = payload.FindString("method");
 
@@ -1313,9 +1312,9 @@
       }  // Infra CDP tunnel
 
       if (channel &&
-          base::EndsWith(*channel, DevToolsClientImpl::kClientChannelSuffix)) {
+          base::EndsWith(*channel, DevToolsClientImpl::kBidiChannelSuffix)) {
         size_t pos = channel->size() -
-                     std::strlen(DevToolsClientImpl::kClientChannelSuffix);
+                     std::strlen(DevToolsClientImpl::kBidiChannelSuffix);
         // Update the channel value of the payload in-place.
         channel->erase(std::next(channel->begin(), pos), channel->end());
       }
diff --git a/chrome/test/chromedriver/chrome/devtools_client_impl.h b/chrome/test/chromedriver/chrome/devtools_client_impl.h
index 510ee9c..98a7eaa 100644
--- a/chrome/test/chromedriver/chrome/devtools_client_impl.h
+++ b/chrome/test/chromedriver/chrome/devtools_client_impl.h
@@ -57,8 +57,8 @@
 class DevToolsClientImpl : public DevToolsClient {
  public:
   static const char kBrowserwideDevToolsClientId[];
-  static const char kInfraChannel[];
-  static const char kClientChannelSuffix[];
+  static const char kCdpTunnelChannel[];
+  static const char kBidiChannelSuffix[];
 
   // Postcondition: !IsNull()
   // Postcondition: !IsConnected()
diff --git a/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc b/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc
index f204bd2..5b76de1fb 100644
--- a/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc
+++ b/chrome/test/chromedriver/chrome/devtools_client_impl_unittest.cc
@@ -31,11 +31,11 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "url/gurl.h"
 
+namespace {
+
 using testing::Eq;
 using testing::Pointee;
 
-namespace {
-
 const char kTestMapperScript[] = "Lorem ipsum dolor sit amet";
 
 testing::AssertionResult StatusOk(const Status& status) {
@@ -1022,7 +1022,7 @@
   base::Value::Dict payload;
   payload.Set("method", "cdp.eventReceived");
   payload.Set("params", std::move(params));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict evt;
   ASSERT_TRUE(
       StatusOk(WrapBidiEventInCdpEvent(std::move(payload), "333", &evt)));
@@ -1051,7 +1051,7 @@
   base::Value::Dict payload;
   payload.Set("method", "cdp.eventReceived");
   payload.Set("params", std::move(params));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict evt;
   ASSERT_TRUE(
       StatusOk(WrapBidiEventInCdpEvent(std::move(payload), "333", &evt)));
@@ -1078,7 +1078,7 @@
   base::Value::Dict payload;
   payload.Set("method", "cdp.eventReceived");
   payload.Set("params", std::move(params));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict evt;
   ASSERT_TRUE(
       StatusOk(WrapBidiEventInCdpEvent(std::move(payload), "333", &evt)));
@@ -1103,7 +1103,7 @@
   base::Value::Dict payload;
   payload.Set("method", "cdp.eventReceived");
   payload.Set("params", std::move(params));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict evt;
   ASSERT_TRUE(
       StatusOk(WrapBidiEventInCdpEvent(std::move(payload), "333", &evt)));
@@ -1120,7 +1120,7 @@
 TEST(ParseInspectorMessage, TunneledCdpEventNoPayloadParams) {
   base::Value::Dict payload;
   payload.Set("method", "cdp.eventReceived");
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict evt;
   ASSERT_TRUE(
       StatusOk(WrapBidiEventInCdpEvent(std::move(payload), "333", &evt)));
@@ -1141,7 +1141,7 @@
   payload.Set("id", 11);
   payload.Set("cdpSession", "ABC");
   payload.Set("result", std::move(result));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict resp;
   ASSERT_TRUE(
       StatusOk(WrapBidiResponseInCdpEvent(std::move(payload), "333", &resp)));
@@ -1167,7 +1167,7 @@
   base::Value::Dict payload;
   payload.Set("id", 11);
   payload.Set("result", std::move(result));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict resp;
   ASSERT_TRUE(
       StatusOk(WrapBidiResponseInCdpEvent(std::move(payload), "333", &resp)));
@@ -1193,7 +1193,7 @@
   base::Value::Dict payload;
   payload.Set("cdpSession", "ABC");
   payload.Set("result", std::move(result));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict resp;
   ASSERT_TRUE(
       StatusOk(WrapBidiResponseInCdpEvent(std::move(payload), "333", &resp)));
@@ -1211,7 +1211,7 @@
   base::Value::Dict payload;
   payload.Set("id", 11);
   payload.Set("cdpSession", "ABC");
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict resp;
   ASSERT_TRUE(
       StatusOk(WrapBidiResponseInCdpEvent(std::move(payload), "333", &resp)));
@@ -1236,7 +1236,7 @@
   payload.Set("id", 11);
   payload.Set("cdpSession", "ABC");
   payload.Set("error", std::move(error));
-  payload.Set("channel", DevToolsClientImpl::kInfraChannel);
+  payload.Set("channel", DevToolsClientImpl::kCdpTunnelChannel);
   base::Value::Dict resp;
   ASSERT_TRUE(
       StatusOk(WrapBidiResponseInCdpEvent(std::move(payload), "333", &resp)));
@@ -2999,8 +2999,8 @@
   ASSERT_TRUE(StatusOk(mapper_client.ConnectIfNecessary()));
   ASSERT_TRUE(StatusOk(mapper_client.AppointAsBidiServerForTesting()));
 
-  for (std::string channel : {DevToolsClientImpl::kInfraChannel,
-                              DevToolsClientImpl::kClientChannelSuffix, ""}) {
+  for (std::string channel : {DevToolsClientImpl::kCdpTunnelChannel,
+                              DevToolsClientImpl::kBidiChannelSuffix, ""}) {
     base::Value::Dict bidi_cmd;
     ASSERT_TRUE(StatusOk(CreateBidiCommand(1, "method", base::Value::Dict(),
                                            &channel, &bidi_cmd)));
@@ -3120,7 +3120,7 @@
     if (!channel) {
       return false;
     }
-    EXPECT_EQ(DevToolsClientImpl::kInfraChannel, *channel);
+    EXPECT_EQ(DevToolsClientImpl::kCdpTunnelChannel, *channel);
     EXPECT_EQ("session.subscribe", method);
     EXPECT_THAT(params.FindString("events"), Pointee(Eq("cdp.eventReceived")));
     mapper_state_->subscribed_to_cdp = true;
diff --git a/chrome/test/chromedriver/client/chromedriver.py b/chrome/test/chromedriver/client/chromedriver.py
index 647c8766..14c174f 100644
--- a/chrome/test/chromedriver/client/chromedriver.py
+++ b/chrome/test/chromedriver/client/chromedriver.py
@@ -137,7 +137,6 @@
     self._executor = command_executor.CommandExecutor(server_url)
     self._server_url = server_url
     self.w3c_compliant = False
-    self._websocket = None
 
     options = {}
 
@@ -357,11 +356,7 @@
     return self._UnwrapValue(response['value'])
 
   def CreateWebSocketConnection(self):
-    if self._websocket:
-      return self._websocket
-    else:
-      self._websocket = WebSocketConnection(self._server_url, self._session_id)
-      return self._websocket
+    return WebSocketConnection(self._server_url, self._session_id)
 
   def GetWindowHandles(self):
     return self.ExecuteCommand(Command.GET_WINDOW_HANDLES)
diff --git a/chrome/test/chromedriver/client/websocket_connection.py b/chrome/test/chromedriver/client/websocket_connection.py
index 425197f9..d13c2f0 100644
--- a/chrome/test/chromedriver/client/websocket_connection.py
+++ b/chrome/test/chromedriver/client/websocket_connection.py
@@ -39,21 +39,36 @@
       WebSocketCommands.CREATE_WEBSOCKET, cmd_params)
     self._websocket = websocket.create_connection(self._server_url + path)
     self._responses = {}
+    self._events = []
 
   def SendCommand(self, cmd_params):
-    self._command_id = self._command_id + 1
-    cmd_params['id'] = self._command_id
+    if 'id' not in cmd_params:
+      self._command_id = self._command_id + 1
+      cmd_params['id'] = self._command_id
     try:
       self._websocket.send(json.dumps(cmd_params))
     except InternalWebSocketTimeoutException:
       raise WebSocketTimeoutException()
-    return self._command_id
+    return cmd_params['id']
 
-  def WaitForResponse(self, command_id):
-    if command_id in self._responses:
-      msg = self._responses[command_id]
-      del self._responses[command_id]
-      return msg
+  def TakeEvents(self):
+    result = self._events;
+    self._events = []
+    return result;
+
+  def TryGetResponse(self, command_id, channel = None):
+    if channel not in self._responses:
+      return None
+    if command_id not in self._responses[channel]:
+      return None
+    return self._responses[channel][command_id]
+
+  def WaitForResponse(self, command_id, channel = None):
+    if channel in self._responses:
+      if command_id in self._responses[channel]:
+        msg = self._responses[channel][command_id]
+        del self._responses[channel][command_id]
+        return msg
 
     start = time.monotonic()
     timeout = self.GetTimeout()
@@ -62,10 +77,17 @@
       while True:
         msg = json.loads(self._websocket.recv())
         if 'id' in msg:
-          if msg['id'] == command_id:
+          resp_channel = None
+          if 'channel' in msg:
+            resp_channel = msg['channel']
+          if msg['id'] == command_id and resp_channel == channel:
             return msg
           elif msg['id'] >= 0:
-            self._responses[msg['id']] = msg
+            if resp_channel not in self._responses:
+              self._responses[resp_channel] = {}
+            self._responses[resp_channel][msg['id']] = msg
+        else: # event
+          self._events.append(msg)
         if start + timeout <= time.monotonic():
           raise TimeoutError()
     except InternalWebSocketConnectionClosedException:
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc
index cea2c72c..ca80640 100644
--- a/chrome/test/chromedriver/server/http_handler.cc
+++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -12,9 +12,11 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_forward.h"
+#include "base/check.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"  // For CHECK macros.
+#include "base/ranges/algorithm.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
@@ -79,11 +81,11 @@
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
     HttpServer* http_server,
     int connection_id,
-    const std::string& data) {
+    std::string data) {
   io_task_runner->PostTask(
-      FROM_HERE,
-      base::BindOnce(&HttpServer::SendOverWebSocket,
-                     base::Unretained(http_server), connection_id, data));
+      FROM_HERE, base::BindOnce(&HttpServer::SendOverWebSocket,
+                                base::Unretained(http_server), connection_id,
+                                std::move(data)));
 }
 
 void SendWebSocketResponseOnSessionThread(
@@ -91,11 +93,11 @@
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
     HttpServer* http_server,
     int connection_id,
-    const std::string& data) {
+    std::string data) {
   cmd_task_runner->PostTask(
-      FROM_HERE,
-      base::BindOnce(&SendWebSocketResponseOnCmdThread, io_task_runner,
-                     base::Unretained(http_server), connection_id, data));
+      FROM_HERE, base::BindOnce(&SendWebSocketResponseOnCmdThread,
+                                io_task_runner, base::Unretained(http_server),
+                                connection_id, std::move(data)));
 }
 
 void CloseWebSocketOnCmdThread(
@@ -1459,15 +1461,8 @@
     SendWebSocketRejectResponse(http_server, connection_id,
                                 net::HTTP_BAD_REQUEST, err_msg);
     return;
-  } else if (it->second != -1) {
-    std::string err_msg = "bad request only one connection for session id " +
-                          session_id + " is allowed";
-    VLOG(0) << "HttpHandler WebSocketRequest error " << err_msg;
-    SendWebSocketRejectResponse(http_server, connection_id,
-                                net::HTTP_BAD_REQUEST, err_msg);
-    return;
   } else {
-    session_connection_map_[session_id] = connection_id;
+    session_connection_map_[session_id].push_back(connection_id);
     connection_session_map_[connection_id] = session_id;
 
     auto thread_it = session_thread_map_.find(session_id);
@@ -1545,6 +1540,7 @@
 
   base::Value::Dict params;
   params.Set("bidiCommand", data);
+  params.Set("connectionId", connection_id);
 
   auto callback = base::BindRepeating(
       [](base::RepeatingCallback<void(const Status&)> send_error,
@@ -1596,7 +1592,10 @@
     return;
   }
   std::string session_id = it->second;
-  session_connection_map_[session_id] = -1;
+  std::vector<int>& bucket = session_connection_map_[session_id];
+  auto bucket_it = base::ranges::find(bucket, connection_id);
+  DCHECK(bucket_it != bucket.end());
+  bucket.erase(bucket_it);
   connection_session_map_.erase(it);
 
   auto thread_it = session_thread_map_.find(session_id);
diff --git a/chrome/test/chromedriver/session.cc b/chrome/test/chromedriver/session.cc
index 5e981315..6ae6b5d 100644
--- a/chrome/test/chromedriver/session.cc
+++ b/chrome/test/chromedriver/session.cc
@@ -12,6 +12,8 @@
 #include "base/lazy_instance.h"
 #include "base/logging.h"
 #include "base/ranges/algorithm.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
 #include "base/threading/thread_local.h"
 #include "base/values.h"
 #include "chrome/test/chromedriver/chrome/chrome.h"
@@ -26,6 +28,39 @@
 
 }  // namespace
 
+namespace internal {
+
+Status SplitChannel(std::string* channel,
+                    int* connection_id,
+                    std::string* suffix) {
+  DCHECK(channel);  // precondition
+  size_t k = channel->size();
+  for (; k && (*channel)[k - 1] != '/'; --k) {
+  }
+  if (k == 0) {
+    return Status{kUnknownError,
+                  "channel does not end with an expected suffix"};
+  }
+  *suffix = channel->substr(k - 1);
+  channel->erase(std::next(channel->begin(), k - 1), channel->end());
+  --k;
+
+  for (; k && (*channel)[k - 1] != '/'; --k) {
+  }
+  if (k == 0) {
+    return Status{kUnknownError, "channel does not contain connection_id"};
+  }
+  std::string connection_str = channel->substr(k);
+  channel->erase(std::next(channel->begin(), k - 1), channel->end());
+  if (!base::StringToInt(connection_str, connection_id)) {
+    return Status{kUnknownError,
+                  "connection_id in the channel must be integer"};
+  }
+
+  return Status{kOk};
+}
+}  // namespace internal
+
 FrameInfo::FrameInfo(const std::string& parent_frame_id,
                      const std::string& frame_id,
                      const std::string& chromedriver_frame_id)
@@ -72,7 +107,9 @@
 const base::TimeDelta Session::kDefaultImplicitWaitTimeout = base::Seconds(0);
 const base::TimeDelta Session::kDefaultPageLoadTimeout = base::Seconds(300);
 const base::TimeDelta Session::kDefaultScriptTimeout = base::Seconds(30);
-const int kBidiQueueCapacity = 20;
+const char Session::kChannelSuffix[] = "/chan";
+const char Session::kNoChannelSuffix[] = "/nochan";
+const char Session::kBlockingChannelSuffix[] = "/blocking";
 
 Session::Session(const std::string& id)
     : id(id),
@@ -160,15 +197,53 @@
   }
 }
 
-void Session::OnBidiResponse(base::Value::Dict payload) {
-  // If there is no active bidi connections the events will be accumulated.
-  bidi_response_queue_.push(std::move(payload));
-  for (; bidi_response_queue_.size() > kBidiQueueCapacity;
-       bidi_response_queue_.pop()) {
-    LOG(WARNING) << "BiDi response queue overflow, dropping the message: "
-                 << bidi_response_queue_.front();
+Status Session::OnBidiResponse(base::Value::Dict payload) {
+  std::string* channel = payload.FindString("channel");
+  if (!channel) {
+    return Status{kUnknownError, "channel is missing in the BiDi response"};
   }
-  ProcessBidiResponseQueue();
+
+  if (base::EndsWith(*channel, kBlockingChannelSuffix)) {
+    if (!awaiting_bidi_response) {
+      return Status{kUnknownError, "unexpected blocking BiDi response"};
+    }
+    awaiting_bidi_response = false;
+    size_t pos = channel->size() - std::strlen(kBlockingChannelSuffix);
+    // Update the channel value of the payload in-place.
+    channel->erase(std::next(channel->begin(), pos), channel->end());
+  }
+
+  int connection_id = -1;
+  std::string suffix;
+  Status status = internal::SplitChannel(channel, &connection_id, &suffix);
+  if (status.IsError()) {
+    return status;
+  }
+
+  if (suffix == kNoChannelSuffix) {
+    payload.Remove("channel");
+  } else if (suffix != kChannelSuffix) {
+    return Status{kUnknownError,
+                  "unexpected channel name in the BiDi response"};
+  }
+
+  std::string message;
+  if (!base::JSONWriter::Write(payload, &message)) {
+    return Status{kUnknownError, "unable to serialize a BiDi response"};
+  }
+
+  auto it = base::ranges::find(bidi_connections_, connection_id,
+                               &BidiConnection::connection_id);
+  if (it == bidi_connections_.end()) {
+    // It can happen that we receive a message from the mapper designated to the
+    // channel that has recently been closed.
+    LOG(INFO) << "BiDi connection is closed. Skipping the BiDiMapper message: "
+              << message;
+    return Status{kOk};
+  }
+
+  it->send_response.Run(std::move(message));
+  return Status{kOk};
 }
 
 void Session::AddBidiConnection(int connection_id,
@@ -176,10 +251,12 @@
                                 CloseFunc close_connection) {
   bidi_connections_.emplace_back(connection_id, std::move(send_response),
                                  std::move(close_connection));
-  ProcessBidiResponseQueue();
 }
 
 void Session::RemoveBidiConnection(int connection_id) {
+  // As connections can be closed by both remote and local ends
+  // we don't treat an attempt to close a non-existing (presumably closed)
+  // connection as an error.
   // Reallistically we will not have many connections, therefore linear search
   // is optimal.
   auto it = base::ranges::find(bidi_connections_, connection_id,
@@ -189,43 +266,13 @@
   }
 }
 
-void Session::ProcessBidiResponseQueue() {
-  if (bidi_connections_.empty() || bidi_response_queue_.empty()) {
-    return;
-  }
-  // Only single websocket connection is supported now.
-  DCHECK(bidi_connections_.size() == 1);
-  for (; !bidi_response_queue_.empty(); bidi_response_queue_.pop()) {
-    // TODO(chromedriver:4179): In the future we will support multiple
-    // connections. The payload will have to be parsed and routed to the
-    // appropriate connection. The events will have to be delivered to all
-    // connections.
-    base::Value::Dict response_parsed = std::move(bidi_response_queue_.front());
-    std::string response;
-    if (!base::JSONWriter::Write(response_parsed, &response)) {
-      LOG(WARNING) << "unable to serialize a BiDi response";
-      continue;
-    }
-    for (const BidiConnection& conn : bidi_connections_) {
-      // If the callback fails (asynchronously) because the connection was
-      // broken we simply ignore this fact as the message cannot be delivered
-      // over that connection anyway.
-      conn.send_response.Run(response);
-      absl::optional<int> response_id = response_parsed.FindInt("id");
-      if (response_id && *response_id == awaited_bidi_response_id) {
-        awaited_bidi_response_id = -1;
-        // No "id" means that we are dealing with an event
-      }
-    }
-  }
-}
-
 void Session::CloseAllConnections() {
   for (BidiConnection& conn : bidi_connections_) {
     // If the callback fails (asynchronously) because the connection was
     // terminated we simply ignore this - it is already closed.
     conn.close_connection.Run();
   }
+  bidi_connections_.clear();
 }
 
 Session* GetThreadLocalSession() {
diff --git a/chrome/test/chromedriver/session.h b/chrome/test/chromedriver/session.h
index 26383a7..2145734 100644
--- a/chrome/test/chromedriver/session.h
+++ b/chrome/test/chromedriver/session.h
@@ -66,8 +66,7 @@
   std::unique_ptr<KeyEvent> key_event;
 };
 
-typedef base::RepeatingCallback<void(const std::string& /*payload*/)>
-    SendTextFunc;
+typedef base::RepeatingCallback<void(std::string /*payload*/)> SendTextFunc;
 
 typedef base::RepeatingCallback<void()> CloseFunc;
 
@@ -87,6 +86,9 @@
   static const base::TimeDelta kDefaultImplicitWaitTimeout;
   static const base::TimeDelta kDefaultPageLoadTimeout;
   static const base::TimeDelta kDefaultScriptTimeout;
+  static const char kChannelSuffix[];
+  static const char kNoChannelSuffix[];
+  static const char kBlockingChannelSuffix[];
 
   explicit Session(const std::string& id);
   Session(const std::string& id, std::unique_ptr<Chrome> chrome);
@@ -102,8 +104,7 @@
   std::string GetCurrentFrameId() const;
   std::vector<WebDriverLog*> GetAllLogs() const;
 
-  bool BidiMapperIsLaunched() const;
-  void OnBidiResponse(base::Value::Dict payload);
+  Status OnBidiResponse(base::Value::Dict payload);
   void AddBidiConnection(int connection_id,
                          SendTextFunc send_response,
                          CloseFunc close_connection);
@@ -115,8 +116,7 @@
   bool webSocketUrl = false;
   bool quit;
   bool detach;
-  bool bidi_mapper_is_launched_ = false;
-  int awaited_bidi_response_id = -1;
+  bool awaiting_bidi_response = false;
   std::unique_ptr<Chrome> chrome;
   std::string window;
   std::string bidi_mapper_web_view_id;
@@ -165,7 +165,6 @@
 
  private:
   void SwitchFrameInternal(bool for_top_frame);
-  void ProcessBidiResponseQueue();
 
   // TODO: for the moment being we support single connection per client
   // In the future (2022Q4) we will probably support multiple bidi connections.
@@ -184,4 +183,10 @@
 
 void SetThreadLocalSession(std::unique_ptr<Session> session);
 
+namespace internal {
+Status SplitChannel(std::string* channel,
+                    int* connection_id,
+                    std::string* suffix);
+}
+
 #endif  // CHROME_TEST_CHROMEDRIVER_SESSION_H_
diff --git a/chrome/test/chromedriver/session_commands.cc b/chrome/test/chromedriver/session_commands.cc
index 2c6d605..8d3ecfe 100644
--- a/chrome/test/chromedriver/session_commands.cc
+++ b/chrome/test/chromedriver/session_commands.cc
@@ -91,7 +91,7 @@
 
 void InitSessionForWebSocketConnection(SessionConnectionMap* session_map,
                                        std::string session_id) {
-  session_map->insert({session_id, -1});
+  session_map->insert({session_id, std::vector<int>{}});
 }
 
 }  // namespace
@@ -313,10 +313,17 @@
   session->command_listeners.swap(command_listeners);
 
   if (session->webSocketUrl) {
-    BidiTracker* bidi_tracker = new BidiTracker();
-    bidi_tracker->SetBidiCallback(base::BindRepeating(
-        &Session::OnBidiResponse, base::Unretained(session)));
-    devtools_event_listeners.emplace_back(bidi_tracker);
+    // Suffixes used with the client channels.
+    std::string client_suffixes[] = {Session::kChannelSuffix,
+                                     Session::kNoChannelSuffix,
+                                     Session::kBlockingChannelSuffix};
+    for (std::string suffix : client_suffixes) {
+      BidiTracker* bidi_tracker = new BidiTracker();
+      bidi_tracker->SetChannelSuffix(std::move(suffix));
+      bidi_tracker->SetBidiCallback(base::BindRepeating(
+          &Session::OnBidiResponse, base::Unretained(session)));
+      devtools_event_listeners.emplace_back(bidi_tracker);
+    }
   }
 
   status =
@@ -1399,8 +1406,15 @@
   if (session == nullptr) {
     return Status{kNoSuchFrame, "session not found"};
   }
-  std::string data;
-  GetOptionalString(params, "bidiCommand", &data);
+  const std::string* data = params.FindString("bidiCommand");
+  if (!data) {
+    return Status{kUnknownError, "bidiCommand is missing in params"};
+  }
+
+  absl::optional<int> connection_id = params.FindInt("connectionId");
+  if (!connection_id) {
+    return Status{kUnknownCommand, "connectionId is missing in params"};
+  }
 
   WebView* web_view = nullptr;
   Status status = session->chrome->GetWebViewById(
@@ -1410,40 +1424,48 @@
   }
 
   absl::optional<base::Value> data_parsed =
-      base::JSONReader::Read(data, base::JSON_PARSE_CHROMIUM_EXTENSIONS);
+      base::JSONReader::Read(*data, base::JSON_PARSE_CHROMIUM_EXTENSIONS);
 
   if (!data_parsed) {
-    return Status(kUnknownError, "cannot parse the BiDi command: " + data);
+    return Status(kUnknownError, "cannot parse the BiDi command: " + *data);
   }
 
   if (!data_parsed->is_dict()) {
     return Status(kUnknownError,
-                  "a JSON map is expected as a BiDi command: " + data);
+                  "a JSON map is expected as a BiDi command: " + *data);
   }
 
-  absl::optional<int> cmd_id = data_parsed->GetDict().FindInt("id");
-  if (!cmd_id) {
-    return Status(kUnknownError, "BiDi command is missing 'id' field: " + data);
-  }
+  base::Value::Dict& bidi_cmd = data_parsed->GetDict();
 
-  std::string* method = data_parsed->GetDict().FindString("method");
+  std::string* method = bidi_cmd.FindString("method");
   if (!method) {
     return Status(kUnknownError,
-                  "BiDi command is missing 'method' field: " + data);
+                  "BiDi command is missing 'method' field: " + *data);
+  }
+
+  std::string* user_channel = bidi_cmd.FindString("channel");
+  std::string channel;
+  if (user_channel) {
+    channel = *user_channel + "/" + base::NumberToString(*connection_id) +
+              Session::kChannelSuffix;
+  } else {
+    channel =
+        "/" + base::NumberToString(*connection_id) + Session::kNoChannelSuffix;
   }
 
   if (*method == "browsingContext.close") {
+    bidi_cmd.Set("channel", channel + Session::kBlockingChannelSuffix);
     // Closing of the context is handled in a blocking way.
     // This simplifies us closing the browser if the last tab was closed.
-    session->awaited_bidi_response_id = *cmd_id;
-    status = web_view->PostBidiCommand(std::move(data_parsed->GetDict()));
+    session->awaiting_bidi_response = true;
+    status = web_view->PostBidiCommand(std::move(bidi_cmd));
     base::RepeatingCallback<Status(bool*)> bidi_response_is_received =
         base::BindRepeating(
-            [](Session* session, int cmd_id, bool* condition_is_met) {
-              *condition_is_met = session->awaited_bidi_response_id != cmd_id;
+            [](Session* session, bool* condition_is_met) {
+              *condition_is_met = !session->awaiting_bidi_response;
               return Status{kOk};
             },
-            base::Unretained(session), *cmd_id);
+            base::Unretained(session));
     if (status.IsError()) {
       return status;
     }
@@ -1473,7 +1495,8 @@
       status = session->chrome->Quit();
     }
   } else {
-    status = web_view->PostBidiCommand(std::move(data_parsed->GetDict()));
+    bidi_cmd.Set("channel", std::move(channel));
+    status = web_view->PostBidiCommand(std::move(bidi_cmd));
   }
 
   return status;
diff --git a/chrome/test/chromedriver/session_connection_map.h b/chrome/test/chromedriver/session_connection_map.h
index 78cc12d2..f34427b 100644
--- a/chrome/test/chromedriver/session_connection_map.h
+++ b/chrome/test/chromedriver/session_connection_map.h
@@ -8,6 +8,6 @@
 #include <string>
 #include <unordered_map>
 
-using SessionConnectionMap = std::unordered_map<std::string, int>;
+using SessionConnectionMap = std::unordered_map<std::string, std::vector<int>>;
 
 #endif  // CHROME_TEST_CHROMEDRIVER_SESSION_CONNECTION_MAP_H_
diff --git a/chrome/test/chromedriver/session_unittest.cc b/chrome/test/chromedriver/session_unittest.cc
index 8a3518b..15d6d16 100644
--- a/chrome/test/chromedriver/session_unittest.cc
+++ b/chrome/test/chromedriver/session_unittest.cc
@@ -8,13 +8,31 @@
 #include <string>
 #include <utility>
 
+#include "base/functional/bind.h"
+#include "base/json/json_reader.h"
 #include "chrome/test/chromedriver/chrome/status.h"
 #include "chrome/test/chromedriver/chrome/stub_chrome.h"
 #include "chrome/test/chromedriver/chrome/stub_web_view.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 
+using testing::Eq;
+using testing::Pointee;
+
+testing::AssertionResult StatusOk(const Status& status) {
+  if (status.IsOk()) {
+    return testing::AssertionSuccess();
+  } else {
+    return testing::AssertionFailure() << status.message();
+  }
+}
+
+void SaveTo(std::string* dest, std::string value) {
+  *dest = std::move(value);
+}
+
 class MockChrome : public StubChrome {
  public:
   MockChrome() : web_view_("1") {}
@@ -101,3 +119,257 @@
   session.SwitchToTopFrame();
   ASSERT_EQ(std::string(), session.GetCurrentFrameId());
 }
+
+TEST(Session, SplitChannel1) {
+  std::string channel = "/uno/2/tres";
+  int connection_id = -15;
+  std::string suffix;
+  EXPECT_TRUE(
+      StatusOk(internal::SplitChannel(&channel, &connection_id, &suffix)));
+  EXPECT_EQ("/uno", channel);
+  EXPECT_EQ(2, connection_id);
+  EXPECT_EQ("/tres", suffix);
+}
+
+TEST(Session, SplitChannel2) {
+  std::string channel = "/1/dos";
+  int connection_id = -15;
+  std::string suffix;
+  EXPECT_TRUE(
+      StatusOk(internal::SplitChannel(&channel, &connection_id, &suffix)));
+  EXPECT_EQ("", channel);
+  EXPECT_EQ(1, connection_id);
+  EXPECT_EQ("/dos", suffix);
+}
+
+TEST(Session, SplitChannelNonIntegerConnection) {
+  std::string channel = "/uno/dos/tres";
+  int connection_id = -15;
+  std::string suffix;
+  EXPECT_TRUE(
+      internal::SplitChannel(&channel, &connection_id, &suffix).IsError());
+}
+
+TEST(Session, SplitChannelNoSeparators) {
+  std::string channel = "no-separators";
+  int connection_id = -15;
+  std::string suffix;
+  EXPECT_TRUE(
+      internal::SplitChannel(&channel, &connection_id, &suffix).IsError());
+}
+
+TEST(Session, SplitChannelEmpty) {
+  std::string channel = "";
+  int connection_id = -15;
+  std::string suffix;
+  EXPECT_TRUE(
+      internal::SplitChannel(&channel, &connection_id, &suffix).IsError());
+}
+
+TEST(Session, OnBidiResponseChan) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received;
+  session.AddBidiConnection(512, base::BindRepeating(&SaveTo, &received),
+                            base::BindRepeating([] {}));
+  base::Value::Dict payload;
+  payload.Set("channel", std::string("abc/512") + Session::kChannelSuffix);
+  payload.Set("data", "ok");
+  EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+  absl::optional<base::Value> data_parsed =
+      base::JSONReader::Read(received, base::JSON_PARSE_CHROMIUM_EXTENSIONS);
+  ASSERT_TRUE(data_parsed);
+  ASSERT_TRUE(data_parsed->is_dict());
+  EXPECT_THAT(data_parsed->GetDict().FindString("channel"), Pointee(Eq("abc")));
+  EXPECT_THAT(data_parsed->GetDict().FindString("data"), Pointee(Eq("ok")));
+}
+
+TEST(Session, OnBidiResponseNoChan) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received;
+  session.AddBidiConnection(512, base::BindRepeating(&SaveTo, &received),
+                            base::BindRepeating([] {}));
+  base::Value::Dict payload;
+  payload.Set("channel", std::string("/512") + Session::kNoChannelSuffix);
+  payload.Set("data", "ok");
+  EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+  absl::optional<base::Value> data_parsed =
+      base::JSONReader::Read(received, base::JSON_PARSE_CHROMIUM_EXTENSIONS);
+  ASSERT_TRUE(data_parsed);
+  ASSERT_TRUE(data_parsed->is_dict());
+  EXPECT_EQ(nullptr, data_parsed->GetDict().FindString("channel"));
+  EXPECT_THAT(data_parsed->GetDict().FindString("data"), Pointee(Eq("ok")));
+}
+
+TEST(Session, OnBidiResponseNullChan) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received;
+  session.AddBidiConnection(512, base::BindRepeating(&SaveTo, &received),
+                            base::BindRepeating([] {}));
+  base::Value::Dict payload;
+  payload.Set("data", "ok");
+  EXPECT_TRUE(session.OnBidiResponse(std::move(payload)).IsError());
+  EXPECT_EQ("", received);
+}
+
+TEST(Session, OnBidiResponseUnexpectedChannel1) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received;
+  session.AddBidiConnection(512, base::BindRepeating(&SaveTo, &received),
+                            base::BindRepeating([] {}));
+  base::Value::Dict payload;
+  payload.Set("channel", "x/512/unexpected");
+  payload.Set("data", "ok");
+  EXPECT_TRUE(session.OnBidiResponse(std::move(payload)).IsError());
+  EXPECT_EQ("", received);
+}
+
+TEST(Session, OnBidiResponseUnexpectedChannel2) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received;
+  session.AddBidiConnection(512, base::BindRepeating(&SaveTo, &received),
+                            base::BindRepeating([] {}));
+  base::Value::Dict payload;
+  payload.Set("channel", "unexpected");
+  payload.Set("data", "ok");
+  EXPECT_TRUE(session.OnBidiResponse(std::move(payload)).IsError());
+  EXPECT_EQ("", received);
+}
+
+TEST(Session, OnBidiResponseUnknownConnection) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received;
+  session.AddBidiConnection(136, base::BindRepeating(&SaveTo, &received),
+                            base::BindRepeating([] {}));
+  base::Value::Dict payload;
+  payload.Set("channel", std::string("/5") + Session::kNoChannelSuffix);
+  payload.Set("data", "ok");
+  // Response must be accepted as it is addressed to a closed connection.
+  // However no connection should actually receive it
+  EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+  EXPECT_EQ("", received);
+}
+
+TEST(Session, OnBidiResponseRemovedConnection) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received1;
+  std::string received2;
+  session.AddBidiConnection(1, base::BindRepeating(&SaveTo, &received1),
+                            base::BindRepeating([] {}));
+  session.AddBidiConnection(2, base::BindRepeating(&SaveTo, &received2),
+                            base::BindRepeating([] {}));
+  session.RemoveBidiConnection(1);
+  base::Value::Dict payload;
+  payload.Set("channel", std::string("/1") + Session::kNoChannelSuffix);
+  payload.Set("data", "ok");
+  // Response must be accepted as it is addressed to a closed connection.
+  // However no connection should actually receive it
+  EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+  EXPECT_EQ("", received1);
+  EXPECT_EQ("", received2);
+}
+
+TEST(Session, OnBidiResponseAfterCloseAllConnections) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received;
+  session.AddBidiConnection(5, base::BindRepeating(&SaveTo, &received),
+                            base::BindRepeating([] {}));
+  session.CloseAllConnections();
+  base::Value::Dict payload;
+  payload.Set("channel", std::string("/5") + Session::kNoChannelSuffix);
+  payload.Set("data", "ok");
+  // Response must be accepted as it is addressed to a closed connection.
+  // However no connection should actually receive it
+  EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+  EXPECT_EQ("", received);
+}
+
+TEST(Session, OnBidiResponseCorrectConnection) {
+  std::unique_ptr<Chrome> chrome(new MockChrome());
+  Session session("1", std::move(chrome));
+  std::string received1;
+  std::string received2;
+  std::string received3;
+  session.AddBidiConnection(1, base::BindRepeating(&SaveTo, &received1),
+                            base::BindRepeating([] {}));
+  session.AddBidiConnection(2, base::BindRepeating(&SaveTo, &received2),
+                            base::BindRepeating([] {}));
+  session.AddBidiConnection(3, base::BindRepeating(&SaveTo, &received3),
+                            base::BindRepeating([] {}));
+  base::Value::Dict payload;
+  payload.Set("channel", std::string("abc/2") + Session::kChannelSuffix);
+  payload.Set("data", "ok");
+  EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+  EXPECT_EQ("", received1);
+  EXPECT_EQ("", received3);
+  absl::optional<base::Value> data_parsed =
+      base::JSONReader::Read(received2, base::JSON_PARSE_CHROMIUM_EXTENSIONS);
+  ASSERT_TRUE(data_parsed);
+  ASSERT_TRUE(data_parsed->is_dict());
+  EXPECT_THAT(data_parsed->GetDict().FindString("channel"), Pointee(Eq("abc")));
+  EXPECT_THAT(data_parsed->GetDict().FindString("data"), Pointee(Eq("ok")));
+}
+
+TEST(Session, OnBlockingChannelResponseWhileAwaiting) {
+  std::string good_blocking_channels[] = {
+      std::string("x/7") + Session::kChannelSuffix +
+          Session::kBlockingChannelSuffix,
+      std::string("/7") + Session::kNoChannelSuffix +
+          Session::kBlockingChannelSuffix,
+  };
+  for (std::string channel : good_blocking_channels) {
+    std::unique_ptr<Chrome> chrome(new MockChrome());
+    Session session("1", std::move(chrome));
+    session.awaiting_bidi_response = true;
+    session.AddBidiConnection(7, base::BindRepeating([](std::string) {}),
+                              base::BindRepeating([] {}));
+    base::Value::Dict payload;
+    payload.Set("channel", channel);
+    EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+    EXPECT_FALSE(session.awaiting_bidi_response);
+  }
+}
+
+TEST(Session, OnNonBlockingChannelResponseWhileAwaiting) {
+  std::string good_non_blocking_channels[] = {
+      std::string("x/7") + Session::kChannelSuffix,
+      std::string("/7") + Session::kNoChannelSuffix};
+  for (std::string channel : good_non_blocking_channels) {
+    std::unique_ptr<Chrome> chrome(new MockChrome());
+    Session session("1", std::move(chrome));
+    session.awaiting_bidi_response = true;
+    session.AddBidiConnection(7, base::BindRepeating([](std::string) {}),
+                              base::BindRepeating([] {}));
+    base::Value::Dict payload;
+    payload.Set("channel", channel);
+    EXPECT_TRUE(StatusOk(session.OnBidiResponse(std::move(payload))));
+    EXPECT_TRUE(session.awaiting_bidi_response);
+  }
+}
+
+TEST(Session, OnBlockingChannelResponseWhileNotAwaiting) {
+  std::string good_blocking_channels[] = {
+      std::string("x/7") + Session::kChannelSuffix +
+          Session::kBlockingChannelSuffix,
+      std::string("/7") + Session::kNoChannelSuffix +
+          Session::kBlockingChannelSuffix,
+  };
+  for (std::string channel : good_blocking_channels) {
+    std::unique_ptr<Chrome> chrome(new MockChrome());
+    Session session("1", std::move(chrome));
+    session.awaiting_bidi_response = false;
+    session.AddBidiConnection(7, base::BindRepeating([](std::string) {}),
+                              base::BindRepeating([] {}));
+    base::Value::Dict payload;
+    payload.Set("channel", channel);
+    EXPECT_TRUE(session.OnBidiResponse(std::move(payload)).IsError());
+    EXPECT_FALSE(session.awaiting_bidi_response);
+  }
+}
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index 6be1137..4b6dcfb2 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -576,14 +576,6 @@
     self.assertRaises(chromedriver.InvalidArgument,
         self.CreateDriver, web_socket_url='Invalid')
 
-  def testWebSocketOneConnectionPerSession(self):
-    driver = self.CreateDriver(web_socket_url=True)
-    websocket = websocket_connection.WebSocketConnection(
-        _CHROMEDRIVER_SERVER_URL, driver.GetSessionId())
-    self.assertNotEqual(None, websocket)
-    self.assertRaises(Exception, websocket_connection.WebSocketConnection,
-                      _CHROMEDRIVER_SERVER_URL, driver.GetSessionId())
-
   def testWebSocketInvalidSessionId(self):
     driver = self.CreateDriver(web_socket_url=True)
     self.assertRaises(Exception, websocket_connection.WebSocketConnection,
@@ -5237,8 +5229,8 @@
       HeadlessInvalidCertificateTest._https_server.GetUrl() + file_path)
 
   def setUp(self):
-    self._driver = self.CreateDriver(chrome_switches = ["--headless"],
-                                     accept_insecure_certs = True)
+    self._driver = self.CreateDriver(chrome_switches=["--headless"],
+                                     accept_insecure_certs=True)
 
   def testLoadsPage(self):
     print("loading")
@@ -5325,15 +5317,52 @@
 class BidiTest(ChromeDriverBaseTestWithWebServer):
 
   def setUp(self):
-    self._driver = self.CreateDriver(web_socket_url = True)
+    super().setUp()
+    self._driver = self.CreateDriver(web_socket_url=True)
+    self._connections = []
 
-  def createWebSocketConnection(self, driver = None):
+  def tearDown(self):
+    for conn in self._connections:
+      conn.Close()
+    super().tearDown()
+
+  def createWebSocketConnection(self, driver=None):
     if driver is None:
       driver = self._driver
     conn = driver.CreateWebSocketConnection()
     conn.SetTimeout(5 * 60) # 5 minutes
+    self._connections.append(conn)
     return conn
 
+  def getContextId(self, conn, idx):
+    cmd_id = conn.SendCommand({
+      'method': 'browsingContext.getTree',
+      'params': {
+      }
+    })
+    resp = conn.WaitForResponse(cmd_id)
+    return resp['result']['contexts'][idx]['context']
+
+  def postEvaluate(self, conn, expression, context_id=None, channel=None,
+                   id=None):
+    if context_id is None:
+      context_id = self.getContextId(conn, 0)
+    command = {
+      'method': 'script.evaluate',
+      'params': {
+          'expression': expression,
+          'awaitPromise': False,
+          'target': {
+            'context': context_id
+          }
+      }
+    }
+    if channel is not None:
+      command['channel'] = channel
+    if id is not None:
+      command['id'] = id
+    return conn.SendCommand(command)
+
   def testCreateContext(self):
     conn = self.createWebSocketConnection()
 
@@ -5424,18 +5453,12 @@
   def testBrowserQuitsWhenLastBrowsingContextIsClosed(self):
     conn = self.createWebSocketConnection()
 
-    cmd_id = conn.SendCommand({
-      'method': 'browsingContext.getTree',
-      'params': {
-      }
-    })
-    resp = conn.WaitForResponse(cmd_id)
-    contexts = resp['result']['contexts']
+    context_id = self.getContextId(conn, 0)
 
     cmd_id = conn.SendCommand({
       'method': 'browsingContext.close',
       'params': {
-          'context': contexts[0]['context']
+          'context': context_id
       }
     })
     conn.WaitForResponse(cmd_id)
@@ -5445,6 +5468,33 @@
       # Wait indefinitely until time out.
       conn.WaitForResponse(-1)
 
+  def testCmdIdCheatAndBrowserClosing(self):
+    # Browser closing mechanism should not rely on command it
+    conn = self.createWebSocketConnection()
+    context_id = self.getContextId(conn, 0)
+    cmd_id1 = None
+    # overwhelm the Mapper to have enough irrelevant responses
+    for k in range(200):
+      cmd_id1 = self.postEvaluate(conn,
+                                  "24",
+                                  context_id = context_id,
+                                  id = 10005)
+
+    cmd_id2 = conn.SendCommand({
+      'id': 10005,
+      'method': 'browsingContext.close',
+      'params': {
+          'context': context_id
+      }
+    })
+    self.assertEqual(cmd_id1, cmd_id2)
+    conn.WaitForResponse(cmd_id2)
+
+    with self.assertRaises(chromedriver.WebSocketConnectionClosedException):
+      # BiDi messages cannot have negative "id".
+      # Wait indefinitely until time out.
+      conn.WaitForResponse(-1)
+
   # TODO(nechaev): Test over tab switching by different means.
 
   def testContextCountForIFrames(self):
@@ -5476,11 +5526,179 @@
     self.assertIsInstance(children, list)
     self.assertEqual(1, len(children))
 
+  def testNamedChannel(self):
+    conn = self.createWebSocketConnection()
+    context_id = self.getContextId(conn, 0);
+    self.assertIsNotNone(context_id)
+
+    cmd_id1 = self.postEvaluate(conn, '9', channel="abc", context_id=context_id)
+    cmd_id2 = self.postEvaluate(conn, '13', context_id=context_id)
+
+    resp = conn.WaitForResponse(cmd_id2)
+    self.assertEqual(13, resp['result']['result']['value'])
+    resp = conn.TryGetResponse(cmd_id1)
+    self.assertIsNone(resp)
+    resp = conn.WaitForResponse(cmd_id1, channel="abc")
+    self.assertEqual(9, resp['result']['result']['value'])
+
+  def testMultipleConnections(self):
+    conn1 = self.createWebSocketConnection()
+    context_id = self.getContextId(conn1, 0);
+    self.assertIsNotNone(context_id)
+    conn2 = self.createWebSocketConnection()
+    # Pre-check: make sure that the implementation does not use the same socket
+    self.assertNotEqual(conn1, conn2);
+
+    cmd_id1 = self.postEvaluate(conn1, '77', context_id = context_id)
+    cmd_id2 = self.postEvaluate(conn2, '23', context_id = context_id)
+    cmd_id3 = self.postEvaluate(conn1, '41', context_id = context_id)
+    cmd_id4 = self.postEvaluate(conn2, '98', context_id = context_id)
+
+    resp = conn1.WaitForResponse(cmd_id1)
+    self.assertEqual(77, resp['result']['result']['value'])
+    resp = conn1.WaitForResponse(cmd_id3)
+    self.assertEqual(41, resp['result']['result']['value'])
+    resp = conn2.WaitForResponse(cmd_id4)
+    self.assertEqual(98, resp['result']['result']['value'])
+    resp = conn2.WaitForResponse(cmd_id2)
+    self.assertEqual(23, resp['result']['result']['value'])
+
+  def testMultipleConnectionsNamedChannels(self):
+    conn1 = self.createWebSocketConnection()
+    context_id = self.getContextId(conn1, 0);
+    self.assertIsNotNone(context_id)
+    conn2 = self.createWebSocketConnection()
+    # Pre-check: make sure that the implementation does not use the same socket
+    self.assertNotEqual(conn1, conn2);
+
+    cmd_id1 = self.postEvaluate(conn1, '77', context_id=context_id, id=100,
+                                channel='3')
+    cmd_id2 = self.postEvaluate(conn1, '23', context_id=context_id, id=100,
+                                channel='/')
+    cmd_id3 = self.postEvaluate(conn2, '41', context_id=context_id, id=101,
+                                channel='3')
+    cmd_id4 = self.postEvaluate(conn2, '98', context_id=context_id, id=100,
+                                channel='')
+    cmd_id5 = self.postEvaluate(conn2, '6', context_id=context_id, id=100)
+
+    resp = conn2.WaitForResponse(cmd_id3, channel='3')
+    self.assertEqual(41, resp['result']['result']['value'])
+    resp = conn1.WaitForResponse(cmd_id1, channel = '3')
+    self.assertEqual(77, resp['result']['result']['value'])
+    resp = conn1.WaitForResponse(cmd_id2, channel='/')
+    self.assertEqual(23, resp['result']['result']['value'])
+    resp = conn2.WaitForResponse(cmd_id4, channel='')
+    self.assertEqual(98, resp['result']['result']['value'])
+    resp = conn2.WaitForResponse(cmd_id5)
+    self.assertEqual(6, resp['result']['result']['value'])
+
+  def subscribeToLoad(self, conn, channel=None):
+    command = {
+      'method': 'session.subscribe',
+      'params': {
+          'events': [
+              'browsingContext.load']}}
+    if channel is not None:
+      command['channel'] = channel
+    return conn.SendCommand(command)
+
+  def navigateSomewhere(self, conn, context_id=None, channel=None):
+    if context_id is None:
+      context_id = self.getContextId(conn, 0)
+    command = {
+        'method': 'browsingContext.navigate',
+        'params': {
+            'url': 'data:text/html,navigated',
+            'wait': 'complete',
+            'context': context_id}}
+    if channel is not None:
+      command['channel'] = channel
+    return conn.SendCommand(command)
+
+  def testEvent(self):
+    conn = self.createWebSocketConnection()
+    context_id = self.getContextId(conn, 0);
+    self.assertIsNotNone(context_id)
+
+    self.subscribeToLoad(conn)
+    cmd_id = self.navigateSomewhere(conn, context_id)
+    conn.WaitForResponse(cmd_id)
+
+    events = conn.TakeEvents()
+    # The event for about:blank is also possible
+    self.assertLessEqual(1, len(events))
+    self.assertFalse('channel' in events[0])
+    self.assertEqual('browsingContext.load', events[0]['method'])
+
+  def testEventChannel(self):
+    conn = self.createWebSocketConnection()
+    context_id = self.getContextId(conn, 0);
+    self.assertIsNotNone(context_id)
+
+    self.subscribeToLoad(conn, channel='abc')
+    cmd_id = self.navigateSomewhere(conn, context_id, channel='abc')
+    conn.WaitForResponse(cmd_id, channel='abc')
+
+    events = conn.TakeEvents()
+    # The event for about:blank is also possible
+    self.assertLessEqual(1, len(events))
+    self.assertEqual('abc', events[0]['channel'])
+    self.assertEqual('browsingContext.load', events[0]['method'])
+
+  def testEventChannelAndNoChannel(self):
+    conn = self.createWebSocketConnection()
+    context_id = self.getContextId(conn, 0);
+    self.assertIsNotNone(context_id)
+
+    self.subscribeToLoad(conn)
+    self.subscribeToLoad(conn, channel='x')
+    cmd_id = self.navigateSomewhere(conn, context_id)
+    conn.WaitForResponse(cmd_id)
+
+    all_events = conn.TakeEvents()
+    events = [evt for evt in all_events if 'channel' not in evt]
+    events_x = [evt for evt in all_events
+               if 'channel' in evt and evt['channel'] == 'x']
+
+    # The event for about:blank is also possible
+    self.assertLessEqual(1, len(events))
+    self.assertFalse('channel' in events[0])
+    self.assertEqual('browsingContext.load', events[0]['method'])
+
+    # The event for about:blank is also possible
+    self.assertLessEqual(1, len(events_x))
+    self.assertEqual('x', events_x[0]['channel'])
+    self.assertEqual('browsingContext.load', events[0]['method'])
+
+  def testEventConnections(self):
+    conn1 = self.createWebSocketConnection()
+    conn2 = self.createWebSocketConnection()
+    context_id = self.getContextId(conn1, 0);
+    self.assertIsNotNone(context_id)
+
+    self.subscribeToLoad(conn2)
+    cmd_id = self.navigateSomewhere(conn1, context_id=context_id)
+    conn1.WaitForResponse(cmd_id)
+    # push the events
+    cmd_id = self.postEvaluate(conn2, '12', context_id=context_id)
+    conn2.WaitForResponse(cmd_id)
+
+    events1 = conn1.TakeEvents()
+    events2 = conn2.TakeEvents()
+
+    self.assertEqual(0, len(events1))
+    # The event for about:blank is also possible
+    self.assertLessEqual(1, len(events2))
+    self.assertFalse('channel' in events2[0])
+    self.assertEqual('browsingContext.load', events2[0]['method'])
+
+
+
 
 class ClassicTest(ChromeDriverBaseTestWithWebServer):
 
   def testAfterLastPage(self):
-    driver = self.CreateDriver(web_socket_url = False)
+    driver = self.CreateDriver(web_socket_url=False)
 
     handles = driver.GetWindowHandles()
     self.assertEqual(1, len(handles))
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index 67d192c..fbc57474 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -2592,18 +2592,40 @@
     "os": [
       "win",
       "linux",
+      "mac",
       "chromeos_ash",
       "chromeos_lacros",
       "fuchsia"
     ],
     "policy_pref_mapping_tests": [
       {
+        "policies": {},
+        "prefs": {
+          "ssl.rev_checking.required_for_local_anchors": {
+            "location": "local_state",
+            "default_value": false
+          }
+        }
+      },
+      {
         "policies": {
           "RequireOnlineRevocationChecksForLocalAnchors": true
         },
         "prefs": {
           "ssl.rev_checking.required_for_local_anchors": {
-            "location": "local_state"
+            "location": "local_state",
+            "value": true
+          }
+        }
+      },
+      {
+        "policies": {
+          "RequireOnlineRevocationChecksForLocalAnchors": false
+        },
+        "prefs": {
+          "ssl.rev_checking.required_for_local_anchors": {
+            "location": "local_state",
+            "value": false
           }
         }
       }
@@ -20362,4 +20384,4 @@
       }
     ]
   }
-}
\ No newline at end of file
+}
diff --git a/chrome/test/data/webrtc/peerconnection_getstats.js b/chrome/test/data/webrtc/peerconnection_getstats.js
index 2e4f24c..e9a48ab 100644
--- a/chrome/test/data/webrtc/peerconnection_getstats.js
+++ b/chrome/test/data/webrtc/peerconnection_getstats.js
@@ -474,6 +474,8 @@
   consentRequestsSent: 'number',
   packetsDiscardedOnSend: 'number',
   bytesDiscardedOnSend: 'number',
+  lastPacketReceivedTimestamp: 'number',
+  lastPacketSentTimestamp: 'number',
 });
 addRTCStatsToAllowlist(
     Presence.MANDATORY, 'candidate-pair', kRTCIceCandidatePairStats);
diff --git a/chrome/test/data/webrtc/webrtc_getdisplaymediaset_test.html b/chrome/test/data/webrtc/webrtc_getdisplaymediaset_test.html
index 6484e3b5..b994de7 100644
--- a/chrome/test/data/webrtc/webrtc_getdisplaymediaset_test.html
+++ b/chrome/test/data/webrtc/webrtc_getdisplaymediaset_test.html
@@ -17,7 +17,7 @@
         ).toString()
       );
     } catch(error) {
-      returnToTest("capture-failure");
+      returnToTest("capture-failure," + error.name);
     }
   }
 
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index 63cf86a..90db6f9 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -181,7 +181,7 @@
 
     if (enable_dice_support) {
       sources += [
-        "intro/intro_browsertest.js",
+        "intro/sign_in_promo_browsertest.js",
         "welcome/a11y_tests.js",
         "welcome/welcome_browsertest.js",
       ]
diff --git a/chrome/test/data/webui/chromeos/account_manager/account_migration_welcome_test.js b/chrome/test/data/webui/chromeos/account_manager/account_migration_welcome_test.js
index 03e18ac..678ae364 100644
--- a/chrome/test/data/webui/chromeos/account_manager/account_migration_welcome_test.js
+++ b/chrome/test/data/webui/chromeos/account_manager/account_migration_welcome_test.js
@@ -46,13 +46,15 @@
     assertEquals(1, testBrowserProxy.getCallCount('closeDialog'));
   });
 
-  test(assert(account_migration_welcome_test.TestNames.MigrateAccount), () => {
-    const migrateButton = element.$['migrate-button'];
-    migrateButton.click();
+  test(
+      assert(account_migration_welcome_test.TestNames.MigrateAccount),
+      async () => {
+        const migrateButton = element.$['migrate-button'];
+        migrateButton.click();
 
-    assertEquals(1, testBrowserProxy.getCallCount('reauthenticateAccount'));
-    testBrowserProxy.whenCalled('reauthenticateAccount').then(email => {
-      assertEquals(fakeEmail, email);
-    });
-  });
+        assertEquals(1, testBrowserProxy.getCallCount('reauthenticateAccount'));
+        const email =
+            await testBrowserProxy.whenCalled('reauthenticateAccount');
+        assertEquals(fakeEmail, email);
+      });
 });
diff --git a/chrome/test/data/webui/chromeos/crostini_installer_app_test.js b/chrome/test/data/webui/chromeos/crostini_installer_app_test.js
index 882af3e..00eb43b 100644
--- a/chrome/test/data/webui/chromeos/crostini_installer_app_test.js
+++ b/chrome/test/data/webui/chromeos/crostini_installer_app_test.js
@@ -158,11 +158,9 @@
     await flushTasks();
     assertFalse(app.$$('#configure-message').hidden);
     await clickInstall();
-    await fakeBrowserProxy.handler.whenCalled('install').then(
-        ([diskSize, username]) => {
-          assertEquals(
-              username, loadTimeData.getString('defaultContainerUsername'));
-        });
+    const [diskSize, username] =
+        await fakeBrowserProxy.handler.whenCalled('install');
+    assertEquals(username, loadTimeData.getString('defaultContainerUsername'));
     assertFalse(app.$$('#installing-message').hidden);
     assertEquals(fakeBrowserProxy.handler.getCallCount('install'), 1);
     assertTrue(getInstallButton().hidden);
@@ -254,10 +252,9 @@
       assertTrue(isHidden(app.$$('#diskSlider')));
 
       await clickInstall();
-      await fakeBrowserProxy.handler.whenCalled('install').then(
-          ([diskSize, username]) => {
-            assertEquals(Number(diskSize), diskTicks[defaultIndex].value);
-          });
+      const [diskSize, username] =
+          await fakeBrowserProxy.handler.whenCalled('install');
+      assertEquals(Number(diskSize), diskTicks[defaultIndex].value);
       assertEquals(fakeBrowserProxy.handler.getCallCount('install'), 1);
     });
   });
@@ -280,10 +277,9 @@
     app.$$('#diskSlider').value = 1;
 
     await clickInstall();
-    await fakeBrowserProxy.handler.whenCalled('install').then(
-        ([diskSize, username]) => {
-          assertEquals(Number(diskSize), diskTicks[1].value);
-        });
+    const [diskSize, username] =
+        await fakeBrowserProxy.handler.whenCalled('install');
+    assertEquals(Number(diskSize), diskTicks[1].value);
     assertEquals(fakeBrowserProxy.handler.getCallCount('install'), 1);
   });
 
@@ -336,10 +332,9 @@
     await flushTasks();
     assertFalse(app.$.username.invalid);
     clickInstall();
-    await fakeBrowserProxy.handler.whenCalled('install').then(
-        ([diskSize, username]) => {
-          assertEquals(username, validUsername);
-        });
+    const [diskSize, username] =
+        await fakeBrowserProxy.handler.whenCalled('install');
+    assertEquals(username, validUsername);
     assertEquals(fakeBrowserProxy.handler.getCallCount('install'), 1);
   });
 
diff --git a/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn b/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn
index 01582cc1..2f53015 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/diagnostics/BUILD.gn
@@ -21,7 +21,6 @@
     ":cpu_card_test",
     ":data_point_test",
     ":diagnostics_app_test",
-    ":diagnostics_app_unified_test",
     ":diagnostics_sticky_banner_test",
     ":diagnostics_test_utils",
     ":diagnostics_utils_test",
@@ -148,11 +147,6 @@
   externs_list = [ "$externs_path/mocha-2.5.js" ]
 }
 
-js_library("diagnostics_app_unified_test") {
-  deps = []
-  externs_list = [ "$externs_path/mocha-2.5.js" ]
-}
-
 js_library("diagnostics_test_utils") {
   deps = [
     "../..:chai_assert",
diff --git a/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js
index 733c200..f02da432 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/battery_status_card_test.js
@@ -4,6 +4,7 @@
 
 import 'chrome://diagnostics/battery_status_card.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {BatteryStatusCardElement} from 'chrome://diagnostics/battery_status_card.js';
 import {getDiagnosticsIcon} from 'chrome://diagnostics/diagnostics_utils.js';
@@ -25,7 +26,7 @@
 
 const BATTERY_ICON_PREFIX = 'battery-';
 
-export function batteryStatusCardTestSuite() {
+suite('batteryStatusCardTestSuite', function() {
   /** @type {?BatteryStatusCardElement} */
   let batteryStatusElement = null;
 
@@ -263,4 +264,4 @@
               batteryStatusElement.batteryIcon);
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/cellular_info_test.js b/chrome/test/data/webui/chromeos/diagnostics/cellular_info_test.js
index 3db9c62..32de74fd 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/cellular_info_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/cellular_info_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/cellular_info.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {getLockType, getSignalStrength} from 'chrome://diagnostics/diagnostics_utils.js';
 import {fakeCellularNetwork} from 'chrome://diagnostics/fake_data.js';
@@ -12,7 +13,7 @@
 
 import {assertDataPointHasExpectedHeaderAndValue} from './diagnostics_test_utils.js';
 
-export function cellularInfoTestSuite() {
+suite('cellularInfoTestSuite', function() {
   /** @type {?CellularInfoElement} */
   let cellularInfoElement = null;
 
@@ -170,4 +171,4 @@
                 cellularInfoElement, '#technology',
                 cellularInfoElement.i18n('networkTechnologyLabel'), ''));
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js
index 1167f94a..a9e0ddc2 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/connectivity_card_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/connectivity_card.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {ConnectivityCardElement} from 'chrome://diagnostics/connectivity_card.js';
 import {fakeCellularNetwork, fakeEthernetNetwork, fakeNetworkGuidInfoList, fakeWifiNetwork} from 'chrome://diagnostics/fake_data.js';
@@ -21,7 +22,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function connectivityCardTestSuite() {
+suite('connectivityCardTestSuite', function() {
   /** @type {?ConnectivityCardElement} */
   let connectivityCardElement = null;
 
@@ -225,4 +226,4 @@
                 TestSuiteStatus.RUNNING,
                 connectivityCardElement.testSuiteStatus));
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js
index 96aff31..56c121d 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/cpu_card_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/cpu_card.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {CpuCardElement} from 'chrome://diagnostics/cpu_card.js';
 import {fakeCpuUsage, fakeSystemInfo} from 'chrome://diagnostics/fake_data.js';
@@ -19,7 +20,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function cpuCardTestSuite() {
+suite('cpuCardTestSuite', function() {
   /** @type {?CpuCardElement} */
   let cpuElement = null;
 
@@ -148,4 +149,4 @@
               dx_utils.getDataPoint(cpuElement, '#cpuSpeed').tooltipText, '');
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/data_point_test.js b/chrome/test/data/webui/chromeos/diagnostics/data_point_test.js
index 6b9901ba..97fd160 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/data_point_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/data_point_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/data_point.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {DataPointElement} from 'chrome://diagnostics/data_point.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -12,7 +13,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function dataPointTestSuite() {
+suite('dataPointTestSuite', function() {
   /** @type {?DataPointElement} */
   let dataPointElement = null;
 
@@ -87,4 +88,4 @@
           dataPointElement.shadowRoot.querySelector('.text-red'), value);
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_input_hiding_test.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_input_hiding_test.js
index 7408b32..20ad2bb 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_input_hiding_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_input_hiding_test.js
@@ -4,6 +4,7 @@
 
 import 'chrome://diagnostics/diagnostics_app.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {DiagnosticsAppElement} from 'chrome://diagnostics/diagnostics_app.js';
 import {DiagnosticsBrowserProxyImpl} from 'chrome://diagnostics/diagnostics_browser_proxy.js';
@@ -19,7 +20,7 @@
 
 import {TestDiagnosticsBrowserProxy} from './test_diagnostics_browser_proxy.js';
 
-export function appTestSuiteForInputHiding() {
+suite('appTestSuiteForInputHiding', function() {
   /** @type {?DiagnosticsAppElement} */
   let page = null;
 
@@ -107,4 +108,4 @@
     await flushTasks();
     assertFalse(navigationSelectorHasId('input'));
   });
-}
\ No newline at end of file
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_test.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_test.js
index c44bbae6..86d138e 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_test.js
@@ -4,6 +4,7 @@
 
 import 'chrome://diagnostics/diagnostics_app.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {DiagnosticsAppElement} from 'chrome://diagnostics/diagnostics_app.js';
 import {DiagnosticsBrowserProxyImpl} from 'chrome://diagnostics/diagnostics_browser_proxy.js';
@@ -21,7 +22,7 @@
 import * as dx_utils from './diagnostics_test_utils.js';
 import {TestDiagnosticsBrowserProxy} from './test_diagnostics_browser_proxy.js';
 
-export function appTestSuite() {
+suite('appTestSuite', function() {
   /** @type {?DiagnosticsAppElement} */
   let page = null;
 
@@ -177,7 +178,8 @@
     return flushTasks();
   }
 
-  if (window.isNetworkEnabled || window.isInputEnabled) {
+  if (window.loadTimeData.getBoolean('isNetworkingEnabled') ||
+      window.loadTimeData.getBoolean('isInputEnabled')) {
     test('SystemPagePopulated', () => {
       return initializeDiagnosticsApp(
                  fakeSystemInfo, fakeBatteryChargeStatus, fakeBatteryHealth,
@@ -232,4 +234,4 @@
           });
     });
   }
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_unified_test.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_unified_test.js
deleted file mode 100644
index 718447e..0000000
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_app_unified_test.js
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import {batteryStatusCardTestSuite} from './battery_status_card_test.js';
-import {cellularInfoTestSuite} from './cellular_info_test.js';
-import {connectivityCardTestSuite} from './connectivity_card_test.js';
-import {cpuCardTestSuite} from './cpu_card_test.js';
-import {dataPointTestSuite} from './data_point_test.js';
-import {appTestSuiteForInputHiding} from './diagnostics_app_input_hiding_test.js';
-import {appTestSuite} from './diagnostics_app_test.js';
-import {diagnosticsNetworkIconTestSuite} from './diagnostics_network_icon_test.js';
-import {diagnosticsStickyBannerTestSuite} from './diagnostics_sticky_banner_test.js';
-import {diagnosticsUtilsTestSuite} from './diagnostics_utils_test.js';
-import {drawingProviderTestSuite} from './drawing_provider_test.js';
-import {drawingProviderUtilsTestSuite} from './drawing_provider_utils_test.js';
-import {ethernetInfoTestSuite} from './ethernet_info_test.js';
-import {fakeNetworkHealthProviderTestSuite} from './fake_network_health_provider_test.js';
-import {fakeSystemDataProviderTestSuite} from './fake_system_data_provider_test.js';
-import {fakeSystemRoutineContollerTestSuite} from './fake_system_routine_controller_test.js';
-import {frequencyChannelUtilsTestSuite} from './frequency_channel_utils_test.js';
-import {inputCardTestSuite} from './input_card_test.js';
-import {inputListTestSuite} from './input_list_test.js';
-import {ipConfigInfoDrawerTestSuite} from './ip_config_info_drawer_test.js';
-import {keyboardTesterTestSuite} from './keyboard_tester_test.js';
-import {memoryCardTestSuite} from './memory_card_test.js';
-import {fakeMojoProviderTestSuite} from './mojo_interface_provider_test.js';
-import {networkCardTestSuite} from './network_card_test.js';
-import {networkInfoTestSuite} from './network_info_test.js';
-import {networkListTestSuite} from './network_list_test.js';
-import {networkTroubleshootingTestSuite} from './network_troubleshooting_test.js';
-import {overviewCardTestSuite} from './overview_card_test.js';
-import {percentBarChartTestSuite} from './percent_bar_chart_test.js';
-import {realtimeCpuChartTestSuite} from './realtime_cpu_chart_test.js';
-import {routineGroupTestSuite} from './routine_group_test.js';
-import {fakeRoutineListExecutorTestSuite} from './routine_list_executor_test.js';
-import {routineResultEntryTestSuite} from './routine_result_entry_test.js';
-import {routineResultListTestSuite} from './routine_result_list_test.js';
-import {routineSectionTestSuite} from './routine_section_test.js';
-import {systemPageTestSuite} from './system_page_test.js';
-import {textBadgeTestSuite} from './text_badge_test.js';
-import {touchscreenTesterTestSuite} from './touchscreen_tester_test.js';
-import {wifiInfoTestSuite} from './wifi_info_test.js';
-
-window.isNetworkEnabled = window.loadTimeData.getBoolean('isNetworkingEnabled');
-window.isInputEnabled = window.loadTimeData.getBoolean('isInputEnabled');
-window.test_suites_list = {};
-
-function runSuite(suiteName, testFn, condition = 'default') {
-  window.test_suites_list[suiteName] = condition;
-
-  if (condition === 'default' ||
-      (condition === 'network' && window.isNetworkEnabled) ||
-      (condition === 'input' && window.isInputEnabled)) {
-    suite(suiteName, testFn);
-  }
-}
-
-runSuite('App', appTestSuite);
-runSuite('AppForInputHiding', appTestSuiteForInputHiding, 'input');
-runSuite('BatteryStatusCard', batteryStatusCardTestSuite);
-runSuite('CellularInfo', cellularInfoTestSuite, 'network');
-runSuite('ConnectivityCard', connectivityCardTestSuite, 'network');
-runSuite('CpuCard', cpuCardTestSuite);
-runSuite('DataPoint', dataPointTestSuite);
-runSuite('DiagnosticsNetworkIcon', diagnosticsNetworkIconTestSuite, 'network');
-runSuite('DiagnosticsStickyBanner', diagnosticsStickyBannerTestSuite);
-runSuite('DiagnosticsUtils', diagnosticsUtilsTestSuite);
-runSuite('DrawingProvider', drawingProviderTestSuite);
-runSuite('DrawingProviderUtils', drawingProviderUtilsTestSuite);
-runSuite('EthernetInfo', ethernetInfoTestSuite, 'network');
-runSuite('FakeMojoInterface', fakeMojoProviderTestSuite);
-runSuite('FakeNetworkHealthProvider', fakeNetworkHealthProviderTestSuite);
-runSuite('FakeSystemDataProvider', fakeSystemDataProviderTestSuite);
-runSuite('FakeSystemRoutineContoller', fakeSystemRoutineContollerTestSuite);
-runSuite('FrequencyChannelUtils', frequencyChannelUtilsTestSuite);
-runSuite('InputCard', inputCardTestSuite, 'input');
-runSuite('InputList', inputListTestSuite, 'input');
-runSuite('IpConfigInfoDrawer', ipConfigInfoDrawerTestSuite, 'network');
-runSuite('KeyboardTester', keyboardTesterTestSuite, 'input');
-runSuite('MemoryCard', memoryCardTestSuite);
-runSuite('NetworkCard', networkCardTestSuite, 'network');
-runSuite('NetworkInfo', networkInfoTestSuite, 'network');
-runSuite('NetworkList', networkListTestSuite, 'network');
-runSuite('NetworkTroubleshooting', networkTroubleshootingTestSuite, 'network');
-runSuite('OverviewCard', overviewCardTestSuite);
-runSuite('PercentBarChart', percentBarChartTestSuite);
-runSuite('RealtimeCpuChart', realtimeCpuChartTestSuite);
-runSuite('RoutineGroup', routineGroupTestSuite, 'network');
-runSuite('RoutineListExecutor', fakeRoutineListExecutorTestSuite);
-runSuite('RoutineResultEntry', routineResultEntryTestSuite);
-runSuite('RoutineResultList', routineResultListTestSuite);
-runSuite('RoutineSection', routineSectionTestSuite);
-runSuite('SystemPage', systemPageTestSuite);
-runSuite('TextBadge', textBadgeTestSuite);
-runSuite('TouchscreenTester', touchscreenTesterTestSuite, 'input');
-runSuite('WifiInfo', wifiInfoTestSuite, 'network');
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_browsertest.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_browsertest.js
index 50b66ea..c03df8e 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_browsertest.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_browsertest.js
@@ -9,11 +9,13 @@
  * To run all tests in a single instance (default, faster):
  * `browser_tests --gtest_filter=DiagnosticsApp*``
  *
- * To run each test in a new instance:
- * `browser_tests --run-manual --gtest_filter=DiagnosticsApp.MANUAL_*``
- *
  * To run a single test suite, such as 'CpuCard':
- * `browser_tests --run-manual --gtest_filter=DiagnosticsApp.MANUAL_CpuCard`
+ * `browser_tests
+ * --gtest_filter=DiagnosticsApp_CpuCard.All`
+ *
+ * To run a single test suite, such as 'TouchscreenTester':
+ * `browser_tests
+ * --gtest_filter=DiagnosticsAppWithInput_TouchscreenTester.All`
  *
  */
 
@@ -22,42 +24,12 @@
 GEN('#include "ash/constants/ash_features.h"');
 GEN('#include "content/public/test/browser_test.h"');
 
-const dxTestSuites = 'chromeos/diagnostics/diagnostics_app_unified_test.js';
-const diagnosticsUrl =
-    `chrome://diagnostics/test_loader.html?module=${dxTestSuites}&host=test`;
-
-this.DiagnosticsApp = class extends PolymerTest {
-  /** @override */
-  get browsePreload() {
-    return diagnosticsUrl;
-  }
-
+const DiagnosticsApp = class extends PolymerTest {
   /** @override */
   get featureList() {}
 };
 
-this.DiagnosticsAppWithNetwork = class extends PolymerTest {
-  /** @override */
-  get browsePreload() {
-    return diagnosticsUrl;
-  }
-
-  /** @override */
-  get featureList() {
-    return {
-      enabled: [
-        'chromeos::features::kEnableNetworkingInDiagnosticsApp',
-      ],
-    };
-  }
-};
-
-this.DiagnosticsAppWithInput = class extends PolymerTest {
-  /** @override */
-  get browsePreload() {
-    return diagnosticsUrl;
-  }
-
+const DiagnosticsAppWithInput = class extends PolymerTest {
   /** @override */
   get featureList() {
     return {
@@ -70,82 +42,64 @@
   }
 };
 
-// List of names of suites in unified test to register for individual debugging.
-// You must register all suites in unified test here as well for consistency,
-// although technically is not necessary.
-const debug_suites_list = [
-  'App',
-  'AppForInputHiding',
-  'BatteryStatusCard',
-  'CellularInfo',
-  'ConnectivityCard',
-  'CpuCard',
-  'DataPoint',
-  'DiagnosticsNetworkIcon',
-  'DiagnosticsStickyBanner',
-  'DiagnosticsUtils',
-  'DrawingProvider',
-  'DrawingProviderUtils',
-  'EthernetInfo',
-  'FakeMojoInterface',
-  'FakeNetworkHealthProvider',
-  'FakeSystemDataProvider',
-  'FakeSystemRoutineContoller',
-  'FrequencyChannelUtils',
-  'InputCard',
-  'InputList',
-  'IpConfigInfoDrawer',
-  'KeyboardTester',
-  'MemoryCard',
-  'NetworkCard',
-  'NetworkInfo',
-  'NetworkList',
-  'NetworkTroubleshooting',
-  'OverviewCard',
-  'PercentBarChart',
-  'RealtimeCpuChart',
-  'RoutineGroup',
-  'RoutineListExecutor',
-  'RoutineResultEntry',
-  'RoutineResultList',
-  'RoutineSection',
-  'SystemPage',
-  'TextBadge',
-  'TouchscreenTester',
-  'WifiInfo',
+const tests = [
+  ['App', 'diagnostics_app_test.js'],
+  ['AppForInputHiding', 'diagnostics_app_input_hiding_test.js', 'Input'],
+  ['BatteryStatusCard', 'battery_status_card_test.js'],
+  ['CellularInfo', 'cellular_info_test.js'],
+  ['ConnectivityCard', 'connectivity_card_test.js'],
+  ['CpuCard', 'cpu_card_test.js'],
+  ['DataPoint', 'data_point_test.js'],
+  ['DiagnosticsNetworkIcon', 'diagnostics_network_icon_test.js'],
+  ['DiagnosticsStickyBanner', 'diagnostics_sticky_banner_test.js'],
+  ['DiagnosticsUtils', 'diagnostics_utils_test.js'],
+  ['DrawingProvider', 'drawing_provider_test.js'],
+  ['DrawingProviderUtils', 'drawing_provider_utils_test.js'],
+  ['EthernetInfo', 'ethernet_info_test.js'],
+  ['FakeMojoInterface', 'mojo_interface_provider_test.js'],
+  ['FakeNetworkHealthProvider', 'fake_network_health_provider_test.js'],
+  ['FakeSystemDataProvider', 'fake_system_data_provider_test.js'],
+  ['FakeSystemRoutineContoller', 'fake_system_routine_controller_test.js'],
+  ['FrequencyChannelUtils', 'frequency_channel_utils_test.js'],
+  ['InputCard', 'input_card_test.js', 'Input'],
+  ['InputList', 'input_list_test.js', 'Input'],
+  ['IpConfigInfoDrawer', 'ip_config_info_drawer_test.js'],
+  ['KeyboardTester', 'keyboard_tester_test.js', 'Input', 'DISABLED_All'],
+  ['MemoryCard', 'memory_card_test.js'],
+  ['NetworkCard', 'network_card_test.js', undefined, 'DISABLED_All'],
+  ['NetworkInfo', 'network_info_test.js'],
+  ['NetworkList', 'network_list_test.js'],
+  ['NetworkTroubleshooting', 'network_troubleshooting_test.js'],
+  ['OverviewCard', 'overview_card_test.js'],
+  ['PercentBarChart', 'percent_bar_chart_test.js'],
+  ['RealtimeCpuChart', 'realtime_cpu_chart_test.js'],
+  ['RoutineGroup', 'routine_group_test.js'],
+  ['RoutineListExecutor', 'routine_list_executor_test.js'],
+  ['RoutineResultEntry', 'routine_result_entry_test.js'],
+  ['RoutineResultList', 'routine_result_list_test.js'],
+  ['RoutineSection', 'routine_section_test.js'],
+  ['SystemPage', 'system_page_test.js', undefined, 'DISABLED_All'],
+  ['TextBadge', 'text_badge_test.js'],
+  ['TouchscreenTester', 'touchscreen_tester_test.js', 'Input'],
+  ['WifiInfo', 'wifi_info_test.js'],
 ];
 
-// Flaky: https://crbug.com/1372958
-TEST_F('DiagnosticsApp', 'DISABLED_BrowserTest', function() {
-  assertDeepEquals(
-      debug_suites_list, Object.keys(test_suites_list),
-      'List of registered tests suites and debug suites do not match.\n' +
-          'Did you forget to add your test in debug_suites_list?');
+tests.forEach(([testName, module, condition, caseName]) => {
+  const className =
+      `DiagnosticsApp${condition ? `with${condition}` : ''}_${testName}`;
 
-  mocha.run();
+  let classToExtend = DiagnosticsApp;
+  if (condition === 'Input') {
+    classToExtend = DiagnosticsAppWithInput;
+  }
+
+  this[className] = class extends classToExtend {
+    /** @override */
+    get browsePreload() {
+      return `chrome://diagnostics/test_loader.html` +
+          `?module=chromeos/diagnostics/${module}&host=test`;
+    }
+  }
+
+  TEST_F(className, caseName || 'All', () => mocha.run());
 });
-
-// Flaky: https://crbug.com/1372958
-TEST_F('DiagnosticsAppWithNetwork', 'DISABLED_BrowserTest', function() {
-  mocha.run();
-});
-
-// Flaky: https://crbug.com/1372958
-TEST_F('DiagnosticsAppWithInput', 'DISABLED_BrowserTest', function() {
-  mocha.run();
-});
-
-// Register each suite listed as individual tests for debugging purposes.
-for (const suiteName of debug_suites_list) {
-  TEST_F('DiagnosticsApp', `MANUAL_${suiteName}`, function() {
-    runMochaSuite(suiteName);
-  });
-
-  TEST_F('DiagnosticsAppWithNetwork', `MANUAL_${suiteName}`, function() {
-    runMochaSuite(suiteName);
-  });
-
-  TEST_F('DiagnosticsAppWithInput', `MANUAL_${suiteName}`, function() {
-    runMochaSuite(suiteName);
-  });
-}
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_network_icon_test.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_network_icon_test.js
index f77a41b..20ea880d 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_network_icon_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_network_icon_test.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {ConnectionStateType, CrosNetworkType, DiagnosticsNetworkIconElement, networkToNetworkStateAdapter} from 'chrome://diagnostics/diagnostics_network_icon.js';
 import {fakeCellularDisabledNetwork, fakeCellularNetwork, fakeConnectingEthernetNetwork, fakeDisconnectedEthernetNetwork, fakeEthernetNetwork, fakePortalWifiNetwork, fakeWifiNetwork, fakeWifiNetworkDisabled} from 'chrome://diagnostics/fake_data.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -11,7 +13,7 @@
 
 import {assertTextContains} from './diagnostics_test_utils.js';
 
-export function diagnosticsNetworkIconTestSuite() {
+suite('diagnosticsNetworkIconTestSuite', function() {
   /** @type {?DiagnosticsNetworkIconElement} */
   let diagnosticsNetworkIconElement = null;
 
@@ -212,4 +214,4 @@
               'Ethernet network, connecting', getConnectingIcon().alt);
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_sticky_banner_test.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_sticky_banner_test.js
index 024be47c..64131fe3 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_sticky_banner_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_sticky_banner_test.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {DiagnosticsStickyBannerElement} from 'chrome://diagnostics/diagnostics_sticky_banner.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
 
@@ -10,7 +12,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function diagnosticsStickyBannerTestSuite() {
+suite('diagnosticsStickyBannerTestSuite', function() {
   /** @type {?DiagnosticsStickyBannerElement} */
   let diagnosticsStickyBannerElement = null;
 
@@ -204,4 +206,4 @@
           assertNotEquals(-1, getScrollTimerId_());
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_utils_test.js b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_utils_test.js
index b22ed8ab..379ec31 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/diagnostics_utils_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/diagnostics_utils_test.js
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://diagnostics/strings.m.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {convertKibToGibDecimalString, getNetworkCardTitle, getRoutineGroups, getSignalStrength, getSubnetMaskFromRoutingPrefix, setDisplayStateInTitleForTesting} from 'chrome://diagnostics/diagnostics_utils.js';
 import {NetworkType} from 'chrome://diagnostics/network_health_provider.mojom-webui.js';
 import {RoutineGroup} from 'chrome://diagnostics/routine_group.js';
@@ -10,7 +13,7 @@
 
 import {assertArrayEquals, assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
 
-export function diagnosticsUtilsTestSuite() {
+suite('diagnosticsUtilsTestSuite', function() {
   test('ProperlyConvertsKibToGib', () => {
     assertEquals('0', convertKibToGibDecimalString(0, 0));
     assertEquals('0.00', convertKibToGibDecimalString(0, 2));
@@ -131,4 +134,4 @@
     assertEquals(getSignalStrength(63), 'Good (63)');
     assertEquals(getSignalStrength(98), 'Excellent (98)');
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_test.js b/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_test.js
index ba4fcd6..5c21a1e 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_test.js
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://diagnostics/strings.m.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {CanvasDrawingProvider} from 'chrome://diagnostics/drawing_provider.js';
 import {constructRgba, DESTINATION_OVER, LINE_CAP, LINE_WIDTH, lookupCssVariableValue, MARK_COLOR, MARK_OPACITY, MARK_RADIUS, TRAIL_COLOR, TRAIL_MAX_OPACITY} from 'chrome://diagnostics/drawing_provider_utils.js';
 
@@ -46,7 +49,7 @@
   }
 }
 
-export function drawingProviderTestSuite() {
+suite('drawingProviderTestSuite', function() {
   /** @type {{createFunctionMock: Function, reset: Function}} */
   let mockController;
 
@@ -128,4 +131,4 @@
     assertEquals(
         DESTINATION_OVER, drawingProvider.getGlobalCompositeOperation());
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_utils_test.js b/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_utils_test.js
index 7d0b517..dcebef1 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_utils_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/drawing_provider_utils_test.js
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://diagnostics/strings.m.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {constructRgba, getTrailOpacityFromPressure, lookupCssVariableValue, MARK_COLOR, MARK_OPACITY, TRAIL_COLOR, TRAIL_MAX_OPACITY} from 'chrome://diagnostics/drawing_provider_utils.js';
 
 import {assertEquals} from '../../chai_assert.js';
@@ -19,7 +22,7 @@
   }
 };
 
-export function drawingProviderUtilsTestSuite() {
+suite('drawingProviderUtilsTestSuite', function() {
   /** @type {{createFunctionMock: Function, reset: Function}} */
   let mockController;
 
@@ -65,4 +68,4 @@
       assertEquals(expectedRgba[i], constructRgba(rgbList[i], opacityList[i]));
     }
   });
-}
\ No newline at end of file
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/ethernet_info_test.js b/chrome/test/data/webui/chromeos/diagnostics/ethernet_info_test.js
index b9cad079..710a0c00 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/ethernet_info_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/ethernet_info_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/ethernet_info.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {fakeEthernetNetwork} from 'chrome://diagnostics/fake_data.js';
 import {AuthenticationType, EthernetStateProperties, Network} from 'chrome://diagnostics/network_health_provider.mojom-webui.js';
@@ -12,7 +13,7 @@
 
 import {assertDataPointHasExpectedHeaderAndValue, assertTextContains, getDataPointValue} from './diagnostics_test_utils.js';
 
-export function ethernetInfoTestSuite() {
+suite('ethernetInfoTestSuite', function() {
   /** @type {?EthernetInfoElement} */
   let ethernetInfoElement = null;
 
@@ -94,4 +95,4 @@
               expectedValue);
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/fake_network_health_provider_test.js b/chrome/test/data/webui/chromeos/diagnostics/fake_network_health_provider_test.js
index 14878af7..230119f 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/fake_network_health_provider_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/fake_network_health_provider_test.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {fakeCellularNetwork, fakeEthernetNetwork, fakeNetworkGuidInfoList, fakeWifiNetwork} from 'chrome://diagnostics/fake_data.js';
 import {FakeNetworkHealthProvider} from 'chrome://diagnostics/fake_network_health_provider.js';
 import {NetworkListObserverRemote, NetworkStateObserverRemote} from 'chrome://diagnostics/network_health_provider.mojom-webui.js';
@@ -9,7 +11,7 @@
 
 import {assertDeepEquals, assertEquals, assertTrue} from '../../chai_assert.js';
 
-export function fakeNetworkHealthProviderTestSuite() {
+suite('fakeNetworkHealthProviderTestSuite', function() {
   /** @type {?FakeNetworkHealthProvider} */
   let provider = null;
 
@@ -112,4 +114,4 @@
                 ethernetNetworkStateObserverRemote, 'ethernetGuid'))
         .then(() => ethernetResolver.promise);
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/fake_system_data_provider_test.js b/chrome/test/data/webui/chromeos/diagnostics/fake_system_data_provider_test.js
index fd65942..e764e1e 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/fake_system_data_provider_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/fake_system_data_provider_test.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {fakeBatteryChargeStatus, fakeBatteryHealth, fakeBatteryInfo, fakeBatteryInfo2, fakeCpuUsage, fakeMemoryUsage} from 'chrome://diagnostics/fake_data.js';
 import {FakeSystemDataProvider} from 'chrome://diagnostics/fake_system_data_provider.js';
 import {BatteryChargeStatusObserverRemote, BatteryHealthObserverRemote, CpuUsageObserverRemote, DeviceCapabilities, MemoryUsageObserverRemote, SystemInfo, VersionInfo} from 'chrome://diagnostics/system_data_provider.mojom-webui.js';
@@ -9,7 +11,7 @@
 
 import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
 
-export function fakeSystemDataProviderTestSuite() {
+suite('fakeSystemDataProviderTestSuite', function() {
   /** @type {?FakeSystemDataProvider} */
   let provider = null;
 
@@ -364,4 +366,4 @@
           return completeResolver.promise;
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/fake_system_routine_controller_test.js b/chrome/test/data/webui/chromeos/diagnostics/fake_system_routine_controller_test.js
index 3fb27d8..eb95f39 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/fake_system_routine_controller_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/fake_system_routine_controller_test.js
@@ -2,13 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js';
 import {RoutineRunnerRemote, RoutineType, StandardRoutineResult} from 'chrome://diagnostics/system_routine_controller.mojom-webui.js';
 import {PromiseResolver} from 'chrome://resources/js/promise_resolver.js';
 
 import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from '../../chai_assert.js';
 
-export function fakeSystemRoutineContollerTestSuite() {
+suite('fakeSystemRoutineContollerTestSuite', function() {
   /** @type {?FakeSystemRoutineController} */
   let controller = null;
 
@@ -183,4 +185,4 @@
       assertDeepEquals(expected, result.routines);
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/frequency_channel_utils_test.js b/chrome/test/data/webui/chromeos/diagnostics/frequency_channel_utils_test.js
index 32a329f2..77e6e94 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/frequency_channel_utils_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/frequency_channel_utils_test.js
@@ -2,12 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {ChannelBand} from 'chrome://diagnostics/diagnostics_types.js';
 import {convertFrequencyToChannel, getFrequencyChannelBand} from 'chrome://diagnostics/frequency_channel_utils.js';
 
 import {assertEquals} from '../../chai_assert.js';
 
-export function frequencyChannelUtilsTestSuite() {
+suite('frequencyChannelUtilsTestSuite', function() {
   test('ConvertFrequencyToChannel', () => {
     // Frequency not in map.
     assertEquals(null, convertFrequencyToChannel(0));
@@ -31,4 +33,4 @@
     assertEquals(ChannelBand.TWO_DOT_FOUR_GHZ, getFrequencyChannelBand(2412));
     assertEquals(ChannelBand.FIVE_GHZ, getFrequencyChannelBand(5160));
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/input_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/input_card_test.js
index d8ec48e..c39d747 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/input_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/input_card_test.js
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://diagnostics/strings.m.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {InputCardElement, InputCardType} from 'chrome://diagnostics/input_card.js';
 import {ConnectionType, KeyboardInfo, MechanicalLayout, NumberPadPresence, PhysicalLayout, TopRightKey, TopRowKey} from 'chrome://diagnostics/input_data_provider.mojom-webui.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -45,7 +48,7 @@
   },
 ];
 
-export function inputCardTestSuite() {
+suite('inputCardTestSuite', function() {
   /** @type {?InputCardElement} */
   let inputCardElement = null;
 
@@ -105,4 +108,4 @@
     await flushTasks();
     assertTrue(listenerCalled);
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/input_list_test.js b/chrome/test/data/webui/chromeos/diagnostics/input_list_test.js
index 69f6644..8e51792 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/input_list_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/input_list_test.js
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/input_list.js';
+import 'chrome://diagnostics/strings.m.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {DiagnosticsBrowserProxyImpl} from 'chrome://diagnostics/diagnostics_browser_proxy.js';
 import {NavigationView} from 'chrome://diagnostics/diagnostics_types.js';
@@ -21,7 +23,7 @@
 
 import {TestDiagnosticsBrowserProxy} from './test_diagnostics_browser_proxy.js';
 
-export function inputListTestSuite() {
+suite('inputListTestSuite', function() {
   /** @type {?InputListElement} */
   let inputListElement = null;
 
@@ -211,6 +213,9 @@
 
     touchscreenTester.shadowRoot.dispatchEvent(new Event('fullscreenchange'));
     assertFalse(introDialog.open);
+    assertEquals(
+        /*expectedMoveAppBackToPreviousScreenCalled=*/ 1,
+        provider.getMoveAppBackToPreviousScreenCalled());
   });
 
   test('TouchscreenTesterShowAndCloseInTabletMode', async () => {
@@ -377,4 +382,4 @@
         /** @type {!Array<!NavigationView>} */
         (diagnosticsBrowserProxy.getArgs('recordNavigation')[0]));
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/ip_config_info_drawer_test.js b/chrome/test/data/webui/chromeos/diagnostics/ip_config_info_drawer_test.js
index 0957e4f..f228e25 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/ip_config_info_drawer_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/ip_config_info_drawer_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/ip_config_info_drawer.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {DiagnosticsBrowserProxyImpl} from 'chrome://diagnostics/diagnostics_browser_proxy.js';
 import {fakeEthernetNetwork, fakeWifiNetwork, fakeWifiNetworkEmptyNameServers, fakeWifiNetworkMultipleNameServers, fakeWifiNetworkNoNameServers} from 'chrome://diagnostics/fake_data.js';
@@ -16,7 +17,7 @@
 import * as dx_utils from './diagnostics_test_utils.js';
 import {TestDiagnosticsBrowserProxy} from './test_diagnostics_browser_proxy.js';
 
-export function ipConfigInfoDrawerTestSuite() {
+suite('ipConfigInfoDrawerTestSuite', function() {
   /** @type {?IpConfigInfoDrawerElement} */
   let ipConfigInfoDrawerElement = null;
 
@@ -214,4 +215,4 @@
               getNameServersHeaderText(), 'Name Servers');
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/keyboard_tester_test.js b/chrome/test/data/webui/chromeos/diagnostics/keyboard_tester_test.js
index d84ab574..02aa950 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/keyboard_tester_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/keyboard_tester_test.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {ConnectionType, KeyEvent, KeyEventType, MechanicalLayout, NumberPadPresence, PhysicalLayout, TopRightKey} from 'chrome://diagnostics/input_data_provider.mojom-webui.js';
 import {TopRightKey as DiagramTopRightKey} from 'chrome://resources/ash/common/keyboard_diagram.js';
 import {KeyboardKeyState} from 'chrome://resources/ash/common/keyboard_key.js';
@@ -14,7 +16,7 @@
 
 import {assertElementContainsText} from './diagnostics_test_utils.js';
 
-export function keyboardTesterTestSuite() {
+suite('keyboardTesterTestSuite', function() {
   /** @type {?KeyboardTesterElement} */
   let keyboardTesterElement = null;
 
@@ -201,4 +203,4 @@
     await keyDownEvent;
     assertFalse(keyboardTesterElement.isOpen());
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/memory_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/memory_card_test.js
index eace9b43..6150d0d 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/memory_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/memory_card_test.js
@@ -4,6 +4,7 @@
 
 import 'chrome://diagnostics/memory_card.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {convertKibToGibDecimalString} from 'chrome://diagnostics/diagnostics_utils.js';
 import {fakeMemoryUsage, fakeMemoryUsageLowAvailableMemory} from 'chrome://diagnostics/fake_data.js';
@@ -20,7 +21,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function memoryCardTestSuite() {
+suite('memoryCardTestSuite', function() {
   /** @type {?MemoryCardElement} */
   let memoryElement = null;
 
@@ -128,4 +129,4 @@
           routineSectionElement.shadowRoot.querySelector('#messageIcon'))));
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/mojo_interface_provider_test.js b/chrome/test/data/webui/chromeos/diagnostics/mojo_interface_provider_test.js
index 0cebdfc..f685cd8 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/mojo_interface_provider_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/mojo_interface_provider_test.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {FakeNetworkHealthProvider} from 'chrome://diagnostics/fake_network_health_provider.js';
 import {FakeSystemDataProvider} from 'chrome://diagnostics/fake_system_data_provider.js';
 import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js';
@@ -9,7 +11,7 @@
 
 import {assertEquals} from '../../chai_assert.js';
 
-export function fakeMojoProviderTestSuite() {
+suite('fakeMojoProviderTestSuite', function() {
   test('SettingGettingTestProvider', () => {
     const fake_provider = new FakeSystemDataProvider();
     setSystemDataProviderForTesting(fake_provider);
@@ -27,4 +29,4 @@
     setNetworkHealthProviderForTesting(fake_provider);
     assertEquals(fake_provider, getNetworkHealthProvider());
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/network_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/network_card_test.js
index 013adc2..803dcdb 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/network_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/network_card_test.js
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/network_card.js';
+import 'chrome://diagnostics/strings.m.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {fakeCellularDisabledNetwork, fakeCellularDisconnectedNetwork, fakeCellularNetwork, fakeCellularWithIpConfigNetwork, fakeConnectingEthernetNetwork, fakeDisconnectedEthernetNetwork, fakeDisconnectedWifiNetwork, fakeEthernetNetwork, fakeNetworkGuidInfoList, fakePortalWifiNetwork, fakeWifiNetwork, fakeWifiNetworkDisabled, fakeWifiNetworkInvalidNameServers, fakeWifiNetworkNoIpAddress} from 'chrome://diagnostics/fake_data.js';
 import {FakeNetworkHealthProvider} from 'chrome://diagnostics/fake_network_health_provider.js';
@@ -17,7 +19,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function networkCardTestSuite() {
+suite('networkCardTestSuite', function() {
   /** @type {?NetworkCardElement} */
   let networkCardElement = null;
 
@@ -398,4 +400,4 @@
           getTroubleshootingLinkText());
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/network_info_test.js b/chrome/test/data/webui/chromeos/diagnostics/network_info_test.js
index 0f2ac92d..b7d49c68 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/network_info_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/network_info_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/network_info.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {fakeCellularNetwork, fakeEthernetNetwork, fakeWifiNetwork} from 'chrome://diagnostics/fake_data.js';
 import {Network} from 'chrome://diagnostics/network_health_provider.mojom-webui.js';
@@ -14,7 +15,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function networkInfoTestSuite() {
+suite('networkInfoTestSuite', function() {
   /** @type {?NetworkInfoElement} */
   let networkInfoElement = null;
 
@@ -86,4 +87,4 @@
               isVisible(dx_utils.getCellularInfoElement(networkInfoElement)));
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js b/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js
index c3ad6675..b2d1ac73 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/network_list_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/network_list.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {ConnectivityCardElement} from 'chrome://diagnostics/connectivity_card.js';
 import {DiagnosticsBrowserProxyImpl} from 'chrome://diagnostics/diagnostics_browser_proxy.js';
@@ -20,7 +21,7 @@
 import * as dx_utils from './diagnostics_test_utils.js';
 import {TestDiagnosticsBrowserProxy} from './test_diagnostics_browser_proxy.js';
 
-export function networkListTestSuite() {
+suite('networkListTestSuite', function() {
   /** @type {?TestDiagnosticsBrowserProxy} */
   let DiagnosticsBrowserProxy = null;
 
@@ -283,4 +284,4 @@
                     networkListElement.shadowRoot.querySelector(
                         '.diagnostics-network-list-container')))));
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/network_troubleshooting_test.js b/chrome/test/data/webui/chromeos/diagnostics/network_troubleshooting_test.js
index 8b26f77..c943b8a0 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/network_troubleshooting_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/network_troubleshooting_test.js
@@ -2,6 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://diagnostics/strings.m.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {NetworkTroubleshootingElement} from 'chrome://diagnostics/network_troubleshooting.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
 
@@ -10,7 +13,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function networkTroubleshootingTestSuite() {
+suite('networkTroubleshootingTestSuite', function() {
   /** @type {?NetworkTroubleshootingElement} */
   let networkTroubleshootingElement = null;
 
@@ -93,4 +96,4 @@
           assertFalse(isVisible(getLinkTextElement()));
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/overview_card_test.js b/chrome/test/data/webui/chromeos/diagnostics/overview_card_test.js
index 963c6d2a..109fda5 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/overview_card_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/overview_card_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/overview_card.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {fakeSystemInfo, fakeSystemInfoWithoutBoardName, fakeSystemInfoWithTBD} from 'chrome://diagnostics/fake_data.js';
 import {FakeSystemDataProvider} from 'chrome://diagnostics/fake_system_data_provider.js';
@@ -17,7 +18,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function overviewCardTestSuite() {
+suite('overviewCardTestSuite', function() {
   /** @type {?OverviewCardElement} */
   let overviewElement = null;
 
@@ -94,4 +95,4 @@
           versionInfo[0].toUpperCase() + versionInfo.slice(1));
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/percent_bar_chart_test.js b/chrome/test/data/webui/chromeos/diagnostics/percent_bar_chart_test.js
index 49d37ca..fcbcc63 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/percent_bar_chart_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/percent_bar_chart_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/percent_bar_chart.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {PercentBarChartElement} from 'chrome://diagnostics/percent_bar_chart.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -11,7 +12,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function percentBarChartTestSuite() {
+suite('percentBarChartTestSuite', function() {
   /** @type {?PercentBarChartElement} */
   let percentBarChartElement = null;
 
@@ -74,4 +75,4 @@
       assertEquals(paperProgress.value, paperProgress.max);
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js b/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js
index 82e0204a..73862cea 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/realtime_cpu_chart.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {RealtimeCpuChartElement} from 'chrome://diagnostics/realtime_cpu_chart.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -11,7 +12,7 @@
 
 import * as diagnostics_test_utils from './diagnostics_test_utils.js';
 
-export function realtimeCpuChartTestSuite() {
+suite('realtimeCpuChartTestSuite', function() {
   /** @type {?RealtimeCpuChartElement} */
   let realtimeCpuChartElement = null;
 
@@ -147,4 +148,4 @@
                        .getAttribute('d'));
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/routine_group_test.js b/chrome/test/data/webui/chromeos/diagnostics/routine_group_test.js
index 76128496..2244f087 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/routine_group_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/routine_group_test.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {createRoutine} from 'chrome://diagnostics/diagnostics_utils.js';
 import {RoutineGroup} from 'chrome://diagnostics/routine_group.js';
 import {ExecutionProgress, ResultStatusItem} from 'chrome://diagnostics/routine_list_executor.js';
@@ -49,7 +51,7 @@
   return routineGroup.nonBlockingRoutines_;
 }
 
-export function routineGroupTestSuite() {
+suite('routineGroupTestSuite', function() {
   const {kSignalStrength, kHasSecureWiFiConnection, kCaptivePortal} =
       RoutineType;
   test('GroupStatusSetCorrectly', () => {
@@ -128,4 +130,4 @@
     assertTrue(nonBlockingRoutines.has(kHasSecureWiFiConnection));
     assertFalse(nonBlockingRoutines.has(kCaptivePortal));
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/routine_list_executor_test.js b/chrome/test/data/webui/chromeos/diagnostics/routine_list_executor_test.js
index 1bc01e1..65239adb 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/routine_list_executor_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/routine_list_executor_test.js
@@ -2,13 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js';
 import {ExecutionProgress, ResultStatusItem, RoutineListExecutor} from 'chrome://diagnostics/routine_list_executor.js';
 import {PowerRoutineResult, RoutineResultInfo, RoutineType, StandardRoutineResult} from 'chrome://diagnostics/system_routine_controller.mojom-webui.js';
 
 import {assertEquals, assertFalse, assertNotEquals, assertTrue} from '../../chai_assert.js';
 
-export function fakeRoutineListExecutorTestSuite() {
+suite('fakeRoutineListExecutorTestSuite', function() {
   /** @type {?FakeSystemRoutineController} */
   let controller = null;
 
@@ -145,4 +147,4 @@
 
     return runRoutinesAndAssertResults(routines);
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/routine_result_entry_test.js b/chrome/test/data/webui/chromeos/diagnostics/routine_result_entry_test.js
index c37be192..e5886f1 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/routine_result_entry_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/routine_result_entry_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/routine_result_entry.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {RoutineGroup} from 'chrome://diagnostics/routine_group.js';
 import {ExecutionProgress, ResultStatusItem} from 'chrome://diagnostics/routine_list_executor.js';
@@ -17,7 +18,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function routineResultEntryTestSuite() {
+suite('routineResultEntryTestSuite', function() {
   /** @type {?RoutineResultEntryElement} */
   let routineResultEntryElement = null;
 
@@ -320,4 +321,4 @@
           assertEquals(expectedAnnounceText, getAnnoucedText());
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/routine_result_list_test.js b/chrome/test/data/webui/chromeos/diagnostics/routine_result_list_test.js
index d78b2141..f22b71d 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/routine_result_list_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/routine_result_list_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/routine_result_list.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {ExecutionProgress, ResultStatusItem} from 'chrome://diagnostics/routine_list_executor.js';
 import {RoutineResultEntryElement} from 'chrome://diagnostics/routine_result_entry.js';
@@ -14,7 +15,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function routineResultListTestSuite() {
+suite('routineResultListTestSuite', function() {
   /** @type {?RoutineResultListElement} */
   let routineResultListElement = null;
 
@@ -211,4 +212,4 @@
           });
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/routine_section_test.js b/chrome/test/data/webui/chromeos/diagnostics/routine_section_test.js
index 86658c22..3843ce6 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/routine_section_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/routine_section_test.js
@@ -4,6 +4,7 @@
 
 import 'chrome://diagnostics/routine_section.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {createRoutine} from 'chrome://diagnostics/diagnostics_utils.js';
 import {FakeSystemRoutineController} from 'chrome://diagnostics/fake_system_routine_controller.js';
@@ -23,7 +24,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function routineSectionTestSuite() {
+suite('routineSectionTestSuite', function() {
   /** @type {?RoutineSectionElement} */
   let routineSectionElement = null;
 
@@ -1367,4 +1368,4 @@
           assertEquals('', getAnnouncedText());
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/system_page_test.js b/chrome/test/data/webui/chromeos/diagnostics/system_page_test.js
index 0e9cd825..28782864 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/system_page_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/system_page_test.js
@@ -2,8 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://diagnostics/strings.m.js';
 import 'chrome://diagnostics/system_page.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {DiagnosticsBrowserProxyImpl} from 'chrome://diagnostics/diagnostics_browser_proxy.js';
 import {NavigationView} from 'chrome://diagnostics/diagnostics_types.js';
@@ -54,7 +56,7 @@
   });
 }
 
-export function systemPageTestSuite() {
+suite('systemPageTestSuite', function() {
   /** @type {?SystemPageElement} */
   let page = null;
 
@@ -316,7 +318,7 @@
 
   // System page is only responsible for banner display when in stand-alone
   // view.
-  if (!window.isNetworkEnabled) {
+  if (!window.loadTimeData.getBoolean('isNetworkingEnabled')) {
     test('RunningCpuTestsShowsBanner', () => {
       /** @type {?RoutineSectionElement} */
       let routineSection;
@@ -408,4 +410,4 @@
               (DiagnosticsBrowserProxy.getArgs('recordNavigation')[0]));
         });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/text_badge_test.js b/chrome/test/data/webui/chromeos/diagnostics/text_badge_test.js
index 5eec418..518e8cb 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/text_badge_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/text_badge_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/text_badge.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {BadgeType, TextBadgeElement} from 'chrome://diagnostics/text_badge.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
@@ -11,7 +12,7 @@
 
 import * as dx_utils from './diagnostics_test_utils.js';
 
-export function textBadgeTestSuite() {
+suite('textBadgeTestSuite', function() {
   /** @type {?TextBadgeElement} */
   let textBadgeElement = null;
 
@@ -52,4 +53,4 @@
       dx_utils.assertTextContains(textBadge.textContent, value);
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/touchscreen_tester_test.js b/chrome/test/data/webui/chromeos/diagnostics/touchscreen_tester_test.js
index 2d6038e9..af2e6f8d 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/touchscreen_tester_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/touchscreen_tester_test.js
@@ -2,13 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
+
 import {DialogType, SCREEN_MAX_LENGTH, TouchEventType} from 'chrome://diagnostics/touchscreen_tester.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
 
 import {assertDeepEquals, assertEquals, assertTrue} from '../../chai_assert.js';
 import {MockController} from '../../mock_controller.js';
 
-export function touchscreenTesterTestSuite() {
+suite('touchscreenTesterTestSuite', function() {
   /** @type {?TouchscreenTesterElement} */
   let touchscreenTesterElement = null;
 
@@ -249,4 +251,4 @@
       mockController.verifyMocks();
     }
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/diagnostics/wifi_info_test.js b/chrome/test/data/webui/chromeos/diagnostics/wifi_info_test.js
index a577cd8..f9ce88b 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/wifi_info_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/wifi_info_test.js
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://diagnostics/wifi_info.js';
+import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 
 import {getSignalStrength} from 'chrome://diagnostics/diagnostics_utils.js';
 import {fakeDisconnectedWifiNetwork, fakeWifiNetwork, fakeWiFiStateProperties} from 'chrome://diagnostics/fake_data.js';
@@ -14,7 +15,7 @@
 
 import {assertDataPointHasExpectedHeaderAndValue, assertTextContains, getDataPointValue} from './diagnostics_test_utils.js';
 
-export function wifiInfoTestSuite() {
+suite('wifiInfoTestSuite', function() {
   /** @type {?WifiInfoElement} */
   let wifiInfoElement = null;
 
@@ -200,4 +201,4 @@
       assertEquals(getDataPointValue(wifiInfoElement, '#signalStrength'), '');
     });
   });
-}
+});
diff --git a/chrome/test/data/webui/chromeos/personalization_app/wallpaper_preview_element_test.ts b/chrome/test/data/webui/chromeos/personalization_app/wallpaper_preview_element_test.ts
index d1e341f..1f3aa8c 100644
--- a/chrome/test/data/webui/chromeos/personalization_app/wallpaper_preview_element_test.ts
+++ b/chrome/test/data/webui/chromeos/personalization_app/wallpaper_preview_element_test.ts
@@ -87,7 +87,7 @@
 
     const img = wallpaperPreviewElement.shadowRoot!.querySelector('img');
     assertEquals(
-        `chrome://personalization/wallpaper.png?key=${
+        `chrome://personalization/wallpaper.jpg?key=${
             wallpaperProvider.currentWallpaper.key}`,
         img!.src,
         'current wallpaper key is appended to url as query parameter');
diff --git a/chrome/test/data/webui/chromeos/personalization_app/wallpaper_selected_element_test.ts b/chrome/test/data/webui/chromeos/personalization_app/wallpaper_selected_element_test.ts
index 73fc488..339bcf8 100644
--- a/chrome/test/data/webui/chromeos/personalization_app/wallpaper_selected_element_test.ts
+++ b/chrome/test/data/webui/chromeos/personalization_app/wallpaper_selected_element_test.ts
@@ -92,7 +92,7 @@
 
     const img = wallpaperSelectedElement.shadowRoot!.querySelector('img');
     assertEquals(
-        `chrome://personalization/wallpaper.png?key=${
+        `chrome://personalization/wallpaper.jpg?key=${
             wallpaperProvider.currentWallpaper.key}`,
         img!.src, 'sets current wallpaper key appended to url');
 
@@ -146,7 +146,7 @@
     const img = wallpaperSelectedElement.shadowRoot!.querySelector('img') as
         HTMLImageElement;
     assertEquals(
-        `chrome://personalization/wallpaper.png?key=${
+        `chrome://personalization/wallpaper.jpg?key=${
             wallpaperProvider.currentWallpaper.key}`,
         img!.src, 'sets current wallpaper key appended to url');
 
@@ -159,7 +159,7 @@
     await waitAfterNextRender(wallpaperSelectedElement);
 
     assertEquals(
-        `chrome://personalization/wallpaper.png?key=new_key`, img.src,
+        `chrome://personalization/wallpaper.jpg?key=new_key`, img.src,
         'updates wallpaper key query parameter');
   });
 
diff --git a/chrome/test/data/webui/chromeos/print_management/print_management_test.ts b/chrome/test/data/webui/chromeos/print_management/print_management_test.ts
index 3b8a071..5e4e47b 100644
--- a/chrome/test/data/webui/chromeos/print_management/print_management_test.ts
+++ b/chrome/test/data/webui/chromeos/print_management/print_management_test.ts
@@ -361,7 +361,7 @@
       return mojoApi.whenCalled('getPrintJobs');
     });
   }
-  test('PrintJobHistoryExpirationPeriodOneDay', () => {
+  test('PrintJobHistoryExpirationPeriodOneDay', async () => {
     const completedInfo =
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted);
     const expectedText = 'Print jobs older than 1 day will be removed';
@@ -373,21 +373,14 @@
     ];
     // Print job metadata will be stored for 1 day.
     mojoApi_.setExpirationPeriod(1);
-    return initializePrintManagementApp(expectedArr.slice().reverse())
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          return mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
-        })
-        .then(() => {
-          const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
-          assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
-        });
+    await initializePrintManagementApp(expectedArr.slice().reverse());
+    await mojoApi_.whenCalled('getPrintJobs');
+    await mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
+    const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
+    assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
   });
 
-  test('PrintJobHistoryExpirationPeriodDefault', () => {
+  test('PrintJobHistoryExpirationPeriodDefault', async () => {
     const completedInfo =
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted);
     const expectedText = 'Print jobs older than 90 days will be removed';
@@ -401,21 +394,15 @@
     // Print job metadata will be stored for 90 days which is the default
     // period when the policy is not controlled.
     mojoApi_.setExpirationPeriod(90);
-    return initializePrintManagementApp(expectedArr.slice().reverse())
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          return mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
-        })
-        .then(() => {
-          const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
-          assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
-        });
+    await initializePrintManagementApp(expectedArr.slice().reverse());
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    await mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
+    const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
+    assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
   });
 
-  test('PrintJobHistoryExpirationPeriodIndefinte', () => {
+  test('PrintJobHistoryExpirationPeriodIndefinte', async () => {
     const completedInfo =
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted);
     const expectedText = 'Print jobs will appear in history unless they are ' +
@@ -430,21 +417,15 @@
     // When this policy is set to a value of -1, the print jobs metadata is
     // stored indefinitely.
     mojoApi_.setExpirationPeriod(-1);
-    return initializePrintManagementApp(expectedArr.slice().reverse())
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          return mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
-        })
-        .then(() => {
-          const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
-          assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
-        });
+    await initializePrintManagementApp(expectedArr.slice().reverse());
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    await mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
+    const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
+    assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
   });
 
-  test('PrintJobHistoryExpirationPeriodNDays', () => {
+  test('PrintJobHistoryExpirationPeriodNDays', async () => {
     const completedInfo =
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted);
     const expectedText = 'Print jobs older than 4 days will be removed';
@@ -457,21 +438,15 @@
 
     // Print job metadata will be stored for 4 days.
     mojoApi_.setExpirationPeriod(4);
-    return initializePrintManagementApp(expectedArr.slice().reverse())
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          return mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
-        })
-        .then(() => {
-          const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
-          assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
-        });
+    await initializePrintManagementApp(expectedArr.slice().reverse());
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    await mojoApi_.whenCalled('getPrintJobHistoryExpirationPeriod');
+    const historyInfoTooltip = querySelector(page!, 'paper-tooltip');
+    assertEquals(expectedText, historyInfoTooltip?.textContent?.trim());
   });
 
-  test('PrintHistoryListIsSortedReverseChronologically', () => {
+  test('PrintHistoryListIsSortedReverseChronologically', async () => {
     const completedInfo =
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted);
     const expectedArr = [
@@ -492,33 +467,24 @@
     // Initialize with a reversed array of |expectedArr|, since we expect the
     // app to sort the list when it first loads. Since reverse() mutates the
     // original array, use a copy array to prevent mutating |expectedArr|.
-    return initializePrintManagementApp(expectedArr.slice().reverse())
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedArr, getHistoryPrintJobEntries(page!));
-        });
+    await initializePrintManagementApp(expectedArr.slice().reverse());
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs(expectedArr, getHistoryPrintJobEntries(page!));
   });
 
-  test('ClearAllButtonDisabledWhenNoPrintJobsSaved', () => {
+  test('ClearAllButtonDisabledWhenNoPrintJobsSaved', async () => {
     // Initialize with no saved print jobs, expect the clear all button to be
     // disabled.
-    return initializePrintManagementApp(/*printJobs=*/[])
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          assertTrue(
-              !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')
-                    ?.disabled);
-          assertTrue(!querySelector(page!, '#policyIcon'));
-        });
+    await initializePrintManagementApp(/*printJobs=*/[]);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    assertTrue(
+        !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')?.disabled);
+    assertTrue(!querySelector(page!, '#policyIcon'));
   });
 
-  test('ClearAllButtonDisabledByPolicy', () => {
+  test('ClearAllButtonDisabledByPolicy', async () => {
     const expectedArr = [createJobEntry(
         'newest', 'titleA',
         convertToMojoTime(new Date(Date.UTC(2020, 3, 1, 1, 1, 1))),
@@ -527,20 +493,15 @@
         /*activeInfo=*/ undefined)];
     // Set policy to prevent user from deleting history.
     mojoApi_.setDeletePrintJobPolicy(/*isAllowedByPolicy=*/ false);
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          assertTrue(
-              !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')
-                    ?.disabled);
-          assertTrue(!!querySelector(page!, '#policyIcon'));
-        });
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    assertTrue(
+        !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')?.disabled);
+    assertTrue(!!querySelector(page!, '#policyIcon'));
   });
 
-  test('ClearAllPrintHistory', () => {
+  test('ClearAllPrintHistory', async () => {
     const completedInfo =
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted);
     const expectedArr = [
@@ -558,46 +519,38 @@
           PrinterErrorCode.kNoError, completedInfo, /*activeInfo=*/ undefined),
     ];
 
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          return mojoApi_.whenCalled('getDeletePrintJobHistoryAllowedByPolicy');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedArr, getHistoryPrintJobEntries(page!));
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    await mojoApi_.whenCalled('getDeletePrintJobHistoryAllowedByPolicy');
+    flush();
+    verifyPrintJobs(expectedArr, getHistoryPrintJobEntries(page!));
 
-          // Click the clear all button.
-          const button =
-              querySelector<HTMLButtonElement>(page!, '#clearAllButton')!;
-          button.click();
-          flush();
-          // Verify that the confirmation dialog shows up and click on the
-          // confirmation button.
-          const dialog = querySelector(page!, '#clearHistoryDialog');
-          assertTrue(!!dialog);
-          const dialogActionButton =
-              querySelector<HTMLButtonElement>(dialog, '.action-button')!;
-          assertTrue(!dialogActionButton.disabled);
-          dialogActionButton.click();
-          assertTrue(dialogActionButton.disabled);
-          return mojoApi_.whenCalled('deleteAllPrintJobs');
-        })
-        .then(() => {
-          flush();
-          // After clearing the history list, expect that the history list and
-          // header are no longer
-          assertTrue(!querySelector(page!, '#entryList'));
-          assertTrue(!querySelector(page!, '#historyHeaderContainer'));
-          assertTrue(
-              !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')
-                    ?.disabled);
-        });
+    // Click the clear all button.
+    const button = querySelector<HTMLButtonElement>(page!, '#clearAllButton')!;
+    button.click();
+    flush();
+
+    // Verify that the confirmation dialog shows up and click on the
+    // confirmation button.
+    const dialog = querySelector(page!, '#clearHistoryDialog');
+    assertTrue(!!dialog);
+    const dialogActionButton =
+        querySelector<HTMLButtonElement>(dialog, '.action-button')!;
+    assertTrue(!dialogActionButton.disabled);
+    dialogActionButton.click();
+    assertTrue(dialogActionButton.disabled);
+    await mojoApi_.whenCalled('deleteAllPrintJobs');
+    flush();
+
+    // After clearing the history list, expect that the history list and
+    // header are no longer
+    assertTrue(!querySelector(page!, '#entryList'));
+    assertTrue(!querySelector(page!, '#historyHeaderContainer'));
+    assertTrue(
+        !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')?.disabled);
   });
 
-  test('PrintJobDeletesFromObserver', () => {
+  test('PrintJobDeletesFromObserver', async () => {
     const completedInfo =
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted);
     const expectedArr = [
@@ -615,45 +568,34 @@
           PrinterErrorCode.kNoError, completedInfo, /*activeInfo=*/ undefined),
     ];
 
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedArr, getHistoryPrintJobEntries(page!));
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs(expectedArr, getHistoryPrintJobEntries(page!));
 
-          // Simulate observer call that signals all print jobs have been
-          // deleted. Expect the UI to retrieve an empty list of print jobs.
-          mojoApi_.simulatePrintJobsDeletedfromDatabase();
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          // After clearing the history list, expect that the history list and
-          // header are no longer
-          assertTrue(!querySelector(page!, '#entryList'));
-          assertTrue(!querySelector(page!, '#historyHeaderContainer'));
-          assertTrue(
-              !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')
-                    ?.disabled);
-        });
+    // Simulate observer call that signals all print jobs have been
+    // deleted. Expect the UI to retrieve an empty list of print jobs.
+    mojoApi_.simulatePrintJobsDeletedfromDatabase();
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    // After clearing the history list, expect that the history list and
+    // header are no longer
+    assertTrue(!querySelector(page!, '#entryList'));
+    assertTrue(!querySelector(page!, '#historyHeaderContainer'));
+    assertTrue(
+        !!querySelector<HTMLButtonElement>(page!, '#clearAllButton')?.disabled);
   });
 
-  test('HistoryHeaderIsHiddenWithEmptyPrintJobsInHistory', () => {
-    return initializePrintManagementApp(/*expectedArr=*/[])
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          // Header should be not be rendered since no there are no completed
-          // print jobs in the history.
-          assertTrue(!querySelector(page!, '#historyHeaderContainer'));
-        });
+  test('HistoryHeaderIsHiddenWithEmptyPrintJobsInHistory', async () => {
+    await initializePrintManagementApp(/*expectedArr=*/[]);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    // Header should be not be rendered since no there are no completed
+    // print jobs in the history.
+    assertTrue(!querySelector(page!, '#historyHeaderContainer'));
   });
 
-  test('LoadsOngoingPrintJob', () => {
+  test('LoadsOngoingPrintJob', async () => {
     const activeInfo1 = createOngoingPrintJobInfo(
         /*printedPages=*/ 0, ActivePrintJobState.kStarted);
     const activeInfo2 = createOngoingPrintJobInfo(
@@ -669,17 +611,13 @@
           PrinterErrorCode.kNoError, /*completedInfo=*/ undefined, activeInfo2),
     ];
 
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedArr, getOngoingPrintJobEntries(page!));
-        });
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs(expectedArr, getOngoingPrintJobEntries(page!));
   });
 
-  test('OngoingPrintJobUpdated', () => {
+  test('OngoingPrintJobUpdated', async () => {
     const expectedArr = [
       createJobEntry(
           'fileA', 'titleA',
@@ -698,23 +636,17 @@
           PrinterErrorCode.kNoError, /*completedInfo=*/ undefined, activeInfo2),
     ];
 
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedArr, getOngoingPrintJobEntries(page!));
-          mojoApi_.simulateUpdatePrintJob(expectedUpdatedArr[0]!);
-          return flushTasks();
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedUpdatedArr, getOngoingPrintJobEntries(page!));
-        });
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs(expectedArr, getOngoingPrintJobEntries(page!));
+    mojoApi_.simulateUpdatePrintJob(expectedUpdatedArr[0]!);
+    await flushTasks();
+    flush();
+    verifyPrintJobs(expectedUpdatedArr, getOngoingPrintJobEntries(page!));
   });
 
-  test('OngoingPrintJobUpdatedToStopped', () => {
+  test('OngoingPrintJobUpdatedToStopped', async () => {
     const expectedArr = [
       createJobEntry(
           'fileA', 'titleA',
@@ -734,23 +666,17 @@
           activeInfo2),
     ];
 
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedArr, getOngoingPrintJobEntries(page!));
-          mojoApi_.simulateUpdatePrintJob(expectedUpdatedArr[0]!);
-          return flushTasks();
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(expectedUpdatedArr, getOngoingPrintJobEntries(page!));
-        });
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs(expectedArr, getOngoingPrintJobEntries(page!));
+    mojoApi_.simulateUpdatePrintJob(expectedUpdatedArr[0]!);
+    await flushTasks();
+    flush();
+    verifyPrintJobs(expectedUpdatedArr, getOngoingPrintJobEntries(page!));
   });
 
-  test('NewOngoingPrintJobsDetected', () => {
+  test('NewOngoingPrintJobsDetected', async () => {
     const initialJob = [createJobEntry(
         'fileA', 'titleA',
         convertToMojoTime(new Date('February 5, 2020 03:24:00')),
@@ -765,25 +691,18 @@
         createOngoingPrintJobInfo(
             /*printedPages=*/ 1, ActivePrintJobState.kStarted));
 
-    return initializePrintManagementApp(initialJob)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(initialJob, getOngoingPrintJobEntries(page!));
-          mojoApi_.simulateUpdatePrintJob(newOngoingJob);
-          return flushTasks();
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(
-              [initialJob[0]!, newOngoingJob],
-              getOngoingPrintJobEntries(page!));
-        });
+    await initializePrintManagementApp(initialJob);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs(initialJob, getOngoingPrintJobEntries(page!));
+    mojoApi_.simulateUpdatePrintJob(newOngoingJob);
+    await flushTasks();
+    flush();
+    verifyPrintJobs(
+        [initialJob[0]!, newOngoingJob], getOngoingPrintJobEntries(page!));
   });
 
-  test('OngoingPrintJobCompletesAndUpdatesHistoryList', () => {
+  test('OngoingPrintJobCompletesAndUpdatesHistoryList', async () => {
     const id = 'fileA';
     const title = 'titleA';
     const date =
@@ -800,43 +719,34 @@
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kPrinted),
         /*activeInfo=*/ undefined)];
 
-    return initializePrintManagementApp([activeJob])
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs([activeJob], getOngoingPrintJobEntries(page!));
-          // Simulate ongoing print job has completed.
-          activeJob.activePrintJobInfo!.activeState =
-              ActivePrintJobState.kDocumentDone;
-          mojoApi_.simulateUpdatePrintJob(activeJob);
-          // Simulate print job has been added to history.
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          verifyPrintJobs(
-              expectedPrintJobArr, getHistoryPrintJobEntries(page!));
-        });
+    await initializePrintManagementApp([activeJob]);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs([activeJob], getOngoingPrintJobEntries(page!));
+
+    // Simulate ongoing print job has completed.
+    activeJob.activePrintJobInfo!.activeState =
+        ActivePrintJobState.kDocumentDone;
+    mojoApi_.simulateUpdatePrintJob(activeJob);
+
+    // Simulate print job has been added to history.
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    verifyPrintJobs(expectedPrintJobArr, getHistoryPrintJobEntries(page!));
   });
 
-  test('OngoingPrintJobEmptyState', () => {
-    return initializePrintManagementApp(/*expectedArr=*/[])
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          // Assert that ongoing list is empty and the empty state message is
-          // not hidden.
-          assertTrue(!querySelector(page!, '#ongoingList'));
-          assertTrue(
-              !querySelector<HTMLElement>(page!, '#ongoingEmptyState')?.hidden);
-        });
+  test('OngoingPrintJobEmptyState', async () => {
+    await initializePrintManagementApp(/*expectedArr=*/[]);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    // Assert that ongoing list is empty and the empty state message is
+    // not hidden.
+    assertTrue(!querySelector(page!, '#ongoingList'));
+    assertTrue(
+        !querySelector<HTMLElement>(page!, '#ongoingEmptyState')?.hidden);
   });
 
-  test('CancelOngoingPrintJob', () => {
+  test('CancelOngoingPrintJob', async () => {
     const kId = 'fileA';
     const kTitle = 'titleA';
     const kTime =
@@ -853,30 +763,24 @@
         kId, kTitle, kTime, PrinterErrorCode.kNoError,
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kCanceled))];
 
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          const jobEntries = getOngoingPrintJobEntries(page!);
-          verifyPrintJobs(expectedArr, jobEntries);
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    const jobEntries = getOngoingPrintJobEntries(page!);
+    verifyPrintJobs(expectedArr, jobEntries);
 
-          return simulateCancelPrintJob(
-              jobEntries[0]!, mojoApi_,
-              /*shouldAttemptCancel*/ true, expectedHistoryList);
-        })
-        .then(() => {
-          flush();
-          // Verify that there are no ongoing print jobs and history list is
-          // populated.
-          assertTrue(!querySelector(page!, '#ongoingList'));
-          verifyPrintJobs(
-              expectedHistoryList, getHistoryPrintJobEntries(page!));
-        });
+    await simulateCancelPrintJob(
+        jobEntries[0]!, mojoApi_,
+        /*shouldAttemptCancel*/ true, expectedHistoryList);
+    flush();
+
+    // Verify that there are no ongoing print jobs and history list is
+    // populated.
+    assertTrue(!querySelector(page!, '#ongoingList'));
+    verifyPrintJobs(expectedHistoryList, getHistoryPrintJobEntries(page!));
   });
 
-  test('CancelOngoingPrintJobNotAttempted', () => {
+  test('CancelOngoingPrintJobNotAttempted', async () => {
     const kId = 'fileA';
     const kTitle = 'titleA';
     const kTime =
@@ -894,28 +798,22 @@
         kId, kTitle, kTime, PrinterErrorCode.kNoError,
         createCompletedPrintJobInfo(PrintJobCompletionStatus.kCanceled))];
 
-    return initializePrintManagementApp(expectedArr)
-        .then(() => {
-          return mojoApi_.whenCalled('getPrintJobs');
-        })
-        .then(() => {
-          flush();
-          const jobEntries = getOngoingPrintJobEntries(page!);
-          verifyPrintJobs(expectedArr, jobEntries);
+    await initializePrintManagementApp(expectedArr);
+    await mojoApi_.whenCalled('getPrintJobs');
+    flush();
+    const jobEntries = getOngoingPrintJobEntries(page!);
+    verifyPrintJobs(expectedArr, jobEntries);
 
-          return simulateCancelPrintJob(
-              jobEntries[0]!, mojoApi_,
-              /*shouldAttemptCancel=*/ false, expectedHistoryList);
-        })
-        .then(() => {
-          flush();
-          // Verify that there are no ongoing print jobs and history list is
-          // populated.
-          // TODO(crbug/1093527): Show error message to user after UX guidance.
-          assertTrue(!querySelector(page!, '#ongoingList'));
-          verifyPrintJobs(
-              expectedHistoryList, getHistoryPrintJobEntries(page!));
-        });
+    await simulateCancelPrintJob(
+        jobEntries[0]!, mojoApi_,
+        /*shouldAttemptCancel=*/ false, expectedHistoryList);
+    flush();
+
+    // Verify that there are no ongoing print jobs and history list is
+    // populated.
+    // TODO(crbug/1093527): Show error message to user after UX guidance.
+    assertTrue(!querySelector(page!, '#ongoingList'));
+    verifyPrintJobs(expectedHistoryList, getHistoryPrintJobEntries(page!));
   });
 });
 
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_dialog_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_dialog_test.ts
index 2ec968e5..8551035 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_dialog_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_dialog_test.ts
@@ -14,7 +14,7 @@
 import {AcceleratorInfo, Modifier} from 'chrome://shortcut-customization/js/shortcut_types.js';
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 
-import {createUserAccelerator} from './shortcut_customization_test_util.js';
+import {createUserAcceleratorInfo} from './shortcut_customization_test_util.js';
 
 suite('acceleratorEditDialogTest', function() {
   let viewElement: AcceleratorEditDialogElement|null = null;
@@ -30,12 +30,12 @@
   });
 
   test('LoadsBasicDialog', async () => {
-    const acceleratorInfo1: AcceleratorInfo = createUserAccelerator(
+    const acceleratorInfo1: AcceleratorInfo = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
 
-    const acceleratorInfo2: AcceleratorInfo = createUserAccelerator(
+    const acceleratorInfo2: AcceleratorInfo = createUserAcceleratorInfo(
         Modifier.CONTROL,
         /*key=*/ 67,
         /*keyDisplay=*/ 'c');
@@ -89,12 +89,12 @@
   });
 
   test('AddShortcut', async () => {
-    const acceleratorInfo1: AcceleratorInfo = createUserAccelerator(
+    const acceleratorInfo1: AcceleratorInfo = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
 
-    const acceleratorInfo2: AcceleratorInfo = createUserAccelerator(
+    const acceleratorInfo2: AcceleratorInfo = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 67,
         /*keyDisplay=*/ 'c');
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_view_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_view_test.ts
index cb5d41e..d3cf831 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_view_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_edit_view_test.ts
@@ -14,7 +14,7 @@
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
 import {isVisible} from 'chrome://webui-test/test_util.js';
 
-import {createDefaultAccelerator, createUserAccelerator} from './shortcut_customization_test_util.js';
+import {createDefaultAcceleratorInfo, createUserAcceleratorInfo} from './shortcut_customization_test_util.js';
 
 suite('acceleratorEditViewTest', function() {
   let editViewElement: AcceleratorEditViewElement|null = null;
@@ -45,7 +45,7 @@
   }
 
   test('LoadsBasicEditView', async () => {
-    const acceleratorInfo = createUserAccelerator(
+    const acceleratorInfo = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
@@ -73,7 +73,7 @@
   });
 
   test('LockedAccelerator', async () => {
-    const acceleratorInfo = createUserAccelerator(
+    const acceleratorInfo = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g',
@@ -92,7 +92,7 @@
   });
 
   test('DetectShortcutConflict', async () => {
-    const acceleratorInfo = createDefaultAccelerator(
+    const acceleratorInfo = createDefaultAcceleratorInfo(
         Modifier.ALT,
         /*key=*/ 221,
         /*keyDisplay=*/ ']');
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts
index 9404b95c..d56f431 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_lookup_manager_test.ts
@@ -122,8 +122,7 @@
 
       const expectedNewAccel: Accelerator = {
         modifiers: Modifier.CONTROL,
-        key: 79,
-        keyDisplay: 'o',
+        keyCode: 79,
       };
 
       // Sanity check that new accel is not in the reverse lookup.
@@ -148,8 +147,7 @@
       // Replace the new accelerator with the "ALT + ]" default accelerator.
       const expectedNewDefaultAccel: Accelerator = {
         modifiers: Modifier.ALT,
-        key: 221,
-        keyDisplay: ']',
+        keyCode: 221,
       };
 
       // Sanity check that new accel is not in the reverse lookup.
@@ -226,8 +224,7 @@
 
       const expectedNewAccel: Accelerator = {
         modifiers: Modifier.CONTROL,
-        key: 79,
-        keyDisplay: 'o',
+        keyCode: 79,
       };
 
       // Sanity check that new accel is not in the reverse lookup.
@@ -337,8 +334,7 @@
 
       const expectedNewAccel: Accelerator = {
         modifiers: Modifier.CONTROL,
-        key: 79,
-        keyDisplay: 'o',
+        keyCode: 79,
       };
 
       // Sanity check that new accel is not in the reverse lookup.
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_row_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_row_test.ts
index 23b8f66a..e3cf9a90 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_row_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_row_test.ts
@@ -13,7 +13,7 @@
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks, waitAfterNextRender} from 'chrome://webui-test/polymer_test_util.js';
 
-import {createUserAccelerator} from './shortcut_customization_test_util.js';
+import {createUserAcceleratorInfo} from './shortcut_customization_test_util.js';
 
 export function initAcceleratorRowElement(): AcceleratorRowElement {
   const element = document.createElement('accelerator-row');
@@ -35,12 +35,12 @@
   test('LoadsBasicRow', async () => {
     loadTimeData.overrideValues({isCustomizationEnabled: true});
     rowElement = initAcceleratorRowElement();
-    const acceleratorInfo1 = createUserAccelerator(
+    const acceleratorInfo1 = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
 
-    const acceleratorInfo2 = createUserAccelerator(
+    const acceleratorInfo2 = createUserAcceleratorInfo(
         Modifier.CONTROL,
         /*key=*/ 67,
         /*keyDisplay=*/ 'c');
@@ -86,7 +86,7 @@
   test('LockIconVisibleWhenCustomizationEnabled', async () => {
     loadTimeData.overrideValues({isCustomizationEnabled: true});
     rowElement = initAcceleratorRowElement();
-    const acceleratorInfo1 = createUserAccelerator(
+    const acceleratorInfo1 = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
@@ -116,7 +116,7 @@
   test('LockIconHiddenWhenCustomizationDisabled', async () => {
     loadTimeData.overrideValues({isCustomizationEnabled: false});
     rowElement = initAcceleratorRowElement();
-    const acceleratorInfo1 = createUserAccelerator(
+    const acceleratorInfo1 = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
@@ -140,7 +140,7 @@
     rowElement = initAcceleratorRowElement();
     waitAfterNextRender(rowElement);
 
-    const acceleratorInfo1 = createUserAccelerator(
+    const acceleratorInfo1 = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
@@ -173,7 +173,7 @@
     rowElement = initAcceleratorRowElement();
     waitAfterNextRender(rowElement);
 
-    const acceleratorInfo1 = createUserAccelerator(
+    const acceleratorInfo1 = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_subsection_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_subsection_test.ts
index 3c51329..2bd6bf1 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_subsection_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_subsection_test.ts
@@ -13,7 +13,7 @@
 import {assertEquals} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
 
-import {createUserAccelerator} from './shortcut_customization_test_util.js';
+import {createUserAcceleratorInfo} from './shortcut_customization_test_util.js';
 
 suite('acceleratorSubsectionTest', function() {
   let sectionElement: AcceleratorSubsectionElement|null = null;
@@ -40,12 +40,12 @@
   // TODO(jimmyxgong): Update this test after retrieving accelerators is
   // implemented for a subsection.
   test('LoadsBasicSection', async () => {
-    const acceleratorInfo1 = createUserAccelerator(
+    const acceleratorInfo1 = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
 
-    const acceleratorInfo2 = createUserAccelerator(
+    const acceleratorInfo2 = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 67,
         /*keyDisplay=*/ 'c');
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_view_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_view_test.ts
index dec1362..669ae32 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_view_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/accelerator_view_test.ts
@@ -13,7 +13,7 @@
 import {AcceleratorSource, Modifier} from 'chrome://shortcut-customization/js/shortcut_types.js';
 import {assertEquals, assertTrue} from 'chrome://webui-test/chai_assert.js';
 
-import {createDefaultAccelerator, createUserAccelerator} from './shortcut_customization_test_util.js';
+import {createDefaultAcceleratorInfo, createUserAcceleratorInfo} from './shortcut_customization_test_util.js';
 
 suite('acceleratorViewTest', function() {
   let viewElement: AcceleratorViewElement|null = null;
@@ -45,7 +45,7 @@
   }
 
   test('LoadsBasicAccelerator', async () => {
-    const acceleratorInfo = createUserAccelerator(
+    const acceleratorInfo = createUserAcceleratorInfo(
         Modifier.CONTROL | Modifier.SHIFT,
         /*key=*/ 71,
         /*keyDisplay=*/ 'g');
@@ -68,7 +68,7 @@
   });
 
   test('EditableAccelerator', async () => {
-    const acceleratorInfo = createDefaultAccelerator(
+    const acceleratorInfo = createDefaultAcceleratorInfo(
         Modifier.ALT,
         /*key=*/ 221,
         /*keyDisplay=*/ ']');
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts
index 81139d3..d0de84a1 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test.ts
@@ -16,12 +16,12 @@
 import {AcceleratorViewElement} from 'chrome://shortcut-customization/js/accelerator_view.js';
 import {fakeSubCategories} from 'chrome://shortcut-customization/js/fake_data.js';
 import {ShortcutCustomizationAppElement} from 'chrome://shortcut-customization/js/shortcut_customization_app.js';
-import {Accelerator, AcceleratorInfo, LayoutInfoList, Modifier} from 'chrome://shortcut-customization/js/shortcut_types.js';
+import {LayoutInfoList, Modifier} from 'chrome://shortcut-customization/js/shortcut_types.js';
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks, waitAfterNextRender} from 'chrome://webui-test/polymer_test_util.js';
 import {isVisible} from 'chrome://webui-test/test_util.js';
 
-import {createUserAccelerator} from './shortcut_customization_test_util.js';
+import {createUserAcceleratorInfo} from './shortcut_customization_test_util.js';
 
 function initShortcutCustomizationAppElement():
     ShortcutCustomizationAppElement {
@@ -182,7 +182,7 @@
 
     const nav = getPage().shadowRoot!.querySelector('navigation-view-panel');
 
-    const acceleratorInfo = createUserAccelerator(
+    const acceleratorInfo = createUserAcceleratorInfo(
         Modifier.SHIFT,
         /*key=*/ 67,
         /*keyDisplay=*/ 'c');
@@ -271,12 +271,11 @@
 
     // Assert that the accelerator was updated with the new shortcut (Alt + ']')
     const acceleratorInfo =
-        (accelViewElement as AcceleratorViewElement).acceleratorInfo as
-        AcceleratorInfo;
-    const actualAccelerator = acceleratorInfo.accelerator as Accelerator;
+        (accelViewElement as AcceleratorViewElement).acceleratorInfo;
+    const actualAccelerator = acceleratorInfo.accelerator;
     assertEquals(Modifier.ALT, actualAccelerator!.modifiers);
-    assertEquals(221, actualAccelerator!.key);
-    assertEquals(']', actualAccelerator!.keyDisplay);
+    assertEquals(221, actualAccelerator.keyCode);
+    assertEquals(']', acceleratorInfo.keyDisplay);
   });
 
   test('AddAccelerator', async () => {
@@ -349,13 +348,13 @@
     assertEquals(2, dialogAccels!.length);
     const newAccel = dialogAccels[1];
 
-    const actualAccelerator =
-        (newAccel!.shadowRoot!.querySelector('#acceleratorItem') as
-         AcceleratorViewElement)
-            .acceleratorInfo!.accelerator;
-    assertEquals(Modifier.ALT, actualAccelerator!.modifiers);
-    assertEquals(221, actualAccelerator!.key);
-    assertEquals(']', actualAccelerator!.keyDisplay);
+    const acceleratorInfo = (newAccel!.shadowRoot!.querySelector(
+                                 '#acceleratorItem') as AcceleratorViewElement)
+                                .acceleratorInfo;
+    const actualAccelerator = acceleratorInfo.accelerator;
+    assertEquals(Modifier.ALT, actualAccelerator.modifiers);
+    assertEquals(221, actualAccelerator.keyCode);
+    assertEquals(']', acceleratorInfo.keyDisplay);
   });
 
   test('RemoveAccelerator', async () => {
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test_util.ts b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test_util.ts
index eecce2de6b..4fb1631 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test_util.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_customization_test_util.ts
@@ -4,32 +4,34 @@
 
 import {AcceleratorInfo, AcceleratorState, AcceleratorType} from 'chrome://shortcut-customization/js/shortcut_types.js';
 
-export function createDefaultAccelerator(
+export function createDefaultAcceleratorInfo(
     modifier: number, keycode: number, keyDisplay: string,
     locked = false): AcceleratorInfo {
   return {
     accelerator: {
       modifiers: modifier,
-      key: keycode,
-      keyDisplay: keyDisplay,
+      keyCode: keycode,
     },
-    type: AcceleratorType.kDefault,
-    state: AcceleratorState.kEnabled,
+    hasKeyEvent: true,
+    keyDisplay: keyDisplay,
     locked: locked,
+    state: AcceleratorState.kEnabled,
+    type: AcceleratorType.kDefault,
   };
 }
 
-export function createUserAccelerator(
+export function createUserAcceleratorInfo(
     modifier: number, keycode: number, keyDisplay: string,
     locked = false): AcceleratorInfo {
   return {
     accelerator: {
       modifiers: modifier,
-      key: keycode,
-      keyDisplay: keyDisplay,
+      keyCode: keycode,
     },
-    type: AcceleratorType.kUser,
-    state: AcceleratorState.kEnabled,
+    hasKeyEvent: true,
+    keyDisplay: keyDisplay,
     locked: locked,
+    state: AcceleratorState.kEnabled,
+    type: AcceleratorType.kUser,
   };
 }
diff --git a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_utils_test.ts b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_utils_test.ts
index 51c90cf..1fae4dc 100644
--- a/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_utils_test.ts
+++ b/chrome/test/data/webui/chromeos/shortcut_customization/shortcut_utils_test.ts
@@ -23,21 +23,18 @@
   test('AreAcceleratorsEqual', async () => {
     const accelShiftC: Accelerator = {
       modifiers: Modifier.SHIFT,
-      key: 67,
-      keyDisplay: 'c',
+      keyCode: 67,  // c
     };
     const accelShiftCCopy: Accelerator = {
       ...accelShiftC,
     };
     const accelAltC: Accelerator = {
       modifiers: Modifier.ALT,
-      key: 67,
-      keyDisplay: 'c',
+      keyCode: 67,  // c
     };
     const accelShiftD: Accelerator = {
       modifiers: Modifier.SHIFT,
-      key: 68,
-      keyDisplay: 'd',
+      keyCode: 68,  // d
     };
 
     // Compare the same accelerator.
diff --git a/chrome/test/data/webui/cr_components/chromeos/bluetooth/fake_bluetooth_config.js b/chrome/test/data/webui/cr_components/chromeos/bluetooth/fake_bluetooth_config.js
index 733297ec..7bd6d6ae 100644
--- a/chrome/test/data/webui/cr_components/chromeos/bluetooth/fake_bluetooth_config.js
+++ b/chrome/test/data/webui/cr_components/chromeos/bluetooth/fake_bluetooth_config.js
@@ -455,8 +455,18 @@
    * Notifies the observer list that systemProperties_ has changed.
    */
   notifyObserversPropertiesUpdated_() {
+    const systemProperties =
+        /**
+         * @type {!BluetoothSystemProperties}
+         */
+        (Object.assign({}, this.systemProperties_));
+
+    // Don't provide paired devices if the system state is unavailable.
+    if (systemProperties.systemState === BluetoothSystemState.kUnavailable) {
+      systemProperties.pairedDevices = [];
+    }
     this.system_properties_observers_.forEach(
-        o => o.onPropertiesUpdated(this.systemProperties_));
+        o => o.onPropertiesUpdated(systemProperties));
   }
 
   /**
diff --git a/chrome/test/data/webui/intro/BUILD.gn b/chrome/test/data/webui/intro/BUILD.gn
index 9eaf2891..5f592c40 100644
--- a/chrome/test/data/webui/intro/BUILD.gn
+++ b/chrome/test/data/webui/intro/BUILD.gn
@@ -11,7 +11,7 @@
 # Test files that do not require preprocessing. If adding // <if expr> to any
 # file below, create a processed_files list and add it to it
 non_preprocessed_files = [
-  "dice_app_test.ts",
+  "sign_in_promo_test.ts",
   "test_intro_browser_proxy.ts",
 ]
 
diff --git a/chrome/test/data/webui/intro/intro_browsertest.js b/chrome/test/data/webui/intro/sign_in_promo_browsertest.js
similarity index 82%
rename from chrome/test/data/webui/intro/intro_browsertest.js
rename to chrome/test/data/webui/intro/sign_in_promo_browsertest.js
index e7231d9..551ec88 100644
--- a/chrome/test/data/webui/intro/intro_browsertest.js
+++ b/chrome/test/data/webui/intro/sign_in_promo_browsertest.js
@@ -10,7 +10,7 @@
 GEN('#include "chrome/browser/signin/signin_features.h"')
 GEN('#include "content/public/test/browser_test.h"');
 
-class IntroBrowserTest extends PolymerTest {
+class SignInPromoBrowserTest extends PolymerTest {
   /** @override */
   get browsePreload() {
     throw new Error('this is abstract and should be overriden by subclasses');
@@ -26,14 +26,14 @@
  * Test that the Sign in and Don't sign in buttons send the correct callback
  * when clicked in chrome/browser/resources/intro/dice_app.html
  */
-var DiceAppTest = class extends IntroBrowserTest {
+var SignInPromoTest = class extends SignInPromoBrowserTest {
   /** @override */
   get browsePreload() {
     return 'chrome://intro/test_loader.html?module=' +
-        'intro/dice_app_test.js';
+        'intro/sign_in_promo_test.js';
   }
 };
 
-TEST_F('DiceAppTest', 'All', function() {
+TEST_F('SignInPromoTest', 'All', function() {
   mocha.run();
 });
\ No newline at end of file
diff --git a/chrome/test/data/webui/intro/dice_app_test.ts b/chrome/test/data/webui/intro/sign_in_promo_test.ts
similarity index 84%
rename from chrome/test/data/webui/intro/dice_app_test.ts
rename to chrome/test/data/webui/intro/sign_in_promo_test.ts
index f5c9d18..712589c5 100644
--- a/chrome/test/data/webui/intro/dice_app_test.ts
+++ b/chrome/test/data/webui/intro/sign_in_promo_test.ts
@@ -2,17 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://intro/dice_app.js';
+import 'chrome://intro/sign_in_promo.js';
 
 import {IntroBrowserProxyImpl} from 'chrome://intro/browser_proxy.js';
-import {IntroAppElement} from 'chrome://intro/dice_app.js';
+import {SignInPromoElement} from 'chrome://intro/sign_in_promo.js';
 import {assertEquals} from 'chrome://webui-test/chai_assert.js';
 import {waitBeforeNextRender} from 'chrome://webui-test/polymer_test_util.js';
 
 import {TestIntroBrowserProxy} from './test_intro_browser_proxy.js';
 
-suite('DiceAppTest', function() {
-  let testElement: IntroAppElement;
+suite('SignInPromoTest', function() {
+  let testElement: SignInPromoElement;
   let testBrowserProxy: TestIntroBrowserProxy;
 
   setup(function() {
@@ -20,7 +20,7 @@
     IntroBrowserProxyImpl.setInstance(testBrowserProxy);
 
     document.body.innerHTML = window.trustedTypes!.emptyHTML;
-    testElement = document.createElement('intro-app');
+    testElement = document.createElement('sign-in-promo');
     document.body.appendChild(testElement);
     return waitBeforeNextRender(testElement);
   });
diff --git a/chrome/test/data/webui/password_manager/settings_section_test.ts b/chrome/test/data/webui/password_manager/settings_section_test.ts
index 69164c6..09343e4 100644
--- a/chrome/test/data/webui/password_manager/settings_section_test.ts
+++ b/chrome/test/data/webui/password_manager/settings_section_test.ts
@@ -5,13 +5,30 @@
 import 'chrome://password-manager/password_manager.js';
 
 import {PasswordManagerImpl, PrefsBrowserProxyImpl} from 'chrome://password-manager/password_manager.js';
-import {assertDeepEquals, assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
+import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 import {flushTasks} from 'chrome://webui-test/polymer_test_util.js';
 import {isVisible} from 'chrome://webui-test/test_util.js';
 
 import {TestPasswordManagerProxy} from './test_password_manager_proxy.js';
 import {TestPrefsBrowserProxy} from './test_prefs_browser_proxy.js';
-import {createExceptionEntry, makePasswordManagerPrefs} from './test_util.js';
+import {createBlockedSiteEntry, makePasswordManagerPrefs} from './test_util.js';
+
+/**
+ * Helper method that validates a that elements in the exception list match
+ * the expected data.
+ * @param nodes The nodes that will be checked.
+ * @param blockedSiteList The expected data.
+ */
+function assertBlockedSiteList(
+    nodes: NodeListOf<HTMLElement>,
+    blockedSiteList: chrome.passwordsPrivate.ExceptionEntry[]) {
+  assertEquals(blockedSiteList.length, nodes.length);
+  for (let index = 0; index < blockedSiteList.length; ++index) {
+    const node = nodes[index]!;
+    const blockedSite = blockedSiteList[index]!;
+    assertEquals(blockedSite.urls.shown, node.textContent!.trim());
+  }
+}
 
 suite('SettingsSectionTest', function() {
   let prefsProxy: TestPrefsBrowserProxy;
@@ -63,23 +80,20 @@
     assertFalse(settings.$.autosigninToggle.checked);
   });
 
-  test('settings section shows exceptions', async function() {
+  test('settings section shows blockedSites', async function() {
+    passwordManager.data.blockedSites = [
+      createBlockedSiteEntry('test.com', 0),
+      createBlockedSiteEntry('test2.com', 1),
+    ];
     const settings = document.createElement('settings-section');
     document.body.appendChild(settings);
     await flushTasks();
-
-    // List is hidden as there are no exceptions.
-    assertFalse(isVisible(settings.$.blockedSitesList));
-
-    const exceptions = [
-      createExceptionEntry('test.com', 0),
-      createExceptionEntry('test2.com', 1),
-    ];
-    assertTrue(!!passwordManager.listeners.blockedSitesListChangedListener);
-    passwordManager.listeners.blockedSitesListChangedListener!(exceptions);
-    await flushTasks();
+    await passwordManager.whenCalled('getBlockedSitesList');
 
     assertTrue(isVisible(settings.$.blockedSitesList));
-    assertDeepEquals(exceptions, settings.$.blockedSitesList.items);
+    assertBlockedSiteList(
+        settings.$.blockedSitesList.querySelectorAll<HTMLElement>(
+            '.blocked-site-content'),
+        passwordManager.data.blockedSites);
   });
 });
diff --git a/chrome/test/data/webui/password_manager/test_util.ts b/chrome/test/data/webui/password_manager/test_util.ts
index 97457cb..23e17a58 100644
--- a/chrome/test/data/webui/password_manager/test_util.ts
+++ b/chrome/test/data/webui/password_manager/test_util.ts
@@ -70,11 +70,11 @@
 }
 
 /**
- * Creates a single item for the list of password exceptions. If no |id| is
+ * Creates a single item for the list of password blockedSites. If no |id| is
  * passed, it is set to a default, value so this should probably not be done in
  * tests with multiple entries (|id| is unique).
  */
-export function createExceptionEntry(
+export function createBlockedSiteEntry(
     url?: string, id?: number): chrome.passwordsPrivate.ExceptionEntry {
   url = url || 'www.foo.com';
   id = id || 42;
diff --git a/chrome/test/data/webui/settings/chromeos/os_bluetooth_devices_subpage_tests.js b/chrome/test/data/webui/settings/chromeos/os_bluetooth_devices_subpage_tests.js
index 2bca3a4..e68d326f 100644
--- a/chrome/test/data/webui/settings/chromeos/os_bluetooth_devices_subpage_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/os_bluetooth_devices_subpage_tests.js
@@ -141,6 +141,15 @@
     a11yMessagesEvent = await a11yMessagesEventPromise;
     assertTrue(a11yMessagesEvent.detail.messages.includes(
         bluetoothDevicesSubpage.i18n('bluetoothEnabledA11YLabel')));
+
+    // Mock systemState becoming unavailable.
+    a11yMessagesEventPromise =
+        eventToPromise('cr-a11y-announcer-messages-sent', document.body);
+    bluetoothConfig.setSystemState(BluetoothSystemState.kUnavailable);
+
+    a11yMessagesEvent = await a11yMessagesEventPromise;
+    assertTrue(a11yMessagesEvent.detail.messages.includes(
+        bluetoothDevicesSubpage.i18n('bluetoothDisabledA11YLabel')));
   });
 
   test('Toggle button states', async function() {
@@ -189,6 +198,7 @@
     // Mock systemState becoming unavailable.
     bluetoothConfig.setSystemState(BluetoothSystemState.kUnavailable);
     await flushAsync();
+    assertToggleEnabledState(/*enabled=*/ false);
     assertTrue(enableBluetoothToggle.disabled);
   });
 
@@ -251,6 +261,14 @@
     assertTrue(!!getDeviceList(/*connected=*/ false));
     assertEquals(getDeviceList(/*connected=*/ false).devices.length, 2);
     assertFalse(!!getNoDeviceText());
+
+    // Mock systemState becoming unavailable.
+    bluetoothConfig.setSystemState(BluetoothSystemState.kUnavailable);
+    await flushAsync();
+
+    assertFalse(!!getDeviceList(/*connected=*/ true));
+    assertFalse(!!getDeviceList(/*connected=*/ false));
+    assertTrue(!!getNoDeviceText());
   });
 
   test(
diff --git a/chrome/updater/ipc/update_service_proxy_mac.mm b/chrome/updater/ipc/update_service_proxy_mac.mm
index fd3557b..43a49716 100644
--- a/chrome/updater/ipc/update_service_proxy_mac.mm
+++ b/chrome/updater/ipc/update_service_proxy_mac.mm
@@ -336,7 +336,11 @@
 
   auto reply = ^(CRUAppStatesWrapper* wrapper) {
     callback_runner_->PostTask(
-        FROM_HERE, base::BindOnce(std::move(block_callback), wrapper.states));
+        FROM_HERE,
+        base::BindOnce(std::move(block_callback),
+                       wrapper
+                           ? wrapper.states
+                           : std::vector<updater::UpdateService::AppState>()));
   };
   [client_ getAppStatesWithReply:reply];
 }
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc
index b4fcd79..b4cd5a5 100644
--- a/chrome/updater/test/integration_tests.cc
+++ b/chrome/updater/test/integration_tests.cc
@@ -405,7 +405,14 @@
   ExpectVersionNotActive(kUpdaterVersion);
   ExpectVersionNotActive("0.0.0.0");
 
-  Uninstall();
+  // Do not call `Uninstall()` since the outdated updater uninstalled itself.
+  // Additional clean up is needed because of how this test is set up. After
+  // the outdated instance uninstalls, a few files are left in the product
+  // directory: prefs.json, updater.log, and overrides.json. These files are
+  // owned by the active instance of the updater but in this case there is
+  // no active instance left; therefore, explicit clean up is required.
+  PrintLog();
+  CopyLog();
   Clean();
 }
 
@@ -434,7 +441,6 @@
   ExpectVersionActive(kUpdaterVersion);
 
   Uninstall();
-  Clean();
 }
 
 TEST_F(IntegrationTest, SelfUpdate) {
@@ -450,7 +456,6 @@
   ExpectAppVersion(kUpdaterAppId, next_version);
 
   Uninstall();
-  Clean();
 }
 
 TEST_F(IntegrationTest, ReportsActive) {
@@ -513,7 +518,6 @@
   ExpectLastStarted();
 
   Uninstall();
-  Clean();
 }
 
 #if BUILDFLAG(IS_WIN)
@@ -539,7 +543,6 @@
   ExpectAppVersion(kAppId, v1);
 
   Uninstall();
-  Clean();
 }
 #endif  // BUILDFLAG(IS_WIN)
 
diff --git a/chrome/utility/importer/nss_decryptor.cc b/chrome/utility/importer/nss_decryptor.cc
index 21e42d29..091afdd 100644
--- a/chrome/utility/importer/nss_decryptor.cc
+++ b/chrome/utility/importer/nss_decryptor.cc
@@ -159,7 +159,7 @@
   const base::Value* disabled_hosts =
       parsed_json->FindListKey("disabledHosts");
   if (disabled_hosts) {
-    for (const auto& value : disabled_hosts->GetListDeprecated()) {
+    for (const auto& value : disabled_hosts->GetList()) {
       if (!value.is_string())
         continue;
       forms->push_back(CreateBlockedPasswordForm(value.GetString()));
@@ -168,7 +168,7 @@
 
   const base::Value* password_list = parsed_json->FindListKey("logins");
   if (password_list) {
-    for (const auto& value : password_list->GetListDeprecated()) {
+    for (const auto& value : password_list->GetList()) {
       if (!value.is_dict())
         continue;
 
diff --git a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java
index 6a10630..3b0183ec 100644
--- a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java
+++ b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java
@@ -627,15 +627,6 @@
                 mRenderingDelayBuffer.putLong(8, nowUsecs);
                 return;
             }
-            if (mUseHwAvSync) {
-                // Hw av sync stream uses the timestamp in the audio buffer instead
-                // of the reported rendering delay to do synchronization. Therefore
-                // it is safe to report zero rendering delay when it is not
-                // available.
-                mRenderingDelayBuffer.putLong(0, 0);
-                mRenderingDelayBuffer.putLong(8, nowUsecs);
-                return;
-            }
             // No timestamp available yet, just put dummy values and return.
             mRenderingDelayBuffer.putLong(0, 0);
             mRenderingDelayBuffer.putLong(8, NO_TIMESTAMP);
diff --git a/chromecast/media/service/cast_renderer.cc b/chromecast/media/service/cast_renderer.cc
index dfc7ad2..698c7df 100644
--- a/chromecast/media/service/cast_renderer.cc
+++ b/chromecast/media/service/cast_renderer.cc
@@ -389,6 +389,10 @@
   return pipeline_->GetMediaTime();
 }
 
+::media::RendererType CastRenderer::GetRendererType() {
+  return ::media::RendererType::kCast;
+}
+
 void CastRenderer::OnVideoResolutionPolicyChanged() {
   DCHECK(task_runner_->BelongsToCurrentThread());
   if (!video_resolution_policy_)
diff --git a/chromecast/media/service/cast_renderer.h b/chromecast/media/service/cast_renderer.h
index 6277db3..8f0963f 100644
--- a/chromecast/media/service/cast_renderer.h
+++ b/chromecast/media/service/cast_renderer.h
@@ -75,6 +75,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  ::media::RendererType GetRendererType() override;
 
   // VideoResolutionPolicy::Observer implementation.
   void OnVideoResolutionPolicyChanged() override;
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc
index be5433c..151fa46f 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc
@@ -102,7 +102,16 @@
 // Guest username constant that mirrors the one in real cryptohome
 constexpr char kGuestUserName[] = "$guest";
 
-// Used to track the fake instance, mirrors the instance in the base class.
+// Used to track the global fake instance. This global fake instance is created
+// in the first call to FakeUserDataAuth::Get(). During browser startup in
+// browser tests and cros-linux, the global instance pointer in
+// userdataauth_client.cc is set to the address of this global fake instance.
+// During shutdown, the fake instance is deleted in the same way as the normal
+// UserDataAuth instance would be deleted. We do this to stay as faithful as
+// possible to the real implementation.
+// However, browser tests can access and configure the fake instance via the
+// TestApi or CryptohomeMixin even before the browser starts, for example in
+// the constructor of a browser test fixture.
 FakeUserDataAuthClient* g_instance = nullptr;
 
 // `OverloadedFunctor` and `FunctorWithReturnType` are used to implement
@@ -385,40 +394,45 @@
 
 // static
 FakeUserDataAuthClient::TestApi* FakeUserDataAuthClient::TestApi::Get() {
-  // TestApi assumes that the FakeUserDataAuthClient singleton is initialized.
-  if (FakeUserDataAuthClient::Get() == nullptr) {
-    return nullptr;
-  }
-
   static TestApi instance;
   return &instance;
 }
 
+// static
+void FakeUserDataAuthClient::TestApi::OverrideGlobalInstance(
+    std::unique_ptr<FakeUserDataAuthClient> client) {
+  CHECK(!g_instance);
+  g_instance = client.release();
+}
+
 void FakeUserDataAuthClient::TestApi::SetServiceIsAvailable(bool is_available) {
-  g_instance->service_is_available_ = is_available;
+  FakeUserDataAuthClient::Get()->service_is_available_ = is_available;
   if (!is_available)
     return;
-  g_instance->RunPendingWaitForServiceToBeAvailableCallbacks();
+  FakeUserDataAuthClient::Get()
+      ->RunPendingWaitForServiceToBeAvailableCallbacks();
 }
 
 void FakeUserDataAuthClient::TestApi::ReportServiceIsNotAvailable() {
-  DCHECK(!g_instance->service_is_available_);
-  g_instance->service_reported_not_available_ = true;
-  g_instance->RunPendingWaitForServiceToBeAvailableCallbacks();
+  DCHECK(!FakeUserDataAuthClient::Get()->service_is_available_);
+  FakeUserDataAuthClient::Get()->service_reported_not_available_ = true;
+  FakeUserDataAuthClient::Get()
+      ->RunPendingWaitForServiceToBeAvailableCallbacks();
 }
 
 void FakeUserDataAuthClient::TestApi::SetHomeEncryptionMethod(
     const cryptohome::AccountIdentifier& cryptohome_id,
     HomeEncryptionMethod method) {
-  auto user_it = g_instance->users_.find(cryptohome_id);
-  if (user_it == std::end(g_instance->users_)) {
+  auto user_it = FakeUserDataAuthClient::Get()->users_.find(cryptohome_id);
+  if (user_it == std::end(FakeUserDataAuthClient::Get()->users_)) {
     LOG(ERROR) << "User does not exist: " << cryptohome_id.account_id();
     // TODO(crbug.com/1334538): Some existing tests rely on us creating the
     // user here, but new tests shouldn't. Eventually this should crash.
-    user_it =
-        g_instance->users_.insert({cryptohome_id, UserCryptohomeState()}).first;
+    user_it = FakeUserDataAuthClient::Get()
+                  ->users_.insert({cryptohome_id, UserCryptohomeState()})
+                  .first;
   }
-  DCHECK(user_it != std::end(g_instance->users_));
+  DCHECK(user_it != std::end(FakeUserDataAuthClient::Get()->users_));
   UserCryptohomeState& user_state = user_it->second;
   user_state.home_encryption_method = method;
 }
@@ -427,8 +441,8 @@
     const cryptohome::AccountIdentifier& account_id,
     const std::string& label,
     bool locked) {
-  auto user_it = g_instance->users_.find(account_id);
-  CHECK(user_it != g_instance->users_.end())
+  auto user_it = FakeUserDataAuthClient::Get()->users_.find(account_id);
+  CHECK(user_it != FakeUserDataAuthClient::Get()->users_.end())
       << "User does not exist: " << account_id.account_id();
   UserCryptohomeState& user_state = user_it->second;
 
@@ -446,14 +460,15 @@
 void FakeUserDataAuthClient::TestApi::AddExistingUser(
     const cryptohome::AccountIdentifier& account_id) {
   const auto [user_it, was_inserted] =
-      g_instance->users_.insert({std::move(account_id), UserCryptohomeState()});
+      FakeUserDataAuthClient::Get()->users_.insert(
+          {std::move(account_id), UserCryptohomeState()});
   if (!was_inserted) {
     LOG(WARNING) << "User already exists: " << user_it->first.account_id();
     return;
   }
 
   const absl::optional<base::FilePath> profile_dir =
-      g_instance->GetUserProfileDir(user_it->first);
+      FakeUserDataAuthClient::Get()->GetUserProfileDir(user_it->first);
   if (!profile_dir) {
     LOG(WARNING) << "User data directory has not been set, will not create "
                     "user profile directory";
@@ -467,7 +482,7 @@
 absl::optional<base::FilePath>
 FakeUserDataAuthClient::TestApi::GetUserProfileDir(
     const cryptohome::AccountIdentifier& account_id) const {
-  return g_instance->GetUserProfileDir(account_id);
+  return FakeUserDataAuthClient::Get()->GetUserProfileDir(account_id);
 }
 
 void FakeUserDataAuthClient::TestApi::AddKey(
@@ -475,8 +490,9 @@
     const cryptohome::Key& key) {
   UserCryptohomeState& user_state = GetUserState(account_id);
 
-  const auto [factor_it, was_inserted] = user_state.auth_factors.insert(
-      KeyToFakeAuthFactor(key, g_instance->enable_auth_check_));
+  const auto [factor_it, was_inserted] =
+      user_state.auth_factors.insert(KeyToFakeAuthFactor(
+          key, FakeUserDataAuthClient::Get()->enable_auth_check_));
   CHECK(was_inserted) << "Factor already exists";
 }
 
@@ -505,13 +521,16 @@
 std::string FakeUserDataAuthClient::TestApi::AddSession(
     const cryptohome::AccountIdentifier& account_id,
     bool authenticated) {
-  CHECK(g_instance->users_.contains(account_id));
+  CHECK(FakeUserDataAuthClient::Get()->users_.contains(account_id));
 
   std::string auth_session_id = base::StringPrintf(
-      kAuthSessionIdTemplate, g_instance->next_auth_session_id_++);
+      kAuthSessionIdTemplate,
+      FakeUserDataAuthClient::Get()->next_auth_session_id_++);
 
-  CHECK_EQ(g_instance->auth_sessions_.count(auth_session_id), 0u);
-  AuthSessionData& session = g_instance->auth_sessions_[auth_session_id];
+  CHECK_EQ(FakeUserDataAuthClient::Get()->auth_sessions_.count(auth_session_id),
+           0u);
+  AuthSessionData& session =
+      FakeUserDataAuthClient::Get()->auth_sessions_[auth_session_id];
 
   session.id = auth_session_id;
   session.ephemeral = false;
@@ -524,23 +543,26 @@
 FakeUserDataAuthClient::UserCryptohomeState&
 FakeUserDataAuthClient::TestApi::GetUserState(
     const cryptohome::AccountIdentifier& account_id) {
-  const auto user_it = g_instance->users_.find(account_id);
-  CHECK(user_it != std::end(g_instance->users_)) << "User doesn't exist";
+  const auto user_it = FakeUserDataAuthClient::Get()->users_.find(account_id);
+  CHECK(user_it != std::end(FakeUserDataAuthClient::Get()->users_))
+      << "User doesn't exist";
   return user_it->second;
 }
 
-FakeUserDataAuthClient::FakeUserDataAuthClient() {
-  DCHECK(!g_instance);
-  g_instance = this;
-}
+FakeUserDataAuthClient::FakeUserDataAuthClient() = default;
 
 FakeUserDataAuthClient::~FakeUserDataAuthClient() {
-  DCHECK_EQ(this, g_instance);
-  g_instance = nullptr;
+  if (this == g_instance) {
+    // If we're deleting the global instance, clear the pointer to it.
+    g_instance = nullptr;
+  }
 }
 
 // static
 FakeUserDataAuthClient* FakeUserDataAuthClient::Get() {
+  if (!g_instance) {
+    g_instance = new FakeUserDataAuthClient();
+  }
   return g_instance;
 }
 
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h
index 4836850..2f78b03 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h
@@ -40,6 +40,12 @@
     // Legacy method for tests that do not use `CryptohomeMixin`.
     static TestApi* Get();
 
+    // Override the global fake instance for browser tests. Must be called
+    // before browser startup, for example in the constructor of the fixture,
+    // and before the global instance is configured in any way using this
+    // TestApi or FakeUserDataAuth::Get().
+    static void OverrideGlobalInstance(std::unique_ptr<FakeUserDataAuthClient>);
+
     // Sets whether dircrypto migration update should be run automatically.
     // If set to false, the client will not send any dircrypto migration
     // progress updates on its own - a test that sets this will have to call
diff --git a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc
index 8f24009..aebc96c 100644
--- a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc
@@ -533,37 +533,43 @@
 
 }  // namespace
 
-UserDataAuthClient::UserDataAuthClient() {
-  CHECK(!g_instance);
-  g_instance = this;
-}
+UserDataAuthClient::UserDataAuthClient() = default;
 
-UserDataAuthClient::~UserDataAuthClient() {
-  CHECK_EQ(this, g_instance);
-  g_instance = nullptr;
-}
+UserDataAuthClient::~UserDataAuthClient() = default;
 
 // static
 void UserDataAuthClient::Initialize(dbus::Bus* bus) {
   CHECK(bus);
-  (new UserDataAuthClientImpl())->Init(bus);
+  CHECK(!g_instance);
+  auto* impl = new UserDataAuthClientImpl();
+  g_instance = impl;
+  impl->Init(bus);
 }
 
 // static
 void UserDataAuthClient::InitializeFake() {
-  // Certain tests may create FakeUserDataAuthClient() before the browser starts
-  // to set parameters.
-  if (!FakeUserDataAuthClient::Get()) {
-    new FakeUserDataAuthClient();
+  if (g_instance) {
+    // TODO(b/239430274): Certain tests call InitializeFake() before the
+    // browser starts to set parameters. They should just access the fake
+    // instance directly via FakeUserDataAuthClient::Get(), via
+    // FakeUserDataAuthClient::TestApi or via CryptohomeMixin.
+    CHECK(g_instance == FakeUserDataAuthClient::Get());
+  } else {
+    g_instance = FakeUserDataAuthClient::Get();
+    CHECK(g_instance);
   }
 }
 
+void UserDataAuthClient::OverrideGlobalInstanceForTesting(
+    UserDataAuthClient* client) {
+  g_instance = client;
+}
+
 // static
 void UserDataAuthClient::Shutdown() {
   CHECK(g_instance);
   delete g_instance;
-  // The destructor resets |g_instance|.
-  DCHECK(!g_instance);
+  g_instance = nullptr;
 }
 
 // static
diff --git a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h
index d63397d..dea08f6 100644
--- a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h
@@ -130,6 +130,12 @@
   // Creates and initializes a fake global instance if not already created.
   static void InitializeFake();
 
+  // Override the global instance for testing. Must only be called in unit
+  // tests, which bypass the normal browser startup and shutdown sequence. Use
+  // InitializeFake or OverrideGlobalInstance in FakeUserDataAuth for browser
+  // tests.
+  static void OverrideGlobalInstanceForTesting(UserDataAuthClient*);
+
   // Destroys the global instance.
   static void Shutdown();
 
diff --git a/chromeos/ash/components/login/auth/auth_session_authenticator_unittest.cc b/chromeos/ash/components/login/auth/auth_session_authenticator_unittest.cc
index e6f9beb3..d1a24ed0 100644
--- a/chromeos/ash/components/login/auth/auth_session_authenticator_unittest.cc
+++ b/chromeos/ash/components/login/auth/auth_session_authenticator_unittest.cc
@@ -246,6 +246,8 @@
 
     CryptohomeMiscClient::InitializeFake();
     chromeos::SystemSaltGetter::Initialize();
+    UserDataAuthClient::OverrideGlobalInstanceForTesting(&userdataauth_);
+
     EXPECT_CALL(auth_status_consumer_, OnAuthSuccess(_))
         .Times(AtMost(1))
         .WillOnce([this](const UserContext& user_context) {
diff --git a/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.cc b/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.cc
index cf0d4598..9bcca54 100644
--- a/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.cc
+++ b/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.cc
@@ -202,22 +202,16 @@
 }
 
 double FuzzyTokenizedStringMatch::PrefixMatcher(const TokenizedString& query,
-                                                const TokenizedString& text,
-                                                bool use_acronym_matcher) {
+                                                const TokenizedString& text) {
   string_matching::PrefixMatcher match(query, text);
   match.Match();
-  double relevance = 0.0;
+  return 1.0 - std::pow(0.5, match.relevance());
+}
 
-  // TODO(crbug.com/1336160): Consider refactoring acronym matching to be
-  // separate from FuzzyTokenizedStringMatch.
-  if (use_acronym_matcher) {
-    AcronymMatcher acronym_match = AcronymMatcher(query, text);
-    relevance = std::max(match.relevance(), acronym_match.CalculateRelevance());
-  } else {
-    relevance = match.relevance();
-  }
-
-  return 1.0 - std::pow(0.5, relevance);
+double FuzzyTokenizedStringMatch::AcronymMatcher(const TokenizedString& query,
+                                                 const TokenizedString& text) {
+  string_matching::AcronymMatcher match(query, text);
+  return 1.0 - std::pow(0.5, match.CalculateRelevance());
 }
 
 double FuzzyTokenizedStringMatch::Relevance(const TokenizedString& query_input,
@@ -246,8 +240,7 @@
   if (query_size > 0 && query_size == text_size &&
       base::EqualsCaseInsensitiveASCII(query_text, text_text)) {
     hits_.emplace_back(0, query_size);
-    relevance_ = 1.0;
-    return true;
+    return 1.0;
   }
 
   // Find |hits_| using SequenceMatcher on original query and text.
@@ -260,26 +253,31 @@
   }
 
   // If the query is much longer than the text then it's often not a match.
+  double relevance = 0.0;
   if (query_size >= text_size * 2) {
-    return false;
+    return relevance;
   }
 
-  const double prefix_score = PrefixMatcher(query, text, use_acronym_matcher);
+  const double prefix_score = PrefixMatcher(query, text);
 
   if (use_weighted_ratio) {
     // If WeightedRatio is used, |relevance_| is the average of WeightedRatio
     // and PrefixMatcher scores.
-    relevance_ = (WeightedRatio(query, text) + prefix_score) / 2;
+    relevance = (WeightedRatio(query, text) + prefix_score) / 2;
   } else {
     // Use simple algorithm to calculate match ratio.
-    relevance_ = (SequenceMatcher(base::i18n::ToLower(query_text),
-                                  base::i18n::ToLower(text_text))
-                      .Ratio() +
-                  prefix_score) /
-                 2;
+    relevance = (SequenceMatcher(base::i18n::ToLower(query_text),
+                                 base::i18n::ToLower(text_text))
+                     .Ratio() +
+                 prefix_score) /
+                2;
   }
 
-  return relevance_;
+  // If AcronymMatcher is used, return the maximum of the acronym match score
+  // and the calculated relevance score. Directly return the calculated
+  // relevance score instead.
+  return use_acronym_matcher ? std::max(AcronymMatcher(query, text), relevance)
+                             : relevance;
 }
 
 }  // namespace ash::string_matching
diff --git a/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.h b/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.h
index 97eb4ee0..1c0c9a11 100644
--- a/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.h
+++ b/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match.h
@@ -72,13 +72,17 @@
   // Since prefix match should always be favored over other matches, this
   // function is dedicated to calculate a prefix match score in range of [0, 1]
   // using PrefixMatcher class.
-  // This score has two components: first character match (aka acronym match)
-  // and whole prefix match.
   static double PrefixMatcher(const TokenizedString& query,
-                              const TokenizedString& text,
-                              bool use_acronym_matcher = false);
+                              const TokenizedString& text);
+
+  // This function is dedicated to calculate a first character match (aka
+  // acronym match) score in range of [0, 1] using AcronymMatcher class.
+  static double AcronymMatcher(const TokenizedString& query,
+                               const TokenizedString& text);
 
   // Calculates and returns the relevance score of |query| relative to |text|.
+  // The relevance score is in range of [0,1], representing how well the query
+  // matches the text.
   double Relevance(const TokenizedString& query,
                    const TokenizedString& text,
                    bool use_weighted_ratio,
@@ -87,8 +91,6 @@
   const Hits& hits() const { return hits_; }
 
  private:
-  // Score in range of [0,1] representing how well the query matches the text.
-  double relevance_ = 0;
   Hits hits_;
 };
 
diff --git a/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match_unittest.cc b/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match_unittest.cc
index 1f7ff4a..93558bf 100644
--- a/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match_unittest.cc
+++ b/chromeos/ash/components/string_matching/fuzzy_tokenized_string_match_unittest.cc
@@ -1366,9 +1366,8 @@
   {
     std::u16string query(u"coc");
     std::u16string text(u"Clash of Clan");
-    EXPECT_NEAR(FuzzyTokenizedStringMatch::PrefixMatcher(
-                    TokenizedString(query), TokenizedString(text),
-                    /* use_acronym_matcher = */ true),
+    EXPECT_NEAR(FuzzyTokenizedStringMatch::AcronymMatcher(
+                    TokenizedString(query), TokenizedString(text)),
                 0.84, 0.01);
   }
   // TODO(crbug.com/1336160): Consider allowing acronym matching for query with
@@ -1379,9 +1378,8 @@
   {
     std::u16string query(u"c o c");
     std::u16string text(u"Clash of Clan");
-    EXPECT_EQ(FuzzyTokenizedStringMatch::PrefixMatcher(
-                  TokenizedString(query), TokenizedString(text),
-                  /* use_acronym_matcher = */ true),
+    EXPECT_EQ(FuzzyTokenizedStringMatch::AcronymMatcher(TokenizedString(query),
+                                                        TokenizedString(text)),
               0.0);
   }
   {
diff --git a/chromeos/ash/services/assistant/public/cpp/features.cc b/chromeos/ash/services/assistant/public/cpp/features.cc
index c337890..c5ecff2 100644
--- a/chromeos/ash/services/assistant/public/cpp/features.cc
+++ b/chromeos/ash/services/assistant/public/cpp/features.cc
@@ -106,7 +106,8 @@
 }
 
 bool IsLibAssistantSandboxEnabled() {
-  return base::FeatureList::IsEnabled(kEnableLibAssistantSandbox);
+  return IsLibAssistantV2Enabled() ||
+         base::FeatureList::IsEnabled(kEnableLibAssistantSandbox);
 }
 
 bool IsLibAssistantV2Enabled() {
@@ -114,7 +115,8 @@
 }
 
 bool IsLibAssistantDlcEnabled() {
-  return base::FeatureList::IsEnabled(kEnableLibAssistantDlc);
+  return IsLibAssistantV2Enabled() ||
+         base::FeatureList::IsEnabled(kEnableLibAssistantDlc);
 }
 
 }  // namespace ash::assistant::features
diff --git a/chromeos/services/network_config/cros_network_config.cc b/chromeos/services/network_config/cros_network_config.cc
index 19c0914..e58c797d 100644
--- a/chromeos/services/network_config/cros_network_config.cc
+++ b/chromeos/services/network_config/cros_network_config.cc
@@ -719,12 +719,20 @@
   dict->SetStringKey(key, *property);
 }
 
+void SetString(const char* key,
+               const absl::optional<std::string>& property,
+               base::Value::Dict* dict) {
+  if (!property)
+    return;
+  dict->Set(key, *property);
+}
+
 void SetStringIfNotEmpty(const char* key,
                          const absl::optional<std::string>& property,
-                         base::Value* dict) {
+                         base::Value::Dict* dict) {
   if (!property || property->empty())
     return;
-  dict->SetStringKey(key, *property);
+  dict->Set(key, *property);
 }
 
 void SetStringList(const char* key,
@@ -738,6 +746,17 @@
   dict->SetKey(key, std::move(list));
 }
 
+void SetStringList(const char* key,
+                   const absl::optional<std::vector<std::string>>& property,
+                   base::Value::Dict* dict) {
+  if (!property)
+    return;
+  base::Value::List list;
+  for (const std::string& s : *property)
+    list.Append(s);
+  dict->Set(key, std::move(list));
+}
+
 void SetSubjectAltNameMatch(
     const char* key,
     const std::vector<mojom::SubjectAltNamePtr>* property,
@@ -1088,13 +1107,13 @@
 
 void SetProxyLocation(const char* key,
                       const mojom::ProxyLocationPtr& location,
-                      base::Value* dict) {
+                      base::Value::Dict* dict) {
   if (location.is_null())
     return;
-  base::Value location_dict(base::Value::Type::DICTIONARY);
-  location_dict.SetStringKey(::onc::proxy::kHost, location->host);
-  location_dict.SetIntKey(::onc::proxy::kPort, location->port);
-  dict->SetKey(key, std::move(location_dict));
+  base::Value::Dict location_dict;
+  location_dict.Set(::onc::proxy::kHost, location->host);
+  location_dict.Set(::onc::proxy::kPort, location->port);
+  dict->Set(key, std::move(location_dict));
 }
 
 mojom::ManagedProxySettingsPtr GetManagedProxySettings(
@@ -2092,34 +2111,34 @@
   return eap_dict;
 }
 
-std::unique_ptr<base::DictionaryValue> GetOncFromConfigProperties(
+absl::optional<base::Value::Dict> GetOncFromConfigProperties(
     const mojom::ConfigProperties* properties,
     absl::optional<std::string> guid) {
-  auto onc = std::make_unique<base::DictionaryValue>();
-
-  // Process |properties->network_type| and set |type|. Configurations have only
-  // one type dictionary.
-  mojom::NetworkType type = mojom::NetworkType::kAll;  // Invalid type
-  base::Value type_dict(base::Value::Type::DICTIONARY);
+  base::Value::Dict onc;
 
   if (properties->guid && !properties->guid->empty()) {
     if (guid && *guid != *properties->guid) {
       NET_LOG(ERROR) << "GUID does not match: " << *guid
                      << " != " << *properties->guid;
-      return nullptr;
+      return absl::nullopt;
     }
-    SetString(::onc::network_config::kGUID, *properties->guid, onc.get());
+    SetString(::onc::network_config::kGUID, *properties->guid, &onc);
   }
 
+  // Process |properties->network_type| and set |type|. Configurations have only
+  // one type dictionary.
+  mojom::NetworkType type = mojom::NetworkType::kAll;  // Invalid type
+  base::Value::Dict type_dict;
+
   if (properties->type_config->is_cellular()) {
     type = mojom::NetworkType::kCellular;
     const mojom::CellularConfigProperties& cellular =
         *properties->type_config->get_cellular();
     if (cellular.apn) {
       const mojom::ApnProperties& apn = *cellular.apn;
-      base::Value apn_dict(base::Value::Type::DICT);
-      apn_dict.SetStringKey(::onc::cellular_apn::kAccessPointName,
-                            apn.access_point_name);
+      base::Value::Dict apn_dict;
+      apn_dict.Set(::onc::cellular_apn::kAccessPointName,
+                   apn.access_point_name);
       SetString(::onc::cellular_apn::kAuthentication, apn.authentication,
                 &apn_dict);
       SetString(::onc::cellular_apn::kLanguage, apn.language, &apn_dict);
@@ -2139,11 +2158,11 @@
         SetStringList(::onc::cellular_apn::kApnTypes,
                       MojoApnTypesToOnc(apn.apn_types), &apn_dict);
       }
-      type_dict.SetKey(::onc::cellular::kAPN, std::move(apn_dict));
+      type_dict.Set(::onc::cellular::kAPN, std::move(apn_dict));
     }
     if (cellular.roaming) {
-      type_dict.SetKey(::onc::cellular::kAllowRoaming,
-                       base::Value(cellular.roaming->allow_roaming));
+      type_dict.Set(::onc::cellular::kAllowRoaming,
+                    base::Value(cellular.roaming->allow_roaming));
     }
   } else if (properties->type_config->is_ethernet()) {
     type = mojom::NetworkType::kEthernet;
@@ -2152,8 +2171,8 @@
     SetString(::onc::ethernet::kAuthentication, ethernet.authentication,
               &type_dict);
     if (ethernet.eap) {
-      type_dict.SetKey(::onc::ethernet::kEAP,
-                       GetEAPProperties(*ethernet.eap.get()));
+      type_dict.Set(::onc::ethernet::kEAP,
+                    GetEAPProperties(*ethernet.eap.get()));
     }
   } else if (properties->type_config->is_vpn()) {
     type = mojom::NetworkType::kVPN;
@@ -2161,7 +2180,7 @@
     SetString(::onc::vpn::kHost, vpn.host, &type_dict);
     if (vpn.ip_sec) {
       const mojom::IPSecConfigProperties& ip_sec = *vpn.ip_sec;
-      base::Value ip_sec_dict(base::Value::Type::DICTIONARY);
+      base::Value::Dict ip_sec_dict;
       SetString(::onc::ipsec::kAuthenticationType, ip_sec.authentication_type,
                 &ip_sec_dict);
       SetString(::onc::client_cert::kClientCertPKCS11Id,
@@ -2169,10 +2188,9 @@
       SetString(::onc::client_cert::kClientCertType, ip_sec.client_cert_type,
                 &ip_sec_dict);
       SetString(::onc::ipsec::kGroup, ip_sec.group, &ip_sec_dict);
-      ip_sec_dict.SetIntKey(::onc::ipsec::kIKEVersion, ip_sec.ike_version);
+      ip_sec_dict.Set(::onc::ipsec::kIKEVersion, ip_sec.ike_version);
       SetString(::onc::ipsec::kPSK, ip_sec.psk, &ip_sec_dict);
-      ip_sec_dict.SetBoolKey(::onc::l2tp::kSaveCredentials,
-                             ip_sec.save_credentials);
+      ip_sec_dict.Set(::onc::l2tp::kSaveCredentials, ip_sec.save_credentials);
       SetStringList(::onc::ipsec::kServerCAPEMs, ip_sec.server_ca_pems,
                     &ip_sec_dict);
       SetStringList(::onc::ipsec::kServerCARefs, ip_sec.server_ca_refs,
@@ -2182,25 +2200,23 @@
       SetString(::onc::ipsec::kRemoteIdentity, ip_sec.remote_identity,
                 &ip_sec_dict);
       if (ip_sec.eap) {
-        ip_sec_dict.SetKey(::onc::ipsec::kEAP,
-                           GetEAPProperties(*ip_sec.eap.get()));
+        ip_sec_dict.Set(::onc::ipsec::kEAP,
+                        GetEAPProperties(*ip_sec.eap.get()));
       }
-      type_dict.SetKey(::onc::vpn::kIPsec, std::move(ip_sec_dict));
+      type_dict.Set(::onc::vpn::kIPsec, std::move(ip_sec_dict));
     }
     if (vpn.l2tp) {
       const mojom::L2TPConfigProperties& l2tp = *vpn.l2tp;
-      base::Value l2tp_dict(base::Value::Type::DICTIONARY);
-      l2tp_dict.SetBoolKey(::onc::l2tp::kLcpEchoDisabled,
-                           l2tp.lcp_echo_disabled);
+      base::Value::Dict l2tp_dict;
+      l2tp_dict.Set(::onc::l2tp::kLcpEchoDisabled, l2tp.lcp_echo_disabled);
       SetString(::onc::l2tp::kPassword, l2tp.password, &l2tp_dict);
-      l2tp_dict.SetBoolKey(::onc::l2tp::kSaveCredentials,
-                           l2tp.save_credentials);
+      l2tp_dict.Set(::onc::l2tp::kSaveCredentials, l2tp.save_credentials);
       SetString(::onc::l2tp::kUsername, l2tp.username, &l2tp_dict);
-      type_dict.SetKey(::onc::vpn::kL2TP, std::move(l2tp_dict));
+      type_dict.Set(::onc::vpn::kL2TP, std::move(l2tp_dict));
     }
     if (vpn.open_vpn) {
       const mojom::OpenVPNConfigProperties& open_vpn = *vpn.open_vpn;
-      base::Value open_vpn_dict(base::Value::Type::DICTIONARY);
+      base::Value::Dict open_vpn_dict;
       SetString(::onc::client_cert::kClientCertPKCS11Id,
                 open_vpn.client_cert_pkcs11_id, &open_vpn_dict);
       SetString(::onc::client_cert::kClientCertType, open_vpn.client_cert_type,
@@ -2209,8 +2225,8 @@
                     &open_vpn_dict);
       SetString(::onc::openvpn::kOTP, open_vpn.otp, &open_vpn_dict);
       SetString(::onc::openvpn::kPassword, open_vpn.password, &open_vpn_dict);
-      open_vpn_dict.SetBoolKey(::onc::l2tp::kSaveCredentials,
-                               open_vpn.save_credentials);
+      open_vpn_dict.Set(::onc::l2tp::kSaveCredentials,
+                        open_vpn.save_credentials);
       SetStringList(::onc::openvpn::kServerCAPEMs, open_vpn.server_ca_pems,
                     &open_vpn_dict);
       SetStringList(::onc::openvpn::kServerCARefs, open_vpn.server_ca_refs,
@@ -2218,36 +2234,35 @@
       SetString(::onc::vpn::kUsername, open_vpn.username, &open_vpn_dict);
       SetString(::onc::openvpn::kUserAuthenticationType,
                 open_vpn.user_authentication_type, &open_vpn_dict);
-      type_dict.SetKey(::onc::vpn::kOpenVPN, std::move(open_vpn_dict));
+      type_dict.Set(::onc::vpn::kOpenVPN, std::move(open_vpn_dict));
     }
     if (vpn.wireguard) {
       const mojom::WireGuardConfigProperties& wireguard = *vpn.wireguard;
-      base::Value wireguard_dict(base::Value::Type::DICTIONARY);
+      base::Value::Dict wireguard_dict;
       SetString(::onc::wireguard::kPrivateKey, wireguard.private_key,
                 &wireguard_dict);
 
-      base::Value peer_list(base::Value::Type::LIST);
+      base::Value::List peer_list;
       if (wireguard.peers) {
         for (auto const& peer : *wireguard.peers) {
-          base::Value peer_dict(base::Value::Type::DICTIONARY);
-          peer_dict.SetStringKey(::onc::wireguard::kPublicKey,
-                                 peer->public_key);
+          base::Value::Dict peer_dict;
+          peer_dict.Set(::onc::wireguard::kPublicKey, peer->public_key);
           SetString(::onc::wireguard::kPresharedKey, peer->preshared_key,
                     &peer_dict);
           SetString(::onc::wireguard::kEndpoint, peer->endpoint, &peer_dict);
           SetString(::onc::wireguard::kAllowedIPs, peer->allowed_ips,
                     &peer_dict);
           if (peer->persistent_keepalive_interval) {
-            peer_dict.SetStringKey(
+            peer_dict.Set(
                 ::onc::wireguard::kPersistentKeepalive,
                 base::NumberToString(peer->persistent_keepalive_interval));
           }
           peer_list.Append(std::move(peer_dict));
         }
       }
-      wireguard_dict.SetKey(::onc::wireguard::kPeers, std::move(peer_list));
-      wireguard_dict.SetBoolKey(::onc::vpn::kSaveCredentials, true);
-      type_dict.SetKey(::onc::vpn::kWireGuard, std::move(wireguard_dict));
+      wireguard_dict.Set(::onc::wireguard::kPeers, std::move(peer_list));
+      wireguard_dict.Set(::onc::vpn::kSaveCredentials, true);
+      type_dict.Set(::onc::vpn::kWireGuard, std::move(wireguard_dict));
     }
 
     if (vpn.type) {
@@ -2264,10 +2279,10 @@
 
     switch (wifi.hidden_ssid) {
       case mojom::HiddenSsidMode::kDisabled:
-        type_dict.SetBoolKey(::onc::wifi::kHiddenSSID, false);
+        type_dict.Set(::onc::wifi::kHiddenSSID, false);
         break;
       case mojom::HiddenSsidMode::kEnabled:
-        type_dict.SetBoolKey(::onc::wifi::kHiddenSSID, true);
+        type_dict.Set(::onc::wifi::kHiddenSSID, true);
         break;
       case mojom::HiddenSsidMode::kAutomatic:
         // This is expressed to the platform by leaving off kHiddenSSID.
@@ -2277,72 +2292,69 @@
     SetString(::onc::wifi::kSecurity, MojoSecurityTypeToOnc(wifi.security),
               &type_dict);
     if (wifi.eap) {
-      type_dict.SetKey(::onc::wifi::kEAP, GetEAPProperties(*wifi.eap.get()));
+      type_dict.Set(::onc::wifi::kEAP, GetEAPProperties(*wifi.eap.get()));
     }
   }
 
   std::string onc_type = MojoNetworkTypeToOnc(type);
   if (onc_type.empty()) {
     NET_LOG(ERROR) << "Invalid NetworkConfig properties";
-    return nullptr;
+    return absl::nullopt;
   }
-  SetString(::onc::network_config::kType, onc_type, onc.get());
+  SetString(::onc::network_config::kType, onc_type, &onc);
 
   // Process other |properties| members. Order matches the mojo struct.
 
   if (properties->ip_address_config_type) {
-    onc->SetStringKey(::onc::network_config::kIPAddressConfigType,
-                      *properties->ip_address_config_type);
+    onc.Set(::onc::network_config::kIPAddressConfigType,
+            *properties->ip_address_config_type);
   }
   if (properties->metered) {
-    onc->SetBoolKey(::onc::network_config::kMetered,
-                    properties->metered->value);
+    onc.Set(::onc::network_config::kMetered, properties->metered->value);
   }
-  SetString(::onc::network_config::kName, properties->name, onc.get());
+  SetString(::onc::network_config::kName, properties->name, &onc);
   SetString(::onc::network_config::kNameServersConfigType,
-            properties->name_servers_config_type, onc.get());
+            properties->name_servers_config_type, &onc);
 
   if (properties->priority) {
-    onc->SetIntKey(::onc::network_config::kPriority,
-                   properties->priority->value);
+    onc.Set(::onc::network_config::kPriority, properties->priority->value);
   }
 
   if (properties->proxy_settings) {
     const mojom::ProxySettings& proxy = *properties->proxy_settings;
-    base::Value proxy_dict(base::Value::Type::DICTIONARY);
-    proxy_dict.SetStringKey(::onc::proxy::kType, proxy.type);
+    base::Value::Dict proxy_dict;
+    proxy_dict.Set(::onc::proxy::kType, proxy.type);
     if (proxy.manual) {
       const mojom::ManualProxySettings& manual = *proxy.manual;
-      base::Value manual_dict(base::Value::Type::DICTIONARY);
+      base::Value::Dict manual_dict;
       SetProxyLocation(::onc::proxy::kHttp, manual.http_proxy, &manual_dict);
       SetProxyLocation(::onc::proxy::kHttps, manual.secure_http_proxy,
                        &manual_dict);
       SetProxyLocation(::onc::proxy::kFtp, manual.ftp_proxy, &manual_dict);
       SetProxyLocation(::onc::proxy::kSocks, manual.socks, &manual_dict);
-      proxy_dict.SetKey(::onc::proxy::kManual, std::move(manual_dict));
+      proxy_dict.Set(::onc::proxy::kManual, std::move(manual_dict));
     }
     SetStringList(::onc::proxy::kExcludeDomains, proxy.exclude_domains,
                   &proxy_dict);
     SetString(::onc::proxy::kPAC, proxy.pac, &proxy_dict);
-    onc->SetKey(::onc::network_config::kProxySettings, std::move(proxy_dict));
+    onc.Set(::onc::network_config::kProxySettings, std::move(proxy_dict));
   }
 
   if (properties->static_ip_config) {
     const mojom::IPConfigProperties& ip_config = *properties->static_ip_config;
-    base::Value ip_config_dict(base::Value::Type::DICTIONARY);
+    base::Value::Dict ip_config_dict;
     SetString(::onc::ipconfig::kGateway, ip_config.gateway, &ip_config_dict);
     SetString(::onc::ipconfig::kIPAddress, ip_config.ip_address,
               &ip_config_dict);
     SetStringList(::onc::ipconfig::kNameServers, ip_config.name_servers,
                   &ip_config_dict);
-    ip_config_dict.SetIntKey(::onc::ipconfig::kRoutingPrefix,
-                             ip_config.routing_prefix);
-    ip_config_dict.SetStringKey(::onc::ipconfig::kType,
-                                MojoIPConfigTypeToOnc(ip_config.type));
+    ip_config_dict.Set(::onc::ipconfig::kRoutingPrefix,
+                       ip_config.routing_prefix);
+    ip_config_dict.Set(::onc::ipconfig::kType,
+                       MojoIPConfigTypeToOnc(ip_config.type));
     SetString(::onc::ipconfig::kWebProxyAutoDiscoveryUrl,
               ip_config.web_proxy_auto_discovery_url, &ip_config_dict);
-    onc->SetKey(::onc::network_config::kStaticIPConfig,
-                std::move(ip_config_dict));
+    onc.Set(::onc::network_config::kStaticIPConfig, std::move(ip_config_dict));
   }
 
   if (properties->auto_connect) {
@@ -2351,14 +2363,14 @@
         type_pattern.Equals(NetworkTypePattern::VPN()) ||
         type_pattern.Equals(NetworkTypePattern::WiFi())) {
       // Note: All type dicts use the same kAutoConnect key.
-      type_dict.SetBoolKey(::onc::wifi::kAutoConnect,
-                           properties->auto_connect->value);
+      type_dict.Set(::onc::wifi::kAutoConnect, properties->auto_connect->value);
     }
   }
 
-  if (!type_dict.DictEmpty()) {
-    onc->SetKey(onc_type, std::move(type_dict));
+  if (!type_dict.empty()) {
+    onc.Set(onc_type, std::move(type_dict));
   }
+
   return onc;
 }
 
@@ -2722,7 +2734,7 @@
     UpdateCustomAPNList(network, properties.get());
   }
 
-  std::unique_ptr<base::DictionaryValue> onc =
+  absl::optional<base::Value::Dict> onc =
       GetOncFromConfigProperties(properties.get(), guid);
   if (!onc) {
     NET_LOG(ERROR) << "Bad ONC Configuration for " << guid;
@@ -2742,8 +2754,9 @@
     NET_LOG(USER) << "Configuring properties for " << guid
                   << " (no profile entry set)";
     std::string user_id_hash = LoginState::Get()->primary_user_hash();
+
     network_configuration_handler_->CreateConfiguration(
-        user_id_hash, *onc,
+        user_id_hash, base::Value(std::move(*onc)),
         base::BindOnce(&CrosNetworkConfig::SetPropertiesConfigureSuccess,
                        weak_factory_.GetWeakPtr(), callback_id),
         base::BindOnce(&CrosNetworkConfig::SetPropertiesFailure,
@@ -2752,7 +2765,7 @@
   }
 
   network_configuration_handler_->SetProperties(
-      network->path(), *onc,
+      network->path(), base::Value(std::move(*onc)),
       base::BindOnce(&CrosNetworkConfig::SetPropertiesSuccess,
                      weak_factory_.GetWeakPtr(), callback_id),
       base::BindOnce(&CrosNetworkConfig::SetPropertiesFailure,
@@ -2804,7 +2817,7 @@
     return;
   }
 
-  std::unique_ptr<base::DictionaryValue> onc =
+  absl::optional<base::Value::Dict> onc =
       GetOncFromConfigProperties(properties.get(), /*guid=*/absl::nullopt);
   if (!onc) {
     std::move(callback).Run(/*guid=*/absl::nullopt,
@@ -2819,7 +2832,7 @@
   configure_network_callbacks_[callback_id] = std::move(callback);
 
   network_configuration_handler_->CreateConfiguration(
-      user_id_hash, *onc,
+      user_id_hash, base::Value(std::move(*onc)),
       base::BindOnce(&CrosNetworkConfig::ConfigureNetworkSuccess,
                      weak_factory_.GetWeakPtr(), callback_id),
       base::BindOnce(&CrosNetworkConfig::ConfigureNetworkFailure,
diff --git a/chromeos/strings/chromeos_strings_af.xtb b/chromeos/strings/chromeos_strings_af.xtb
index 8df85c1..3e36667 100644
--- a/chromeos/strings/chromeos_strings_af.xtb
+++ b/chromeos/strings/chromeos_strings_af.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> drade, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Nuwe kenmerk is beskikbaar. Gebruik oppylsleutel om meer te wete te kom.</translation>
 <translation id="1059913517121127803">Kon nie skandering begin nie</translation>
-<translation id="1062407476771304334">Vervang</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Brandmuur is bespeur</translation>
 <translation id="1075811647922107217">Bladsygrootte</translation>
@@ -629,6 +628,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">Misluk – kon nie magtig nie</translation>
 <translation id="7103252855940681301">Toestel <ph name="INDEX" /> van <ph name="COUNT" /> genaamd <ph name="NAME" />.</translation>
+<translation id="7130438335435247835">Toegangspuntnaam (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Naambediener}other{Naambedieners}}</translation>
 <translation id="7143207342074048698">Koppel tans</translation>
 <translation id="7144878232160441200">Probeer weer</translation>
diff --git a/chromeos/strings/chromeos_strings_am.xtb b/chromeos/strings/chromeos_strings_am.xtb
index 4ef707e5..e29326e 100644
--- a/chromeos/strings/chromeos_strings_am.xtb
+++ b/chromeos/strings/chromeos_strings_am.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ተከታታይ፣ <ph name="CPU_MAX_CLOCK_SPEED" />ጊኸ)</translation>
 <translation id="1047773237499189053">አዲስ ባህሪ ይገኛል፣ የበለጠ ለመረዳት የላይ ቀስት ቁልፍን ይጠቀሙ።</translation>
 <translation id="1059913517121127803">ቅኝትን መጀመር አልተቻለም</translation>
-<translation id="1062407476771304334">ተካ</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ኬላ ተገኝቷል</translation>
 <translation id="1075811647922107217">የገጽ መጠን</translation>
diff --git a/chromeos/strings/chromeos_strings_ar.xtb b/chromeos/strings/chromeos_strings_ar.xtb
index a51893f3c4..b0b3c8c 100644
--- a/chromeos/strings/chromeos_strings_ar.xtb
+++ b/chromeos/strings/chromeos_strings_ar.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> عملية، <ph name="CPU_MAX_CLOCK_SPEED" /> غيغاهرتز)</translation>
 <translation id="1047773237499189053">تتوفر ميزات جديدة. يمكنك استخدام مفتاح السهم المتجه للأعلى للاطّلاع على مزيد من المعلومات.</translation>
 <translation id="1059913517121127803">تعذَّر إجراء عملية المسح الضوئي.</translation>
-<translation id="1062407476771304334">استبدال</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">تم العثور على جدار ناري.</translation>
 <translation id="1075811647922107217">حجم الصفحة</translation>
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb
index 69d2438..9b68618 100644
--- a/chromeos/strings/chromeos_strings_as.xtb
+++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> টা থ্ৰেড, <ph name="CPU_MAX_CLOCK_SPEED" /> গিগাহাৰ্টজ)</translation>
 <translation id="1047773237499189053">নতুন সুবিধা উপলব্ধ, অধিক জানিবলৈ উপৰমুৱা কাঁড়চিহ্নৰ কী ব্যৱহাৰ কৰক।</translation>
 <translation id="1059913517121127803">স্কেনিং আৰম্ভ কৰিব পৰা নগ’ল</translation>
-<translation id="1062407476771304334">সাল সলনি কৰক</translation>
 <translation id="1070066693520972135">ডব্লিউইপি</translation>
 <translation id="1071587090247825784">ফায়াৰৱাল চিনাক্ত কৰা হৈছে</translation>
 <translation id="1075811647922107217">পৃষ্ঠাৰ আকাৰ</translation>
diff --git a/chromeos/strings/chromeos_strings_az.xtb b/chromeos/strings/chromeos_strings_az.xtb
index f38282c..39eb1780 100644
--- a/chromeos/strings/chromeos_strings_az.xtb
+++ b/chromeos/strings/chromeos_strings_az.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> mövzu, <ph name="CPU_MAX_CLOCK_SPEED" /> GHs)</translation>
 <translation id="1047773237499189053">Yeni funksiya əlçatandır, ətraflı məlumat üçün Yuxarı ox düyməsini istifadə edin.</translation>
 <translation id="1059913517121127803">Skanlamanı başlatmaq mümkün olmadı</translation>
-<translation id="1062407476771304334">Əvəz edin</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Qoruyucu divar aşkarlandı</translation>
 <translation id="1075811647922107217">Səhifə ölçüsü</translation>
diff --git a/chromeos/strings/chromeos_strings_be.xtb b/chromeos/strings/chromeos_strings_be.xtb
index f9b92061..7f3c0dd 100644
--- a/chromeos/strings/chromeos_strings_be.xtb
+++ b/chromeos/strings/chromeos_strings_be.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (патокаў: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> ГГц)</translation>
 <translation id="1047773237499189053">З'явілася новая функцыя, націсніце стрэлку ўверх, каб даведацца больш.</translation>
 <translation id="1059913517121127803">Не ўдалося запусціць сканіраванне</translation>
-<translation id="1062407476771304334">Замяніць</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Выяўлены брандмаўар</translation>
 <translation id="1075811647922107217">Памер старонкі</translation>
diff --git a/chromeos/strings/chromeos_strings_bg.xtb b/chromeos/strings/chromeos_strings_bg.xtb
index d9c3eee..14b43ad 100644
--- a/chromeos/strings/chromeos_strings_bg.xtb
+++ b/chromeos/strings/chromeos_strings_bg.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> нишки, <ph name="CPU_MAX_CLOCK_SPEED" /> ГХц)</translation>
 <translation id="1047773237499189053">Налице е нова функция. Използвайте стрелката нагоре, за да научите повече.</translation>
 <translation id="1059913517121127803">Сканирането не бе стартирано</translation>
-<translation id="1062407476771304334">Замяна</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Установена е защитна стена</translation>
 <translation id="1075811647922107217">Размер на страницата</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb
index 07e3228..5de7f515 100644
--- a/chromeos/strings/chromeos_strings_bn.xtb
+++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" />টি থ্রেড, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">নতুন ফিচার উপলভ্য আছে, আরও জানতে, 'উর্ধমুখী তীরচিহ্ন' বোতাম ব্যবহার করুন।</translation>
 <translation id="1059913517121127803">স্ক্যান শুরু করা যায়নি</translation>
-<translation id="1062407476771304334">প্রতিস্থাপন করুন</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ফায়ারওয়াল শনাক্ত করা হয়েছে</translation>
 <translation id="1075811647922107217">পৃষ্ঠার সাইজ</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index 5e51aae..71d48d47 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (Broj niti: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Dostupna je nova funkcija. Saznajte više tipkom strelice nagore.</translation>
 <translation id="1059913517121127803">Pokretanje skeniranja nije uspjelo</translation>
-<translation id="1062407476771304334">Zamijeni</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Otkriven je zaštitni zid</translation>
 <translation id="1075811647922107217">Veličina stranice</translation>
@@ -55,7 +54,7 @@
 <translation id="1442433966118452622">Izvor slike</translation>
 <translation id="1451536289672181509">Uređaj je tastatura.</translation>
 <translation id="1459693405370120464">Vrijeme</translation>
-<translation id="1468664791493211953">Akcije</translation>
+<translation id="1468664791493211953">Akcijske ponude</translation>
 <translation id="1476467821656042872"><ph name="MANAGER" /> upravlja ovim uređajem i moguće je da može pratiti vaše aktivnosti.</translation>
 <translation id="1478594628797167447">Skener</translation>
 <translation id="1483493594462132177">Pošalji</translation>
@@ -629,6 +628,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">Nije uspjelo – autorizacija nije uspjela</translation>
 <translation id="7103252855940681301">Uređaj <ph name="INDEX" /> od <ph name="COUNT" /> pod nazivom <ph name="NAME" />.</translation>
+<translation id="7130438335435247835">Pristupna točka (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Postavite naziv servera}one{Postavite naziv servera}few{Postavite naziv servera}other{Postavite naziv servera}}</translation>
 <translation id="7143207342074048698">Povezivanje</translation>
 <translation id="7144878232160441200">Pokušajte ponovo.</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb
index 6446d77..12bc7c3 100644
--- a/chromeos/strings/chromeos_strings_ca.xtb
+++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> fils, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Hi ha una nova funció disponible. Fes servir la tecla de fletxa amunt per obtenir més informació.</translation>
 <translation id="1059913517121127803">No s'ha pogut iniciar l'escaneig</translation>
-<translation id="1062407476771304334">Substitueix</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">S'ha detectat un tallafoc</translation>
 <translation id="1075811647922107217">Mida de la pàgina</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb
index 534d096..365b804e 100644
--- a/chromeos/strings/chromeos_strings_cs.xtb
+++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (počet vláken: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">K dispozici je nová funkce, další informace zobrazíte šipkou nahoru.</translation>
 <translation id="1059913517121127803">Skenování se nepodařilo zahájit</translation>
-<translation id="1062407476771304334">Nahradit</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Byl zjištěn Firewall</translation>
 <translation id="1075811647922107217">Velikost stránky</translation>
diff --git a/chromeos/strings/chromeos_strings_cy.xtb b/chromeos/strings/chromeos_strings_cy.xtb
index 2e7b0d1c..e8cec51 100644
--- a/chromeos/strings/chromeos_strings_cy.xtb
+++ b/chromeos/strings/chromeos_strings_cy.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> o drywyddau, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">Mae nodwedd newydd ar gael, defnyddiwch y fysell saeth I Fyny i ddysgu rhagor.</translation>
 <translation id="1059913517121127803">Methu â dechrau sganio</translation>
-<translation id="1062407476771304334">Disodli</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Canfuwyd wal dân</translation>
 <translation id="1075811647922107217">Maint y dudalen</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb
index 80cdc6b..101693b07 100644
--- a/chromeos/strings/chromeos_strings_da.xtb
+++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> tråde, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Nye funktioner er tilgængelige. Tryk på pil op for at få flere oplysninger.</translation>
 <translation id="1059913517121127803">Kunne ikke begynde at scanne</translation>
-<translation id="1062407476771304334">Erstat</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">En firewall blev registreret</translation>
 <translation id="1075811647922107217">Sidestørrelse</translation>
diff --git a/chromeos/strings/chromeos_strings_de.xtb b/chromeos/strings/chromeos_strings_de.xtb
index 65cfc1a..285f72f 100644
--- a/chromeos/strings/chromeos_strings_de.xtb
+++ b/chromeos/strings/chromeos_strings_de.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> Threads, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Neue Funktion verfügbar. Verwende den Aufwärtspfeil, um mehr zu erfahren.</translation>
 <translation id="1059913517121127803">Scan konnte nicht gestartet werden</translation>
-<translation id="1062407476771304334">Ersetzen</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall erkannt</translation>
 <translation id="1075811647922107217">Seitengröße</translation>
diff --git a/chromeos/strings/chromeos_strings_el.xtb b/chromeos/strings/chromeos_strings_el.xtb
index cabb9ab..a758f30 100644
--- a/chromeos/strings/chromeos_strings_el.xtb
+++ b/chromeos/strings/chromeos_strings_el.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> νήματα, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Νέα διαθέσιμη λειτουργία. Χρησιμοποιήστε το πάνω βέλος για να μάθετε περισσότερα.</translation>
 <translation id="1059913517121127803">Δεν ήταν δυνατή η έναρξη της σάρωσης</translation>
-<translation id="1062407476771304334">Αντικατάσταση</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Εντοπίστηκε τείχος προστασίας</translation>
 <translation id="1075811647922107217">Μέγεθος σελίδας</translation>
@@ -629,6 +628,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">Αποτυχία - Ο έλεγχος ταυτότητας απέτυχε</translation>
 <translation id="7103252855940681301">Συσκευή <ph name="INDEX" /> από <ph name="COUNT" /> με όνομα <ph name="NAME" />.</translation>
+<translation id="7130438335435247835">Όνομα σημείου πρόσβασης (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Διακομιστής ονομάτων}other{Διακομιστές ονομάτων}}</translation>
 <translation id="7143207342074048698">Σύνδεση</translation>
 <translation id="7144878232160441200">Επανάληψη</translation>
diff --git a/chromeos/strings/chromeos_strings_en-GB.xtb b/chromeos/strings/chromeos_strings_en-GB.xtb
index 2d76503..e562cb5 100644
--- a/chromeos/strings/chromeos_strings_en-GB.xtb
+++ b/chromeos/strings/chromeos_strings_en-GB.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> threads, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">New feature available; use the up arrow key to learn more.</translation>
 <translation id="1059913517121127803">Couldn't start scanning</translation>
-<translation id="1062407476771304334">Replace</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall detected</translation>
 <translation id="1075811647922107217">Page size</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index 4354080b..7e90cee8 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> subprocesos, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Hay una nueva función disponible. Para obtener más información, usa la flecha hacia arriba.</translation>
 <translation id="1059913517121127803">No se pudo comenzar el escaneo</translation>
-<translation id="1062407476771304334">Reemplazar</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Se detectó un firewall</translation>
 <translation id="1075811647922107217">Tamaño de la página</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb
index 5cdbea3..3bca59b 100644
--- a/chromeos/strings/chromeos_strings_es.xtb
+++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> hilos, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Hay una nueva función disponible. Utiliza la flecha hacia arriba para obtener más información.</translation>
 <translation id="1059913517121127803">No se ha podido empezar a escanear</translation>
-<translation id="1062407476771304334">Reemplazar</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">cortafuegos detectado</translation>
 <translation id="1075811647922107217">Tamaño de página</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb
index 804e207..44dea13 100644
--- a/chromeos/strings/chromeos_strings_et.xtb
+++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> haru, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Uued funktsioonid on saadaval. Lisateabe saamiseks kasutage ülesnoolt.</translation>
 <translation id="1059913517121127803">Skannimist ei saanud alustada</translation>
-<translation id="1062407476771304334">Asenda</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Tuvastati tulemüür</translation>
 <translation id="1075811647922107217">Lehe suurus</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb
index e3ac1df..9f4b182b 100644
--- a/chromeos/strings/chromeos_strings_eu.xtb
+++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> hari, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Eginbide berri bat eskuragarri dago. Erabili gora egiteko gezi-tekla informazio gehiago lortzeko.</translation>
 <translation id="1059913517121127803">Ezin izan da hasi eskaneatzen</translation>
-<translation id="1062407476771304334">Ordeztu</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">suebakia hauteman da</translation>
 <translation id="1075811647922107217">Orriaren tamaina</translation>
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index 4cbbc78..8b10dec 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> رشته، <ph name="CPU_MAX_CLOCK_SPEED" /> گیگاهرتز)</translation>
 <translation id="1047773237499189053">ویژگی جدید دردسترس است، برای اطلاعات بیشتر از کلید «پیکان روبه بالا» استفاده کنید.</translation>
 <translation id="1059913517121127803">اسکن شروع نشد</translation>
-<translation id="1062407476771304334">جایگزینی</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">دیوار آتش شناسایی شد</translation>
 <translation id="1075811647922107217">اندازه صفحه</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb
index c0f6c14d..9522c17 100644
--- a/chromeos/strings/chromeos_strings_fi.xtb
+++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> viestiketju, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Uusi ominaisuus saatavilla, tutki sitä painamalla ylänuolta.</translation>
 <translation id="1059913517121127803">Skannauksen aloittaminen ei onnistunut</translation>
-<translation id="1062407476771304334">Korvaa</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Palomuuri havaittu</translation>
 <translation id="1075811647922107217">Sivun koko</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb
index 6a4173aee..715e0e6 100644
--- a/chromeos/strings/chromeos_strings_fil.xtb
+++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> (na) thread, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">May available na bagong feature, gamitin ang Pataas na arrow key para matuto pa.</translation>
 <translation id="1059913517121127803">Hindi masimulan ang pag-scan</translation>
-<translation id="1062407476771304334">Palitan</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">May na-detect na firewall</translation>
 <translation id="1075811647922107217">Laki ng page</translation>
diff --git a/chromeos/strings/chromeos_strings_fr-CA.xtb b/chromeos/strings/chromeos_strings_fr-CA.xtb
index f7a207e..82b3d715 100644
--- a/chromeos/strings/chromeos_strings_fr-CA.xtb
+++ b/chromeos/strings/chromeos_strings_fr-CA.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> fils d'exécution, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Une nouvelle fonctionnalité est proposée, servez-vous de la touche de flèche vers le haut pour en savoir plus.</translation>
 <translation id="1059913517121127803">Impossible de démarrer la numérisation</translation>
-<translation id="1062407476771304334">Remplacer</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Pare-feu détecté</translation>
 <translation id="1075811647922107217">Taille de la page</translation>
@@ -629,6 +628,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">Échec – Échec de l'autorisation</translation>
 <translation id="7103252855940681301">Appareil <ph name="INDEX" /> de <ph name="COUNT" /> nommé <ph name="NAME" />.</translation>
+<translation id="7130438335435247835">Nom du point d'accès (NPA)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Serveur de noms}one{Serveur de noms}other{Serveurs de noms}}</translation>
 <translation id="7143207342074048698">Connexion…</translation>
 <translation id="7144878232160441200">Réessayer</translation>
diff --git a/chromeos/strings/chromeos_strings_fr.xtb b/chromeos/strings/chromeos_strings_fr.xtb
index ec56b90c..f5f544c 100644
--- a/chromeos/strings/chromeos_strings_fr.xtb
+++ b/chromeos/strings/chromeos_strings_fr.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> threads, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Nouvelle fonctionnalité disponible. Cliquez sur la flèche vers le haut pour en savoir plus.</translation>
 <translation id="1059913517121127803">Impossible de lancer la numérisation</translation>
-<translation id="1062407476771304334">Remplacer</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Pare-feu détecté</translation>
 <translation id="1075811647922107217">Taille de page</translation>
diff --git a/chromeos/strings/chromeos_strings_gl.xtb b/chromeos/strings/chromeos_strings_gl.xtb
index 9d93bc83..60e14569 100644
--- a/chromeos/strings/chromeos_strings_gl.xtb
+++ b/chromeos/strings/chromeos_strings_gl.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> subprocesos, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Novas funcións dispoñibles. Utilizar frecha arriba para obter máis información.</translation>
 <translation id="1059913517121127803">Non se puido iniciar o escaneo</translation>
-<translation id="1062407476771304334">Substituír</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Detectouse un firewall</translation>
 <translation id="1075811647922107217">Tamaño da páxina</translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb
index 49cb538..44384b77 100644
--- a/chromeos/strings/chromeos_strings_gu.xtb
+++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> થ્રેડ, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">નવી સુવિધા ઉપલબ્ધ છે, વધુ જાણવા માટે ઉપર એરો કીનો ઉપયોગ કરો.</translation>
 <translation id="1059913517121127803">સ્કૅન કરવાનું શરૂ કરી શક્યા નથી</translation>
-<translation id="1062407476771304334">બદલો</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ફાયરવૉલ હોવાની જાણકારી મળી</translation>
 <translation id="1075811647922107217">પેજનું કદ</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index 816557c..8439457 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> थ्रेड, <ph name="CPU_MAX_CLOCK_SPEED" />गीगाहर्ट्ज़)</translation>
 <translation id="1047773237499189053">नई सुविधा उपलब्ध है, ज़्यादा जानने के लिए अप ऐरो बटन इस्तेमाल करें.</translation>
 <translation id="1059913517121127803">स्कैन करने की प्रोसेस शुरू नहीं हो सकी</translation>
-<translation id="1062407476771304334">प्रतिस्थापित करें</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">फ़ायरवॉल पहचाना गया</translation>
 <translation id="1075811647922107217">पेज का साइज़</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb
index 8b6e9660..73bd565 100644
--- a/chromeos/strings/chromeos_strings_hr.xtb
+++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (niti: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Dostupna je nova značajka, saznajte više pritiskom strelice prema gore.</translation>
 <translation id="1059913517121127803">Pokretanje skeniranja nije uspjelo</translation>
-<translation id="1062407476771304334">Zamijeni</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Otkriven je vatrozid</translation>
 <translation id="1075811647922107217">Veličina stranice</translation>
@@ -629,6 +628,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">Nije uspjelo – autorizacija nije uspjela</translation>
 <translation id="7103252855940681301">Uređaj <ph name="INDEX" /> od <ph name="COUNT" /> pod nazivom <ph name="NAME" />.</translation>
+<translation id="7130438335435247835">Pristupna točka (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Poslužitelj naziva}one{Poslužitelji naziva}few{Poslužitelji naziva}other{Poslužitelji naziva}}</translation>
 <translation id="7143207342074048698">Povezivanje</translation>
 <translation id="7144878232160441200">Pokušaj ponovno</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb
index 50de051d..3cec589 100644
--- a/chromeos/strings/chromeos_strings_hu.xtb
+++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> szál, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Új funkciók állnak rendelkezésre. További információért használja a felfelé mutató nyilat.</translation>
 <translation id="1059913517121127803">Nem sikerült elindítani a szkennelést</translation>
-<translation id="1062407476771304334">Csere</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Tűzfal észlelve</translation>
 <translation id="1075811647922107217">Oldal mérete</translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb
index 6dcb033..54348b3 100644
--- a/chromeos/strings/chromeos_strings_hy.xtb
+++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> հոսք, <ph name="CPU_MAX_CLOCK_SPEED" /> ԳՀց)</translation>
 <translation id="1047773237499189053">Հասանելի է նոր գործառույթ։ Ավելին իմանալու համար օգտագործեք վեր սլաքը։</translation>
 <translation id="1059913517121127803">Չհաջողվեց սկսել սկանավորումը</translation>
-<translation id="1062407476771304334">Փոխարինել</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Հայտնաբերվել է հրապատ</translation>
 <translation id="1075811647922107217">Էջի չափսը</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb
index fc2f396..a853c6a 100644
--- a/chromeos/strings/chromeos_strings_id.xtb
+++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> thread, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Fitur baru tersedia, gunakan tombol Panah atas untuk mempelajari lebih lanjut.</translation>
 <translation id="1059913517121127803">Tidak dapat memulai pemindaian</translation>
-<translation id="1062407476771304334">Ganti</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall terdeteksi</translation>
 <translation id="1075811647922107217">Ukuran halaman</translation>
diff --git a/chromeos/strings/chromeos_strings_is.xtb b/chromeos/strings/chromeos_strings_is.xtb
index c1b4c701..97b6311 100644
--- a/chromeos/strings/chromeos_strings_is.xtb
+++ b/chromeos/strings/chromeos_strings_is.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> þræðir, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Nýr eiginleiki í boði, notaðu ör upp-lykilinn til að fá frekari upplýsingar.</translation>
 <translation id="1059913517121127803">Ekki tókst að skanna</translation>
-<translation id="1062407476771304334">Skipta út</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Eldveggur greindist</translation>
 <translation id="1075811647922107217">Síðustærð</translation>
diff --git a/chromeos/strings/chromeos_strings_it.xtb b/chromeos/strings/chromeos_strings_it.xtb
index 5c672cd2..905a78b 100644
--- a/chromeos/strings/chromeos_strings_it.xtb
+++ b/chromeos/strings/chromeos_strings_it.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> thread, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Sono disponibili nuove funzionalità: utilizza il tasto Freccia su per saperne di più.</translation>
 <translation id="1059913517121127803">Impossibile avviare la scansione</translation>
-<translation id="1062407476771304334">Sostituisci</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall rilevato</translation>
 <translation id="1075811647922107217">Dimensioni pagina</translation>
diff --git a/chromeos/strings/chromeos_strings_iw.xtb b/chromeos/strings/chromeos_strings_iw.xtb
index f5e2b13..17e38ab 100644
--- a/chromeos/strings/chromeos_strings_iw.xtb
+++ b/chromeos/strings/chromeos_strings_iw.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304">‏<ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> שרשורים, GHz‏ <ph name="CPU_MAX_CLOCK_SPEED" />)</translation>
 <translation id="1047773237499189053">יש תכונה חדשה. למידע נוסף יש להקיש על מקש החץ למעלה.</translation>
 <translation id="1059913517121127803">לא ניתן היה להתחיל את הסריקה</translation>
-<translation id="1062407476771304334">החלפה</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">זוהתה חומת אש</translation>
 <translation id="1075811647922107217">גודל הדף</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb
index 6575b1b..38e6c013 100644
--- a/chromeos/strings/chromeos_strings_ja.xtb
+++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" />(スレッド数 <ph name="THREAD_COUNT" />、<ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">新しい機能があります。上矢印キーで詳細を確認できます。</translation>
 <translation id="1059913517121127803">スキャンを開始できませんでした</translation>
-<translation id="1062407476771304334">置換</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ファイアウォールが検出されました</translation>
 <translation id="1075811647922107217">ページサイズ</translation>
diff --git a/chromeos/strings/chromeos_strings_ka.xtb b/chromeos/strings/chromeos_strings_ka.xtb
index f127d93..dbb62272 100644
--- a/chromeos/strings/chromeos_strings_ka.xtb
+++ b/chromeos/strings/chromeos_strings_ka.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ნაკადი, <ph name="CPU_MAX_CLOCK_SPEED" /> გჰც)</translation>
 <translation id="1047773237499189053">ხელმისაწვდომია ახალი ფუნქცია, დამატებითი ინფორმაციისთვის გამოიყენეთ კლავიში ზემოთ მიმართული ისრით.</translation>
 <translation id="1059913517121127803">სკანირების დაწყება ვერ მოხერხდა</translation>
-<translation id="1062407476771304334">შეცვლა</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">აღმოჩენილია ქსელის დაცვა</translation>
 <translation id="1075811647922107217">გვერდის ზომა</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb
index 53899e9..8c4c704b 100644
--- a/chromeos/strings/chromeos_strings_kk.xtb
+++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> тізбек, <ph name="CPU_MAX_CLOCK_SPEED" /> ГГц)</translation>
 <translation id="1047773237499189053">Жаңа функция қолжетімді. Толығырақ ақпарат алу үшін жоғарыға бағыттауыш пернені қолданыңыз.</translation>
 <translation id="1059913517121127803">Сканерлеуді қосу мүмкін болмады.</translation>
-<translation id="1062407476771304334">Ауыстыру</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Брандмаэур анықталды.</translation>
 <translation id="1075811647922107217">Бет өлшемі</translation>
diff --git a/chromeos/strings/chromeos_strings_km.xtb b/chromeos/strings/chromeos_strings_km.xtb
index 32df9ba..82e27da 100644
--- a/chromeos/strings/chromeos_strings_km.xtb
+++ b/chromeos/strings/chromeos_strings_km.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (កម្រងសារ <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">មានមុខងារថ្មី សូមប្រើគ្រាប់ចុចព្រួញឡើងលើ ដើម្បីស្វែងយល់បន្ថែម។</translation>
 <translation id="1059913517121127803">មិនអាច​ចាប់ផ្ដើម​ស្កេនបានទេ</translation>
-<translation id="1062407476771304334">ជំនួស</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">បានរកឃើញ​ជញ្ជាំងភ្លើង</translation>
 <translation id="1075811647922107217">ទំហំ​ទំព័រ</translation>
@@ -628,6 +627,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">មិនបានសម្រេច - ការផ្ដល់សិទ្ធិមិនបានសម្រេចទេ</translation>
 <translation id="7103252855940681301">ឧបករណ៍ <ph name="INDEX" /> ក្នុងចំណោម <ph name="COUNT" /> មានឈ្មោះថា <ph name="NAME" />។</translation>
+<translation id="7130438335435247835">ឈ្មោះ​ចំណុចចូលប្រើប្រាស់ (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{ដាក់ឈ្មោះ​ម៉ាស៊ីនមេ}other{ដាក់ឈ្មោះ​ម៉ាស៊ីនមេ}}</translation>
 <translation id="7143207342074048698">កំពុងភ្ជាប់...</translation>
 <translation id="7144878232160441200">ព្យាយាមម្តងទៀត</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb
index b21243e..ffce40e 100644
--- a/chromeos/strings/chromeos_strings_kn.xtb
+++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ಥ್ರೆಡ್‌ಗಳು, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">ಹೊಸ ಫೀಚರ್ ಲಭ್ಯವಿದೆ, ಇನ್ನಷ್ಟು ತಿಳಿಯಲು ಅಪ್ ಆ್ಯರೋ ಕೀ ಬಳಸಿ.</translation>
 <translation id="1059913517121127803">ಸ್ಕ್ಯಾನ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
-<translation id="1062407476771304334">ಸ್ಥಾನಾಂತರಿಸು</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ಫೈರ್‌ವಾಲ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲಾಗಿದೆ</translation>
 <translation id="1075811647922107217">ಪುಟದ ಗಾತ್ರ</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb
index 2fa9236..fbb6b17b 100644
--- a/chromeos/strings/chromeos_strings_ko.xtb
+++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" />(스레드 <ph name="THREAD_COUNT" />개, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">새 기능을 이용할 수 있습니다. 자세히 알아보려면 위쪽 화살표 키를 사용하세요.</translation>
 <translation id="1059913517121127803">스캔을 시작할 수 없음</translation>
-<translation id="1062407476771304334">바꾸기</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">방화벽 감지됨</translation>
 <translation id="1075811647922107217">페이지 크기</translation>
diff --git a/chromeos/strings/chromeos_strings_ky.xtb b/chromeos/strings/chromeos_strings_ky.xtb
index 91b091b..6a612ea2 100644
--- a/chromeos/strings/chromeos_strings_ky.xtb
+++ b/chromeos/strings/chromeos_strings_ky.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> топтом, <ph name="CPU_MAX_CLOCK_SPEED" />ГГц)</translation>
 <translation id="1047773237499189053">Жаңы функциялар бар. Кеңири маалымат алуу үчүн Өйдө жебе баскычын басыңыз.</translation>
 <translation id="1059913517121127803">Скандалып башталган жок</translation>
-<translation id="1062407476771304334">Алмаштыруу</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Тармактык коргоо аныкталды</translation>
 <translation id="1075811647922107217">Барактын өлчөмү</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb
index 5819c0f2..faed0cb 100644
--- a/chromeos/strings/chromeos_strings_lo.xtb
+++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ຫົວຂໍ້, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">ມີຄຸນສົມບັດໃໝ່, ກະລຸນາໃຊ້ລູກສອນຂຶ້ນເພື່ອສຶກສາເພີ່ມເຕີມ.</translation>
 <translation id="1059913517121127803">ບໍ່ສາມາດເລີ່ມສະແກນໄດ້</translation>
-<translation id="1062407476771304334">​ປ່ຽນ​ແທນ​</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ກວດເຫັນ Firewall</translation>
 <translation id="1075811647922107217">ຂະຫນາດຫນ້າ</translation>
@@ -630,6 +629,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">ບໍ່ສຳເລັດ, ການມອບສິດບໍ່ສຳເລັດ</translation>
 <translation id="7103252855940681301">ອຸປະກອນທີ <ph name="INDEX" /> ຈາກທັງໝົດ <ph name="COUNT" /> ຊື່ <ph name="NAME" />.</translation>
+<translation id="7130438335435247835">ຊື່ຈຸດການເຂົ້າເຖິງ (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Name server}other{Name servers}}</translation>
 <translation id="7143207342074048698">ກຳ​ລັງ​ເຊື່ອມ​ຕໍ່</translation>
 <translation id="7144878232160441200">ລອງໃໝ່ອີກ</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index 695a4bba5..b02d35a8 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (grupių: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Pasiekiama nauja funkcija, spustelėkite rodyklės aukštyn klavišą, kad sužinotumėte daugiau.</translation>
 <translation id="1059913517121127803">Nepavyko pradėti nuskaitymo</translation>
-<translation id="1062407476771304334">Pakeisti</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Aptikta užkarda</translation>
 <translation id="1075811647922107217">Puslapio dydis</translation>
diff --git a/chromeos/strings/chromeos_strings_lv.xtb b/chromeos/strings/chromeos_strings_lv.xtb
index 709fc18..941a53a 100644
--- a/chromeos/strings/chromeos_strings_lv.xtb
+++ b/chromeos/strings/chromeos_strings_lv.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (pavedienu skaits: <ph name="THREAD_COUNT" />; <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Pieejama jauna funkcija. Lai uzzinātu vairāk, nospiediet augšupvērsto bulttaustiņu.</translation>
 <translation id="1059913517121127803">Nevarēja sākt skenēšanu.</translation>
-<translation id="1062407476771304334">Aizstāt</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Konstatēts ugunsmūris</translation>
 <translation id="1075811647922107217">Lapas lielums</translation>
diff --git a/chromeos/strings/chromeos_strings_mk.xtb b/chromeos/strings/chromeos_strings_mk.xtb
index c5541939..be181d3 100644
--- a/chromeos/strings/chromeos_strings_mk.xtb
+++ b/chromeos/strings/chromeos_strings_mk.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> низи, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Достапна е нова функција. Користете го копчето со стрелка нагоре за да дознаете повеќе.</translation>
 <translation id="1059913517121127803">Не можеше да се започне со скенирање</translation>
-<translation id="1062407476771304334">Замени</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Откриен е заштитен ѕид</translation>
 <translation id="1075811647922107217">Големина на страницата</translation>
diff --git a/chromeos/strings/chromeos_strings_ml.xtb b/chromeos/strings/chromeos_strings_ml.xtb
index d4c11c1..515484b 100644
--- a/chromeos/strings/chromeos_strings_ml.xtb
+++ b/chromeos/strings/chromeos_strings_ml.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ത്രെഡുകൾ, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">പുതിയ ഫീച്ചർ ലഭ്യമാണ്, കൂടുതലറിയാൻ മുകളിലേയ്ക്കുള്ള അമ്പടയാളം കീ ഉപയോഗിക്കുക.</translation>
 <translation id="1059913517121127803">സ്‌കാൻ ചെയ്യൽ ആരംഭിക്കാനായില്ല</translation>
-<translation id="1062407476771304334">മാറ്റിസ്ഥാപിക്കുക</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ഫയര്‍വാള്‍ കണ്ടെത്തി</translation>
 <translation id="1075811647922107217">പേജിന്റെ വലുപ്പം</translation>
diff --git a/chromeos/strings/chromeos_strings_mn.xtb b/chromeos/strings/chromeos_strings_mn.xtb
index f8722e6..acf25ae 100644
--- a/chromeos/strings/chromeos_strings_mn.xtb
+++ b/chromeos/strings/chromeos_strings_mn.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> уялдаат, <ph name="CPU_MAX_CLOCK_SPEED" />Гц)</translation>
 <translation id="1047773237499189053">Шинэ онцлог боломжтой байна. Нэмэлт мэдээлэл авах бол Дээш суман товчийг ашиглана уу.</translation>
 <translation id="1059913517121127803">Скан хийхийг эхлүүлж чадсангүй</translation>
-<translation id="1062407476771304334">Солих</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Галт хана илрүүлсэн</translation>
 <translation id="1075811647922107217">Хуудасны хэмжээ</translation>
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 02bd78e6..5abaa1a 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> थ्रेड, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">नवीन वैशिष्ट्य उपलब्ध आहे, अधिक जाणून घेण्यासाठी अप अ‍ॅरो की वापरा.</translation>
 <translation id="1059913517121127803">स्कॅनिंग सुरू करता आले नाही</translation>
-<translation id="1062407476771304334">पुनर्स्थित करा</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">फायरवॉल डिटेक्ट केली</translation>
 <translation id="1075811647922107217">पेजचा आकार</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb
index 69d89a5..ba80a96 100644
--- a/chromeos/strings/chromeos_strings_ms.xtb
+++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> urutan, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">Ciri baharu tersedia, gunakan kekunci Anak panah ke atas untuk mengetahui lebih lanjut.</translation>
 <translation id="1059913517121127803">Tidak dapat memulakan pengimbasan</translation>
-<translation id="1062407476771304334">Gantikan</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Tembok api dikesan</translation>
 <translation id="1075811647922107217">Saiz halaman</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index a1a7844..4e0c4f5 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (အတွဲ <ph name="THREAD_COUNT" /> ခု၊ <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">ဝန်ဆောင်မှုအသစ် ရနိုင်သည်၊ ပိုမိုလေ့လာရန် အပေါ်ညွှန်မြားကို အသုံးပြုပါ။</translation>
 <translation id="1059913517121127803">စကင်ဖတ်ရန် စတင်၍မရပါ</translation>
-<translation id="1062407476771304334">အစားထိုးရန်</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall တွေ့ရှိသည်</translation>
 <translation id="1075811647922107217">စာမျက်နှာ အရွယ်အစား</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb
index 3d3ec543..b0ab3e77 100644
--- a/chromeos/strings/chromeos_strings_ne.xtb
+++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> वटा थ्रेड, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">नयाँ सुविधा उपलब्ध छ, थप जान्न अप एरो की प्रयोग गर्नुहोस्।</translation>
 <translation id="1059913517121127803">स्क्यान गर्ने प्रक्रिया सुरु गर्न सकिएन</translation>
-<translation id="1062407476771304334">बदल्नुहोस्</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">फायरवाल पत्ता लाग्यो</translation>
 <translation id="1075811647922107217">पेजको आकार</translation>
diff --git a/chromeos/strings/chromeos_strings_nl.xtb b/chromeos/strings/chromeos_strings_nl.xtb
index 9d21bdd..f04bef4 100644
--- a/chromeos/strings/chromeos_strings_nl.xtb
+++ b/chromeos/strings/chromeos_strings_nl.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> threads, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Nieuwe functie beschikbaar, gebruik de pijl-omhoog voor meer informatie.</translation>
 <translation id="1059913517121127803">Kan scannen niet starten</translation>
-<translation id="1062407476771304334">Vervangen</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall waargenomen</translation>
 <translation id="1075811647922107217">Paginagrootte</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index 8ebbf01..267aeab 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> tråder, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">En ny funksjon er tilgjengelig. Bruk oppoverpilen for å finne ut mer.</translation>
 <translation id="1059913517121127803">Kunne ikke starte skanningen</translation>
-<translation id="1062407476771304334">Erstatt</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Oppdaget en brannmur</translation>
 <translation id="1075811647922107217">Sidestørrelse</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb
index 27b700bc..eade638 100644
--- a/chromeos/strings/chromeos_strings_or.xtb
+++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" />ଟି ଥ୍ରେଡ୍, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">ନୂଆ ଫିଚର୍ ଉପଲବ୍ଧ ଅଛି, ଅଧିକ ଜାଣିବାକୁ ଅପ୍ ତୀର କୀ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
 <translation id="1059913517121127803">ସ୍କାନିଂ ଆରମ୍ଭ କରାଯାଇପାରିଲା ନାହିଁ</translation>
-<translation id="1062407476771304334">ପ୍ରତିସ୍ଥାପନ କରନ୍ତୁ</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ଫାୟାରୱାଲ୍ ଥିବାର ଚିହ୍ନଟ କରାଯାଇଛି</translation>
 <translation id="1075811647922107217">ପୃଷ୍ଠାର ଆକାର</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb
index 89c1ad4..e6cff43f 100644
--- a/chromeos/strings/chromeos_strings_pa.xtb
+++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ਥ੍ਰੈੱਡ, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">ਨਵੀਂ ਵਿਸ਼ੇਸ਼ਤਾ ਉਪਲਬਧ ਹੈ, ਹੋਰ ਜਾਣਨ ਲਈ 'ਉੱਪਰ ਤੀਰ' ਕੁੰਜੀ ਦੀ ਵਰਤੋਂ ਕਰੋ।</translation>
 <translation id="1059913517121127803">ਸਕੈਨ ਕਰਨਾ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</translation>
-<translation id="1062407476771304334">ਬਦਲੋ</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall ਦਾ ਪਤਾ ਲੱਗਾ</translation>
 <translation id="1075811647922107217">ਪੰਨੇ ਦਾ ਆਕਾਰ</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb
index 77d91dc..acca6f2b 100644
--- a/chromeos/strings/chromeos_strings_pl.xtb
+++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (wątki: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Dostępna jest nowa funkcja. Aby dowiedzieć się więcej, naciśnij klawisz strzałki w górę.</translation>
 <translation id="1059913517121127803">Nie udało się rozpocząć skanowania</translation>
-<translation id="1062407476771304334">Zastąp</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">wykryto zaporę sieciową</translation>
 <translation id="1075811647922107217">Rozmiar strony</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index 9a3580f..444cbf3b 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> threads, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Novo recurso disponível, use a tecla de seta para cima para saber mais.</translation>
 <translation id="1059913517121127803">Não foi possível iniciar a digitalização</translation>
-<translation id="1062407476771304334">Substituir</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall detectado</translation>
 <translation id="1075811647922107217">Tamanho da página</translation>
@@ -629,6 +628,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">Falha: a autorização falhou</translation>
 <translation id="7103252855940681301">Dispositivo <ph name="INDEX" /> de <ph name="COUNT" />, chamado <ph name="NAME" />.</translation>
+<translation id="7130438335435247835">Nome do ponto de acesso (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{Servidor de nomes}one{Servidor de nomes}other{Servidores de nomes}}</translation>
 <translation id="7143207342074048698">Conectando</translation>
 <translation id="7144878232160441200">Tentar novamente</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-PT.xtb b/chromeos/strings/chromeos_strings_pt-PT.xtb
index 407fa06..8375b741 100644
--- a/chromeos/strings/chromeos_strings_pt-PT.xtb
+++ b/chromeos/strings/chromeos_strings_pt-PT.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> threads, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Nova funcionalidade disponível, utilize a tecla da seta para cima para saber mais.</translation>
 <translation id="1059913517121127803">Não foi possível iniciar a digitalização.</translation>
-<translation id="1062407476771304334">Substituir</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Firewall detetada</translation>
 <translation id="1075811647922107217">Tamanho da página</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb
index 1afebba9..d5320b86 100644
--- a/chromeos/strings/chromeos_strings_ro.xtb
+++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> fire, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Funcție nouă disponibilă; folosește tasta săgeată în sus ca să afli mai multe.</translation>
 <translation id="1059913517121127803">Nu s-a putut începe scanarea</translation>
-<translation id="1062407476771304334">Înlocuiți</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">S-a detectat un firewall</translation>
 <translation id="1075811647922107217">Dimensiunea paginii</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index 7f173f4e..0f37e35c 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (потоки: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> ГГц)</translation>
 <translation id="1047773237499189053">Доступна новая функция. Чтобы получить подробную информацию, нажмите на стрелку вверх.</translation>
 <translation id="1059913517121127803">Не удалось начать сканирование.</translation>
-<translation id="1062407476771304334">Заменить</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">обнаружен брандмауэр</translation>
 <translation id="1075811647922107217">Размер страницы</translation>
diff --git a/chromeos/strings/chromeos_strings_si.xtb b/chromeos/strings/chromeos_strings_si.xtb
index 215d7138..70ef6b4e 100644
--- a/chromeos/strings/chromeos_strings_si.xtb
+++ b/chromeos/strings/chromeos_strings_si.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (පොටවල් <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">නව විශේෂාංගයක් ලබා ගත හැකිය, තව දැන ගැනීමට ඉහළට ඊතල යතුර භාවිත කරන්න.</translation>
 <translation id="1059913517121127803">ස්කෑන් කිරීම ආරම්භ කිරීමට නොහැකි විය</translation>
-<translation id="1062407476771304334">ප්‍රතිස්ථාපනය කරන්න</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ෆයර්වෝලය අනාවරණය කර ගන්නා ලදි</translation>
 <translation id="1075811647922107217">පිටු තරම</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb
index 42d7f56..9c24487 100644
--- a/chromeos/strings/chromeos_strings_sk.xtb
+++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (počet vlákien: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">K dispozícii je nová funkcia. Viac sa dozviete pomocou šípky nahor.</translation>
 <translation id="1059913517121127803">Skenovanie sa nepodarilo spustiť</translation>
-<translation id="1062407476771304334">Nahradiť</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Bol zistený firewall</translation>
 <translation id="1075811647922107217">Veľkosť stránky</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index 46b3c8722..4937601a 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (št. niti: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Na voljo je nova funkcija. Uporabite tipko s puščico gor, če želite izvedeti več o tem.</translation>
 <translation id="1059913517121127803">Ni bilo mogoče začeti optično brati</translation>
-<translation id="1062407476771304334">Zamenjaj</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Zaznan je požarni zid</translation>
 <translation id="1075811647922107217">Velikost strani</translation>
diff --git a/chromeos/strings/chromeos_strings_sq.xtb b/chromeos/strings/chromeos_strings_sq.xtb
index 6a67993..6b0380df 100644
--- a/chromeos/strings/chromeos_strings_sq.xtb
+++ b/chromeos/strings/chromeos_strings_sq.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> nënprocese, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Ka veçori të re, përdor tastin "Shigjeta lart" për të mësuar më shumë.</translation>
 <translation id="1059913517121127803">Skanimi nuk mund të nisej</translation>
-<translation id="1062407476771304334">Zëvendëso</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">U zbulua mur mbrojtës</translation>
 <translation id="1075811647922107217">Madhësia e faqes</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index e26b4c7..4943b976 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> niti, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Dostupna je nova funkcija. Koristite taster sa strelicom nagore da biste saznali više.</translation>
 <translation id="1059913517121127803">Pokretanje skeniranja nije uspelo</translation>
-<translation id="1062407476771304334">Zameni</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Otkriven je zaštitni zid</translation>
 <translation id="1075811647922107217">Veličina stranice</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index e638e8b..729fea1 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> нити, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Доступна је нова функција. Користите тастер са стрелицом нагоре да бисте сазнали више.</translation>
 <translation id="1059913517121127803">Покретање скенирања није успело</translation>
-<translation id="1062407476771304334">Замени</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Откривен је заштитни зид</translation>
 <translation id="1075811647922107217">Величина странице</translation>
diff --git a/chromeos/strings/chromeos_strings_sv.xtb b/chromeos/strings/chromeos_strings_sv.xtb
index 58678df..268348a 100644
--- a/chromeos/strings/chromeos_strings_sv.xtb
+++ b/chromeos/strings/chromeos_strings_sv.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> trådar, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Det finns en ny funktion. Tryck på uppåtpilen om du vill läsa mer.</translation>
 <translation id="1059913517121127803">Det gick inte att börja söka</translation>
-<translation id="1062407476771304334">Ersätt</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Brandvägg hittades</translation>
 <translation id="1075811647922107217">Sidstorlek</translation>
diff --git a/chromeos/strings/chromeos_strings_sw.xtb b/chromeos/strings/chromeos_strings_sw.xtb
index f335786..61d9c58 100644
--- a/chromeos/strings/chromeos_strings_sw.xtb
+++ b/chromeos/strings/chromeos_strings_sw.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (michakato <ph name="THREAD_COUNT" />, GHz <ph name="CPU_MAX_CLOCK_SPEED" />)</translation>
 <translation id="1047773237499189053">Kipengele kipya kinapatikana, tumia kishale cha Juu ili upate maelezo zaidi.</translation>
 <translation id="1059913517121127803">Imeshindwa kuanza kuchanganua</translation>
-<translation id="1062407476771304334">Badilisha</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Kinga mtandao imetambuliwa</translation>
 <translation id="1075811647922107217">Ukubwa wa ukurasa</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb
index ed720b3..424375a 100644
--- a/chromeos/strings/chromeos_strings_ta.xtb
+++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> தொடரிழைகள், <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">புதிய அம்சம் உள்ளது. மேலும் அறிய, மேல்நோக்கிய அம்புக்குறி விசையைப் பயன்படுத்துங்கள்.</translation>
 <translation id="1059913517121127803">ஸ்கேன் செய்ய முடியவில்லை</translation>
-<translation id="1062407476771304334">மாற்றியமை</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ஃபயர்வால் கண்டறியப்பட்டது</translation>
 <translation id="1075811647922107217">பக்க அளவு</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index ba5a9ea..6f43ddb0 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> థ్రెడ్‌లు, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">కొత్త ఫీచర్ అందుబాటులో ఉంది, మరింత తెలుసుకోవడానికి పై వైపు బాణం కీని ఉపయోగించండి.</translation>
 <translation id="1059913517121127803">స్కానింగ్ ప్రారంభించడం సాధ్యపడలేదు</translation>
-<translation id="1062407476771304334">భర్తీ చేయి</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ఫైర్‌వాల్ గుర్తించబడింది</translation>
 <translation id="1075811647922107217">పేజీ సైజ్‌</translation>
diff --git a/chromeos/strings/chromeos_strings_th.xtb b/chromeos/strings/chromeos_strings_th.xtb
index a85ee07b..e69c518 100644
--- a/chromeos/strings/chromeos_strings_th.xtb
+++ b/chromeos/strings/chromeos_strings_th.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> เทรด, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">มีฟีเจอร์ใหม่ ใช้แป้นลูกศรขึ้นเพื่อดูข้อมูลเพิ่มเติม</translation>
 <translation id="1059913517121127803">เริ่มการสแกนไม่ได้</translation>
-<translation id="1062407476771304334">แทนที่</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">ตรวจพบไฟร์วอลล์</translation>
 <translation id="1075811647922107217">ขนาดหน้า</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb
index ee079ae..06381af6 100644
--- a/chromeos/strings/chromeos_strings_tr.xtb
+++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> iş parçacığı, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Yeni özellik mevcut. Daha fazla bilgi için yukarı ok tuşunu kullanın.</translation>
 <translation id="1059913517121127803">Tarama işlemi başlatılamadı</translation>
-<translation id="1062407476771304334">Değiştir</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Güvenlik duvarı algılandı</translation>
 <translation id="1075811647922107217">Sayfa boyutu</translation>
diff --git a/chromeos/strings/chromeos_strings_uk.xtb b/chromeos/strings/chromeos_strings_uk.xtb
index 33babd14..6f862fa 100644
--- a/chromeos/strings/chromeos_strings_uk.xtb
+++ b/chromeos/strings/chromeos_strings_uk.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (потоків: <ph name="THREAD_COUNT" />, <ph name="CPU_MAX_CLOCK_SPEED" /> ГГц)</translation>
 <translation id="1047773237499189053">Доступна нова функція. Щоб дізнатися більше, натисніть клавішу зі стрілкою вгору.</translation>
 <translation id="1059913517121127803">Не вдається почати сканування</translation>
-<translation id="1062407476771304334">Замінити</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">виявлено брандмауер</translation>
 <translation id="1075811647922107217">Розмір сторінки</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb
index f0dd773a..dbca5d5b8 100644
--- a/chromeos/strings/chromeos_strings_ur.xtb
+++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304">‏<ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> تھریڈز، GHz<ph name="CPU_MAX_CLOCK_SPEED" />)</translation>
 <translation id="1047773237499189053">نئی خصوصیت دستیاب ہے، مزید جاننے کے لئے اوپر تیر کے نشان کی کلید کا استعمال کریں۔</translation>
 <translation id="1059913517121127803">اسکین کرنا شروع نہیں کیا جا سکا</translation>
-<translation id="1062407476771304334">بدلیں</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">فائروال کا پتا چلا</translation>
 <translation id="1075811647922107217">صفحہ کا سائز</translation>
@@ -628,6 +627,7 @@
 <translation id="7086440545492620869"><ph name="VALUE" /> <ph name="DISPLAY_NAME" /></translation>
 <translation id="710028965487274708">ناکام ہو گئی - اجازت دہندگی ناکام ہو گئی</translation>
 <translation id="7103252855940681301"><ph name="INDEX" /> میں <ph name="NAME" /> نام کے <ph name="COUNT" /> آلے ہے۔</translation>
+<translation id="7130438335435247835">‏رسائی کی جگہ کا نام (APN)</translation>
 <translation id="7134436342991564651">{0,plural, =1{نام سرور}other{نام سرورز}}</translation>
 <translation id="7143207342074048698">منسلک ہو رہا ہے</translation>
 <translation id="7144878232160441200">دوبارہ کوشش کریں</translation>
diff --git a/chromeos/strings/chromeos_strings_uz.xtb b/chromeos/strings/chromeos_strings_uz.xtb
index c474200e..b024c41 100644
--- a/chromeos/strings/chromeos_strings_uz.xtb
+++ b/chromeos/strings/chromeos_strings_uz.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ta oqim, <ph name="CPU_MAX_CLOCK_SPEED" /> GGs)</translation>
 <translation id="1047773237499189053">Yangi funksiya chiqdi, batafsil axborot uchun tepaga strelkani bosing</translation>
 <translation id="1059913517121127803">Skanerlash ishga tushmadi</translation>
-<translation id="1062407476771304334">Almashtirish</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Himoya devori aniqlandi</translation>
 <translation id="1075811647922107217">Sahifa hajmi</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb
index 219beb9..0f69b81 100644
--- a/chromeos/strings/chromeos_strings_vi.xtb
+++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> luồng, <ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">Đã có tính năng mới, hãy sử dụng phím Mũi tên lên để tìm hiểu thêm.</translation>
 <translation id="1059913517121127803">Không thể bắt đầu quét</translation>
-<translation id="1062407476771304334">Thay thế</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">Đã phát hiện thấy tường lửa</translation>
 <translation id="1075811647922107217">Kích thước trang</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index df3d007..c118e90f 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" />(<ph name="THREAD_COUNT" /> 个线程,<ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">有可用的新功能,使用向上键即可了解详情。</translation>
 <translation id="1059913517121127803">无法启动扫描</translation>
-<translation id="1062407476771304334">替换</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">检测到防火墙</translation>
 <translation id="1075811647922107217">页面大小</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb
index b2caa92..9ef93cc9 100644
--- a/chromeos/strings/chromeos_strings_zh-HK.xtb
+++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> 個執行緒;<ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">推出咗新功能,請用向上箭咀掣了解詳情。</translation>
 <translation id="1059913517121127803">無法開始掃瞄</translation>
-<translation id="1062407476771304334">取代</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">偵測到防火牆</translation>
 <translation id="1075811647922107217">頁面大小</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb
index 6317321..04c186ed 100644
--- a/chromeos/strings/chromeos_strings_zh-TW.xtb
+++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> 個執行緒;<ph name="CPU_MAX_CLOCK_SPEED" /> GHz)</translation>
 <translation id="1047773237499189053">已推出新功能,請使用向上鍵瞭解詳情。</translation>
 <translation id="1059913517121127803">無法開始掃描</translation>
-<translation id="1062407476771304334">取代</translation>
 <translation id="1070066693520972135">WEP</translation>
 <translation id="1071587090247825784">已偵測到防火牆</translation>
 <translation id="1075811647922107217">網頁大小</translation>
diff --git a/chromeos/strings/chromeos_strings_zu.xtb b/chromeos/strings/chromeos_strings_zu.xtb
index 831b6028..02bd9f9 100644
--- a/chromeos/strings/chromeos_strings_zu.xtb
+++ b/chromeos/strings/chromeos_strings_zu.xtb
@@ -6,7 +6,6 @@
 <translation id="1047458377670401304"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> uchungechunge, <ph name="CPU_MAX_CLOCK_SPEED" />GHz)</translation>
 <translation id="1047773237499189053">Isici esisha siyatholakala, sebenzisa ukhiye Womcibisholo waphezulu ukuze ufunde kabanzi.</translation>
 <translation id="1059913517121127803">Ayikwazanga ukuqalisa ukuskena</translation>
-<translation id="1062407476771304334">Faka esikhundleni</translation>
 <translation id="1070066693520972135">I-WEP</translation>
 <translation id="1071587090247825784">Kutholwe uhlelo lokuvikela</translation>
 <translation id="1075811647922107217">Usayizi wekhasi</translation>
diff --git a/components/attribution_reporting/BUILD.gn b/components/attribution_reporting/BUILD.gn
index 7c0a9df..0e266a7 100644
--- a/components/attribution_reporting/BUILD.gn
+++ b/components/attribution_reporting/BUILD.gn
@@ -2,8 +2,14 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//mojo/public/tools/bindings/mojom.gni")
 import("//testing/libfuzzer/fuzzer_test.gni")
 
+mojom("source_registration_error_mojom") {
+  sources = [ "source_registration_error.mojom" ]
+  webui_module_path = "/"
+}
+
 component("attribution_reporting") {
   sources = [
     "parse.cc",
diff --git a/components/attribution_reporting/OWNERS b/components/attribution_reporting/OWNERS
index 6a3b4dd..3233056 100644
--- a/components/attribution_reporting/OWNERS
+++ b/components/attribution_reporting/OWNERS
@@ -1 +1,4 @@
 file://content/browser/attribution_reporting/OWNERS
+
+per-file *.mojom=set noparent
+per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/components/attribution_reporting/source_registration_error.mojom b/components/attribution_reporting/source_registration_error.mojom
new file mode 100644
index 0000000..ac145191
--- /dev/null
+++ b/components/attribution_reporting/source_registration_error.mojom
@@ -0,0 +1,29 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module attribution_reporting.mojom;
+
+enum SourceRegistrationError {
+  kInvalidJson,
+  kRootWrongType,
+
+  kDestinationMissing,
+  kDestinationWrongType,
+  kDestinationUntrustworthy,
+
+  kFilterDataWrongType,
+  kFilterDataTooManyKeys,
+  kFilterDataHasSourceTypeKey,
+  kFilterDataKeyTooLong,
+  kFilterDataListWrongType,
+  kFilterDataListTooLong,
+  kFilterDataValueWrongType,
+  kFilterDataValueTooLong,
+
+  kAggregationKeysWrongType,
+  kAggregationKeysTooManyKeys,
+  kAggregationKeysKeyTooLong,
+  kAggregationKeysValueWrongType,
+  kAggregationKeysValueWrongFormat,
+};
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn
index e7a0f0e..fc18be6e 100644
--- a/components/autofill/core/browser/BUILD.gn
+++ b/components/autofill/core/browser/BUILD.gn
@@ -113,6 +113,8 @@
     "browser_autofill_manager.cc",
     "browser_autofill_manager.h",
     "browser_autofill_manager_test_delegate.h",
+    "contact_info_sync_util.cc",
+    "contact_info_sync_util.h",
     "data_model/address.cc",
     "data_model/address.h",
     "data_model/autofill_data_model.cc",
@@ -814,6 +816,7 @@
     "autofill_suggestion_generator_unittest.cc",
     "autofill_type_unittest.cc",
     "browser_autofill_manager_unittest.cc",
+    "contact_info_sync_util_unittest.cc",
     "data_model/address_unittest.cc",
     "data_model/autofill_data_model_unittest.cc",
     "data_model/autofill_profile_comparator_unittest.cc",
diff --git a/components/autofill/core/browser/autofill_experiments.cc b/components/autofill/core/browser/autofill_experiments.cc
index b2d63fe..e9ae5a1 100644
--- a/components/autofill/core/browser/autofill_experiments.cc
+++ b/components/autofill/core/browser/autofill_experiments.cc
@@ -116,6 +116,8 @@
     return false;
   }
 
+  // TODO(crbug.com/1156584): This should simply check SyncService::
+  // GetTransportState() is PAUSED.
   if (sync_service->GetAuthError().IsPersistentError()) {
     autofill_metrics::LogCardUploadEnabledMetric(
         autofill_metrics::CardUploadEnabled::kSyncServicePersistentAuthError,
diff --git a/components/autofill/core/browser/autofill_profile_sync_util.cc b/components/autofill/core/browser/autofill_profile_sync_util.cc
index 27e6412c..0a422d10 100644
--- a/components/autofill/core/browser/autofill_profile_sync_util.cc
+++ b/components/autofill/core/browser/autofill_profile_sync_util.cc
@@ -87,6 +87,13 @@
   // Validity of the guid is guaranteed by the database layer.
   DCHECK(base::IsValidGUID(entry.guid()));
 
+  // Profiles fall into two categories, kLocal and kAccount. kLocal profiles are
+  // synced through the AutofillProfileSyncBridge, while kAccount profiles are
+  // synced through the ContactInfoSyncBridge. Make sure that syncing a profile
+  // through the wrong sync bridge fails early.
+  if (entry.source() != AutofillProfile::Source::kLocal)
+    return nullptr;
+
   auto entity_data = std::make_unique<EntityData>();
   entity_data->name = entry.guid();
   AutofillProfileSpecifics* specifics =
@@ -249,8 +256,8 @@
   if (!IsAutofillProfileSpecificsValid(specifics)) {
     return nullptr;
   }
-  std::unique_ptr<AutofillProfile> profile =
-      std::make_unique<AutofillProfile>(specifics.guid(), specifics.origin());
+  std::unique_ptr<AutofillProfile> profile = std::make_unique<AutofillProfile>(
+      specifics.guid(), specifics.origin(), AutofillProfile::Source::kLocal);
 
   // Set info that has a default value (and does not distinguish whether it is
   // set or not).
diff --git a/components/autofill/core/browser/autofill_profile_sync_util.h b/components/autofill/core/browser/autofill_profile_sync_util.h
index c791eed5..f3d1351 100644
--- a/components/autofill/core/browser/autofill_profile_sync_util.h
+++ b/components/autofill/core/browser/autofill_profile_sync_util.h
@@ -20,9 +20,10 @@
 
 class AutofillProfile;
 
-// Converts the given |entry| into a syncer EntityData with equivalent
-// autofill profile specifics. Returns nullptr if |entry| is invalid.
+// Converts the given `entry` into a syncer EntityData with equivalent
+// autofill profile specifics. Returns nullptr if `entry` is invalid.
 // Shortens all string fields to AutofillTable::kMaxDataLength.
+// Only applicable for profiles with source `kLocal`.
 std::unique_ptr<syncer::EntityData> CreateEntityDataFromAutofillProfile(
     const AutofillProfile& entry);
 
diff --git a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
index 8afa9ab5..68cec21f 100644
--- a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
+++ b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
@@ -38,7 +38,8 @@
 // Returns a profile with all fields set.  Contains identical data to the data
 // returned from ConstructCompleteSpecifics().
 AutofillProfile ConstructCompleteProfile() {
-  AutofillProfile profile(kGuid, "https://www.example.com/");
+  AutofillProfile profile(kGuid, "https://www.example.com/",
+                          AutofillProfile::Source::kLocal);
 
   profile.set_use_count(7);
   profile.set_use_date(base::Time::FromTimeT(1423182152));
diff --git a/components/autofill/core/browser/contact_info_sync_util.cc b/components/autofill/core/browser/contact_info_sync_util.cc
new file mode 100644
index 0000000..97c8a7b
--- /dev/null
+++ b/components/autofill/core/browser/contact_info_sync_util.cc
@@ -0,0 +1,251 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/autofill/core/browser/contact_info_sync_util.h"
+
+#include "base/guid.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
+#include "components/autofill/core/browser/field_types.h"
+
+namespace autofill {
+
+namespace {
+
+using structured_address::VerificationStatus;
+using sync_pb::ContactInfoSpecifics;
+
+// Converts the verification status representation used in AutofillProfile to
+// the one used in ContactInfoSpeicifics.
+ContactInfoSpecifics::VerificationStatus
+ConvertProfileToSpecificsVerificationStatus(VerificationStatus status) {
+  switch (status) {
+    case VerificationStatus::kNoStatus:
+      return ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED;
+    case VerificationStatus::kParsed:
+      return ContactInfoSpecifics::PARSED;
+    case VerificationStatus::kFormatted:
+      return ContactInfoSpecifics::FORMATTED;
+    case VerificationStatus::kObserved:
+      return ContactInfoSpecifics::OBSERVED;
+    case VerificationStatus::kUserVerified:
+      return ContactInfoSpecifics::USER_VERIFIED;
+    case VerificationStatus::kServerParsed:
+      return ContactInfoSpecifics::SERVER_PARSED;
+  }
+}
+
+// Converts the verification status representation used in
+// ContactInfoSpecifics to the one used in AutofillProfile.
+VerificationStatus ConvertSpecificsToProfileVerificationStatus(
+    ContactInfoSpecifics::VerificationStatus status) {
+  switch (status) {
+    case ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED:
+      return VerificationStatus::kNoStatus;
+    case ContactInfoSpecifics::PARSED:
+      return VerificationStatus::kParsed;
+    case ContactInfoSpecifics::FORMATTED:
+      return VerificationStatus::kFormatted;
+    case ContactInfoSpecifics::OBSERVED:
+      return VerificationStatus::kObserved;
+    case ContactInfoSpecifics::USER_VERIFIED:
+      return VerificationStatus::kUserVerified;
+    case ContactInfoSpecifics::SERVER_PARSED:
+      return VerificationStatus::kServerParsed;
+  }
+}
+
+// Helper class to simplify setting the value and metadata of
+// ContactInfoSpecifics String- and IntegerTokens from an AutofillProfile.
+class EntryDataSetter {
+ public:
+  explicit EntryDataSetter(const AutofillProfile& profile)
+      : profile_(profile) {}
+
+  void Set(ContactInfoSpecifics::StringToken* token,
+           ServerFieldType type) const {
+    token->set_value(base::UTF16ToUTF8(profile_.GetRawInfo(type)));
+    SetMetadata(token->mutable_metadata(), type);
+  }
+
+  void Set(ContactInfoSpecifics::IntegerToken* token,
+           ServerFieldType type) const {
+    token->set_value(profile_.GetRawInfoAsInt(type));
+    SetMetadata(token->mutable_metadata(), type);
+  }
+
+ private:
+  void SetMetadata(ContactInfoSpecifics::TokenMetadata* metadata,
+                   ServerFieldType type) const {
+    metadata->set_status(ConvertProfileToSpecificsVerificationStatus(
+        profile_.GetVerificationStatus(type)));
+  }
+
+  const AutofillProfile& profile_;
+};
+
+// Helper class to set the info and verification status of an AutofillProfile
+// from ContactInfoSpecifics String- and Integer tokens.
+class ProfileSetter {
+ public:
+  explicit ProfileSetter(AutofillProfile& profile) : profile_(profile) {}
+
+  void Set(const ContactInfoSpecifics::StringToken& token,
+           ServerFieldType type) {
+    profile_.SetRawInfoWithVerificationStatus(
+        type, base::UTF8ToUTF16(token.value()),
+        ConvertSpecificsToProfileVerificationStatus(token.metadata().status()));
+  }
+
+  void Set(const ContactInfoSpecifics::IntegerToken& token,
+           ServerFieldType type) {
+    profile_.SetRawInfoAsIntWithVerificationStatus(
+        type, token.value(),
+        ConvertSpecificsToProfileVerificationStatus(token.metadata().status()));
+  }
+
+ private:
+  AutofillProfile& profile_;
+};
+
+}  // namespace
+
+std::unique_ptr<syncer::EntityData>
+CreateContactInfoEntityDataFromAutofillProfile(const AutofillProfile& profile) {
+  // Profiles fall into two categories, kLocal and kAccount. kLocal profiles are
+  // synced through the AutofillProfileSyncBridge, while kAccount profiles are
+  // synced through the ContactInfoSyncBridge. Make sure that syncing a profile
+  // through the wrong sync bridge fails early.
+  if (!base::IsValidGUID(profile.guid()) ||
+      profile.source() != AutofillProfile::Source::kAccount) {
+    return nullptr;
+  }
+
+  auto entity_data = std::make_unique<syncer::EntityData>();
+  entity_data->name = profile.guid();
+
+  ContactInfoSpecifics* specifics =
+      entity_data->specifics.mutable_contact_info();
+
+  specifics->set_guid(profile.guid());
+  specifics->set_use_count(profile.use_count());
+  specifics->set_use_date_windows_epoch_micros(profile.use_date().ToTimeT());
+  specifics->set_date_modified_windows_epoch_micros(
+      profile.modification_date().ToTimeT());
+  specifics->set_language_code(profile.language_code());
+  specifics->set_profile_label(profile.profile_label());
+
+  EntryDataSetter s(profile);
+  // Set name-related values and statuses.
+  s.Set(specifics->mutable_name_honorific(), NAME_HONORIFIC_PREFIX);
+  s.Set(specifics->mutable_name_first(), NAME_FIRST);
+  s.Set(specifics->mutable_name_middle(), NAME_MIDDLE);
+  s.Set(specifics->mutable_name_last(), NAME_LAST);
+  s.Set(specifics->mutable_name_last_first(), NAME_LAST_FIRST);
+  s.Set(specifics->mutable_name_last_conjunction(), NAME_LAST_CONJUNCTION);
+  s.Set(specifics->mutable_name_last_second(), NAME_LAST_SECOND);
+  s.Set(specifics->mutable_name_full(), NAME_FULL);
+  s.Set(specifics->mutable_name_full_with_honorific(),
+        NAME_FULL_WITH_HONORIFIC_PREFIX);
+
+  // Set address-related values and statuses.
+  s.Set(specifics->mutable_address_city(), ADDRESS_HOME_CITY);
+  s.Set(specifics->mutable_address_state(), ADDRESS_HOME_STATE);
+  s.Set(specifics->mutable_address_zip(), ADDRESS_HOME_ZIP);
+  s.Set(specifics->mutable_address_country(), ADDRESS_HOME_COUNTRY);
+  s.Set(specifics->mutable_address_street_address(),
+        ADDRESS_HOME_STREET_ADDRESS);
+  s.Set(specifics->mutable_address_sorting_code(), ADDRESS_HOME_SORTING_CODE);
+  s.Set(specifics->mutable_address_dependent_locality(),
+        ADDRESS_HOME_DEPENDENT_LOCALITY);
+  s.Set(specifics->mutable_address_thoroughfare_name(),
+        ADDRESS_HOME_STREET_NAME);
+  s.Set(specifics->mutable_address_thoroughfare_number(),
+        ADDRESS_HOME_HOUSE_NUMBER);
+  s.Set(specifics->mutable_address_dependent_thoroughfare_name(),
+        ADDRESS_HOME_DEPENDENT_STREET_NAME);
+  s.Set(
+      specifics->mutable_address_thoroughfare_and_dependent_thoroughfare_name(),
+      ADDRESS_HOME_STREET_AND_DEPENDENT_STREET_NAME);
+  s.Set(specifics->mutable_address_premise_name(), ADDRESS_HOME_PREMISE_NAME);
+  s.Set(specifics->mutable_address_subpremise_name(), ADDRESS_HOME_SUBPREMISE);
+  s.Set(specifics->mutable_address_apt_num(), ADDRESS_HOME_APT_NUM);
+  s.Set(specifics->mutable_address_floor(), ADDRESS_HOME_FLOOR);
+
+  // Set email, phone and company values and statuses.
+  s.Set(specifics->mutable_email_address(), EMAIL_ADDRESS);
+  s.Set(specifics->mutable_company_name(), COMPANY_NAME);
+  s.Set(specifics->mutable_phone_home_whole_number(), PHONE_HOME_WHOLE_NUMBER);
+
+  // Set birthdate-related values and statuses.
+  s.Set(specifics->mutable_birthdate_day(), BIRTHDATE_DAY);
+  s.Set(specifics->mutable_birthdate_month(), BIRTHDATE_MONTH);
+  s.Set(specifics->mutable_birthdate_year(), BIRTHDATE_4_DIGIT_YEAR);
+
+  return entity_data;
+}
+
+std::unique_ptr<AutofillProfile> CreateAutofillProfileFromContactInfoSpecifics(
+    const ContactInfoSpecifics& specifics) {
+  if (!base::IsValidGUID(specifics.guid()))
+    return nullptr;
+
+  std::unique_ptr<AutofillProfile> profile = std::make_unique<AutofillProfile>(
+      specifics.guid(), /*origin=*/"", AutofillProfile::Source::kAccount);
+
+  profile->set_use_count(specifics.use_count());
+  profile->set_use_date(
+      base::Time::FromTimeT(specifics.use_date_windows_epoch_micros()));
+  profile->set_modification_date(
+      base::Time::FromTimeT(specifics.date_modified_windows_epoch_micros()));
+  profile->set_language_code(specifics.language_code());
+  profile->set_profile_label(specifics.profile_label());
+
+  ProfileSetter s(*profile);
+  // Set name-related values and statuses.
+  s.Set(specifics.name_honorific(), NAME_HONORIFIC_PREFIX);
+  s.Set(specifics.name_first(), NAME_FIRST);
+  s.Set(specifics.name_middle(), NAME_MIDDLE);
+  s.Set(specifics.name_last(), NAME_LAST);
+  s.Set(specifics.name_last_first(), NAME_LAST_FIRST);
+  s.Set(specifics.name_last_conjunction(), NAME_LAST_CONJUNCTION);
+  s.Set(specifics.name_last_second(), NAME_LAST_SECOND);
+  s.Set(specifics.name_full(), NAME_FULL);
+  s.Set(specifics.name_full_with_honorific(), NAME_FULL_WITH_HONORIFIC_PREFIX);
+
+  // Set address-related values and statuses.
+  s.Set(specifics.address_city(), ADDRESS_HOME_CITY);
+  s.Set(specifics.address_state(), ADDRESS_HOME_STATE);
+  s.Set(specifics.address_zip(), ADDRESS_HOME_ZIP);
+  s.Set(specifics.address_country(), ADDRESS_HOME_COUNTRY);
+  s.Set(specifics.address_street_address(), ADDRESS_HOME_STREET_ADDRESS);
+  s.Set(specifics.address_sorting_code(), ADDRESS_HOME_SORTING_CODE);
+  s.Set(specifics.address_dependent_locality(),
+        ADDRESS_HOME_DEPENDENT_LOCALITY);
+  s.Set(specifics.address_thoroughfare_name(), ADDRESS_HOME_STREET_NAME);
+  s.Set(specifics.address_thoroughfare_number(), ADDRESS_HOME_HOUSE_NUMBER);
+  s.Set(specifics.address_dependent_thoroughfare_name(),
+        ADDRESS_HOME_DEPENDENT_STREET_NAME);
+  s.Set(specifics.address_thoroughfare_and_dependent_thoroughfare_name(),
+        ADDRESS_HOME_STREET_AND_DEPENDENT_STREET_NAME);
+  s.Set(specifics.address_premise_name(), ADDRESS_HOME_PREMISE_NAME);
+  s.Set(specifics.address_subpremise_name(), ADDRESS_HOME_SUBPREMISE);
+  s.Set(specifics.address_apt_num(), ADDRESS_HOME_APT_NUM);
+  s.Set(specifics.address_floor(), ADDRESS_HOME_FLOOR);
+
+  // Set email, phone and company values and statuses.
+  s.Set(specifics.email_address(), EMAIL_ADDRESS);
+  s.Set(specifics.company_name(), COMPANY_NAME);
+  s.Set(specifics.phone_home_whole_number(), PHONE_HOME_WHOLE_NUMBER);
+
+  // Set birthdate-related values and statuses.
+  s.Set(specifics.birthdate_day(), BIRTHDATE_DAY);
+  s.Set(specifics.birthdate_month(), BIRTHDATE_MONTH);
+  s.Set(specifics.birthdate_year(), BIRTHDATE_4_DIGIT_YEAR);
+
+  profile->FinalizeAfterImport();
+  return profile;
+}
+
+}  // namespace autofill
diff --git a/components/autofill/core/browser/contact_info_sync_util.h b/components/autofill/core/browser/contact_info_sync_util.h
new file mode 100644
index 0000000..eb40c42
--- /dev/null
+++ b/components/autofill/core/browser/contact_info_sync_util.h
@@ -0,0 +1,29 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_CONTACT_INFO_SYNC_UTIL_H_
+#define COMPONENTS_AUTOFILL_CORE_BROWSER_CONTACT_INFO_SYNC_UTIL_H_
+
+#include <memory>
+
+#include "components/autofill/core/browser/data_model/autofill_profile.h"
+#include "components/sync/protocol/contact_info_specifics.pb.h"
+#include "components/sync/protocol/entity_data.h"
+
+namespace autofill {
+
+// Converts the given `profile` into a syncer EntityData with equivalent
+// contact_info specifics.
+// Only applicable for profiles with source `kAccount`.
+std::unique_ptr<syncer::EntityData>
+CreateContactInfoEntityDataFromAutofillProfile(const AutofillProfile& profile);
+
+// Converts the given contact info `specifics` into an equivalent
+// AutofillProfile.
+std::unique_ptr<AutofillProfile> CreateAutofillProfileFromContactInfoSpecifics(
+    const sync_pb::ContactInfoSpecifics& specifics);
+
+}  // namespace autofill
+
+#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_PROFILE_SYNC_UTIL_H_
diff --git a/components/autofill/core/browser/contact_info_sync_util_unittest.cc b/components/autofill/core/browser/contact_info_sync_util_unittest.cc
new file mode 100644
index 0000000..dcd5127
--- /dev/null
+++ b/components/autofill/core/browser/contact_info_sync_util_unittest.cc
@@ -0,0 +1,261 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/autofill/core/browser/contact_info_sync_util.h"
+
+#include "base/test/scoped_feature_list.h"
+#include "components/autofill/core/browser/field_types.h"
+#include "components/autofill/core/common/autofill_features.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace autofill {
+
+namespace {
+
+using structured_address::VerificationStatus;
+using sync_pb::ContactInfoSpecifics;
+
+const char kGuid[] = "00000000-0000-0000-0000-000000000001";
+const char kInvalidGuid[] = "1234";
+const auto kUseDate = base::Time::FromDoubleT(123);
+const auto kModificationDate = base::Time::FromDoubleT(456);
+
+// Returns a profile with all fields set. Contains identical data to the data
+// returned from `ConstructCompleteSpecifics()`.
+AutofillProfile ConstructCompleteProfile() {
+  AutofillProfile profile(kGuid, /*origin=*/"",
+                          AutofillProfile::Source::kAccount);
+
+  profile.set_use_count(123);
+  profile.set_use_date(kUseDate);
+  profile.set_modification_date(kModificationDate);
+  profile.set_language_code("en");
+  profile.set_profile_label("profile_label");
+
+  // Set name-related values and statuses.
+  profile.SetRawInfoWithVerificationStatus(NAME_HONORIFIC_PREFIX, u"Dr.",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(NAME_FIRST, u"John",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(NAME_MIDDLE, u"K.",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(NAME_LAST, u"Doe",
+                                           VerificationStatus::kFormatted);
+  profile.SetRawInfoWithVerificationStatus(NAME_LAST_FIRST, u"D",
+                                           VerificationStatus::kParsed);
+  profile.SetRawInfoWithVerificationStatus(NAME_LAST_CONJUNCTION, u"o",
+                                           VerificationStatus::kParsed);
+  profile.SetRawInfoWithVerificationStatus(NAME_LAST_SECOND, u"e",
+                                           VerificationStatus::kParsed);
+  profile.SetRawInfoWithVerificationStatus(NAME_FULL, u"John K. Doe",
+                                           VerificationStatus::kUserVerified);
+  profile.SetRawInfoWithVerificationStatus(NAME_FULL_WITH_HONORIFIC_PREFIX,
+                                           u"Dr. John K. Doe",
+                                           VerificationStatus::kFormatted);
+
+  // Set address-related values and statuses.
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_CITY, u"Mountain View",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_STATE, u"California",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_ZIP, u"94043",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_COUNTRY, u"US",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_STREET_ADDRESS,
+                                           u"123 Fake St. Dep Premise\n"
+                                           u"Apt. 10 Floor 2",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_SORTING_CODE, u"CEDEX",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_DEPENDENT_LOCALITY,
+                                           u"Santa Clara",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(
+      ADDRESS_HOME_STREET_NAME, u"Fake St.", VerificationStatus::kFormatted);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_HOUSE_NUMBER, u"123",
+                                           VerificationStatus::kFormatted);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_DEPENDENT_STREET_NAME,
+                                           u"Dep",
+                                           VerificationStatus::kFormatted);
+  profile.SetRawInfoWithVerificationStatus(
+      ADDRESS_HOME_STREET_AND_DEPENDENT_STREET_NAME, u"Fake St. Dep",
+      VerificationStatus::kFormatted);
+  profile.SetRawInfoWithVerificationStatus(
+      ADDRESS_HOME_PREMISE_NAME, u"Premise", VerificationStatus::kFormatted);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_SUBPREMISE,
+                                           u"Apt. 10 Floor 2",
+                                           VerificationStatus::kObserved);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_APT_NUM, u"10",
+                                           VerificationStatus::kParsed);
+  profile.SetRawInfoWithVerificationStatus(ADDRESS_HOME_FLOOR, u"2",
+                                           VerificationStatus::kParsed);
+
+  // All of the following types don't store verification statuses.
+  // Set email, phone and company values.
+  profile.SetRawInfo(EMAIL_ADDRESS, u"user@example.com");
+  profile.SetRawInfo(COMPANY_NAME, u"Google, Inc.");
+  profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"1.800.555.1234");
+
+  // Set birthdate-related values.
+  profile.SetRawInfoAsInt(BIRTHDATE_DAY, 14);
+  profile.SetRawInfoAsInt(BIRTHDATE_MONTH, 3);
+  profile.SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, 1997);
+
+  return profile;
+}
+
+// Helper function to set ContactInfoSpecifics::String- and IntegerToken
+// together with their verification status.
+template <typename TokenType, typename Value>
+void SetToken(TokenType* token,
+              const Value& value,
+              ContactInfoSpecifics::VerificationStatus status) {
+  token->set_value(value);
+  token->mutable_metadata()->set_status(status);
+}
+
+// Returns ContactInfoSpecifics with all fields set. Contains identical data to
+// the profile returned from `ConstructCompleteProfile()`.
+ContactInfoSpecifics ConstructCompleteSpecifics() {
+  ContactInfoSpecifics specifics;
+
+  specifics.set_guid(kGuid);
+  specifics.set_use_count(123);
+  specifics.set_use_date_windows_epoch_micros(kUseDate.ToTimeT());
+  specifics.set_date_modified_windows_epoch_micros(kModificationDate.ToTimeT());
+  specifics.set_language_code("en");
+  specifics.set_profile_label("profile_label");
+
+  // Set name-related values and statuses.
+  SetToken(specifics.mutable_name_honorific(), "Dr.",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_name_first(), "John",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_name_middle(), "K.",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_name_last(), "Doe",
+           ContactInfoSpecifics::FORMATTED);
+  SetToken(specifics.mutable_name_last_first(), "D",
+           ContactInfoSpecifics::PARSED);
+  SetToken(specifics.mutable_name_last_conjunction(), "o",
+           ContactInfoSpecifics::PARSED);
+  SetToken(specifics.mutable_name_last_second(), "e",
+           ContactInfoSpecifics::PARSED);
+  SetToken(specifics.mutable_name_full(), "John K. Doe",
+           ContactInfoSpecifics::USER_VERIFIED);
+  SetToken(specifics.mutable_name_full_with_honorific(), "Dr. John K. Doe",
+           ContactInfoSpecifics::FORMATTED);
+
+  // Set address-related values and statuses.
+  SetToken(specifics.mutable_address_city(), "Mountain View",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_state(), "California",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_zip(), "94043",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_country(), "US",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_street_address(),
+           "123 Fake St. Dep Premise\n"
+           "Apt. 10 Floor 2",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_sorting_code(), "CEDEX",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_dependent_locality(), "Santa Clara",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_thoroughfare_name(), "Fake St.",
+           ContactInfoSpecifics::FORMATTED);
+  SetToken(specifics.mutable_address_thoroughfare_number(), "123",
+           ContactInfoSpecifics::FORMATTED);
+  SetToken(specifics.mutable_address_dependent_thoroughfare_name(), "Dep",
+           ContactInfoSpecifics::FORMATTED);
+  SetToken(
+      specifics.mutable_address_thoroughfare_and_dependent_thoroughfare_name(),
+      "Fake St. Dep", ContactInfoSpecifics::FORMATTED);
+  SetToken(specifics.mutable_address_premise_name(), "Premise",
+           ContactInfoSpecifics::FORMATTED);
+  SetToken(specifics.mutable_address_subpremise_name(), "Apt. 10 Floor 2",
+           ContactInfoSpecifics::OBSERVED);
+  SetToken(specifics.mutable_address_apt_num(), "10",
+           ContactInfoSpecifics::PARSED);
+  SetToken(specifics.mutable_address_floor(), "2",
+           ContactInfoSpecifics::PARSED);
+
+  // All of the following types don't store verification statuses in
+  // AutofillProfile. This corresponds to `VERIFICATION_STATUS_UNSPECIFIED`.
+  // Set email, phone and company values and statuses.
+  SetToken(specifics.mutable_email_address(), "user@example.com",
+           ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED);
+  SetToken(specifics.mutable_company_name(), "Google, Inc.",
+           ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED);
+  SetToken(specifics.mutable_phone_home_whole_number(), "1.800.555.1234",
+           ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED);
+
+  // Set birthdate-related values and statuses.
+  SetToken(specifics.mutable_birthdate_day(), 14,
+           ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED);
+  SetToken(specifics.mutable_birthdate_month(), 3,
+           ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED);
+  SetToken(specifics.mutable_birthdate_year(), 1997,
+           ContactInfoSpecifics::VERIFICATION_STATUS_UNSPECIFIED);
+
+  return specifics;
+}
+
+}  // namespace
+
+// Test that converting AutofillProfile -> ContactInfoSpecifics works.
+TEST(ContactInfoSyncUtilTest, CreateContactInfoEntityDataFromAutofillProfile) {
+  base::test::ScopedFeatureList honorific_prefixes_feature;
+  honorific_prefixes_feature.InitAndEnableFeature(
+      features::kAutofillEnableSupportForHonorificPrefixes);
+
+  AutofillProfile profile = ConstructCompleteProfile();
+  ContactInfoSpecifics specifics = ConstructCompleteSpecifics();
+
+  std::unique_ptr<syncer::EntityData> entity_data =
+      CreateContactInfoEntityDataFromAutofillProfile(profile);
+  ASSERT_TRUE(entity_data != nullptr);
+  EXPECT_EQ(entity_data->name, profile.guid());
+  EXPECT_EQ(specifics.SerializeAsString(),
+            entity_data->specifics.contact_info().SerializeAsString());
+}
+
+// Test that only profiles with valid GUID are converted.
+TEST(ContactInfoSyncUtilTest,
+     CreateContactInfoEntityDataFromAutofillProfile_InvalidGUID) {
+  AutofillProfile profile(kInvalidGuid, /*origin=*/"",
+                          AutofillProfile::Source::kAccount);
+  EXPECT_EQ(CreateContactInfoEntityDataFromAutofillProfile(profile), nullptr);
+}
+
+// Test that AutofillProfiles with invalid source are not converted.
+TEST(ContactInfoSyncUtilTest,
+     CreateContactInfoEntityDataFromAutofillProfile_InvalidSource) {
+  AutofillProfile profile(kGuid, /*origin=*/"",
+                          AutofillProfile::Source::kLocal);
+  EXPECT_EQ(CreateContactInfoEntityDataFromAutofillProfile(profile), nullptr);
+}
+
+// Test that converting ContactInfoSpecifics -> AutofillProfile works.
+TEST(ContactInfoSyncUtilTest, CreateAutofillProfileFromContactInfoSpecifics) {
+  ContactInfoSpecifics specifics = ConstructCompleteSpecifics();
+  AutofillProfile profile = ConstructCompleteProfile();
+
+  std::unique_ptr<AutofillProfile> converted_profile =
+      CreateAutofillProfileFromContactInfoSpecifics(specifics);
+  ASSERT_TRUE(converted_profile != nullptr);
+  EXPECT_TRUE(profile.EqualsIncludingUsageStatsForTesting(*converted_profile));
+}
+
+// Test that only specifics with valid GUID are converted.
+TEST(ContactInfoSyncUtilTest,
+     CreateAutofillProfileFromContactInfoSpecifics_InvalidGUID) {
+  ContactInfoSpecifics specifics;
+  specifics.set_guid(kInvalidGuid);
+  EXPECT_EQ(CreateAutofillProfileFromContactInfoSpecifics(specifics), nullptr);
+}
+
+}  // namespace autofill
diff --git a/components/autofill/core/browser/payments/autofill_wallet_model_type_controller.cc b/components/autofill/core/browser/payments/autofill_wallet_model_type_controller.cc
index add7d41..91f407808 100644
--- a/components/autofill/core/browser/payments/autofill_wallet_model_type_controller.cc
+++ b/components/autofill/core/browser/payments/autofill_wallet_model_type_controller.cc
@@ -82,6 +82,9 @@
 syncer::DataTypeController::PreconditionState
 AutofillWalletModelTypeController::GetPreconditionState() const {
   DCHECK(CalledOnValidThread());
+  // TODO(crbug.com/1156584): No need to handle IsPersistentError() once the
+  // feature toggle is cleaned up and sync gets paused for all persistent auth
+  // errors.
   bool preconditions_met =
       pref_service_->GetBoolean(
           autofill::prefs::kAutofillWalletImportEnabled) &&
diff --git a/components/autofill/core/common/BUILD.gn b/components/autofill/core/common/BUILD.gn
index c2d89f11..525e406 100644
--- a/components/autofill/core/common/BUILD.gn
+++ b/components/autofill/core/common/BUILD.gn
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//testing/libfuzzer/fuzzer_test.gni")
+
 static_library("common") {
   sources = [
     "aliases.h",
@@ -136,3 +138,8 @@
     "//url",
   ]
 }
+
+fuzzer_test("autofill_autocomplete_parsing_util_fuzzer") {
+  sources = [ "autocomplete_parsing_util_fuzzer.cc" ]
+  deps = [ ":common" ]
+}
diff --git a/components/autofill/core/common/autocomplete_parsing_util_fuzzer.cc b/components/autofill/core/common/autocomplete_parsing_util_fuzzer.cc
new file mode 100644
index 0000000..a48ab06
--- /dev/null
+++ b/components/autofill/core/common/autocomplete_parsing_util_fuzzer.cc
@@ -0,0 +1,25 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stdint.h>
+
+#include <string>
+#include <tuple>
+
+#include <fuzzer/FuzzedDataProvider.h>
+
+#include "components/autofill/core/common/autocomplete_parsing_util.h"
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  FuzzedDataProvider provider(data, size);
+
+  const std::string autocomplete_attribute =
+      provider.ConsumeRandomLengthString();
+  const int64_t field_max_length =
+      provider.ConsumeIntegralInRange<int64_t>(0, 100);
+  std::ignore = autofill::ParseAutocompleteAttribute(autocomplete_attribute,
+                                                     field_max_length);
+
+  return 0;
+}
diff --git a/components/autofill/ios/browser/suggestion_controller_java_script_feature.h b/components/autofill/ios/browser/suggestion_controller_java_script_feature.h
index 1fc8735..9e27267d 100644
--- a/components/autofill/ios/browser/suggestion_controller_java_script_feature.h
+++ b/components/autofill/ios/browser/suggestion_controller_java_script_feature.h
@@ -64,9 +64,6 @@
       const std::string& field_name,
       base::OnceCallback<void(bool, bool)> completion_handler);
 
-  // Closes the keyboard and defocuses the active input element in |frame|.
-  void CloseKeyboardForFrame(web::WebFrame* frame);
-
  private:
   friend class base::NoDestructor<SuggestionControllerJavaScriptFeature>;
 
diff --git a/components/autofill/ios/browser/suggestion_controller_java_script_feature.mm b/components/autofill/ios/browser/suggestion_controller_java_script_feature.mm
index 996aedb..45ed829a 100644
--- a/components/autofill/ios/browser/suggestion_controller_java_script_feature.mm
+++ b/components/autofill/ios/browser/suggestion_controller_java_script_feature.mm
@@ -135,9 +135,4 @@
       base::Seconds(kJavaScriptExecutionTimeoutInSeconds));
 }
 
-void SuggestionControllerJavaScriptFeature::CloseKeyboardForFrame(
-    web::WebFrame* frame) {
-  CallJavaScriptFunction(frame, "suggestion.blurActiveElement", {});
-}
-
 }  // namespace autofill
diff --git a/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc b/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc
index da36781..c1f51846 100644
--- a/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc
+++ b/components/cast_streaming/renderer/playback_command_forwarding_renderer.cc
@@ -138,6 +138,10 @@
   return real_renderer_->GetMediaTime();
 }
 
+media::RendererType PlaybackCommandForwardingRenderer::GetRendererType() {
+  return media::RendererType::kCastStreaming;
+}
+
 void PlaybackCommandForwardingRenderer::OnRealRendererInitializationComplete(
     media::PipelineStatus status) {
   DCHECK(init_cb_);
diff --git a/components/cast_streaming/renderer/playback_command_forwarding_renderer.h b/components/cast_streaming/renderer/playback_command_forwarding_renderer.h
index c8d521cb..dc362c3d 100644
--- a/components/cast_streaming/renderer/playback_command_forwarding_renderer.h
+++ b/components/cast_streaming/renderer/playback_command_forwarding_renderer.h
@@ -61,6 +61,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  media::RendererType GetRendererType() override;
 
  private:
   // Private namespace function not defined here because its details are not
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index c1d47e7..f481bd8 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "14.16",
-  "log_list_timestamp": "2022-11-01T12:54:04Z",
+  "version": "14.17",
+  "log_list_timestamp": "2022-11-02T12:54:14Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/constrained_window/constrained_window_views.cc b/components/constrained_window/constrained_window_views.cc
index e41f4b4..aa0bbc8 100644
--- a/components/constrained_window/constrained_window_views.cc
+++ b/components/constrained_window/constrained_window_views.cc
@@ -24,7 +24,7 @@
 #include "ui/views/window/dialog_delegate.h"
 #include "url/gurl.h"
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"
 #endif
 
@@ -120,7 +120,7 @@
                  widget->non_client_view()->frame_view()->GetInsets().top());
 
   const bool supports_global_screen_coordinates =
-#if !defined(USE_OZONE)
+#if !BUILDFLAG(IS_OZONE)
       true;
 #else
       ui::OzonePlatform::GetInstance()
diff --git a/components/dbus/menu/menu_property_list.cc b/components/dbus/menu/menu_property_list.cc
index 9d2b385..41b2dc9c 100644
--- a/components/dbus/menu/menu_property_list.cc
+++ b/components/dbus/menu/menu_property_list.cc
@@ -17,7 +17,7 @@
 #include "ui/base/models/menu_model.h"
 #include "ui/gfx/image/image.h"
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"       // nogncheck
 #include "ui/ozone/public/platform_menu_utils.h"  // nogncheck
 #endif
@@ -25,7 +25,7 @@
 namespace {
 
 std::string ToDBusKeySym(ui::KeyboardCode code) {
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   if (const auto* const platorm_menu_utils =
           ui::OzonePlatform::GetInstance()->GetPlatformMenuUtils()) {
     return platorm_menu_utils->ToDBusKeySym(code);
diff --git a/components/exo/wayland/README.md b/components/exo/wayland/README.md
new file mode 100644
index 0000000..1c2af69
--- /dev/null
+++ b/components/exo/wayland/README.md
@@ -0,0 +1,39 @@
+This directory contains exo-specific extensions to the Wayland protocol.
+
+To begin with, we recommend this
+[link](https://wayland-book.com/xdg-shell-basics/xdg-surface.html) for more
+about wayland basics. The short summary is that:
+* wl_surface is the compositing window primitive. It is capable of receiving a
+  series of buffers representing contents. It only provides basic functionality.
+  Other functionality like pip/decorations are implemented through extensions.
+* It is possible to extend a wl_surface as xdg_surface via
+  xdg_wm_base.get_surface. This extension is not permanent: it is possible to
+  destroy and/or recreate the xdg_surface.
+* Once an xdg_surface is created, it can be assigned a role: xdg_toplevel or
+  xdg_popup.
+* exo has extensions for each of these primitives that implement aura shell
+  (ash) specific functionalities:
+  * wl_surface is extended by zaura_surface
+  * xdg_toplevel is extended by zaura_toplevel
+  * xdg_popup is extended by zaura_popup
+
+The wayland protocol is used to communicate between ash-chrome
+(exo/wayland-server) and wayland clients. The lacros-chrome client is version
+skewed from ash-chrome. As such, the protocol itself must be a stable API
+surface. This has one main implication:
+* It is not safe to remove any methods. This includes reverts of CLs that add
+  methods.
+
+This implication means we need to minimize risk of needing to revert CLs that
+add methods. We thus add the following guidance:
+* When adding a new interface method, create the exo (server) implementation
+  first.
+* In a separate CL, follow up with the client changes that use the interface
+  method.
+Thus, in the event that usage of the new interface causes bugs, the client-side
+change can be reverted without modifying the API surface itself.
+
+Note that the following directories contain exo-specific extensions:
+following directories contains exo-specific extensions
+ * components/exo/wayland/protocol
+ * third_party/wayland-protocols/unstable
diff --git a/components/exo/wayland/protocol/README.md b/components/exo/wayland/protocol/README.md
deleted file mode 100644
index 5c32847..0000000
--- a/components/exo/wayland/protocol/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-This directory contains exo-specific extensions to the Wayland protocol.
-
-To begin with, we recommend this
-[link](https://wayland-book.com/xdg-shell-basics/xdg-surface.html) for more
-about wayland basics. The short summary is that:
-* wl_surface is the compositing window primitive. It is capable of receiving a
-  series of buffers representing contents. It only provides basic functionality.
-  Other functionality like pip/decorations are implemented through extensions.
-* It is possible to extend a wl_surface as xdg_surface via
-  xdg_wm_base.get_surface. This extension is not permanent: it is possible to
-  destroy and/or recreate the xdg_surface.
-* Once an xdg_surface is created, it can be assigned a role: xdg_toplevel or
-  xdg_popup.
-* exo has extensions for each of these primitives that implement aura shell
-  (ash) specific functionalities:
-  * wl_surface is extended by zaura_surface
-  * xdg_toplevel is extended by zaura_toplevel
-  * xdg_popup is extended by zaura_popup
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc
index eb77f28..7d9cfad5 100644
--- a/components/exo/wayland/server.cc
+++ b/components/exo/wayland/server.cc
@@ -55,6 +55,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/system/sys_info.h"
 #include "base/task/thread_pool.h"
+#include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "components/exo/display.h"
 #include "components/exo/security_delegate.h"
@@ -132,7 +133,7 @@
     FILE_PATH_LITERAL("wayland");
 
 bool IsDrmAtomicAvailable() {
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   auto& host_properties =
       ui::OzonePlatform::GetInstance()->GetPlatformRuntimeProperties();
   return host_properties.supports_overlays;
diff --git a/components/lens/lens_features.cc b/components/lens/lens_features.cc
index d0b7c61..e80127fd 100644
--- a/components/lens/lens_features.cc
+++ b/components/lens/lens_features.cc
@@ -50,6 +50,10 @@
              "LensRegionSearchStaticPage",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kLensImageFormatOptimizations,
+             "LensImageFormatOptimizations",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 const base::FeatureParam<bool> kEnableUKMLoggingForRegionSearch{
     &kLensStandalone, "region-search-enable-ukm-logging", true};
 
@@ -99,6 +103,15 @@
 const base::FeatureParam<bool> kUseAltChipString{
     &kLensInstructionChipImprovements, "use-alt-chip-string", false};
 
+const base::FeatureParam<bool> kUseWebpInRegionSearch{
+    &kLensImageFormatOptimizations, "use-webp-region-search", true};
+
+const base::FeatureParam<bool> kUseJpegInRegionSearch{
+    &kLensImageFormatOptimizations, "use-jpeg-region-search", false};
+
+const base::FeatureParam<int> kEncodingQualityRegionSearch{
+    &kLensImageFormatOptimizations, "encoding-quality-region-search", 90};
+
 bool GetEnableLatencyLogging() {
   return base::FeatureList::IsEnabled(kEnableLatencyLogging) &&
          base::FeatureList::IsEnabled(kLensStandalone);
@@ -214,5 +227,19 @@
   return base::FeatureList::IsEnabled(kLensRegionSearchStaticPage);
 }
 
+bool IsWebpForRegionSearchEnabled() {
+  return base::FeatureList::IsEnabled(kLensImageFormatOptimizations) &&
+         kUseWebpInRegionSearch.Get();
+}
+
+bool IsJpegForRegionSearchEnabled() {
+  return base::FeatureList::IsEnabled(kLensImageFormatOptimizations) &&
+         kUseJpegInRegionSearch.Get();
+}
+
+int GetRegionSearchEncodingQuality() {
+  return kEncodingQualityRegionSearch.Get();
+}
+
 }  // namespace features
 }  // namespace lens
diff --git a/components/lens/lens_features.h b/components/lens/lens_features.h
index 2198708..52a1304 100644
--- a/components/lens/lens_features.h
+++ b/components/lens/lens_features.h
@@ -47,6 +47,9 @@
 // Enables launching the region search experience in a new tab with WebUI.
 BASE_DECLARE_FEATURE(kLensRegionSearchStaticPage);
 
+// Enables using more optimized image formats for Lens requests.
+BASE_DECLARE_FEATURE(kLensImageFormatOptimizations);
+
 // Enables using `Google` as the visual search provider instead of `Google
 // Lens`.
 extern const base::FeatureParam<bool> kUseGoogleAsVisualSearchProvider;
@@ -93,6 +96,18 @@
 // Enables the use of an alternative string for the instruction chip.
 extern const base::FeatureParam<bool> kUseAltChipString;
 
+// Enables encoding to WebP for region search queries. This param takes
+// precedence over kUseJpegInRegionSearch.
+extern const base::FeatureParam<bool> kUseWebpInRegionSearch;
+
+// Enables encoding to JPEG for region search queries. This param does
+// nothing if kUseWebpInRegionSearch is enabled.
+extern const base::FeatureParam<bool> kUseJpegInRegionSearch;
+
+// Value in range 0-100 that dictates the encoding quality for region search
+// lossy formats, with 100 being the best quality.
+extern const base::FeatureParam<int> kEncodingQualityRegionSearch;
+
 // Enables Latency logging for the LensStandalone feature.
 extern bool GetEnableLatencyLogging();
 
@@ -174,6 +189,15 @@
 
 // Returns whether we should use a WebUI static page for region search.
 extern bool IsLensRegionSearchStaticPageEnabled();
+
+// Returns whether to use WebP encoding for region search queries.
+extern bool IsWebpForRegionSearchEnabled();
+
+// Returns whether to use JPEG encoding for region search queries.
+extern bool IsJpegForRegionSearchEnabled();
+
+// Get the encoding quality for region search queries.
+extern int GetRegionSearchEncodingQuality();
 }  // namespace features
 }  // namespace lens
 
diff --git a/components/metrics/motherboard.cc b/components/metrics/motherboard.cc
index 06218bc7..c5bcaa68 100644
--- a/components/metrics/motherboard.cc
+++ b/components/metrics/motherboard.cc
@@ -14,6 +14,9 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 #if BUILDFLAG(IS_WIN)
+#include <windows.h>
+
+#include "base/scoped_native_library.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/scoped_blocking_call.h"
 #include "base/win/scoped_bstr.h"
@@ -138,6 +141,31 @@
   *bios_version = ReadStringMember(class_object, kVersion);
 }
 
+void ReadFirmwareType(absl::optional<Motherboard::BiosType>* bios_type) {
+  // NOTE: GetFirmwareType API only exists on >= Win8.  Dynamically
+  //       get function handle.
+  using GetFirmwareTypeFunction = decltype(&GetFirmwareType);
+  base::ScopedNativeLibrary dll(base::FilePath(L"kernel32.dll"));
+  if (!dll.is_valid())
+    return;
+  GetFirmwareTypeFunction get_firmware_type_function =
+      reinterpret_cast<GetFirmwareTypeFunction>(
+          dll.GetFunctionPointer("GetFirmwareType"));
+  if (!get_firmware_type_function)
+    return;
+
+  FIRMWARE_TYPE firmware_type = FirmwareTypeUnknown;
+  if (get_firmware_type_function(&firmware_type)) {
+    if (firmware_type == FirmwareTypeBios) {
+      *bios_type = Motherboard::BiosType::kLegacy;
+    } else if (firmware_type == FirmwareTypeUefi) {
+      *bios_type = Motherboard::BiosType::kUefi;
+    } else {
+      *bios_type = absl::nullopt;
+    }
+  }
+}
+
 MotherboardDetails ReadMotherboardDetails() {
   base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
                                                 base::BlockingType::MAY_BLOCK);
@@ -147,6 +175,7 @@
     return details;
   ReadWin32BaseBoard(services, &details.manufacturer, &details.model);
   ReadWin32Bios(services, &details.bios_manufacturer, &details.bios_version);
+  ReadFirmwareType(&details.bios_type);
   return details;
 }
 #endif
diff --git a/components/page_info_strings.grdp b/components/page_info_strings.grdp
index b25ec98a..d8c929f 100644
--- a/components/page_info_strings.grdp
+++ b/components/page_info_strings.grdp
@@ -749,7 +749,7 @@
     See related sites
   </message>
   <message name="IDS_PAGE_INFO_FPS_BUTTON_SUBTITLE" desc="The subtitle of first-party sets button in cookies subpage with placeholder for name of the owner of this set.">
-    This site is in a group, defined by <ph name="SET_OWNER">$1<ex>gannett.com</ex></ph>,  that can see your activity
+    This site is in a group, defined by <ph name="SET_OWNER">$1<ex>gannett.com</ex></ph>, that can see your activity
   </message>
 
   <!-- History strings -->
diff --git a/components/paint_preview/features/features.cc b/components/paint_preview/features/features.cc
index 0f9f877c..c996987 100644
--- a/components/paint_preview/features/features.cc
+++ b/components/paint_preview/features/features.cc
@@ -12,8 +12,4 @@
              "PaintPreviewDemo",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
-BASE_FEATURE(kPaintPreviewShowOnStartup,
-             "PaintPreviewShowOnStartup",
-             base::FEATURE_ENABLED_BY_DEFAULT);
-
 }  // namespace paint_preview
diff --git a/components/paint_preview/features/features.h b/components/paint_preview/features/features.h
index 01809ac..5a039d5 100644
--- a/components/paint_preview/features/features.h
+++ b/components/paint_preview/features/features.h
@@ -17,13 +17,6 @@
 // capturing and playing paint preview works on a specific site.
 BASE_DECLARE_FEATURE(kPaintPreviewDemo);
 
-// Used to enable the paint preview capture and show on startup for Android. If
-// enabled, paint previews for each tab are captured when a tab is hidden and
-// are deleted when a tab is closed. When a tab with a captured paint perview
-// is shown at startup and there is no cached page we will show the paint
-// preview.
-BASE_DECLARE_FEATURE(kPaintPreviewShowOnStartup);
-
 }  // namespace paint_preview
 
 #endif  // COMPONENTS_PAINT_PREVIEW_FEATURES_FEATURES_H_
diff --git a/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc b/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc
index 6b55220..2ee8a65 100644
--- a/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc
+++ b/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc
@@ -133,18 +133,18 @@
 }
 
 TEST_F(PasswordFeatureManagerImplTest,
-       GenerationEnabledDespiteSyncAuthErrorOtherThanWebSignout) {
+       GenerationDisabledIfSyncAuthErrorOtherThanWebSignout) {
   sync_service_.SetAccountInfo(account_);
   sync_service_.SetHasSyncConsent(true);
   sync_service_.SetDisableReasons({});
   sync_service_.SetPersistentAuthErrorOtherThanWebSignout();
 
-  ASSERT_NE(sync_service_.GetTransportState(),
+  ASSERT_EQ(sync_service_.GetTransportState(),
             syncer::SyncService::TransportState::PAUSED);
   ASSERT_EQ(password_manager_util::GetPasswordSyncState(&sync_service_),
-            password_manager::SyncState::kSyncingNormalEncryption);
+            password_manager::SyncState::kNotSyncing);
 
-  EXPECT_TRUE(password_feature_manager_.IsGenerationEnabled());
+  EXPECT_FALSE(password_feature_manager_.IsGenerationEnabled());
 }
 
 TEST_F(PasswordFeatureManagerImplTest,
diff --git a/components/password_manager/core/browser/password_sync_util_unittest.cc b/components/password_manager/core/browser/password_sync_util_unittest.cc
index 609bdb1..8deba925 100644
--- a/components/password_manager/core/browser/password_sync_util_unittest.cc
+++ b/components/password_manager/core/browser/password_sync_util_unittest.cc
@@ -183,13 +183,12 @@
   syncer::TestSyncService sync_service;
   sync_service.SetHasSyncConsent(true);
   sync_service.SetPersistentAuthErrorOtherThanWebSignout();
-  ASSERT_NE(sync_service.GetTransportState(),
+  // Just like web signout, other persistent auth errors cause Sync to become
+  // inactive. So the behavior is identical to the web signout case.
+  ASSERT_EQ(sync_service.GetTransportState(),
             syncer::SyncService::TransportState::PAUSED);
   EXPECT_TRUE(IsPasswordSyncEnabled(&sync_service));
-  // As opposed to web signout, other persistent auth errors don't cause Sync to
-  // become inactive.
-  // TODO(crbug.com/1156584): Unify the behavior for all persistent auth errors.
-  EXPECT_TRUE(IsPasswordSyncActive(&sync_service));
+  EXPECT_FALSE(IsPasswordSyncActive(&sync_service));
   EXPECT_NE(absl::nullopt, GetSyncingAccount(&sync_service));
 }
 
diff --git a/components/password_manager/core/browser/ui/password_grouping_util.cc b/components/password_manager/core/browser/ui/password_grouping_util.cc
index 76f6a45c..4d86bca 100644
--- a/components/password_manager/core/browser/ui/password_grouping_util.cc
+++ b/components/password_manager/core/browser/ui/password_grouping_util.cc
@@ -27,16 +27,18 @@
 PasswordGroupingInfo& PasswordGroupingInfo::operator=(
     PasswordGroupingInfo&& other) = default;
 
-FacetBrandingInfo CreateBrandingInfoFromFacetURI(const FacetURI& facet_uri) {
+FacetBrandingInfo CreateBrandingInfoFromFacetURI(
+    const CredentialUIEntry& credential) {
   FacetBrandingInfo branding_info;
-  if (facet_uri.IsValidAndroidFacetURI()) {
+  if (IsValidAndroidFacetURI(credential.GetFirstSignonRealm())) {
+    FacetURI facet_uri =
+        FacetURI::FromPotentiallyInvalidSpec(credential.GetFirstSignonRealm());
     branding_info.name = SplitByDotAndReverse(facet_uri.android_package_name());
 
     // TODO(crbug.com/1355956): Handle Android App icon URL.
     return branding_info;
   }
-  branding_info.name =
-      GetShownOrigin(url::Origin::Create(GURL(facet_uri.canonical_spec())));
+  branding_info.name = GetShownOrigin(credential);
   // TODO(crbug.com/1355956): Handle default icon URL.
   return branding_info;
 }
@@ -56,7 +58,7 @@
   for (const GroupedFacets& grouped_facets : groups) {
     GroupId unique_group_id(group_id_int);
     for (const Facet& facet : grouped_facets.facets) {
-      std::string facet_uri_str = facet.uri.canonical_spec();
+      std::string facet_uri_str = facet.uri.canonical_spec() + "/";
       map_facet_to_group_id[facet_uri_str] = unique_group_id;
 
       // Keep track of facet URI (sign-on realm) that are already in a group.
@@ -75,15 +77,9 @@
   // facets.
   for (const std::string& signon_realm : signon_realms) {
     GroupId unique_group_id(group_id_int);
-    FacetURI uri(FacetURI::FromPotentiallyInvalidSpec(signon_realm));
-    if (facet_uri_in_groups.find(uri.canonical_spec()) ==
-        facet_uri_in_groups.end()) {
-      map_facet_to_group_id[uri.canonical_spec()] = unique_group_id;
-      facet_uri_in_groups.insert(uri.canonical_spec());
-
-      // Store default branding information for the affiliated group.
-      password_grouping_info.map_group_id_to_branding_info[unique_group_id] =
-          CreateBrandingInfoFromFacetURI(uri);
+    if (facet_uri_in_groups.find(signon_realm) == facet_uri_in_groups.end()) {
+      map_facet_to_group_id[signon_realm] = unique_group_id;
+      facet_uri_in_groups.insert(signon_realm);
 
       group_id_int++;
     }
@@ -123,15 +119,14 @@
     if (form.blocked_by_user)
       continue;
 
-    FacetURI uri = FacetURI::FromPotentiallyInvalidSpec(form.signon_realm);
-    GroupId group_id = map_facet_to_group_id[uri.canonical_spec()];
+    GroupId group_id = map_facet_to_group_id[form.signon_realm];
 
+    SignonRealm signon_realm(form.signon_realm);
     UsernamePasswordKey key(CreateUsernamePasswordSortKey(form));
     password_grouping_info.map_group_id_to_forms[group_id][key].push_back(
         std::move(form));
 
     // Store group id for sign-on realm.
-    SignonRealm signon_realm(uri.canonical_spec());
     password_grouping_info.map_signon_realm_to_group_id[signon_realm] =
         group_id;
   }
@@ -162,10 +157,8 @@
     // sign-on realm.
     if (affiliated_group.GetBrandingInfo().name.empty() &&
         affiliated_group.GetBrandingInfo().icon_url.is_empty()) {
-      std::string signon_realm =
-          affiliated_group.GetCredentialGroups()[0].GetFirstSignonRealm();
-      FacetURI uri(FacetURI::FromPotentiallyInvalidSpec(signon_realm));
-      affiliated_group.SetBrandingInfo(CreateBrandingInfoFromFacetURI(uri));
+      affiliated_group.SetBrandingInfo(CreateBrandingInfoFromFacetURI(
+          affiliated_group.GetCredentialGroups()[0]));
     }
     affiliated_groups.push_back(std::move(affiliated_group));
   }
diff --git a/components/password_manager/core/browser/ui/password_grouping_util_unittest.cc b/components/password_manager/core/browser/ui/password_grouping_util_unittest.cc
index 11679026..8cac2dd 100644
--- a/components/password_manager/core/browser/ui/password_grouping_util_unittest.cc
+++ b/components/password_manager/core/browser/ui/password_grouping_util_unittest.cc
@@ -18,7 +18,7 @@
 
 TEST(PasswordGroupingUtilTest, GetAffiliatedGroupsWithGroupingInfo) {
   PasswordForm form;
-  form.url = GURL("https://test.com");
+  form.url = GURL("https://test.com/");
   form.signon_realm = form.url.spec();
   form.username_value = u"username";
   form.password_value = u"password";
@@ -30,7 +30,7 @@
   blocked_form.in_store = PasswordForm::Store::kProfileStore;
 
   PasswordForm federated_form;
-  federated_form.signon_realm = "https://federated.com";
+  federated_form.signon_realm = "https://federated.com/";
   federated_form.username_value = u"example@gmail.com";
   federated_form.federation_origin =
       url::Origin::Create(GURL(u"federatedOrigin.com"));
@@ -62,7 +62,7 @@
 
 TEST(PasswordGroupingUtilTest, GroupPasswords) {
   PasswordForm form;
-  form.url = GURL("https://test.com");
+  form.url = GURL("https://test.com/");
   form.signon_realm = form.url.spec();
   form.username_value = u"username";
   form.password_value = u"password";
@@ -76,13 +76,13 @@
   form2.in_store = PasswordForm::Store::kProfileStore;
 
   PasswordForm blocked_form;
-  blocked_form.url = GURL("https://test2.com");
+  blocked_form.url = GURL("https://test2.com/");
   blocked_form.signon_realm = blocked_form.url.spec();
   blocked_form.blocked_by_user = true;
   blocked_form.in_store = PasswordForm::Store::kProfileStore;
 
   PasswordForm federated_form;
-  federated_form.signon_realm = "https://federated.com";
+  federated_form.signon_realm = "https://federated.com/";
   federated_form.username_value = u"example@gmail.com";
   federated_form.federation_origin =
       url::Origin::Create(GURL(u"federatedOrigin.com"));
@@ -146,7 +146,7 @@
 
 TEST(PasswordGroupingUtilTest, GroupPasswordsWithoutAffiliation) {
   PasswordForm form;
-  form.url = GURL("https://test.com");
+  form.url = GURL("https://test.com/");
   form.signon_realm = form.url.spec();
   form.username_value = u"username";
   form.password_value = u"password";
@@ -160,13 +160,13 @@
   form2.in_store = PasswordForm::Store::kProfileStore;
 
   PasswordForm blocked_form;
-  blocked_form.url = GURL("https://test2.com");
+  blocked_form.url = GURL("https://test2.com/");
   blocked_form.signon_realm = blocked_form.url.spec();
   blocked_form.blocked_by_user = true;
   blocked_form.in_store = PasswordForm::Store::kProfileStore;
 
   PasswordForm federated_form;
-  federated_form.signon_realm = "https://federated.com";
+  federated_form.signon_realm = "https://federated.com/";
   federated_form.username_value = u"example@gmail.com";
   federated_form.federation_origin =
       url::Origin::Create(GURL(u"federatedOrigin.com"));
@@ -211,4 +211,38 @@
   EXPECT_THAT(password_grouping_info.blocked_sites, expected_blocked_sites);
 }
 
+TEST(PasswordGroupingUtilTest, HttpCredentialsGrouped) {
+  PasswordForm form;
+  form.url = GURL("http://test.com/");
+  form.signon_realm = form.url.spec();
+  form.username_value = u"username";
+  form.password_value = u"password";
+  form.in_store = PasswordForm::Store::kProfileStore;
+
+  // Create grouped facets vector for test.
+  std::vector<password_manager::GroupedFacets> grouped_facets_vect;
+
+  // Create sort_key_to_password_forms object for test.
+  std::multimap<std::string, PasswordForm> sort_key_to_password_forms;
+  sort_key_to_password_forms.insert(std::make_pair("test_key1", form));
+
+  // Create map_group_id_to_forms object for test.
+  std::map<GroupId, std::map<UsernamePasswordKey, std::vector<PasswordForm>>>
+      map_group_id_to_forms;
+  // Form, form 2, are grouped together in the same affiliated group and
+  // federated form is in different affiliated group. These are created by
+  // default when there is no grouped facets linked to them.
+  GroupId group_id1(1);
+  UsernamePasswordKey test_key1(CreateUsernamePasswordSortKey(form));
+  map_group_id_to_forms[group_id1][test_key1].push_back(form);
+
+  PasswordGroupingInfo expected_password_grouping_info;
+  expected_password_grouping_info.map_group_id_to_forms = map_group_id_to_forms;
+
+  PasswordGroupingInfo password_grouping_info =
+      GroupPasswords(grouped_facets_vect, sort_key_to_password_forms);
+  EXPECT_EQ(password_grouping_info.map_group_id_to_forms,
+            expected_password_grouping_info.map_group_id_to_forms);
+}
+
 }  // namespace password_manager
diff --git a/components/password_manager/ios/shared_password_controller.mm b/components/password_manager/ios/shared_password_controller.mm
index 2448f8fb..b4b23c85 100644
--- a/components/password_manager/ios/shared_password_controller.mm
+++ b/components/password_manager/ios/shared_password_controller.mm
@@ -425,8 +425,8 @@
   web::WebFrame* frame =
       web::GetWebFrameWithId(_webState, SysNSStringToUTF8(formQuery.frameID));
 
-  if (IsCrossOriginIframe(_webState, frame) &&
-      !canProcessCrossOriginIframes()) {
+  if (frame == nullptr || (IsCrossOriginIframe(_webState, frame) &&
+                           !canProcessCrossOriginIframes())) {
     completion({}, self);
     return;
   }
diff --git a/components/password_manager/ios/shared_password_controller_unittest.mm b/components/password_manager/ios/shared_password_controller_unittest.mm
index 772b043..b1d5ef3 100644
--- a/components/password_manager/ios/shared_password_controller_unittest.mm
+++ b/components/password_manager/ios/shared_password_controller_unittest.mm
@@ -384,6 +384,41 @@
   EXPECT_TRUE(completion_was_called);
 }
 
+// Tests that no suggestions are returned if the frame was destroyed.
+TEST_F(SharedPasswordControllerTest, ReturnsNoSuggestionsIfFrameDestroyed) {
+  FormSuggestionProviderQuery* form_query = [[FormSuggestionProviderQuery alloc]
+      initWithFormName:@"form"
+          uniqueFormID:autofill::FormRendererId(0)
+       fieldIdentifier:@"field"
+         uniqueFieldID:autofill::FieldRendererId(1)
+             fieldType:kPasswordFieldType  // Ensures this is a password form.
+                  type:@"focus"
+            typedValue:@""
+               frameID:kTestFrameID];
+
+  web::WebFrame* frame = nullptr;
+
+  [[[suggestion_helper_ expect] andReturn:@[]]
+      retrieveSuggestionsWithFormID:form_query.uniqueFormID
+                    fieldIdentifier:form_query.uniqueFieldID
+                            inFrame:frame
+                          fieldType:form_query.fieldType];
+
+  OCMExpect([driver_helper_ PasswordManagerDriver:frame]);
+
+  __block BOOL completion_was_called = NO;
+  [controller_
+      retrieveSuggestionsForForm:form_query
+                        webState:&web_state_
+               completionHandler:^(NSArray<FormSuggestion*>* suggestions,
+                                   id<FormSuggestionProvider> delegate) {
+                 EXPECT_EQ(0UL, suggestions.count);
+                 EXPECT_EQ(delegate, controller_);
+                 completion_was_called = YES;
+               }];
+  EXPECT_TRUE(completion_was_called);
+}
+
 // Tests that suggestions are returned if PasswordSuggestionHelper has some.
 TEST_F(SharedPasswordControllerTest, ReturnsSuggestionsIfAvailable) {
   FormSuggestionProviderQuery* form_query = [[FormSuggestionProviderQuery alloc]
diff --git a/components/permissions/notification_permission_review_service.cc b/components/permissions/notification_permission_review_service.cc
index b7dc732..c97de29 100644
--- a/components/permissions/notification_permission_review_service.cc
+++ b/components/permissions/notification_permission_review_service.cc
@@ -17,22 +17,11 @@
 
 constexpr char kExcludedKey[] = "exempted";
 constexpr char kDisplayedKey[] = "display_count";
+// The daily average is calculated over the past this many days.
+constexpr int kDays = 7;
 
 namespace {
 
-int GetDailyAverageNotificationCount(int notification_count) {
-  // Find day_of_week and calculate daily average count for that week.
-  base::Time date = base::Time::Now();
-  base::Time::Exploded date_exploded;
-  date.LocalExplode(&date_exploded);
-
-  // |day_of_week| returns 0 for Sunday, but NotificationEngagementService
-  // starts counting on Mondays. So here, setting Sunday as 7 to calculate
-  // average correctly and to prevent calculation errors.
-  int day_of_week = !date_exploded.day_of_week ? 7 : date_exploded.day_of_week;
-  return std::ceil(notification_count / day_of_week);
-}
-
 int ExtractNotificationCount(ContentSettingPatternSource item,
                              std::string date) {
   if (!item.setting_value.is_dict())
@@ -44,6 +33,20 @@
   return bucket->FindInt(kDisplayedKey).value_or(0);
 }
 
+int GetDailyAverageNotificationCount(ContentSettingPatternSource item) {
+  // Calculate daily average count for the past week.
+  base::Time date = base::Time::Now();
+  int notification_count_total = 0;
+
+  for (int day = 0; day < kDays; ++day) {
+    notification_count_total += ExtractNotificationCount(
+        item,
+        NotificationsEngagementService::GetBucketLabel(date - base::Days(day)));
+  }
+
+  return std::ceil(notification_count_total / kDays);
+}
+
 std::set<std::pair<ContentSettingsPattern, ContentSettingsPattern>>
 GetIgnoredPatternPairs(scoped_refptr<HostContentSettingsMap> hcsm) {
   std::set<std::pair<ContentSettingsPattern, ContentSettingsPattern>> result;
@@ -72,17 +75,12 @@
   ContentSettingsForOneType notification_count_list;
   hcsm->GetSettingsForOneType(ContentSettingsType::NOTIFICATION_INTERACTIONS,
                               &notification_count_list);
-  std::string date =
-      NotificationsEngagementService::GetBucketLabelForLastMonday(
-          base::Time::Now());
 
   std::map<std::pair<ContentSettingsPattern, ContentSettingsPattern>, int>
       result;
   for (auto& item : notification_count_list) {
-    int notification_count = ExtractNotificationCount(item, date);
-
     result[std::pair{item.primary_pattern, item.secondary_pattern}] =
-        GetDailyAverageNotificationCount(notification_count);
+        GetDailyAverageNotificationCount(item);
   }
 
   return result;
diff --git a/components/permissions/notifications_engagement_service.cc b/components/permissions/notifications_engagement_service.cc
index a7d73b6..a843ede 100644
--- a/components/permissions/notifications_engagement_service.cc
+++ b/components/permissions/notifications_engagement_service.cc
@@ -20,16 +20,13 @@
 //   {"1644163200": {"display_count": 3},  # Implied click_count = 0.
 //    "1644768000": {"display_count": 6, "click_count": 1}}
 //
-// Where the value stored for  date_i  summarizes notification activity
-// for the time period between  date_i  and  date_i+1  (or today for the
-// last entry). Currently, the dates will be space one week apart, and
-// correspond to Monday midnights.
+// Currently, entries will be recorded daily.
 
 constexpr char kEngagementKey[] = "click_count";
 constexpr char kDisplayedKey[] = "display_count";
 
 // Entries in notifications engagement expire after they become this old.
-constexpr base::TimeDelta kMaxAge = base::Days(90);
+constexpr base::TimeDelta kMaxAge = base::Days(30);
 
 // Discards notification interactions stored in `engagement` for time
 // periods older than |kMaxAge|.
@@ -88,7 +85,7 @@
   if (engagement_as_value.is_dict())
     engagement = std::move(engagement_as_value).TakeDict();
 
-  std::string date = GetBucketLabelForLastMonday(base::Time::Now());
+  std::string date = GetBucketLabel(base::Time::Now());
   if (date == std::string())
     return;
 
@@ -114,26 +111,20 @@
 }
 
 // static
-std::string NotificationsEngagementService::GetBucketLabelForLastMonday(
-    base::Time date) {
-  // For human-readability, return the UTC Monday midnight on the same date as
+std::string NotificationsEngagementService::GetBucketLabel(base::Time date) {
+  // For human-readability, return the UTC midnight on the same date as
   // local midnight.
-  base::Time::Exploded date_exploded;
-  date.LocalExplode(&date_exploded);
-  base::Time local_monday =
-      (date - base::Days((date_exploded.day_of_week + 6) % 7)).LocalMidnight();
+  base::Time local_date = date.LocalMidnight();
 
-  base::Time::Exploded local_monday_exploded;
-  local_monday.LocalExplode(&local_monday_exploded);
+  base::Time::Exploded local_date_exploded;
+  local_date.LocalExplode(&local_date_exploded);
   // Intentionally converting a locally exploded time, to an UTC time, so that
-  // the Monday Midnight in UTC is on the same date the last Monday on local
-  // time.
-  base::Time last_monday;
-  bool converted =
-      base::Time::FromUTCExploded(local_monday_exploded, &last_monday);
+  // the Midnight in UTC is on the same date the date on local time.
+  base::Time last_date;
+  bool converted = base::Time::FromUTCExploded(local_date_exploded, &last_date);
 
   if (converted)
-    return base::NumberToString(last_monday.base::Time::ToTimeT());
+    return base::NumberToString(last_date.base::Time::ToTimeT());
 
   return std::string();
 }
diff --git a/components/permissions/notifications_engagement_service.h b/components/permissions/notifications_engagement_service.h
index c192f11..0c7c25c 100644
--- a/components/permissions/notifications_engagement_service.h
+++ b/components/permissions/notifications_engagement_service.h
@@ -20,8 +20,8 @@
 namespace permissions {
 
 // This class records and stores notification engagement per origin for the
-// past 90 days. Engagements per origin are bucketed by week: A notification
-// engagement or display is assigned to the last Monday midnight in local time.
+// past 30 days. Engagements per origin are bucketed daily: A notification
+// engagement or display is assigned to the midnight in local time.
 class NotificationsEngagementService : public KeyedService {
  public:
   explicit NotificationsEngagementService(content::BrowserContext* context,
@@ -41,11 +41,7 @@
   void RecordNotificationDisplayed(const GURL& url, int display_count);
   void RecordNotificationInteraction(const GURL& url);
 
-  // ISO8601 defines Monday as the first day of the week. Additionally, in most
-  // of the world the workweek starts with Monday, so Monday is used
-  // specifically here, as notification usage is a function of work/personal
-  // settings.
-  static std::string GetBucketLabelForLastMonday(base::Time time);
+  static std::string GetBucketLabel(base::Time time);
   static absl::optional<base::Time> ParsePeriodBeginFromBucketLabel(
       const std::string& label);
 
diff --git a/components/policy/android/junit/src/org/chromium/components/policy/PolicyConverterTest.java b/components/policy/android/junit/src/org/chromium/components/policy/PolicyConverterTest.java
index 3aa47c2..3fb6e39 100644
--- a/components/policy/android/junit/src/org/chromium/components/policy/PolicyConverterTest.java
+++ b/components/policy/android/junit/src/org/chromium/components/policy/PolicyConverterTest.java
@@ -6,7 +6,6 @@
 
 import static org.mockito.Mockito.verify;
 
-import android.os.Build;
 import android.os.Bundle;
 
 import org.junit.Before;
@@ -24,7 +23,7 @@
  * Robolectric test for AbstractAppRestrictionsProvider.
  */
 @RunWith(BaseRobolectricTestRunner.class)
-@Config(manifest = Config.NONE, sdk = Build.VERSION_CODES.M)
+@Config(manifest = Config.NONE)
 public class PolicyConverterTest {
     @Rule
     public JniMocker mocker = new JniMocker();
diff --git a/components/policy/core/common/async_policy_loader.cc b/components/policy/core/common/async_policy_loader.cc
index a5a91c2..08e31c91 100644
--- a/components/policy/core/common/async_policy_loader.cc
+++ b/components/policy/core/common/async_policy_loader.cc
@@ -93,7 +93,7 @@
   }
 
   // Filter out mismatching policies.
-  schema_map_->FilterBundle(&bundle,
+  schema_map_->FilterBundle(bundle,
                             /*drop_invalid_component_policies=*/true);
 
   update_callback_.Run(std::move(bundle));
@@ -135,7 +135,7 @@
   PolicyBundle bundle = Load();
   platform_management_trustworthiness_.reset();
   // Filter out mismatching policies.
-  schema_map_->FilterBundle(&bundle,
+  schema_map_->FilterBundle(bundle,
                             /*drop_invalid_component_policies=*/true);
   return bundle;
 }
diff --git a/components/policy/core/common/cloud/component_cloud_policy_service.cc b/components/policy/core/common/cloud/component_cloud_policy_service.cc
index e51f5ba..4179bda8 100644
--- a/components/policy/core/common/cloud/component_cloud_policy_service.cc
+++ b/components/policy/core/common/cloud/component_cloud_policy_service.cc
@@ -526,7 +526,7 @@
   // Make a copy in |policy_| and filter it and validate against the schemas;
   // this is what's passed to the outside world.
   policy_.CopyFrom(*unfiltered_policy_);
-  current_schema_map_->FilterBundle(&policy_,
+  current_schema_map_->FilterBundle(policy_,
                                     /*drop_invalid_component_policies=*/false);
 
   policy_installed_ = true;
diff --git a/components/policy/core/common/policy_bundle.cc b/components/policy/core/common/policy_bundle.cc
index 60a87ee..c05ea9f4 100644
--- a/components/policy/core/common/policy_bundle.cc
+++ b/components/policy/core/common/policy_bundle.cc
@@ -36,10 +36,6 @@
   return it == end() ? GetEmptyPolicyMap() : it->second;
 }
 
-void PolicyBundle::Swap(PolicyBundle* other) {
-  policy_bundle_.swap(other->policy_bundle_);
-}
-
 void PolicyBundle::CopyFrom(const PolicyBundle& other) {
   DCHECK_NE(this, &other);
 
diff --git a/components/policy/core/common/policy_bundle.h b/components/policy/core/common/policy_bundle.h
index 0e84468..ee6b874b 100644
--- a/components/policy/core/common/policy_bundle.h
+++ b/components/policy/core/common/policy_bundle.h
@@ -35,9 +35,6 @@
   // empty map if no entry for `ns` is present.
   const PolicyMap& Get(const PolicyNamespace& ns) const;
 
-  // Swaps the internal representation of |this| with |other|.
-  void Swap(PolicyBundle* other);
-
   // |this| becomes a copy of |other|. Any existing PolicyMaps are dropped.
   void CopyFrom(const PolicyBundle& other);
 
diff --git a/components/policy/core/common/policy_bundle_unittest.cc b/components/policy/core/common/policy_bundle_unittest.cc
index 94b4b8c..af35a61 100644
--- a/components/policy/core/common/policy_bundle_unittest.cc
+++ b/components/policy/core/common/policy_bundle_unittest.cc
@@ -98,7 +98,7 @@
   EXPECT_TRUE(IsEmpty(bundle));
 }
 
-TEST(PolicyBundleTest, SwapAndCopy) {
+TEST(PolicyBundleTest, CopyFrom) {
   PolicyBundle bundle0;
   PolicyBundle bundle1;
 
@@ -116,16 +116,7 @@
   EXPECT_TRUE(bundle0.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS,
                                           kExtension0)).Equals(policy));
 
-  bundle0.Swap(&bundle1);
-  EXPECT_TRUE(IsEmpty(bundle0));
-  EXPECT_FALSE(IsEmpty(bundle1));
-
-  EXPECT_TRUE(bundle1.Get(PolicyNamespace(POLICY_DOMAIN_CHROME,
-                                          std::string())).Equals(policy));
-  EXPECT_TRUE(bundle1.Get(PolicyNamespace(POLICY_DOMAIN_EXTENSIONS,
-                                          kExtension0)).Equals(policy));
-
-  bundle0.CopyFrom(bundle1);
+  bundle1.CopyFrom(bundle0);
   EXPECT_FALSE(IsEmpty(bundle0));
   EXPECT_FALSE(IsEmpty(bundle1));
   EXPECT_TRUE(bundle0.Get(PolicyNamespace(POLICY_DOMAIN_CHROME,
diff --git a/components/policy/core/common/policy_service_impl.cc b/components/policy/core/common/policy_service_impl.cc
index a6a347a..6caa798f 100644
--- a/components/policy/core/common/policy_service_impl.cc
+++ b/components/policy/core/common/policy_service_impl.cc
@@ -6,6 +6,7 @@
 
 #include <stddef.h>
 
+#include <algorithm>
 #include <utility>
 
 #include "base/bind.h"
@@ -390,7 +391,7 @@
 
   // Swap first, so that observers that call GetPolicies() see the current
   // values.
-  policy_bundle_.Swap(&bundle);
+  std::swap(policy_bundle_, bundle);
 
   // Only notify observers of namespaces that have been modified.
   const PolicyMap kEmpty;
diff --git a/components/policy/core/common/schema_map.cc b/components/policy/core/common/schema_map.cc
index ae543cd..dce5bea 100644
--- a/components/policy/core/common/schema_map.cc
+++ b/components/policy/core/common/schema_map.cc
@@ -35,9 +35,9 @@
   return it == map->end() ? nullptr : &it->second;
 }
 
-void SchemaMap::FilterBundle(PolicyBundle* bundle,
+void SchemaMap::FilterBundle(PolicyBundle& bundle,
                              bool drop_invalid_component_policies) const {
-  for (auto& bundle_item : *bundle) {
+  for (auto& bundle_item : bundle) {
     const PolicyNamespace& ns = bundle_item.first;
     PolicyMap& policy_map = bundle_item.second;
 
diff --git a/components/policy/core/common/schema_map.h b/components/policy/core/common/schema_map.h
index b4ddb7b..a3701f8 100644
--- a/components/policy/core/common/schema_map.h
+++ b/components/policy/core/common/schema_map.h
@@ -37,15 +37,15 @@
 
   const Schema* GetSchema(const PolicyNamespace& ns) const;
 
-  // Removes all the policies in |bundle| that don't match the known schemas.
+  // Removes all the policies in `bundle` that don't match the known schemas.
   // Unknown components are also dropped. Unknown fields in component policies
   // are removed.
-  // If |drop_invalid_component_policies| is true, invalid policies are removed.
-  // If |drop_invalid_component_policies| is false, they will merely be marked
+  // If `drop_invalid_component_policies` is true, invalid policies are removed.
+  // If `drop_invalid_component_policies` is false, they will merely be marked
   // invalid. They will still be filtered when accessing them via
   // PolicyMap::Get() or PolicyMap::GetValue(), but will be surfaced in
   // about:policy with an attached error.
-  void FilterBundle(PolicyBundle* bundle,
+  void FilterBundle(PolicyBundle& bundle,
                     bool drop_invalid_component_policies) const;
 
   // Returns true if this map contains at least one component of a domain other
diff --git a/components/policy/core/common/schema_map_unittest.cc b/components/policy/core/common/schema_map_unittest.cc
index c2881b5..d2a1e68 100644
--- a/components/policy/core/common/schema_map_unittest.cc
+++ b/components/policy/core/common/schema_map_unittest.cc
@@ -136,7 +136,7 @@
   scoped_refptr<SchemaMap> schema_map = new SchemaMap(std::move(domain_map));
 
   PolicyBundle bundle;
-  schema_map->FilterBundle(&bundle, /*drop_invalid_component_policies=*/true);
+  schema_map->FilterBundle(bundle, /*drop_invalid_component_policies=*/true);
   const PolicyBundle empty_bundle;
   EXPECT_TRUE(bundle.Equals(empty_bundle));
 
@@ -153,7 +153,7 @@
   bundle.Get(another_extension_ns)
       .Set("AnotherExtensionPolicy", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
            POLICY_SOURCE_CLOUD, base::Value("value"), nullptr);
-  schema_map->FilterBundle(&bundle, /*drop_invalid_component_policies=*/true);
+  schema_map->FilterBundle(bundle, /*drop_invalid_component_policies=*/true);
   EXPECT_TRUE(bundle.Equals(expected_bundle));
 
   PolicyNamespace extension_ns(POLICY_DOMAIN_EXTENSIONS, "abc");
@@ -182,7 +182,7 @@
       .Set("Unexpected", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
            POLICY_SOURCE_CLOUD, base::Value("to-be-removed"), nullptr);
 
-  schema_map->FilterBundle(&bundle, /*drop_invalid_component_policies=*/true);
+  schema_map->FilterBundle(bundle, /*drop_invalid_component_policies=*/true);
   // Merged twice so this causes a conflict.
   expected_bundle.Get(chrome_ns)
       .GetMutable("ChromePolicy")
@@ -213,7 +213,7 @@
              POLICY_SOURCE_CLOUD, absl::nullopt,
              std::make_unique<ExternalDataFetcher>(nullptr, std::string()));
 
-  schema_map->FilterBundle(&bundle, /*drop_invalid_component_policies=*/true);
+  schema_map->FilterBundle(bundle, /*drop_invalid_component_policies=*/true);
   EXPECT_TRUE(bundle.Equals(empty_bundle));
 }
 
@@ -271,7 +271,7 @@
       .Set("Surprise", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
            POLICY_SOURCE_CLOUD, base::Value("value 5"), nullptr);
 
-  schema_map->FilterBundle(&bundle, /*drop_invalid_component_policies=*/true);
+  schema_map->FilterBundle(bundle, /*drop_invalid_component_policies=*/true);
   EXPECT_TRUE(bundle.Equals(expected_bundle));
 }
 
@@ -341,7 +341,7 @@
       bundle.Get(without_schema_ns).Get("Schemaless");
   ASSERT_TRUE(invalid_policy_entry_2);
 
-  schema_map->FilterBundle(&bundle, /*drop_invalid_component_policies=*/false);
+  schema_map->FilterBundle(bundle, /*drop_invalid_component_policies=*/false);
   EXPECT_TRUE(bundle.Equals(expected_bundle));
   EXPECT_TRUE(invalid_policy_entry_1->ignored());
   EXPECT_TRUE(invalid_policy_entry_2->ignored());
diff --git a/components/policy/core/common/schema_registry_tracking_policy_provider.cc b/components/policy/core/common/schema_registry_tracking_policy_provider.cc
index 017d3ce..72faeba 100644
--- a/components/policy/core/common/schema_registry_tracking_policy_provider.cc
+++ b/components/policy/core/common/schema_registry_tracking_policy_provider.cc
@@ -93,7 +93,7 @@
   PolicyBundle bundle;
   if (state_ == READY) {
     bundle.CopyFrom(delegate_->policies());
-    schema_map()->FilterBundle(&bundle,
+    schema_map()->FilterBundle(bundle,
                                /*drop_invalid_component_policies=*/true);
   } else {
     // Always pass on the Chrome policy, even if the components are not ready
diff --git a/components/policy/resources/PRESUBMIT.py b/components/policy/resources/PRESUBMIT.py
index b87834d0..5d09f9428 100644
--- a/components/policy/resources/PRESUBMIT.py
+++ b/components/policy/resources/PRESUBMIT.py
@@ -63,7 +63,7 @@
     policy_warnings = []
     for affected_file in template_affected_files:
       path = affected_file.AbsoluteLocalPath()
-      filename = os.fsdecode(path)
+      filename = os.path.basename(path)
       filename_no_extension = os.path.splitext(filename)[0]
       if (filename == '.group.details.yaml' or
           filename == 'policy_atomic_groups.yaml'):
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 903d6e6d..ab3e5354 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -3611,7 +3611,7 @@
 <translation id="450080746522343150">Bloquear todas las descargas.</translation>
 <translation id="45036050223225148">Inhabilitar el experimento Encrypted ClientHello de TLS</translation>
 <translation id="4508728400492074981">Controla políticas para la función Conjuntos propios.</translation>
-<translation id="4510923771103268849">El usuario puede tener acceso root a los contenedores de Crostini</translation>
+<translation id="4510923771103268849">El usuario puede tener acceso raíz a los contenedores de Crostini</translation>
 <translation id="4512407512989846472">Permitir bloquear la copia en el portapapeles en URLs especificadas</translation>
 <translation id="4513691822411041977">No forzar el uso de Búsqueda Segura en la Búsqueda de Google ni en el modo Restringido de YouTube</translation>
 <translation id="4515404363392014383">Habilitar Navegación segura en fuentes de confianza</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 36debdd..838eca9b 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -90,6 +90,11 @@
 <translation id="1059069692400941670">Desativar a importação do mecanismo de pesquisa padrão na primeira execução</translation>
 <translation id="1062011392452772310">Ativar declaração remota para o dispositivo</translation>
 <translation id="1062407476771304334">Substituir</translation>
+<translation id="1063860513136880926">Se a política for ativada, não vai ser permitido fazer capturas de tela com os atalhos do teclado
+ou as APIs de extensão. Se ela for desativada ou deixada sem definição, será possível fazer capturas de tela.
+
+No <ph name="MS_WIN_NAME" />, <ph name="MAC_OS_NAME" /> e <ph name="LINUX_OS_NAME" />,
+isso não impede capturas de tela com apps do sistema operacional ou de terceiros.</translation>
 <translation id="1069489575852947981">Definir a política como "Ativada" ou deixá-la sem definição faz com que uma conta local do dispositivo seja configurada para login automático sem atraso. O <ph name="PRODUCT_OS_NAME" /> aplica o atalho de teclado Ctrl+Alt+S para ignorar o login automático e mostrar a tela de login.
 
       Definir a política como "Desativada" faz com que os usuários não possam ignorar o login automático sem atraso (se configurado).</translation>
@@ -146,6 +151,7 @@
       Se a política for ativada ou deixada sem definição, a lista de compras vai ficar disponível para os usuários.
       Se for desativada, o recurso da lista de compras vai ficar indisponível.
       </translation>
+<translation id="1144147113722324623">Ativar os upgrades automáticos de HTTPS para áudio e vídeo e mostrar um aviso "Não seguro" nas imagens.</translation>
 <translation id="1144540226829648811">Especifica o canal de liberação ao qual este dispositivo precisa ser vinculado.
 
       A configuração <ph name="CHROME_OS_RELEASE_CHANNEL_POLICY_NAME" /> só terá efeito se <ph name="CHROME_OS_RELEASE_CHANNEL_DELEGATED_POLICY_NAME" /> for definida como falsa.</translation>
@@ -218,6 +224,7 @@
 <translation id="1209096923317019235">Atribui apps como gerenciadores padrão para as extensões de arquivo especificadas</translation>
 <translation id="120937472976628837">Enviar informações sobre o ventilador</translation>
 <translation id="1212233008927724662">Desativar o carregamento de Lazy Login WebUI.</translation>
+<translation id="1214872329693851703">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />.</translation>
 <translation id="1216919699175573511">Ativa a compatibilidade com Signed HTTP Exchange (SXG)</translation>
 <translation id="1219027971768347970">Usar a configuração padrão para o sandbox de áudio</translation>
 <translation id="1219695476179627719">Especifica se o dispositivo deve ser revertido para a versão definida por <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> se ele já estiver executando uma versão posterior.
@@ -246,6 +253,7 @@
       Se ela for definida como verdadeira, o recurso será ativado e os usuários poderão mudá-lo.
       Por padrão, esta política é definida como falsa. Nenhum emoji será sugerido, e o usuário não poderá modificar isso.</translation>
 <translation id="1241536186320046498">Perguntar sempre que um site quiser uma permissão para posicionamento de janelas</translation>
+<translation id="1243311058213605210">Desativar os upgrades automáticos de HTTPS para áudio e vídeo e não mostrar nenhum aviso para imagens.</translation>
 <translation id="1243570869342663665">Controlar a filtragem de conteúdo adulto SafeSites.</translation>
 <translation id="1244309789361056660">Esta política foi removida na versão M87. Os diretórios principais serão migrados automaticamente para ext4 ao fazer login.
       A definição da política especifica a ação a ser tomada quando o diretório principal do usuário tiver sido criado com criptografia ecryptfs. A não ser que seja realizada a migração de diretórios principais da criptografia ecryptfs para ext4, os apps Android poderão parar de funcionar.
@@ -561,6 +569,7 @@
 <translation id="1557113199339446336">Se a política for definida como verdadeira, os dispositivos registrados vão enviar relatórios com informações sobre eventos de detecção e resposta estendidas (XDR, na sigla em inglês).
 
       Se a política for definida como falsa ou for deixada sem definição, os dispositivos registrados não vão informar eventos XDR.</translation>
+<translation id="1560279917909364275">Colocar na lista de permissões os apps de anotação permitidos na tela de bloqueio do <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="1561424797596341174">A política modifica as versões de depuração do host de acesso remoto</translation>
 <translation id="1561967320164410511">U2F e extensões para declaração individual</translation>
 <translation id="1567718448549957373">Se a política for definida como "Ativada" ou não for definida, desafios de autenticação <ph name="BASIC_AUTH" /> recebidos por HTTP não seguro serão permitidos.
@@ -634,6 +643,7 @@
 <translation id="1616280227447957376">Permitir que páginas de aviso SSL em origens específicas sejam ignoradas</translation>
 <translation id="1617235075406854669">Ativar exclusão do histórico do navegador e de downloads</translation>
 <translation id="1620510694547887537">Câmera</translation>
+<translation id="1621245029534873770">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="AUTOPLAY_ALLOWLIST_POLICY_NAME" />.</translation>
 <translation id="162162247775156979">Desativar relatórios de status de armazenamento do dispositivo</translation>
 <translation id="1625700732886306811">Permitir que o <ph name="PRODUCT_NAME" /> se conecte- a dispositivos em todos os endereços IP</translation>
 <translation id="1626379196197114720">Permitir o uso do cache de avanço e retorno</translation>
@@ -1031,6 +1041,7 @@
 
       Se a política for definida como falsa ou se não for definida, as informações não serão enviadas.
       Se ela for definida como verdadeira, o fuso horário atual do dispositivo será enviado.</translation>
+<translation id="1990784382342293892">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />.</translation>
 <translation id="199764499252435679">Ativar atualizações de componentes no <ph name="PRODUCT_NAME" /></translation>
 <translation id="1997943707974344423">Permitir o Smart Lock</translation>
 <translation id="1998504583649140526">Configurações de solicitações de rede particulares</translation>
@@ -1126,6 +1137,7 @@
 
       Se você definir a política, os usuários não poderão mudá-la. Se ela não for definida, os usuários poderão escolher como usar o recurso.</translation>
 <translation id="2093552723795057221">Não informar o status do áudio</translation>
+<translation id="209388704279338003">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />.</translation>
 <translation id="2093951844062548778">Esta política permite que as Respostas rápidas acessem conteúdos selecionados e enviem informações ao servidor para receber resultados de definição.
 
       Se ela estiver ativada ou não for definida, a definição das Respostas rápidas ficará ativada.
@@ -1473,6 +1485,7 @@
       Se a política não tiver definição, <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> será aplicada a todos os sites, se estiver definida. Caso contrário, a configuração pessoal do usuário será aplicada.
 
       Para informações detalhadas sobre padrões de URL válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. A partir da versão M85, padrões com caracteres curinga "*" e "[*.]" no host não serão mais compatíveis com esta política.</translation>
+<translation id="2421779938235645781">A cor da luz de fundo do teclado é igual ao plano de fundo atual</translation>
 <translation id="2423255396068675416">Se a política for definida como "Ativada" ou não for definida, os usuários poderão executar o <ph name="PRODUCT_CROSTINI_NAME" />, contanto que <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> e <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> sejam definidas como "Ativada". Se a política for definida como "Desativada", o <ph name="PRODUCT_CROSTINI_NAME" /> será desativado. Se a definição for mudada para "Desativada", a política será aplicada para iniciar novos contêineres <ph name="PRODUCT_CROSTINI_NAME" />, e não para os já existentes.</translation>
 <translation id="242521047682347997">Não permitir que os usuários sincronizem mensagens SMS entre o smartphone e o Chromebook</translation>
 <translation id="2426782419955104525">Ativa o recurso Instant do <ph name="PRODUCT_NAME" /> e impede que os usuários alterem essa configuração.
@@ -1891,7 +1904,23 @@
 <translation id="2801065672151277034">Configurações de gerenciamento do certificado</translation>
 <translation id="2801155097555584385">Configurar o início do carregamento personalizado da bateria, em porcentagem</translation>
 <translation id="2801378553855965587">Desativar a integração com o <ph name="GOOGLE_CALENDAR_NAME" />.</translation>
+<translation id="2804129948908818402">Essa política permite que os administradores especifiquem apps que funcionam como gerenciadores padrão das respectivas extensões de arquivo
+no <ph name="PRODUCT_OS_NAME" /> e que os usuários não podem mudar.
+
+Para todas as extensões de arquivo não especificadas na política, os usuários podem definir os próprios padrões do
+fluxo de trabalho comum.
+
+Especifique apps do Chrome pelos IDs deles (como <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_CHROME_APP_EXAMPLE" />),
+apps da Web pelo URL usado em <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> (como <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_WEB_APP_EXAMPLE" />),
+apps Android pelo nome do pacote (como <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_ANDROID_APP_EXAMPLE" />)
+apps da Web do sistema pelo nome do snake case (como <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_SYSTEM_WEB_APP_EXAMPLE" />).
+
+Os apps PRECISAM ser declarados no manifesto como gerenciadores de extensões de arquivo especificadas para que
+o item da política entre em vigor. A política NÃO amplia os recursos existentes do app.
+
+Caso a política seja deixada sem definição, é possível que o <ph name="PRODUCT_OS_NAME" /> selecione gerenciadores padrão de acordo com a lógica interna.</translation>
 <translation id="2805707493867224476">Permitir que todos os sites exibam pop-ups</translation>
+<translation id="2806804577787377637">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="PER_APP_TIME_LIMITS_ALLOWLIST" />.</translation>
 <translation id="2818074121667686266">Se a política for definida como ativada ou não for definida, o usuário receberá uma solicitação para acesso de captura de áudio, exceto para URLs configurados na lista AudioCaptureAllowedUrls.
 
       Se a política for definida como desativada as solicitações serão desativadas e a captura de áudio só estará disponível para URLs configurados na lista AudioCaptureAllowedUrls.
@@ -1923,6 +1952,7 @@
 <translation id="2853649500575897584">Não bloquear pontos de extensão legados no processo do navegador</translation>
 <translation id="285480231336205327">Ativar modo de alto contraste</translation>
 <translation id="285627849510728211">Definir a configuração do dia para o modo avançado de carregamento de bateria</translation>
+<translation id="2864207379891420023">Configurar a lista de permissões para instalação de extensões</translation>
 <translation id="2866387633548787857">Desativar a transição rápida</translation>
 <translation id="2866619962692161453">Tipo de metapolítica</translation>
 <translation id="2866726566162790531">Lista de origens que autorizam todas as autenticações HTTP</translation>
@@ -2282,6 +2312,7 @@
 <translation id="3168968618972302728">Políticas relacionadas à autenticação do Kerberos.</translation>
 <translation id="3169872426103732947">Mostrar o URL padrão e permitir que os usuários mudem para o URL completo</translation>
 <translation id="3171369832001535378">Modelo de nome do host da rede do dispositivo</translation>
+<translation id="3173844121395372156">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />.</translation>
 <translation id="3177802893484440532">Exigir verificações on-line de OCSP/CRL para âncoras de confiança locais</translation>
 <translation id="3180671894201217988">Se a política for ativada ou deixada sem definição, softwares de terceiros não poderão injetar código executável em processos do <ph name="PRODUCT_NAME" />.
 
@@ -2421,6 +2452,7 @@
       No <ph name="MS_WIN_NAME" />, essa funcionalidade está disponível apenas em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, executadas no Windows 10 Pro ou registradas em <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. No <ph name="MAC_OS_NAME" />, essa funcionalidade está disponível apenas em instâncias gerenciadas por MDM ou associadas a um domínio via MCX.</translation>
 <translation id="3261592499545947104">Número de segundos antes da expiração de um certificado quando a renovação precisa ser acionada.</translation>
 <translation id="3262080895269946462">Permitir que o WebSQL em contextos de terceiros fique desativado por padrão.</translation>
+<translation id="3263892501786842604">Permitir que o botão do <ph name="GOOGLE_LENS_PRODUCT_NAME" /> apareça na caixa de pesquisa na página "Nova guia", se houver suporte.</translation>
 <translation id="3264706118366247207">Configura uma lista de tipos de dados de navegação a serem excluídos quando o usuário fechar todas as janelas do navegador. Os tipos de dados disponíveis são: histórico de navegação (<ph name="DATA_TYPE_BROWSING_HISTORY" />), histórico de downloads (<ph name="DATA_TYPE_DOWNLOAD_HISTORY" />), cookies (<ph name="DATA_TYPE_COOKIES_AND_OTHER_SITE_DATA" />), cache<ph name="DATA_TYPE_CACHED_IMAGES_AND_FILES" />, preenchimento automático (<ph name="DATA_TYPE_AUTOFILL" />), senhas (<ph name="DATA_TYPE_PASSWORD" />), configurações de sites (<ph name="DATA_TYPE_SITE_SETTINGS" />) e dados de apps hospedados (<ph name="DATA_TYPE_HOSTED_APP_DATA" />). Esta política não tem precedência sobre <ph name="ALLOW_DELETING_BROWSER_HISTORY_POLICY_NAME" />.
 
       Esta política exige <ph name="SYNC_DISABLED_POLICY_NAME" /> para ser definida como verdadeira. Caso contrário, ela será ignorada. Se esta política for definida no nível da plataforma, a sincronização será desativada em toda a plataforma. Se ela for definida no nível do usuário, a sincronização desse usuário específico será desativada para que esta política seja aplicada.
@@ -2559,6 +2591,7 @@
 <translation id="3420141485959154417">Se a <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> estiver ativada, definir <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POLICY_NAME" /> especificará o URL do mecanismo de pesquisa usado para a pesquisa de imagens. Se a <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POST_PARMS_POLICY_NAME" /> for definida, as solicitações de pesquisa de imagem utilizarão o método POST.
 
       Se a <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POLICY_NAME" /> não for definida, nenhuma pesquisa de imagem será utilizada.</translation>
+<translation id="3426434797050451264">Esta política também pode ser usada para especificar apps Android como gerenciadores de arquivos padrão.</translation>
 <translation id="3428247105888806363">Ativar previsão de rede</translation>
 <translation id="3432863169147125747">Controla configurações de impressão.</translation>
 <translation id="3434053014926283175">Usar o botão direito do mouse como o principal na tela de login.
@@ -2865,6 +2898,7 @@
 <translation id="3755237588083934849">Se a política for definida, a frequência do envio de uploads de status do dispositivo será determinada, em milissegundos. O mínimo permitido é 60 segundos.
 
       Se não for definida, o intervalo padrão será de 3 horas.</translation>
+<translation id="3755796472192036324">Luz de fundo branca do teclado</translation>
 <translation id="3756011779061588474">Bloquear modo de desenvolvedor</translation>
 <translation id="3756516139200532906">Permitir que o usuário gerenciado configure o nome do host do dispositivo</translation>
 <translation id="3756737071958233151">Ativar o upload de registro do sistema do dispositivo</translation>
@@ -3203,6 +3237,7 @@
 
       Para informações detalhadas sobre padrões de <ph name="URL_LABEL" /> válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns (link em inglês).  O valor <ph name="WILDCARD_VALUE" /> não é aceito para esta política.</translation>
 <translation id="4061590579642538878">Enviar informações sobre relatórios de erros.</translation>
+<translation id="4070039109671307724">Diversos</translation>
 <translation id="4072225853834793549">Desativar atalhos de acessibilidade na tela de login</translation>
 <translation id="4075675819066819571">Posicionar a estante no lado esquerdo da tela</translation>
 <translation id="408029843066770167">Permitir consultas a um serviço de hora do Google</translation>
@@ -3603,6 +3638,7 @@
 <translation id="4492287494009043413">Desativar captura de tela</translation>
 <translation id="4494132853995232608">DTC wilco</translation>
 <translation id="449423975179525290">Configura políticas relacionadas ao <ph name="PLUGIN_VM_NAME" />.</translation>
+<translation id="449561952193478261">Luz de fundo azul do teclado</translation>
 <translation id="449784980858429908">Permitir automaticamente que os sites se conectem a todas as portas seriais.</translation>
 <translation id="4499376951770369935">As atualizações do Chrome OS são configuradas de acordo com a versão definida no manifesto do app de quiosque</translation>
 <translation id="450080746522343150">Bloquear todos os downloads.</translation>
@@ -3740,6 +3776,14 @@
 <translation id="4611983465824842867">Não mostrar avisos nem desativar o preenchimento automático em formulários não seguros</translation>
 <translation id="4615003180013429835">Modo de análise da lista de sites</translation>
 <translation id="4617338332148204752">Ignorar a verificação de metatags em <ph name="PRODUCT_FRAME_NAME" /></translation>
+<translation id="4624006912948309924">A definição da política estabelece quais identificadores de aplicativo do <ph name="PRODUCT_OS_NAME" /> são mostrados como apps fixados na barra de acesso rápido, e eles não podem ser editados pelos usuários.
+
+Especifique os apps do Chrome pelos IDs deles (como pjkljhegncpnkpknbcohdijeoejaedia),
+apps Android pelo nome do pacote (como com.google.android.gm),
+apps da Web pelo URL usado na <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> (como https://google.com.br/maps) e
+apps da Web do sistema pelo nome de snake case, (como <ph name="PINNED_LAUNCHER_APPS_POLICY_SYSTEM_WEB_APP_EXAMPLE" />).
+
+Se a política for deixada sem definição, os usuários poderão mudar a lista de apps fixados no acesso rápido.</translation>
 <translation id="4624417808625504735">Bloquear o uso de JIT pelo JavaScript nestes sites</translation>
 <translation id="46321462262887935">Tratar teclas da linha superior como teclas de função, mas permitir que os usuários façam mudanças</translation>
 <translation id="4632343302005518762">Permitir que o <ph name="PRODUCT_FRAME_NAME" /> trabalhe com os tipos de conteúdo listados</translation>
@@ -3772,6 +3816,7 @@
 
       Observação: esta configuração substituirá <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, caso presente.</translation>
 <translation id="4658380868451934335">Ativar o Ditado na tela de login</translation>
+<translation id="4660356908994631271">Mostrar o botão do Google Lens na caixa de pesquisa da página "Nova guia".</translation>
 <translation id="4661889655253181651">As configurações de conteúdo permitem que você especifique como o conteúdo de um tipo específico (por exemplo, cookies, imagens ou JavaScript) é tratado.</translation>
 <translation id="4663509616441994711">Desativar a unificação das políticas da nuvem em nível de usuário.</translation>
 <translation id="4665897631924472251">Configurações de gerenciamento de extensão</translation>
@@ -3870,6 +3915,7 @@
 <translation id="4812270373673968774">Se a política for definida como "Sempre", a estante do <ph name="PRODUCT_OS_NAME" /> será ocultada automaticamente. Se ela for definida como "Nunca", a estante nunca será ocultada automaticamente.
 
       Se você definir a política, os usuários não poderão mudá-la. Se ela não for definida, os usuários poderão decidir se a estante é ocultada automaticamente ou não.</translation>
+<translation id="4812309945046430049">Luz de fundo vermelha do teclado</translation>
 <translation id="4812714598405913256">Configurar a mensagem de expiração da atualização automática para a política DeviceMinimumVersion</translation>
 <translation id="4815581264328351694">Mostrar opções de acessibilidade no menu da bandeja do sistema</translation>
 <translation id="4816674326202173458">Permitir que o usuário corporativo seja ao mesmo tempo primário e secundário (comportamento padrão para usuários não gerenciados)</translation>
@@ -3914,6 +3960,7 @@
 <translation id="487460824085252184">Migrar automaticamente, sem autorização do usuário.</translation>
 <translation id="4874982543810021567">Bloquear o WebUSB nesses sites</translation>
 <translation id="4876805738539874299">Versão máxima de SSL ativada</translation>
+<translation id="4877305769899044884">Luz de fundo padrão do teclado</translation>
 <translation id="4886783562285047261">Se a política for definida como "Ativada", o <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> forçará o registro e impedirá o processo de inicialização do <ph name="PRODUCT_NAME" /> em caso de erro.
 
       Se ela for definida como "Desativada" ou não for definida, o <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> será opcional e não impedirá o processo de inicialização do <ph name="PRODUCT_NAME" /> em caso de erro.
@@ -4359,6 +4406,7 @@
 <translation id="5331746669335642668">A política de nuvem do <ph name="PRODUCT_NAME" /> substitui a política da plataforma.</translation>
 <translation id="5334501839642146593">Nunca enviar métricas ao Google</translation>
 <translation id="5340008866815063393">Ativar relatórios sobre dados de política</translation>
+<translation id="5345910753471481870">Não mostrar o botão do Google Lens na caixa de pesquisa da página "Nova guia".</translation>
 <translation id="5346587320074666194">Bloquear acesso a sensores nesses sites</translation>
 <translation id="534836255587440809">Desativar o clique automático na tela de login</translation>
 <translation id="5362531528507578966">Modifica o modo de impressão de gráficos de segundo plano padrão.</translation>
@@ -4961,6 +5009,7 @@
       Até agora, essa política funciona apenas para a Sessão de visitante gerenciada.
 
       Cada item da lista da política é um objeto com o manifesto de atualização <ph name="URL_LABEL" /> e o ID do pacote do app isolado da Web. Os dois campos são obrigatórios.</translation>
+<translation id="596523880465577341">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="EXTENSION_INSTALL_ALLOWLIST_POLICY_NAME" />.</translation>
 <translation id="5966615072639944554">Extensões que podem usar a API de declaração remota</translation>
 <translation id="596732417280023843">O nome do perfil de certificado.</translation>
 <translation id="5972538402066550344">Permitir controles de geração de relatórios granulares</translation>
@@ -5180,6 +5229,7 @@
 <translation id="6221175752766085998">Permitir certificados emitidos pelas âncoras de confiança locais sem a extensão subjectAlternativeName</translation>
 <translation id="6224070048795197148">Permitir que o usuário use o navegador sem fazer login</translation>
 <translation id="6224304369267200483">Os URLs/domínios permitidos automaticamente direcionam a declaração da chave de segurança</translation>
+<translation id="6225938950222983458">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="NOTE_TAKING_APPS_LOCK_SCREEN_ALLOWLIST" />.</translation>
 <translation id="6230442621691161858">Esse recurso ativa sugestões de novos conteúdos para você conhecer. Inclui apps, páginas da Web e muito mais.
       Se a política for definida como verdadeira, as sugestões de novos conteúdos serão ativadas.
       Se ela for definida como falsa, as sugestões serão desativadas.
@@ -5228,6 +5278,7 @@
       Cada item da lista da política é uma string que contém um ID de extensão e, opcionalmente, um URL de "atualização" separados por ponto e vírgula (<ph name="SEMICOLON" />). O ID de extensão é a string de 32 letras encontrada, por exemplo, em <ph name="CHROME_EXTENSIONS_LINK" /> no modo de desenvolvedor. O URL de "atualização", se especificado, apontará para um documento XML de manifesto de atualização, conforme descrito em <ph name="LINK_TO_EXTENSION_DOC1" />. Por padrão, o URL de "atualização" da Chrome Web Store é usado (atualmente, https://clients2.google.com/service/update2/crx). O URL de "atualização" definido nesta política só é usado na instalação inicial. As atualizações subsequentes da extensão empregam o URL de "atualização" indicado no manifesto da extensão.
 
       Por exemplo, <ph name="LOGIN_SCREEN_EXTENSION_POLICY_EXAMPLE" /> instala o app <ph name="SMART_CARD_CONNECTOR_APP_NAME" /> a partir do URL de "atualização" padrão da Chrome Web Store. Para ver mais informações sobre hospedagem de extensões, consulte <ph name="LINK_TO_EXTENSION_DOC2" />.</translation>
+<translation id="6273107124506133797">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="USB_DETACHABLE_ALLOWLIST_POLICY_NAME" />.</translation>
 <translation id="6274202259872570803">Screencast</translation>
 <translation id="6275497712828649588">Ocultar avisos de segurança quando sinalizações de linha de comando potencialmente perigosa forem usadas</translation>
 <translation id="6275833043726517413">Use a implementação legada de <ph name="CORS" /> em vez do novo <ph name="CORS" />.
@@ -5457,11 +5508,13 @@
       Se a política for desativada ou deixada sem definição, a senha do SAML não poderá ser mudada em chrome://password-change e notificações não serão exibidas quando as senhas do SAML estiverem prestes a expirar.</translation>
 <translation id="6457477291648119596">Type42</translation>
 <translation id="6458361632497500815">Se a política for definida como "Ativada" ou não for definida e <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" />, <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> e <ph name="DEVICE_UNAFFILIATED_CROSTINI_ALLOWED_POLICY_NAME" /> estiverem ativadas, todos os usuários poderão usar o <ph name="PRODUCT_CROSTINI_NAME" />. Se a política for definida como "Desativada", os usuários sem filiação não poderão usar o <ph name="PRODUCT_CROSTINI_NAME" />. Se a definição for mudada para "Desativada", a política será aplicada para iniciar novos contêineres <ph name="PRODUCT_CROSTINI_NAME" />, e não para os já existentes.</translation>
+<translation id="6462604655173570082">Se a política for ativada ou deixada sem definição, os usuários poderão ver e usar o botão do <ph name="GOOGLE_LENS_PRODUCT_NAME" /> na caixa de pesquisa da página "Nova guia". Se a política for desativada, o botão do <ph name="GOOGLE_LENS_PRODUCT_NAME" /> não vai aparecer na caixa de pesquisa na página "Nova guia".</translation>
 <translation id="6464074037294098618">Ativa o Preenchimento automático de endereços</translation>
 <translation id="6467613372414922590">Permitir hosts de mensagens nativas no nível do usuário (instalados sem permissão do administrador)</translation>
 <translation id="6473623140202114570">Configure a lista de domínios em que a política Navegação segura não acionará avisos.</translation>
 <translation id="647645276885673708">Ativar o <ph name="LACROS_NAME" /> e defini-lo como o navegador principal</translation>
 <translation id="647698599569353771">Permitir a ativação do recurso "Compartilhar por proximidade"</translation>
+<translation id="6477685422297715670">Luz de fundo verde do teclado</translation>
 <translation id="6478258366184919502">Origens de login e de tela</translation>
 <translation id="6478261301433199402">A definição da política especifica a imagem do <ph name="PLUGIN_VM_NAME" /> para um usuário. Especifique essa política como uma string de formato JSON, com um <ph name="URL_PLUGIN_VM_IMAGE_FIELD" /> informando onde fazer o download da imagem e <ph name="HASH_PLUGIN_VM_IMAGE_FIELD" /> como um hash SHA-256 usado para verificar a integridade do download.</translation>
 <translation id="6481245670325946423">Permitir o uso do modo headless</translation>
@@ -5967,6 +6020,7 @@
 <translation id="6926703471186170050">Ativar impressão duplex de borda longa</translation>
 <translation id="6929746927224321095">Desativar o preenchimento automático</translation>
 <translation id="6931242315485576290">Desativar a sincronização de dados com o Google</translation>
+<translation id="6932282102911647185">Luz de fundo roxa do teclado</translation>
 <translation id="6940243892299228102">Não permitir que os usuários usem modelos de espaço de trabalho</translation>
 <translation id="6943577887654905793">Nome de preferência Mac/Linux:</translation>
 <translation id="6946652757373377924">
@@ -7174,6 +7228,7 @@
 <translation id="8164687848393015214">Se a política estiver definida como "Ativada", ela enviará pacotes de monitoramento de rede (<ph name="HEARTBEATS_TERM" />) para o servidor de gerenciamento. Com isso, o status de conexão é monitorado e o servidor consegue detectar se o dispositivo está off-line.
 
       Se a política for definida como "Desativada" ou não for definida, nenhum pacote será enviado.</translation>
+<translation id="8168359201203671567">Luz de fundo em arco-íris do teclado</translation>
 <translation id="8169452762291746260">Desativar o monitoramento de integridade do dispositivo</translation>
 <translation id="8171262216089271568">Ativar o cursor grande na tela de login</translation>
 <translation id="8171924760436219650">Usar o botão direito do mouse como o principal na tela de login</translation>
@@ -7395,6 +7450,9 @@
           Se esta política não for definida, o comportamento das políticas mais específicas não será afetado.</translation>
 <translation id="8350643689940867542">Desativar relatórios sobre dados de política</translation>
 <translation id="835283681355955417">Enviar relatórios sobre detalhes de periféricos</translation>
+<translation id="8356953698979920095">Se os valores forem definidos para a política, a cor de luz de fundo do teclado do dispositivo
+
+vai ser definida como padrão durante o login do usuário.</translation>
 <translation id="8357681633047935212">Limitar a duração de uma sessão de usuário</translation>
 <translation id="8357989008292691856">Lista de permissões de login de usuário</translation>
 <translation id="8359734107661430198">Ativar a API ExampleDeprecatedFeature até 02/09/2008</translation>
@@ -7415,6 +7473,7 @@
 <translation id="8381774264911275515">Desativar a transferência de cookies do SSO SAML na sessão do usuário durante o login</translation>
 <translation id="8382184662529825177">Permitir o uso de declaração remota para proteção de conteúdo no dispositivo</translation>
 <translation id="838870586332499308">Ativa roaming de dados</translation>
+<translation id="8392478748777481636">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" />.</translation>
 <translation id="8393850527597048037">Somente de plataforma</translation>
 <translation id="8395749934754392549">Controla configurações do contêiner Android (ARC) e de apps Android.</translation>
 <translation id="8398952282584132331">Ativar tela de privacidade</translation>
@@ -7724,6 +7783,7 @@
       No <ph name="MS_WIN_NAME" />, essa funcionalidade está disponível apenas em instâncias associadas a um domínio do <ph name="MS_AD_NAME" />, executadas no Windows 10 Pro ou registradas no <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />. No <ph name="MAC_OS_NAME" />, essa funcionalidade está disponível apenas em instâncias gerenciadas por MDM ou associadas a um domínio via MCX.</translation>
 <translation id="8671119576957984818">Ativar hub de compartilhamento da área de trabalho</translation>
 <translation id="8671193325113134911">Ativar a verificação rigorosa de tipo MIME para scripts de worker</translation>
+<translation id="8671303329680827168">Essa política foi descontinuada. Use a <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />.</translation>
 <translation id="8671314659400112135">Se a política for ativada ou for deixada sem definição, o <ph name="PRODUCT_NAME" /> vai poder aplicar a mitigação de segurança de pontos de extensão para bloquear pontos de extensão legados no processo do navegador.
 
       Se a política for desativada, a segurança e a estabilidade do <ph name="PRODUCT_NAME" /> serão prejudicadas, já que códigos desconhecidos e possivelmente hostis poderão ser carregados nos processos do navegador <ph name="PRODUCT_NAME" />. Desative a política apenas se softwares de terceiros que precisam ser executados nos processos do navegador <ph name="PRODUCT_NAME" /> apresentarem problemas de compatibilidade.
@@ -7820,6 +7880,7 @@
 <translation id="8767743923206070405">Se a política for definida como "Ativada", o botão "Início" será exibido na barra de ferramentas do <ph name="PRODUCT_NAME" />. Se a política for definida como "Desativada", o botão "Início" não será exibido.
 
       Se você definir a política, os usuários não poderão mudá-la no <ph name="PRODUCT_NAME" />. Se não defini-la, os usuários poderão decidir se o botão "Início" será exibido.</translation>
+<translation id="8767749141825412133">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="AUTH_SERVER_ALLOWLIST_POLICY_NAME" />.</translation>
 <translation id="8768528324886802059">A definição da política especifica quais hosts de mensagens nativas não estão sujeitos à lista de proibições. Um valor de <ph name="WILDCARD_VALUE" /> da lista de proibições significa que todos os hosts de mensagens nativas serão proibidos, a menos que tenham permissão explícita.
 
       Todos os hosts de mensagens nativas têm permissão por padrão. No entanto, se todos os hosts de mensagens nativas forem bloqueados pela política, um administrador poderá usar a lista de permissões para mudar essa política.</translation>
@@ -7994,6 +8055,7 @@
 <translation id="8955719471735800169">Voltar ao início</translation>
 <translation id="8956312248048980644">Permite o clustering do agente com origin-key por padrão.</translation>
 <translation id="8970205333161758602">Remover a solicitação de recusa do <ph name="PRODUCT_FRAME_NAME" /></translation>
+<translation id="8974588819713914715">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="URL_ALLOWLIST_POLICY_NAME" />.</translation>
 <translation id="8976248126101463034">Permitir autenticação gnubby para hosts de acesso remoto</translation>
 <translation id="8976531594979650914">Usar a impressora padrão do sistema como padrão</translation>
 <translation id="8977192934280677167">Permitir o acesso à pesquisa do menu de contexto pelo provedor de pesquisa padrão</translation>
@@ -8047,6 +8109,7 @@
 
       O valor da política precisa ser especificado em segundos.</translation>
 <translation id="9015578113567730893">Frequência de coleta da telemetria de áudio em milissegundos.</translation>
+<translation id="9020630127193895800">Luz de fundo índigo do teclado</translation>
 <translation id="9031831501689819108">Ativar o Suporte a navegadores legados</translation>
 <translation id="9035086760683255833">Ativar o recurso de acessibilidade que destaca o objeto em foco por meio do teclado.
 
@@ -8169,6 +8232,7 @@
       Se ela for definida como verdadeira, as informações sobre o sistema do dispositivo serão enviadas.</translation>
 <translation id="9131419675479917141">Permitir que os usuários definam um PIN fraco, mas mostrar um aviso</translation>
 <translation id="913195841488580904">Bloquear acesso a uma lista de URLs</translation>
+<translation id="9133526448421932754">Luz de fundo amarela do teclado</translation>
 <translation id="9135033364005346124">Ativar proxy do <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">Desativar a IU de download em balão</translation>
 <translation id="9136399279941091445">Intervalos de horas de inatividade quando as políticas do dispositivo específicas são lançadas</translation>
@@ -8275,6 +8339,7 @@
 <translation id="982497069985795632">Ativar verificação ortográfica</translation>
 <translation id="983256325512298435">Define uma lista de protocolos que podem inicializar um aplicativo externo a partir de origens listadas sem notificar o usuário</translation>
 <translation id="987261962216071510">Permitir apenas logins em navegação como visitante</translation>
+<translation id="989197274317162189">Essa política foi descontinuada e parou de ter suporte. Use a <ph name="URL_BLOCKLIST_POLICY_NAME" />.</translation>
 <translation id="991560005425213776">Enviar nome de usuário e de arquivo para impressoras nativas</translation>
 <translation id="99202634486128833">Se a política for definida como CopyCaCerts, todos os certificados de CA instalados por ONC com <ph name="WEB_TRUSTED_BIT" /> ficarão disponíveis para apps ARC.
 
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 2d43fd2..5f2a799 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -90,6 +90,9 @@
 <translation id="1059069692400941670">ปิดใช้การนำเข้าเครื่องมือค้นหาเริ่มต้นเมื่อเรียกใช้ครั้งแรก</translation>
 <translation id="1062011392452772310">เปิดใช้งานการยืนยันระยะไกลสำหรับอุปกรณ์</translation>
 <translation id="1062407476771304334">แทนที่</translation>
+<translation id="1063860513136880926">การตั้งค่านโยบายเป็น "เปิดใช้" จะไม่อนุญาตให้ถ่ายภาพหน้าจอด้วยแป้นพิมพ์ลัดหรือ API ส่วนขยาย การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะอนุญาตให้ถ่ายภาพหน้าจอได้
+
+โปรดทราบว่าใน "<ph name="MS_WIN_NAME" />", "<ph name="MAC_OS_NAME" />" และ "<ph name="LINUX_OS_NAME" />" การตั้งค่านี้ไม่ได้ป้องกันการถ่ายภาพหน้าจอด้วยระบบปฏิบัติการหรือแอปพลิเคชันของบุคคลที่สาม</translation>
 <translation id="1069489575852947981">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าหมายความว่า ระบบจะตั้งค่าบัญชีในอุปกรณ์ให้ลงชื่อเข้าใช้โดยอัตโนมัติด้วยความล่าช้าเป็น 0 <ph name="PRODUCT_OS_NAME" /> จะดำเนินการตามแป้นพิมพ์ลัด Ctrl+Alt+S เพื่อข้ามการลงชื่อเข้าใช้โดยอัตโนมัติ และจะแสดงหน้าจอลงชื่อเข้าใช้
 
       การตั้งค่านโยบายเป็น "ปิดใช้" หมายความว่าผู้ใช้จะข้ามการลงชื่อเข้าใช้โดยอัตโนมัติด้วยความล่าช้าเป็น 0 ไม่ได้ (หากกำหนดค่าไว้)</translation>
@@ -150,6 +153,7 @@
       หากตั้งค่านโยบายนี้เป็น "เปิดใช้" หรือไม่ได้ตั้งค่า ฟีเจอร์รายการช็อปปิ้งจะพร้อมใช้งานสำหรับผู้ใช้
       หากตั้งค่านโยบายนี้เป็น "ปิดใช้" ฟีเจอร์รายการช็อปปิ้งจะใช้งานไม่ได้
       </translation>
+<translation id="1144147113722324623">เปิดใช้การอัปเกรด HTTPS อัตโนมัติสำหรับเสียงและวิดีโอ รวมถึงแสดงคำเตือน "ไม่ปลอดภัย" สำหรับรูปภาพ</translation>
 <translation id="1144540226829648811">ระบุเวอร์ชันการเผยแพร่ที่อุปกรณ์นี้ควรจะใช้ได้
 
       การตั้งค่า <ph name="CHROME_OS_RELEASE_CHANNEL_POLICY_NAME" /> จะมีผลเฉพาะในกรณีที่ตั้งค่า <ph name="CHROME_OS_RELEASE_CHANNEL_DELEGATED_POLICY_NAME" /> เป็น "เท็จ"</translation>
@@ -222,6 +226,7 @@
 <translation id="1209096923317019235">กําหนดแอปเป็นตัวแฮนเดิลเริ่มต้นสําหรับนามสกุลไฟล์ที่ระบุ</translation>
 <translation id="120937472976628837">รายงานข้อมูลพัดลม</translation>
 <translation id="1212233008927724662">ปิดใช้การโหลด Login WebUI แบบ Lazy Loading</translation>
+<translation id="1214872329693851703">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้ <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" /> แทน</translation>
 <translation id="1216919699175573511">เปิดใช้การสนับสนุน Signed HTTP Exchange (SXG)</translation>
 <translation id="1219027971768347970">ใช้การกำหนดค่าเริ่มต้นกับแซนด์บ็อกซ์เสียง</translation>
 <translation id="1219695476179627719">ระบุว่าอุปกรณ์ควรย้อนกลับไปใช้เวอร์ชันที่ <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> ตั้งค่าไว้หรือไม่ หากใช้เวอร์ชันที่ใหม่กว่าอยู่
@@ -250,6 +255,7 @@
       หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะเปิดใช้ฟีเจอร์นี้และผู้ใช้จะเปลี่ยนแปลงการตั้งค่านี้ได้
       เมื่อตั้งค่าเริ่มต้นของนโยบายนี้เป็น "เท็จ" จะไม่มีการแนะนำอีโมจิและผู้ใช้จะลบล้างการตั้งค่าไม่ได้</translation>
 <translation id="1241536186320046498">ถามทุกครั้งที่เว็บไซต์ต้องการได้รับสิทธิ์สำหรับตำแหน่งหน้าต่าง</translation>
+<translation id="1243311058213605210">ปิดใช้การอัปเกรด HTTPS อัตโนมัติสำหรับเสียงและวิดีโอ รวมถึงไม่แสดงคำเตือนสำหรับรูปภาพ</translation>
 <translation id="1243570869342663665">ควบคุมการกรองเนื้อหาสำหรับผู้ใหญ่ของ SafeSites</translation>
 <translation id="1244309789361056660">เราได้นำนโยบายนี้ออกจากเวอร์ชัน M87 และข้อมูลไดเรกทอรีของหน้าแรกจะย้ายไป ext4 โดยอัตโนมัติเมื่อลงชื่อเข้าใช้
       การตั้งค่านโยบายจะระบุการดำเนินการที่จะทำเมื่อมีการสร้างไดเรกทอรีหลักของผู้ใช้ด้วยการเข้ารหัส ecryptfs แอป Android อาจไม่ทำงาน เว้นแต่ไดเรกทอรีหลักที่เข้ารหัส ecryptfs จะย้ายข้อมูลไปยังการเข้ารหัส ext4
@@ -565,6 +571,7 @@
 <translation id="1557113199339446336">การตั้งค่านโยบายเป็น "จริง" จะทำให้อุปกรณ์ที่ลงทะเบียนรายงานข้อมูลเกี่ยวกับเหตุการณ์การตรวจจับและการตอบสนองแบบขยาย (XDR)
 
       การตั้งค่านโยบายเป็น "เท็จ" หรือไม่ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไม่รายงานเหตุการณ์การตรวจจับและการตอบสนองแบบขยาย (XDR)</translation>
+<translation id="1560279917909364275">ให้สิทธิ์แอปจดโน้ตที่อนุญาตบนหน้าจอล็อกของ <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="1561424797596341174">การลบล้างนโยบายสำหรับเวอร์ชันการแก้ปัญหาของโฮสต์การเข้าถึงระยะไกล</translation>
 <translation id="1561967320164410511">U2F พร้อมส่วนขยายสำหรับการรับรองแต่ละรายการ</translation>
 <translation id="1567718448549957373">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ตั้งค่าจะอนุญาตคำขอตรวจสอบสิทธิ์<ph name="BASIC_AUTH" />ที่ได้รับผ่าน HTTP ที่ไม่ปลอดภัย
@@ -638,6 +645,7 @@
 <translation id="1616280227447957376">อนุญาตให้ดำเนินการจากหน้าคำเตือน SSL ในต้นทางเฉพาะบางแห่ง</translation>
 <translation id="1617235075406854669">เปิดใช้งานการนำออกเบราว์เซอร์และประวัติการดาวน์โหลด</translation>
 <translation id="1620510694547887537">กล้อง</translation>
+<translation id="1621245029534873770">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="AUTOPLAY_ALLOWLIST_POLICY_NAME" />" แทน</translation>
 <translation id="162162247775156979">ปิดใช้การรายงานสถานะพื้นที่เก็บข้อมูลของอุปกรณ์</translation>
 <translation id="1625700732886306811">อนุญาตให้ "<ph name="PRODUCT_NAME" />" เชื่อมต่อกับอุปกรณ์ในที่อยู่ IP ทั้งหมด</translation>
 <translation id="1626379196197114720">อนุญาตให้ใช้แคชย้อนหลัง</translation>
@@ -1028,6 +1036,7 @@
 
       หากตั้งค่านโยบายเป็น "เท็จ" หรือไม่ได้ตั้งค่า จะไม่มีการรายงานข้อมูล
       หากตั้งค่านโยบายเป็น "จริง" จะมีการรายงานข้อมูลเขตเวลาของอุปกรณ์ที่ตั้งไว้ในปัจจุบัน</translation>
+<translation id="1990784382342293892">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />" แทน</translation>
 <translation id="199764499252435679">เปิดใช้การอัปเดตคอมโพเนนต์ใน <ph name="PRODUCT_NAME" /></translation>
 <translation id="1997943707974344423">อนุญาตให้ใช้ Smart Lock</translation>
 <translation id="1998504583649140526">การตั้งค่าคำขอเครือข่ายส่วนตัว</translation>
@@ -1123,6 +1132,7 @@
 
       หากคุณตั้งค่านโยบายไว้ ผู้ใช้จะเปลี่ยนไม่ได้ หากไม่ได้ตั้งค่า ผู้ใช้จะเลือกใช้ฟีเจอร์ได้</translation>
 <translation id="2093552723795057221">อย่ารายงานสถานะเสียง</translation>
+<translation id="209388704279338003">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้ <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" /> แทน</translation>
 <translation id="2093951844062548778">นโยบายนี้ให้สิทธิ์ฟีเจอร์คำตอบด่วนในการเข้าถึงเนื้อหาที่เลือกและส่งข้อมูลไปยังเซิร์ฟเวอร์เพื่อรับผลคำจำกัดความ
 
       หากเปิดใช้นโยบายหรือไม่ได้ตั้งค่า ระบบจะเปิดใช้คำจำกัดความของคำตอบด่วน
@@ -1470,6 +1480,7 @@
       การไม่ตั้งค่านโยบายหมายความว่า <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> จะมีผลกับทุกเว็บไซต์ (หากตั้งค่าไว้) แต่หากไม่ได้ตั้งค่าไว้ การตั้งค่าส่วนตัวของผู้ใช้จะมีผล
 
       ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ URL ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns อย่างไรก็ตาม นโยบายนี้ไม่รองรับรูปแบบที่มีไวลด์การ์ด "*" และ "[*.]" ในโฮสต์อีกแล้วตั้งแต่รุ่น M85</translation>
+<translation id="2421779938235645781">สีไฟแบ็กไลต์ของแป้นพิมพ์สอดคล้องกับวอลเปเปอร์ปัจจุบัน</translation>
 <translation id="2423255396068675416">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะให้ผู้ใช้เรียกใช้ <ph name="PRODUCT_CROSTINI_NAME" /> ได้ตราบใดที่มีการเปิดใช้ <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> และ <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> การตั้งค่านโยบายเป็น "ปิดใช้" จะปิด <ph name="PRODUCT_CROSTINI_NAME" /> ไม่ให้ผู้ใช้ใช้งาน การเปลี่ยนเป็น "ปิดใช้" จะเริ่มใช้นโยบายเพื่อเริ่มคอนเทนเนอร์ <ph name="PRODUCT_CROSTINI_NAME" /> ใหม่ ไม่ใช่คอนเทนเนอร์ที่ทำงานอยู่แล้ว</translation>
 <translation id="242521047682347997">ไม่อนุญาตให้ผู้ใช้ซิงค์ข้อความ SMS ระหว่างโทรศัพท์กับ Chromebook</translation>
 <translation id="2426782419955104525">เปิดใช้ฟีเจอร์ค้นหาทันใจของ <ph name="PRODUCT_NAME" /> และป้องกันไม่ให้ผู้ใช้เปลี่ยนการตั้งค่านี้
@@ -1860,7 +1871,20 @@
 <translation id="2801065672151277034">การตั้งค่าการจัดการใบรับรอง</translation>
 <translation id="2801155097555584385">ตั้งค่าการเริ่มชาร์จแบตเตอรี่ที่กำหนดเองเป็นเปอร์เซ็นต์</translation>
 <translation id="2801378553855965587">ปิดใช้การผสานรวม "<ph name="GOOGLE_CALENDAR_NAME" />"</translation>
+<translation id="2804129948908818402">นโยบายนี้ให้ผู้ดูแลระบบระบุแอปที่ทำหน้าที่เป็นตัวแฮนเดิลเริ่มต้นสำหรับนามสกุลไฟล์ที่เกี่ยวข้องใน "<ph name="PRODUCT_OS_NAME" />" ซึ่งผู้ใช้เปลี่ยนแปลงไม่ได้
+
+สำหรับนามสกุลไฟล์ทั้งหมดที่ไม่ได้ระบุไว้ในนโยบาย ผู้ใช้จะกำหนดค่าเริ่มต้นของตนเองตามเวิร์กโฟลว์ปกติได้อย่างอิสระ
+
+ระบุแอป Chrome ตามรหัส เช่น <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_CHROME_APP_EXAMPLE" />
+ระบุเว็บแอปตาม URL ที่ใช้ใน <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> เช่น <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_WEB_APP_EXAMPLE" />
+ระบุแอป Android ตามชื่อแพ็กเกจ เช่น <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_ANDROID_APP_EXAMPLE" />
+และระบุ System Web Apps ตามชื่อการเขียนโค้ดรูปแบบงู เช่น <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_SYSTEM_WEB_APP_EXAMPLE" />
+
+โปรดทราบว่าแอป "ต้อง" ประกาศว่าตนเองเป็นตัวแฮนเดิลไฟล์สำหรับนามสกุลไฟล์ที่ระบุในไฟล์ Manifest เพื่อให้รายการดังกล่าวในนโยบายมีผล (นโยบาย "ไม่ได้" ขยายความสามารถของแอปที่มีอยู่)
+
+การไม่ตั้งค่านโยบายจะทำให้ "<ph name="PRODUCT_OS_NAME" />" เลือกตัวแฮนเดิลเริ่มต้นตามตรรกะภายในได้</translation>
 <translation id="2805707493867224476">อนุญาตให้ไซต์ทั้งหมดแสดงป๊อปอัป</translation>
+<translation id="2806804577787377637">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้ <ph name="PER_APP_TIME_LIMITS_ALLOWLIST" /> แทน</translation>
 <translation id="2818074121667686266">เมื่อตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่า ผู้ใช้จะได้รับข้อความแจ้งหากมีการเข้าถึงการจับเสียง ยกเว้นใน URL ที่ตั้งค่าไว้ในรายการ AudioCaptureAllowedUrls
 
       การตั้งค่านโยบายเป็น "ปิดใช้" จะปิดข้อความแจ้ง และการจับเสียงจะใช้ได้เฉพาะกับ URL ที่ตั้งค่าไว้ในรายการ AudioCaptureAllowedUrls เท่านั้น
@@ -1892,6 +1916,7 @@
 <translation id="2853649500575897584">อย่าบล็อกจุดขยายสัญญาณเดิมในกระบวนการของเบราว์เซอร์</translation>
 <translation id="285480231336205327">เปิดใช้งานโหมดความคมชัดสูง</translation>
 <translation id="285627849510728211">ตั้งค่ากำหนดวันของโหมดการชาร์จแบตเตอรี่ขั้นสูง</translation>
+<translation id="2864207379891420023">กำหนดค่ารายการที่อนุญาตสำหรับการติดตั้งส่วนขยาย</translation>
 <translation id="2866387633548787857">ปิดใช้การเปลี่ยนอย่างรวดเร็ว</translation>
 <translation id="2866619962692161453">ประเภทนโยบายเมตา</translation>
 <translation id="2866726566162790531">รายการต้นทางที่อนุญาตการตรวจสอบสิทธิ์ HTTP ทั้งหมด</translation>
@@ -2251,6 +2276,7 @@
 <translation id="3168968618972302728">นโยบายเกี่ยวกับการตรวจสอบสิทธิ์ Kerberos</translation>
 <translation id="3169872426103732947">แสดง URL เริ่มต้นและอนุญาตให้ผู้ใช้เปลี่ยนเป็น URL แบบเต็มได้</translation>
 <translation id="3171369832001535378">เทมเพลตชื่อโฮสต์เครือข่ายของอุปกรณ์</translation>
+<translation id="3173844121395372156">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />" แทน</translation>
 <translation id="3177802893484440532">ต้องใช้การตรวจสอบ OCSP/CRL ออนไลน์สำหรับ Trust Anchor ในพื้นที่</translation>
 <translation id="3180671894201217988">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้ซอฟต์แวร์ของบุคคลที่สามแทรกโค้ดปฏิบัติการลงในกระบวนการของ <ph name="PRODUCT_NAME" /> ไม่ได้
 
@@ -2389,6 +2415,7 @@
       ใน <ph name="MS_WIN_NAME" /> ฟังก์ชันการทำงานนี้ใช้ได้เฉพาะในอินสแตนซ์ที่เข้าร่วมโดเมน <ph name="MS_AD_NAME" />, ทำงานใน Windows 10 Pro หรือลงทะเบียนใน<ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> ใน <ph name="MAC_OS_NAME" /> ฟังก์ชันการทำงานนี้ใช้ได้เฉพาะในอินสแตนซ์ที่จัดการผ่าน MDM หรือเข้าร่วมโดเมนผ่าน MCX</translation>
 <translation id="3261592499545947104">จำนวนวินาทีก่อนใบรับรองจะหมดอายุซึ่งระบบจะเริ่มต่ออายุใบรับรอง</translation>
 <translation id="3262080895269946462">อนุญาตให้ปิดใช้ WebSQL ในบริบทของบุคคลที่สามโดยค่าเริ่มต้น</translation>
+<translation id="3263892501786842604">อนุญาตให้แสดงปุ่ม <ph name="GOOGLE_LENS_PRODUCT_NAME" /> ในช่องค้นหาบนหน้าแท็บใหม่ หากรองรับ</translation>
 <translation id="3264706118366247207">กำหนดค่ารายการประเภทข้อมูลการท่องเว็บที่ควรจะลบออกเมื่อผู้ใช้ปิดหน้าต่างเบราว์เซอร์ทั้งหมด ประเภทข้อมูลที่มี ได้แก่ ประวัติการท่องเว็บ (<ph name="DATA_TYPE_BROWSING_HISTORY" />) ประวัติการดาวน์โหลด (<ph name="DATA_TYPE_DOWNLOAD_HISTORY" />) คุกกี้ (<ph name="DATA_TYPE_COOKIES_AND_OTHER_SITE_DATA" />) แคช <ph name="DATA_TYPE_CACHED_IMAGES_AND_FILES" /> ข้อความป้อนอัตโนมัติ (<ph name="DATA_TYPE_AUTOFILL" />) รหัสผ่าน (<ph name="DATA_TYPE_PASSWORD" />) การตั้งค่าเว็บไซต์ (<ph name="DATA_TYPE_SITE_SETTINGS" />) และข้อมูลแอปที่โฮสต์ไว้ (<ph name="DATA_TYPE_HOSTED_APP_DATA" />) นโยบายนี้ไม่มีความสำคัญเหนือ <ph name="ALLOW_DELETING_BROWSER_HISTORY_POLICY_NAME" />
 
       นโยบายนี้กำหนดให้ตั้งค่านโยบาย <ph name="SYNC_DISABLED_POLICY_NAME" /> เป็น "จริง" มิเช่นนั้นระบบจะไม่สนใจนโยบายดังกล่าว หากตั้งค่านโยบายนี้ไว้ที่ระดับแพลตฟอร์ม ก็ควรจะปิดใช้การซิงค์ที่ระดับแพลตฟอร์ม หากตั้งค่านโยบายนี้ไว้ที่ระดับผู้ใช้ ก็ควรจะปิดใช้การซิงค์สำหรับผู้ใช้รายดังกล่าวเพื่อให้นโยบายนี้มีผล
@@ -2525,6 +2552,7 @@
 <translation id="3420141485959154417">หาก <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> เปิดอยู่ การตั้งค่า <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POLICY_NAME" /> จะระบุ URL ของเครื่องมือค้นหาที่ใช้ในการค้นหารูปภาพ (หากตั้งค่า <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POST_PARMS_POLICY_NAME" /> ไว้ คำขอค้นหารูปภาพจะใช้เมธอด POST แทน)
 
       หากไม่ตั้งค่า <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POLICY_NAME" /> จะไม่มีการใช้การค้นหารูปภาพ</translation>
+<translation id="3426434797050451264">นโยบายนี้ยังใช้เพื่อระบุแอป Android เป็นตัวแฮนเดิลไฟล์เริ่มต้นได้</translation>
 <translation id="3428247105888806363">เปิดใช้งานการคาดการณ์เครือข่าย</translation>
 <translation id="3432863169147125747">ควบคุมการตั้งค่าการพิมพ์</translation>
 <translation id="3434053014926283175">สลับปุ่มหลักของเมาส์ไปเป็นปุ่มด้านขวาในหน้าจอการเข้าสู่ระบบ
@@ -2831,6 +2859,7 @@
 <translation id="3755237588083934849">การตั้งค่านโยบายจะกำหนดความถี่ในการส่งการอัปโหลดสถานะอุปกรณ์เป็นมิลลิวินาที ค่าขั้นต่ำที่อนุญาตคือ 60 วินาที
 
       หากไม่ได้ตั้งค่า ระบบจะใช้ช่วงเวลาเริ่มต้น 3 ชั่วโมง</translation>
+<translation id="3755796472192036324">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีขาว</translation>
 <translation id="3756011779061588474">บล็อกโหมดนักพัฒนาซอฟต์แวร์</translation>
 <translation id="3756516139200532906">อนุญาตให้ผู้ใช้ที่มีการจัดการกำหนดค่าชื่อโฮสต์ของอุปกรณ์ได้</translation>
 <translation id="3756737071958233151">เปิดใช้การอัปโหลดบันทึกระบบของอุปกรณ์</translation>
@@ -3168,6 +3197,7 @@
 
       ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ <ph name="URL_LABEL" /> ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns  <ph name="WILDCARD_VALUE" /> ไม่ใช่ค่าที่ยอมรับสำหรับนโยบายนี้</translation>
 <translation id="4061590579642538878">รายงานข้อมูลเกี่ยวกับรายงานข้อขัดข้อง</translation>
+<translation id="4070039109671307724">เบ็ดเตล็ด</translation>
 <translation id="4072225853834793549">ปิดใช้ทางลัดสำหรับการช่วยเหลือพิเศษในหน้าจอลงชื่อเข้าใช้</translation>
 <translation id="4075675819066819571">กำหนดตำแหน่งชั้นวางให้อยู่ที่ด้านซ้ายของหน้าจอ</translation>
 <translation id="408029843066770167">อนุญาตคำค้นหาที่ส่งไปยังบริการเวลาของ Google</translation>
@@ -3545,6 +3575,7 @@
 <translation id="4492287494009043413">ปิดใช้งานการจับภาพหน้าจอ</translation>
 <translation id="4494132853995232608">Wilco DTC</translation>
 <translation id="449423975179525290">กำหนดค่านโยบายที่เกี่ยวข้องกับ <ph name="PLUGIN_VM_NAME" /></translation>
+<translation id="449561952193478261">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีน้ำเงิน</translation>
 <translation id="449784980858429908">ให้สิทธิ์เว็บไซต์โดยอัตโนมัติในการเชื่อมต่อกับพอร์ตอนุกรมทุกพอร์ต</translation>
 <translation id="4499376951770369935">การอัปเดต Chrome OS ได้รับการตั้งค่าเป็นเวอร์ชันที่ระบุไว้ในไฟล์ Manifest ของแอปคีออสก์</translation>
 <translation id="450080746522343150">บล็อกการดาวน์โหลดทั้งหมด</translation>
@@ -3672,6 +3703,14 @@
 <translation id="4611983465824842867">ไม่แสดงคำเตือนหรือปิดใช้การป้อนข้อความอัตโนมัติในแบบฟอร์มที่ไม่ปลอดภัย</translation>
 <translation id="4615003180013429835">โหมดการแยกวิเคราะห์รายการเว็บไซต์</translation>
 <translation id="4617338332148204752">ข้ามการตรวจสอบเมตาแท็กใน <ph name="PRODUCT_FRAME_NAME" /></translation>
+<translation id="4624006912948309924">การตั้งค่านโยบายจะกำหนดตัวระบุแอปพลิเคชันที่ <ph name="PRODUCT_OS_NAME" /> แสดงเป็นแอปที่ปักหมุดไว้ในแถบ Launcher และผู้ใช้จะเปลี่ยนไม่ได้
+
+ระบุแอป Chrome ตามรหัส เช่น pjkljhegncpnkpknbcohdijeoejaedia
+ระบุแอป Android ตามชื่อแพ็กเกจ เช่น com.google.android.gm
+ระบุเว็บแอปตาม URL ที่ใช้ใน <ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" /> เช่น https://google.com/maps
+และระบุ System Web Apps ตามชื่อการเขียนโค้ดรูปแบบงู เช่น <ph name="PINNED_LAUNCHER_APPS_POLICY_SYSTEM_WEB_APP_EXAMPLE" />
+
+การไม่ตั้งค่านโยบายนี้จะให้ผู้ใช้เปลี่ยนแปลงรายการแอปที่ปักหมุดไว้ใน Launcher ได้</translation>
 <translation id="4624417808625504735">บล็อก JavaScript ไม่ให้ใช้ JIT ในเว็บไซต์เหล่านี้</translation>
 <translation id="46321462262887935">ใช้ปุ่มแถวบนสุดเป็นปุ่มฟังก์ชัน แต่ผู้ใช้จะแก้ไขได้</translation>
 <translation id="4632343302005518762">อนุญาตให้ <ph name="PRODUCT_FRAME_NAME" /> จัดการประเภทเนื้อหาตามที่แสดงในรายการ</translation>
@@ -3704,6 +3743,7 @@
 
       หมายเหตุ: การตั้งค่านี้จะลบล้าง <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> หากมี</translation>
 <translation id="4658380868451934335">เปิดใช้การพิมพ์ตามคำบอกในหน้าจอการเข้าสู่ระบบ</translation>
+<translation id="4660356908994631271">แสดงปุ่ม Google Lens ในช่องค้นหาบนหน้าแท็บใหม่</translation>
 <translation id="4661889655253181651">การตั้งค่าเนื้อหาช่วยให้คุณระบุวิธีจัดการเนื้อหาบางประเภท (เช่น คุกกี้ รูปภาพ หรือ JavaScript) ได้</translation>
 <translation id="4663509616441994711">ปิดใช้การรวมนโยบายในระดับผู้ใช้บนระบบคลาวด์</translation>
 <translation id="4665897631924472251">การตั้งค่าการจัดการส่วนขยาย</translation>
@@ -3802,6 +3842,7 @@
 <translation id="4812270373673968774">การตั้งค่านโยบายเป็น "เสมอ" จะซ่อนแถบ <ph name="PRODUCT_OS_NAME" /> โดยอัตโนมัติ การตั้งค่านโยบายเป็น "ไม่เลย" จะแสดงแถบดังกล่าวเสมอ
 
       หากคุณตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนไม่ได้ หากไม่ได้ตั้งค่า ผู้ใช้จะเป็นผู้เลือกว่าจะซ่อนแถบดังกล่าวโดยอัตโนมัติหรือไม่</translation>
+<translation id="4812309945046430049">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีแดง</translation>
 <translation id="4812714598405913256">กำหนดค่าข้อความการหมดอายุของการอัปเดตอัตโนมัติสำหรับนโยบาย DeviceMinimumVersion</translation>
 <translation id="4815581264328351694">แสดงตัวเลือกการช่วยเหลือพิเศษในเมนูถาดระบบ</translation>
 <translation id="4816674326202173458">อนุญาตให้ผู้ใช้ขององค์กรเป็นทั้งผู้ใช้หลักและรอง (ค่าเริ่มต้นสำหรับผู้ใช้ที่ไม่ได้รับการจัดการ)</translation>
@@ -3846,6 +3887,7 @@
 <translation id="487460824085252184">ย้ายข้อมูลอัตโนมัติโดยไม่ขอคำยินยอมจากผู้ใช้</translation>
 <translation id="4874982543810021567">บล็อก WebUSB ในเว็บไซต์เหล่านี้</translation>
 <translation id="4876805738539874299">เปิดใช้เวอร์ชันสูงสุดของ SSL ไว้</translation>
+<translation id="4877305769899044884">สีเริ่มต้นสำหรับไฟแบ็กไลต์ของแป้นพิมพ์</translation>
 <translation id="4886783562285047261">การตั้งค่านโยบายเป็น "เปิดใช้" จะบังคับให้มีการลงทะเบียน <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> และบล็อกกระบวนการเปิดตัว <ph name="PRODUCT_NAME" /> หากไม่สำเร็จ
 
       การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ตั้งค่าจะแสดง <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> เป็นไม่บังคับและจะไม่บล็อกกระบวนการเปิดตัว <ph name="PRODUCT_NAME" /> หากไม่สำเร็จ
@@ -4291,6 +4333,7 @@
 <translation id="5331746669335642668">นโยบายระบบคลาวด์ของ <ph name="PRODUCT_NAME" /> จะลบล้างนโยบายแพลตฟอร์ม</translation>
 <translation id="5334501839642146593">ไม่ส่งเมตริกไปยัง Google</translation>
 <translation id="5340008866815063393">เปิดใช้การรายงานข้อมูลนโยบาย</translation>
+<translation id="5345910753471481870">ไม่แสดงปุ่ม Google Lens ในช่องค้นหาบนหน้าแท็บใหม่</translation>
 <translation id="5346587320074666194">บล็อกสิทธิ์เข้าถึงเซ็นเซอร์ในเว็บไซต์เหล่านี้</translation>
 <translation id="534836255587440809">ปิดใช้การคลิกอัตโนมัติในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="5362531528507578966">ลบล้างโหมดการพิมพ์กราฟิกพื้นหลังที่เป็นค่าเริ่มต้น</translation>
@@ -4881,6 +4924,7 @@
       ปัจจุบันนโยบายนี้ใช้ได้กับเซสชันผู้มาเยือนที่มีการจัดการเท่านั้น
 
       แต่ละรายการในนโยบายคือออบเจ็กต์ที่มี <ph name="URL_LABEL" /> ของไฟล์ Manifest สำหรับการอัปเดตและรหัส Web Bundle ของ Isolated Web App ต้องระบุข้อมูลทั้ง 2 ช่อง</translation>
+<translation id="596523880465577341">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="EXTENSION_INSTALL_ALLOWLIST_POLICY_NAME" />" แทน</translation>
 <translation id="5966615072639944554">ส่วนขยายได้รับอนุญาตให้ใช้ API การยืนยันระยะไกล</translation>
 <translation id="596732417280023843">ชื่อของโปรไฟล์ใบรับรอง</translation>
 <translation id="5972538402066550344">อนุญาตการควบคุมการรายงานแบบละเอียด</translation>
@@ -5100,6 +5144,7 @@
 <translation id="6221175752766085998">อนุญาตใบรับรองที่ออกโดย Trust Anchor ในพื้นที่ที่ไม่มีส่วนขยาย subjectAlternativeName</translation>
 <translation id="6224070048795197148">อนุญาตให้ผู้ใช้ใช้เบราว์เซอร์โดยไม่ต้องลงชื่อเข้าใช้</translation>
 <translation id="6224304369267200483">URL/โดเมนอนุญาตการยืนยันกุญแจรักษาความปลอดภัยโดยตรงโดยอัตโนมัติ</translation>
+<translation id="6225938950222983458">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้ <ph name="NOTE_TAKING_APPS_LOCK_SCREEN_ALLOWLIST" /> แทน</translation>
 <translation id="6230442621691161858">ฟีเจอร์นี้จะเปิดใช้คำแนะนำเนื้อหาใหม่ให้สำรวจ รวมแอป หน้าเว็บ และอื่นๆ
       หากตั้งค่านโยบายนี้เป็น "จริง" ระบบจะเปิดใช้คำแนะนำเนื้อหาใหม่ให้สำรวจ
       หากตั้งค่านโยบายนี้เป็น "เท็จ" ระบบจะปิดใช้คำแนะนำเนื้อหาใหม่ให้สำรวจ
@@ -5148,6 +5193,7 @@
       แต่ละรายการของนโยบายมีลักษณะเป็นสตริงที่มีรหัสส่วนขยายและอาจมี URL "อัปเดต" ที่คั่นด้วยเครื่องหมายอัฒภาค (<ph name="SEMICOLON" />) รหัสส่วนขยายคือสตริงตัวอักษร 32 ตัว เช่น ที่พบใน <ph name="CHROME_EXTENSIONS_LINK" /> เมื่ออยู่ในโหมดนักพัฒนาซอฟต์แวร์ URL "อัปเดต" (หากระบุไว้) ควรชี้ไปยังเอกสาร XML ไฟล์ Manifest ของการอัปเดตตามที่อธิบายไว้ที่ <ph name="LINK_TO_EXTENSION_DOC1" /> โดยค่าเริ่มต้น ระบบจะใช้ URL อัปเดตของ Chrome เว็บสโตร์ (ปัจจุบันคือ "https://clients2.google.com/service/update2/crx") โปรดทราบว่า URL "อัปเดต" ที่กำหนดไว้ในนโยบายนี้จะใช้สำหรับการติดตั้งครั้งแรกเท่านั้น ส่วนการอัปเดตส่วนขยายในครั้งต่อๆ ไปจะใช้ URL อัปเดตที่ระบุไว้ในไฟล์ Manifest ของส่วนขยาย
 
       ตัวอย่างเช่น <ph name="LOGIN_SCREEN_EXTENSION_POLICY_EXAMPLE" /> จะติดตั้งแอป <ph name="SMART_CARD_CONNECTOR_APP_NAME" /> จาก URL "อัปเดต" ของ Chrome เว็บสโตร์มาตรฐาน ดูข้อมูลเพิ่มเติมเกี่ยวกับการโฮสต์ส่วนขยายได้ที่ <ph name="LINK_TO_EXTENSION_DOC2" /></translation>
+<translation id="6273107124506133797">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้ <ph name="USB_DETACHABLE_ALLOWLIST_POLICY_NAME" /> แทน</translation>
 <translation id="6274202259872570803">Screencast</translation>
 <translation id="6275497712828649588">ซ่อนคำเตือนด้านความปลอดภัยเมื่อมีการใช้การติดธงบรรทัดคำสั่งที่อาจเป็นอันตราย</translation>
 <translation id="6275833043726517413">ควรใช้การใช้งาน <ph name="CORS" /> เดิมมากกว่า <ph name="CORS" /> ใหม่
@@ -5364,11 +5410,13 @@
       การตั้งค่านโยบายนี้เป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้เปลี่ยนรหัสผ่าน SAML ที่ chrome://password-change ไม่ได้ และจะไม่มีการแจ้งเตือนเมื่อรหัสผ่าน SAML ใกล้หมดอายุ</translation>
 <translation id="6457477291648119596">Type 42</translation>
 <translation id="6458361632497500815">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ได้ตั้งค่าจะให้ผู้ใช้ทั้งหมดใช้งาน <ph name="PRODUCT_CROSTINI_NAME" /> ได้ตราบใดที่มีการเปิดใช้ทั้ง 3 นโยบาย ได้แก่ <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" />, <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> และ <ph name="DEVICE_UNAFFILIATED_CROSTINI_ALLOWED_POLICY_NAME" /> การตั้งค่านโยบายเป็น "ปิดใช้" หมายความว่าผู้ใช้ที่ไม่ได้เชื่อมโยงจะใช้งาน <ph name="PRODUCT_CROSTINI_NAME" /> ไม่ได้ การเปลี่ยนเป็น "ปิดใช้" จะเริ่มใช้นโยบายเพื่อเริ่มคอนเทนเนอร์ <ph name="PRODUCT_CROSTINI_NAME" /> ใหม่ ไม่ใช่คอนเทนเนอร์ที่ทำงานอยู่แล้ว</translation>
+<translation id="6462604655173570082">การไม่ตั้งค่านโยบายหรือตั้งค่าเป็น "เปิดใช้" จะอนุญาตให้ผู้ใช้ดูและใช้ปุ่ม <ph name="GOOGLE_LENS_PRODUCT_NAME" /> ในช่องค้นหาบนหน้าแท็บใหม่ การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้ผู้ใช้ไม่เห็นปุ่ม <ph name="GOOGLE_LENS_PRODUCT_NAME" /> ในช่องค้นหาบนหน้าแท็บใหม่</translation>
 <translation id="6464074037294098618">เปิดใช้ฟีเจอร์ป้อนข้อความอัตโนมัติสำหรับที่อยู่</translation>
 <translation id="6467613372414922590">อนุญาตให้ใช้โฮสต์การรับส่งข้อความดั้งเดิมระดับผู้ใช้ (ติดตั้งโดยไม่มีสิทธิ์ของผู้ดูแลระบบ)</translation>
 <translation id="6473623140202114570">กำหนดค่ารายการโดเมนที่ Safe Browsing จะไม่เรียกให้คำเตือนแสดง</translation>
 <translation id="647645276885673708">เปิดใช้ <ph name="LACROS_NAME" /> และกำหนดให้เป็นเบราว์เซอร์หลัก</translation>
 <translation id="647698599569353771">อนุญาตให้เปิดใช้การแชร์ใกล้เคียง</translation>
+<translation id="6477685422297715670">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีเขียว</translation>
 <translation id="6478258366184919502">ต้นทางของการเข้าสู่ระบบและหน้าจอ</translation>
 <translation id="6478261301433199402">การตั้งค่านโยบายจะระบุรูปภาพ <ph name="PLUGIN_VM_NAME" /> สำหรับผู้ใช้ ระบุนโยบายนี้เป็นสตริงรูปแบบ JSON โดยที่ <ph name="URL_PLUGIN_VM_IMAGE_FIELD" /> ระบุตำแหน่งที่จะดาวน์โหลดรูปภาพและ <ph name="HASH_PLUGIN_VM_IMAGE_FIELD" /> เป็นแฮช SHA-256 ที่ใช้เพื่อยืนยันความสมบูรณ์ของการดาวน์โหลด</translation>
 <translation id="6481245670325946423">อนุญาตให้ใช้โหมดไม่มีส่วนหัว</translation>
@@ -5877,6 +5925,7 @@
 <translation id="6926703471186170050">เปิดใช้การพิมพ์ 2 ด้านตามขอบด้านยาว</translation>
 <translation id="6929746927224321095">ปิดใช้การป้อนข้อความอัตโนมัติ</translation>
 <translation id="6931242315485576290">ปิดใช้งานการซิงค์ข้อมูลกับ Google</translation>
+<translation id="6932282102911647185">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีม่วง</translation>
 <translation id="6940243892299228102">ไม่อนุญาตให้ผู้ใช้ใช้เทมเพลตเดสก์</translation>
 <translation id="6943577887654905793">ชื่อค่ากำหนด Mac/Linux:</translation>
 <translation id="6946652757373377924">
@@ -7080,6 +7129,7 @@
 <translation id="8164687848393015214">การตั้งค่านโยบายเป็น "เปิดใช้" จะส่งการตรวจสอบแพ็กเก็ตเครือข่าย (<ph name="HEARTBEATS_TERM" />) ไปยังเซิร์ฟเวอร์การจัดการเพื่อตรวจสอบสถานะออนไลน์ เพื่อให้เซิร์ฟเวอร์ตรวจสอบว่าอุปกรณ์ออฟไลน์อยู่หรือไม่
 
       การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะไม่ส่งแพ็กเก็ต</translation>
+<translation id="8168359201203671567">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีรุ้ง</translation>
 <translation id="8169452762291746260">ปิดใช้การตรวจสอบความสมบูรณ์ของอุปกรณ์</translation>
 <translation id="8171262216089271568">เปิดใช้เคอร์เซอร์ขนาดใหญ่ในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="8171924760436219650">สลับปุ่มหลักของเมาส์ไปเป็นปุ่มด้านขวาในหน้าจอการเข้าสู่ระบบ</translation>
@@ -7296,6 +7346,7 @@
           เมื่อไม่ได้ตั้งค่านโยบายนี้ ลักษณะการทำงานของนโยบายที่เจาะจงยิ่งขึ้นจะไม่ได้รับผลกระทบ</translation>
 <translation id="8350643689940867542">ปิดใช้การรายงานข้อมูลนโยบาย</translation>
 <translation id="835283681355955417">รายงานรายละเอียดอุปกรณ์ต่อพ่วง</translation>
+<translation id="8356953698979920095">การตั้งค่านโยบายเป็นหนึ่งในตัวเลือกเหล่านี้จะกำหนดสีเริ่มต้นสำหรับไฟแบ็กไลต์ของแป้นพิมพ์บนอุปกรณ์ขณะที่ผู้ใช้ลงชื่อเข้าใช้</translation>
 <translation id="8357681633047935212">จำกัดระยะเวลาเซสชันของผู้ใช้</translation>
 <translation id="8357989008292691856">รายชื่อผู้ใช้ที่อนุญาตให้เข้าสู่ระบบ</translation>
 <translation id="8359734107661430198">เปิดใช้ ExampleDeprecatedFeature API ได้ถึง 02/09/2008</translation>
@@ -7316,6 +7367,7 @@
 <translation id="8381774264911275515">ปิดใช้การโอนคุกกี้ของ SAML SSO ไปยังเซสชันของผู้ใช้ระหว่างที่ลงชื่อเข้าใช้</translation>
 <translation id="8382184662529825177">เปิดใช้การใช้งานการรับรองระยะไกลสำหรับการปกป้องเนื้อหาสำหรับอุปกรณ์</translation>
 <translation id="838870586332499308">เปิดใช้งานการโรมมิ่งข้อมูล</translation>
+<translation id="8392478748777481636">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" />" แทน</translation>
 <translation id="8393850527597048037">แพลตฟอร์มเท่านั้น</translation>
 <translation id="8395749934754392549">จัดการการตั้งค่าของคอนเทนเนอร์ Android (ARC) และแอป Android</translation>
 <translation id="8398952282584132331">เปิดใช้หน้าจอส่วนตัว</translation>
@@ -7625,6 +7677,7 @@
       ใน <ph name="MS_WIN_NAME" /> ฟังก์ชันการทำงานนี้ใช้ได้เฉพาะในอินสแตนซ์ที่เข้าร่วมโดเมน <ph name="MS_AD_NAME" />, ทำงานใน Windows 10 Pro หรือลงทะเบียนใน<ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" /> ใน <ph name="MAC_OS_NAME" /> ฟังก์ชันการทำงานนี้ใช้ได้เฉพาะในอินสแตนซ์ที่จัดการผ่าน MDM หรือเข้าร่วมโดเมนผ่าน MCX</translation>
 <translation id="8671119576957984818">เปิดใช้ฮับการแชร์เดสก์ท็อป</translation>
 <translation id="8671193325113134911">เปิดใช้การตรวจสอบประเภท MIME ที่เข้มงวดกับสคริปต์สำหรับผู้ปฏิบัติงาน</translation>
+<translation id="8671303329680827168">นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้นโยบาย "<ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />" แทน</translation>
 <translation id="8671314659400112135">การตั้งค่านโยบายเป็น "เปิดใช้" หรือไม่ตั้งค่าจะทำให้ <ph name="PRODUCT_NAME" /> ใช้การตรวจสอบความปลอดภัยของจุดขยายสัญญาณเพิ่มเติมเพื่อบล็อกจุดขยายสัญญาณเดิมในกระบวนการของเบราว์เซอร์ได้
 
       การตั้งค่านโยบายเป็น "ปิดใช้" จะมีผลกระทบที่เป็นอันตรายต่อความปลอดภัยและความเสถียรของ <ph name="PRODUCT_NAME" /> เนื่องจากจะทำให้โค้ดที่ไม่รู้จักหรืออาจมีเจตนาร้ายโหลดเข้ามาในกระบวนการของเบราว์เซอร์ <ph name="PRODUCT_NAME" /> ได้ ปิดนโยบายนี้เฉพาะในกรณีที่มีปัญหาด้านความเข้ากันได้กับซอฟต์แวร์ของบุคคลที่สามซึ่งต้องเรียกใช้ภายในกระบวนการของเบราว์เซอร์ <ph name="PRODUCT_NAME" />
@@ -7719,6 +7772,7 @@
 <translation id="8767743923206070405">การตั้งค่านโยบายเป็น "เปิดใช้" จะแสดงปุ่มหน้าแรกในแถบเครื่องมือของ <ph name="PRODUCT_NAME" /> การตั้งค่านโยบายเป็น "ปิดใช้" จะทำให้ปุ่มหน้าแรกไม่ปรากฏขึ้นมา
 
       หากคุณตั้งค่านโยบายไว้ ผู้ใช้จะเปลี่ยนการตั้งค่าดังกล่าวใน <ph name="PRODUCT_NAME" /> ไม่ได้ หากไม่ได้ตั้งค่า ผู้ใช้จะเลือกว่าจะแสดงปุ่มหน้าแรกหรือไม่</translation>
+<translation id="8767749141825412133">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="AUTH_SERVER_ALLOWLIST_POLICY_NAME" />" แทน</translation>
 <translation id="8768528324886802059">การตั้งค่านโยบายจะระบุโฮสต์การรับส่งข้อความดั้งเดิมที่ไม่อยู่ในรายการปฏิเสธ ค่ารายการปฏิเสธ "<ph name="WILDCARD_VALUE" />" จะทำให้โฮสต์การรับส่งข้อความดั้งเดิมทั้งหมดถูกปฏิเสธ เว้นแต่จะได้รับอนุญาตอย่างชัดแจ้ง
 
       ระบบจะอนุญาตโฮสต์การรับส่งข้อความดั้งเดิมทั้งหมดโดยค่าเริ่มต้น แต่หากนโยบายปฏิเสธโฮสต์การรับส่งข้อความดั้งเดิมทั้งหมด ผู้ดูแลระบบจะใช้รายการอนุญาตเพื่อเปลี่ยนนโยบายนั้นได้</translation>
@@ -7893,6 +7947,7 @@
 <translation id="8955719471735800169">กลับไปด้านบน</translation>
 <translation id="8956312248048980644">อนุญาตการสร้างคลัสเตอร์ Agent ที่ผูกกับต้นทางโดยค่าเริ่มต้น</translation>
 <translation id="8970205333161758602">ระงับการแจ้งเตือนการปฏิเสธของ <ph name="PRODUCT_FRAME_NAME" /></translation>
+<translation id="8974588819713914715">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="URL_ALLOWLIST_POLICY_NAME" />" แทน</translation>
 <translation id="8976248126101463034">อนุญาตให้ตรวจสอบสิทธิ์ Gnubby สำหรับโฮสต์การเข้าถึงระยะไกล</translation>
 <translation id="8976531594979650914">ใช้เครื่องพิมพ์เริ่มต้นของระบบเป็นค่าเริ่มต้น</translation>
 <translation id="8977192934280677167">อนุญาตการเข้าถึงการค้นหาเมนูตามบริบทของผู้ให้บริการการค้นหาเริ่มต้น</translation>
@@ -7946,6 +8001,7 @@
 
       ค่านโยบายต้องมีหน่วยเป็นวินาที</translation>
 <translation id="9015578113567730893">อัตราการรวบรวมการวัดและส่งข้อมูลทางไกลของวิดีโอเป็นมิลลิวินาที</translation>
+<translation id="9020630127193895800">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีคราม</translation>
 <translation id="9031831501689819108">เปิดการรองรับเบราว์เซอร์เวอร์ชันเก่า</translation>
 <translation id="9035086760683255833">เปิดใช้ฟีเจอร์การช่วยเหลือพิเศษสำหรับการไฮไลต์โฟกัสของแป้นพิมพ์
 
@@ -8068,6 +8124,7 @@
       หากตั้งค่าเป็น "จริง" จะมีการรายงานข้อมูลระบบของอุปกรณ์</translation>
 <translation id="9131419675479917141">อนุญาตให้ผู้ใช้กำหนด PIN ที่ไม่รัดกุม แต่แสดงคำเตือน</translation>
 <translation id="913195841488580904">บล็อกการเข้าถึงรายการ URL</translation>
+<translation id="9133526448421932754">ไฟแบ็กไลต์ของแป้นพิมพ์เป็นสีเหลือง</translation>
 <translation id="9135033364005346124">เปิดใช้งานพร็อกซี <ph name="CLOUD_PRINT_NAME" /></translation>
 <translation id="9136212796239682721">ปิดใช้ UI ลูกโป่งสำหรับดาวน์โหลด</translation>
 <translation id="9136399279941091445">ระยะเวลาปิดเครื่องเมื่อเผยแพร่นโยบายด้านอุปกรณ์ที่ระบุ</translation>
@@ -8173,6 +8230,7 @@
 <translation id="982497069985795632">เปิดใช้การตรวจการสะกด</translation>
 <translation id="983256325512298435">กำหนดรายการโปรโตคอลที่เปิดแอปพลิเคชันภายนอกจากต้นทางที่ระบุได้โดยไม่ต้องแจ้งผู้ใช้</translation>
 <translation id="987261962216071510">อนุญาตให้เข้าสู่ระบบเบราว์เซอร์ในโหมดผู้มาเยือนเท่านั้น</translation>
+<translation id="989197274317162189">เราเลิกใช้งานและไม่รองรับนโยบายนี้แล้ว โปรดใช้นโยบาย "<ph name="URL_BLOCKLIST_POLICY_NAME" />" แทน</translation>
 <translation id="991560005425213776">ส่งชื่อผู้ใช้และชื่อไฟล์ไปยังเครื่องพิมพ์ดั้งเดิม</translation>
 <translation id="99202634486128833">การตั้งค่านโยบายเป็น CopyCaCerts ทำให้ใบรับรอง CA ที่ติดตั้งโดย ONC ที่มี <ph name="WEB_TRUSTED_BIT" /> ทั้งหมดพร้อมใช้งานสำหรับแอป ARC
 
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 231198a3..292a1909 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -1509,6 +1509,7 @@
       Поле <ph name="ENTERPRISE_CONNECTOR_ENTERPRISE_ID_FIELD" /> – це унікальний ідентифікатор партнерського постачальника послуг, який визначає обліковий запис клієнта з постачальником послуг. Коли користувача просять увійти під час налаштування конектора <ph name="FILE_SYSTEM_ENTERPRISE_CONNECTOR" />, допускаються лише облікові записи, пов'язані з цим обліковим записом постачальника послуг, що належить клієнту.
 
       Це правило можна налаштувати лише через <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />.</translation>
+<translation id="2452225615952836461">Завжди використовувати великі літери для методів запитів</translation>
 <translation id="2454228136871844693">Оптимізація для стабільності.</translation>
 <translation id="2455033019778127130">Запускає поведінку веб-переглядача за умовчанням, показує Умови використання та чекає, поки користувач прийме їх.</translation>
 <translation id="2460127623195247744">Це правило більше не підтримується. Натомість використовуйте <ph name="WINDOW_OCCLUSION_ENABLED_POLICY_NAME" />.
@@ -2206,6 +2207,17 @@
 <translation id="3101035417394748390">Максимальний розмір (у байтах), який можна переносити від клієнта до хосту за допомогою синхронізації буфера</translation>
 <translation id="3101501961102569744">Вибрати спосіб визначення налаштувань проксі-сервера</translation>
 <translation id="3101709781009526431">Дата та час</translation>
+<translation id="3105764289283669411">Це правило визначає, чи мають методи запитів писатися великими літерами, якщо вони зіставляються із заголовками відповідей <ph name="ACAM_HEADER_NAME" /> у попередньому запиті <ph name="CORS" />.
+
+Якщо правило вимкнути, метод запиту писатиметься великими літерами.
+Це стосується <ph name="PRODUCT_NAME" /> 108 або попередніх версій.
+
+Якщо правило ввімкнути або не налаштувати, методи запиту не писатимуться великими літерами, окрім випадків, коли вони зіставляються без урахування регістра з методами <ph name="DELETE_METHOD_NAME" />, <ph name="GET_METHOD_NAME" />, <ph name="HEAD_METHOD_NAME" />, <ph name="OPTIONS_METHOD_NAME" />, <ph name="POST_METHOD_NAME" /> або <ph name="PUT_METHOD_NAME" />.
+У такому випадку заголовок відповіді <ph name="REJECTED_CASE" /> відхилятиметься, а заголовок відповіді <ph name="ACCEPTED_CASE" /> прийматиметься.
+
+Примітка. Це не вплине на методи запитів <ph name="POST_LOWERCASE_METHOD_NAME" /> і <ph name="PUT_LOWERCASE_METHOD_NAME" />, але вплине на метод запиту <ph name="PATCH_LOWERCASE_METHOD_NAME" />.
+
+Це правило тимчасове. У майбутньому його буде вилучено.</translation>
 <translation id="3110248563985502478">Це правило не підтримується у версії M88. Chrome більше не підтримує Flash. Якщо це правило активовано, застарілі плагіни запускаються як звичайні. Якщо це правило деактивовано, застарілі плагіни не запускаються.
 
       Якщо це правило не налаштовано, для запуску застарілих плагінів потрібен дозвіл користувача.</translation>
@@ -3751,6 +3763,13 @@
 
       Якщо правила немає в списку, але наявний конфлікт між джерелами, областями дії або рівнями, застосовується правило з найвищим пріоритетом.</translation>
 <translation id="4646739075621507361">Повідомляти дані про завдання друку</translation>
+<translation id="4647870063570047503">Якщо це правило ввімкнути, <ph name="PRODUCT_NAME" /> перевірятиме сертифікати сервера за допомогою вбудованого інструмента перевірки сертифікатів із використанням Chrome Root Store як джерела суспільної довіри.
+
+Якщо це правило вимкнути, <ph name="PRODUCT_NAME" /> використовуватиме системний інструмент перевірки сертифікатів і кореневі сертифікати системи.
+
+Якщо це правило не налаштувати, можуть використовуватися як кореневі сертифікати, надані системою, так і Chrome Root Store.
+
+Коли підтримка системного інструмента перевірки сертифікатів припиниться й буде вилучено кореневі сертифікати, це правило буде видалено в <ph name="PRODUCT_NAME" /> для <ph name="MS_WIN_NAME" /> і <ph name="MAC_OS_NAME" /> версії 113.</translation>
 <translation id="4649395978608361979">Локальні принтери</translation>
 <translation id="4650044303940238102">Налаштування локальних шрифтів</translation>
 <translation id="4650759511838826572">Вимкнути схеми протоколу URL-адреси</translation>
@@ -6761,6 +6780,7 @@
 <translation id="7724161903134898864">Якщо для цього правила вибрано значення 1, веб-сайти зможуть показувати спливаючі вікна. Якщо для нього вибрано значення 2, спливаючі вікна будуть заблоковані.
 
       Якщо це правило не налаштовано, застосовуватиметься правило <ph name="BLOCK_POPUPS_POLICY_NAME" />, але користувачі зможуть змінити цей параметр.</translation>
+<translation id="7728486978686128364">Не використовувати великі літери для методів запитів, окрім DELETE/GET/HEAD/OPTIONS/POST/PUT</translation>
 <translation id="7731026922044991970">Повернутися до застарілої поведінки <ph name="ATTRIBUTE_SAMESITE_NAME" /> для файлів cookie на всіх сайтах</translation>
 <translation id="7732907212083471072">Видалені правила</translation>
 <translation id="7734212505800048991">
@@ -8052,6 +8072,7 @@
 
       Значення правила вказується в секундах.</translation>
 <translation id="9015578113567730893">Швидкість збору даних аудіотелеметрії (у мілісекундах).</translation>
+<translation id="9015952763003753868">Зіставляти заголовок відповіді <ph name="ACAM_HEADER_NAME" /> у сумісній специфікації попереднього запиту <ph name="CORS" /></translation>
 <translation id="9031831501689819108">Увімкнути Підтримку застарілих веб-переглядачів</translation>
 <translation id="9035086760683255833">Увімкнути спеціальну можливість "Виділення на клавіатурі".
 
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index e02eb0d6..c271c561 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -90,6 +90,9 @@
 <translation id="1059069692400941670">不允許在第一次執行時匯入預設搜尋引擎</translation>
 <translation id="1062011392452772310">為裝置啟用遠端認證機制</translation>
 <translation id="1062407476771304334">取代</translation>
+<translation id="1063860513136880926">如果將這項政策設為啟用,使用者將無法使用鍵盤快速鍵或擴充功能 API 擷取螢幕畫面。如果將這項政策設為停用或不設定,使用者將可擷取螢幕畫面。
+
+請注意,在 <ph name="MS_WIN_NAME" />、<ph name="MAC_OS_NAME" /> 和 <ph name="LINUX_OS_NAME" /> 上,這項政策將無法防止透過作業系統或第三方應用程式擷取螢幕畫面。</translation>
 <translation id="1069489575852947981">如果將這項政策設為啟用或不設定,系統會將裝置本機帳戶設為零延遲自動登入。<ph name="PRODUCT_OS_NAME" />會遵循用於略過自動登入並顯示登入畫面的鍵盤快速鍵 Ctrl + Alt + S 鍵。
 
       如果將這項政策設為停用,使用者無法略過零延遲自動登入 (如果已設定)。</translation>
@@ -150,6 +153,7 @@
       如果將這項政策設為啟用或未設定,使用者將可存取購物清單功能。
       如果將這項政策設為停用,使用者將無法存取購物清單功能。
       </translation>
+<translation id="1144147113722324623">啟用音訊和影片的 HTTPS 自動升級功能,並針對圖片顯示「不安全」的警告。</translation>
 <translation id="1144540226829648811">指定這部裝置的固定發布版本。
 
       只有將 <ph name="CHROME_OS_RELEASE_CHANNEL_DELEGATED_POLICY_NAME" /> 設為 False,<ph name="CHROME_OS_RELEASE_CHANNEL_POLICY_NAME" /> 設定才會生效。</translation>
@@ -221,6 +225,7 @@
 <translation id="1209096923317019235">將應用程式指派為特定副檔名的預設處理常式</translation>
 <translation id="120937472976628837">回報風扇資訊</translation>
 <translation id="1212233008927724662">停用 Lazy Login WebUI 載入功能。</translation>
+<translation id="1214872329693851703">這項政策已淘汰,因此系統不再支援,請改用 <ph name="PRINTERS_BULK_ACCESS_MODE_POLICY_NAME_POLICY_NAME" />。</translation>
 <translation id="1216919699175573511">啟用 Signed HTTP Exchange (SXG) 支援</translation>
 <translation id="1219027971768347970">使用音訊沙箱的預設設定</translation>
 <translation id="1219695476179627719">指定是否要將已搭載較新版本的裝置復原至 <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> 所設定的版本。
@@ -247,6 +252,7 @@
       如果將這項政策設為 True,系統會啟用這項功能,且使用者將可變更這項設定。
       這項政策的預設值為 False,系統不會提供任何表情符號建議,且使用者無法覆寫這項設定。</translation>
 <translation id="1241536186320046498">每當網站要取得視窗放置權限時詢問我</translation>
+<translation id="1243311058213605210">停用音訊和影片的 HTTPS 自動升級功能,而且不會顯示圖片警告。</translation>
 <translation id="1243570869342663665">控制安全網站成人內容篩選設定。</translation>
 <translation id="1244309789361056660">這項政策已在 M87 版中遭到移除,且系統會在使用者登入時自動將主目錄遷移至 ext4。
       你可以透過這項政策指定當使用者的主目錄採用 eCryptfs 加密機制建立時,系統要採取的動作。除非將採用 eCryptfs 加密的主目錄遷移至 ext4 加密,否則 Android 應用程式可能會停止運作。
@@ -558,6 +564,7 @@
 <translation id="1557113199339446336">如果將這項政策設為 True,已註冊的裝置會回報與擴展式偵測及回應 (XDR) 事件相關的資訊。
 
       如果將這項政策設為 False 或不設定,已註冊的裝置就不會回報擴展式偵測及回應 (XDR) 事件。</translation>
+<translation id="1560279917909364275">將允許在 <ph name="PRODUCT_OS_NAME" /> 螢幕鎖定畫面上使用的筆記應用程式加入許可清單</translation>
 <translation id="1561424797596341174">針對遠端存取主機的偵錯版本覆寫政策</translation>
 <translation id="1561967320164410511">用於個人認證的 U2F 和擴充功能</translation>
 <translation id="1567718448549957373">如果將這項政策設為啟用或不設定,將可透過不安全的 HTTP 連線接收 <ph name="BASIC_AUTH" /> 驗證要求。
@@ -631,6 +638,7 @@
 <translation id="1616280227447957376">允許忽略特定來源的 SSL 警告網頁繼續瀏覽</translation>
 <translation id="1617235075406854669">啟用刪除瀏覽器和下載記錄</translation>
 <translation id="1620510694547887537">攝影機</translation>
+<translation id="1621245029534873770">這項政策已淘汰,因此系統不再支援,請改用「<ph name="AUTOPLAY_ALLOWLIST_POLICY_NAME" />」政策。</translation>
 <translation id="162162247775156979">停用裝置儲存空間狀態回報功能</translation>
 <translation id="1625700732886306811">允許 <ph name="PRODUCT_NAME" /> 透過所有 IP 位址連線到裝置</translation>
 <translation id="1626379196197114720">允許使用往返快取</translation>
@@ -1022,6 +1030,7 @@
 
       如果將這項政策設為 False 或不予設定,系統將不會回報這項資訊。
       如果設為 True,系統會回報裝置目前設定的時區。</translation>
+<translation id="1990784382342293892">這項政策已淘汰,因此系統不再支援,請改用「<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />」政策。</translation>
 <translation id="199764499252435679">允許更新 <ph name="PRODUCT_NAME" /> 的元件</translation>
 <translation id="1997943707974344423">允許使用 Smart Lock</translation>
 <translation id="1998504583649140526">私人網路要求設定</translation>
@@ -1114,6 +1123,7 @@
 
       如果設定這項政策,使用者將無法變更設定。如果不設定,使用者可選擇使用該功能。</translation>
 <translation id="2093552723795057221">不要回報音訊狀態</translation>
+<translation id="209388704279338003">這項政策已淘汰,因此系統不再支援,請改用 <ph name="DEVICE_PRINTERS_ACCESS_MODE_POLICY_NAME" />。</translation>
 <translation id="2093951844062548778">這項政策可讓快速解答功能存取所選內容,並將相關資訊傳送給伺服器,進而取得定義結果。
 
       如果將這項政策設為啟用或不設定,系統會啟用快速解答的定義功能。
@@ -1459,6 +1469,7 @@
       如果未設定這項政策,系統會針對所有網站套用 <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> 政策 (如果已設定)。否則系統會套用使用者的個人設定。
 
       如果想進一步瞭解有效的網址模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。不過,從 M85 版開始,系統針對這項政策已停止支援主機中包含「*」和「[*.]」萬用字元的模式。</translation>
+<translation id="2421779938235645781">鍵盤背光顏色符合目前的桌布</translation>
 <translation id="2423255396068675416">如果將這項政策設為啟用或不設定,只要 <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" /> 和 <ph name="CROSTINI_ALLOWED_POLICY_NAME" /> 設為啟用,使用者即可執行 <ph name="PRODUCT_CROSTINI_NAME" />。如果將這項政策設為停用,系統會將使用者的 <ph name="PRODUCT_CROSTINI_NAME" /> 停用。變更為停用後,系統會開始將這項政策套用到新的 <ph name="PRODUCT_CROSTINI_NAME" /> 容器,不會套用到已經在執行的這類容器。</translation>
 <translation id="242521047682347997">不允許使用者在手機和 Chromebook 間同步簡訊</translation>
 <translation id="2426782419955104525">啟用 <ph name="PRODUCT_NAME" /> 互動智慧搜尋功能,且禁止使用者變更這項設定。
@@ -1496,6 +1507,7 @@
       <ph name="ENTERPRISE_CONNECTOR_ENTERPRISE_ID_FIELD" /> 欄位是合作夥伴服務供應商的專屬 ID,可用來指定客戶在服務供應商平台上使用的帳戶。如果 <ph name="FILE_SYSTEM_ENTERPRISE_CONNECTOR" /> 的設定作業需要使用者登入,系統只會接受與這個客戶的服務供應商帳戶相關的使用者帳戶。
 
       這項政策只能透過 <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME" />進行設定。</translation>
+<translation id="2452225615952836461">一律使用大寫字母要求方法</translation>
 <translation id="2454228136871844693">穩定性最佳化。</translation>
 <translation id="2455033019778127130">使用預設的瀏覽器行為,顯示《服務條款》並等待使用者接受。</translation>
 <translation id="2460127623195247744">這項政策已淘汰,請改用「<ph name="WINDOW_OCCLUSION_ENABLED_POLICY_NAME" />」政策。
@@ -1856,7 +1868,17 @@
 <translation id="2801065672151277034">憑證管理設定</translation>
 <translation id="2801155097555584385">自訂電池開始充電值 (以百分比表示)</translation>
 <translation id="2801378553855965587">停用 <ph name="GOOGLE_CALENDAR_NAME" />整合。</translation>
+<translation id="2804129948908818402">這項政策可允許管理員針對 <ph name="PRODUCT_OS_NAME" /> 上的各個副檔名,指定對應的應用程式做為預設處理常式,而使用者無法變更這項設定。
+
+凡是這項政策未指定的副檔名,使用者都能按照一般工作流程自行設定預設值。
+
+      如要指定的是 Chrome 應用程式,可以使用應用程式的 ID,例如 <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_CHROME_APP_EXAMPLE" />;如果要指定的是網頁應用程式,可以使用「<ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" />」中所使用的網址,例如 <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_WEB_APP_EXAMPLE" />;如果要指定的是 Android 應用程式,可以使用應用程式的套件名稱,例如 <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_ANDROID_APP_EXAMPLE" />;如果要指定的是系統網頁應用程式,可以使用應用程式的蛇形命名名稱,例如 <ph name="DEFAULT_HANDLERS_FOR_FILE_EXTENSIONS_POLICY_SYSTEM_WEB_APP_EXAMPLE" />。
+
+請注意,應用程式必須在資訊清單中宣告自身為特定副檔名的處理常式,該政策項目才能生效。換言之,這項政策不會擴充現有的應用程式功能。
+
+如果未設定這項政策,<ph name="PRODUCT_OS_NAME" /> 會根據內部邏輯選取預設處理常式。</translation>
 <translation id="2805707493867224476">允許所有網站顯示彈出式視窗</translation>
+<translation id="2806804577787377637">這項政策已淘汰,因此系統不再支援,請改用 <ph name="PER_APP_TIME_LIMITS_ALLOWLIST" />。</translation>
 <translation id="2818074121667686266">如果將這項政策設為啟用或不設定,系統會詢問使用者是否要存取音訊擷取裝置 (如果網址已列在 AudioCaptureAllowedUrls 的許可清單內,系統不會提示使用者)。
 
       如果將這項政策設為停用,系統就不會顯示提示,而且只有列在 AudioCaptureAllowedUrls 清單內的網址才能存取音訊擷取裝置。
@@ -1888,6 +1910,7 @@
 <translation id="2853649500575897584">不要封鎖瀏覽器程序中的舊版擴充點</translation>
 <translation id="285480231336205327">啟用高反差模式</translation>
 <translation id="285627849510728211">設定日間進階充電模式配置</translation>
+<translation id="2864207379891420023">設定擴充功能安裝許可清單</translation>
 <translation id="2866387633548787857">停用快速轉換</translation>
 <translation id="2866619962692161453">中繼政策類型</translation>
 <translation id="2866726566162790531">允許所有 HTTP 驗證機制的來源清單</translation>
@@ -2174,6 +2197,14 @@
 <translation id="3101035417394748390">可透過剪貼簿同步功能在用戶端和主機之間傳輸的大小上限 (以位元組為單位)</translation>
 <translation id="3101501961102569744">選擇如何指定 Proxy 伺服器設定</translation>
 <translation id="3101709781009526431">日期與時間</translation>
+<translation id="3105764289283669411">這項政策可控制要求方法是否要在 <ph name="CORS" /> 預檢中與 <ph name="ACAM_HEADER_NAME" /> 回應標頭比對符合時使用大寫字母。
+
+如果停用這項政策,要求方法將使用大寫字母。
+這是 <ph name="PRODUCT_NAME" /> 108 或更舊版本的行為。
+
+如果將這項政策設為啟用或不設定,要求方法將不使用大寫字母,除非以不區分大小寫的方式與 <ph name="DELETE_METHOD_NAME" />、<ph name="GET_METHOD_NAME" />、<ph name="HEAD_METHOD_NAME" />、<ph name="OPTIONS_METHOD_NAME" />、<ph name="POST_METHOD_NAME" /> 或 <ph name="PUT_METHOD_NAME" /> 進行比對。這麼做會拒絕 <ph name="REJECTED_CASE" /> 回應標頭,並接受 <ph name="ACCEPTED_CASE" /> 回應標頭。
+
+注意:這項政策會影響要求方法 <ph name="PATCH_LOWERCASE_METHOD_NAME" />,但不影響 <ph name="POST_LOWERCASE_METHOD_NAME" /> 和 <ph name="PUT_LOWERCASE_METHOD_NAME" />。這項政策僅是暫時性措施,日後將會移除。</translation>
 <translation id="3110248563985502478">這項政策已在 M88 版遭到淘汰,Chrome 已不再支援 Flash。如果將這項政策設為啟用,系統會將舊版外掛程式當做一般外掛程式使用。如果將這項政策設為停用,系統便不會使用舊版外掛程式。
 
       如果不設定這項政策,系統會要求使用者授予執行舊版外掛程式的權限。</translation>
@@ -2245,6 +2276,7 @@
 <translation id="3168968618972302728">與 Kerberos 驗證相關的政策。</translation>
 <translation id="3169872426103732947">顯示預設網址,允許使用者切換到完整網址</translation>
 <translation id="3171369832001535378">裝置網路主機名稱範本</translation>
+<translation id="3173844121395372156">這項政策已淘汰,因此系統不再支援,請改用「<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />」政策。</translation>
 <translation id="3177802893484440532">需要為本機信任錨點執行線上 OCSP/CRL 檢查</translation>
 <translation id="3180671894201217988">如果將這項政策設為 Enabled 或不設定,第三方軟體將無法在 <ph name="PRODUCT_NAME" /> 的處理程序中置入可執行的程式碼。
 
@@ -2380,6 +2412,7 @@
       在 <ph name="MS_WIN_NAME" /> 上,這項功能僅適用於已加入 <ph name="MS_AD_NAME" /> 網域的執行個體、在 Windows 10 專業版上執行的執行個體,或是已註冊 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />服務的執行個體。在 <ph name="MAC_OS_NAME" /> 上,這項功能僅適用於透過行動裝置管理 (MDM) 軟體進行管理或透過 MCX 加入網域的執行個體。</translation>
 <translation id="3261592499545947104">憑證過期之前提早觸發更新程序的秒數</translation>
 <translation id="3262080895269946462">允許將第三方內容中的 WebSQL 預設為停用。</translation>
+<translation id="3263892501786842604">允許在「新分頁」頁面的搜尋框中顯示 <ph name="GOOGLE_LENS_PRODUCT_NAME" />按鈕 (如果支援)。</translation>
 <translation id="3264706118366247207">設定當使用者關閉所有瀏覽器視窗時要刪除的瀏覽資料類型清單。可用的資料類型有瀏覽記錄 (<ph name="DATA_TYPE_BROWSING_HISTORY" />)、下載記錄 (<ph name="DATA_TYPE_DOWNLOAD_HISTORY" />)、Cookie (<ph name="DATA_TYPE_COOKIES_AND_OTHER_SITE_DATA" />)、快取內容<ph name="DATA_TYPE_CACHED_IMAGES_AND_FILES" />、自動填入內容 (<ph name="DATA_TYPE_AUTOFILL" />)、密碼 (<ph name="DATA_TYPE_PASSWORD" />)、網站設定 (<ph name="DATA_TYPE_SITE_SETTINGS" />) 和代管的應用程式資料 (<ph name="DATA_TYPE_HOSTED_APP_DATA" />)。這項政策的優先順序低於 <ph name="ALLOW_DELETING_BROWSER_HISTORY_POLICY_NAME" />。
 
       如要使用這項政策,必須將 <ph name="SYNC_DISABLED_POLICY_NAME" /> 政策設為 True,否則系統會予以忽略。如果是在平台層級設定這項政策,必須在平台層級停用同步功能。如果是在使用者層級設定這項政策,則必須為該使用者停用同步功能,這樣這項政策才會生效。
@@ -2516,6 +2549,7 @@
 <translation id="3420141485959154417">如果已啟用 <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> 政策,你可以設定 <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POLICY_NAME" /> 政策來指定在搜尋圖片時所使用的搜尋引擎網址。(如果已設定 <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POST_PARMS_POLICY_NAME" /> 政策,圖片搜尋要求會改用 POST 方法。)
 
       如果未設定 <ph name="DEFAULT_SEARCH_PROVIDER_IMAGE_URL_POLICY_NAME" /> 政策,系統不會提供圖片搜尋功能。</translation>
+<translation id="3426434797050451264">這項政策也可用於將 Android 應用程式設為預設檔案處理常式。</translation>
 <translation id="3428247105888806363">啟用網路預測功能</translation>
 <translation id="3432863169147125747">控管列印設定。</translation>
 <translation id="3434053014926283175">在登入畫面上將滑鼠的主要按鈕切換為右鍵。
@@ -2814,6 +2848,7 @@
 <translation id="3755237588083934849">你可以透過這項政策,決定裝置狀態上傳內容的傳送頻率 (以毫秒為單位),下限值是 60 秒。
 
       如果未設定,系統會套用 3 小時的預設間隔。</translation>
+<translation id="3755796472192036324">白色鍵盤背光顏色</translation>
 <translation id="3756011779061588474">封鎖開發人員模式</translation>
 <translation id="3756516139200532906">允許受管理的使用者設定裝置主機名稱</translation>
 <translation id="3756737071958233151">啟用裝置系統記錄上傳功能</translation>
@@ -3150,6 +3185,7 @@
 
       想進一步瞭解有效的<ph name="URL_LABEL" />模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。<ph name="WILDCARD_VALUE" /> 不是這項政策許可的值。</translation>
 <translation id="4061590579642538878">回報當機報告相關資訊。</translation>
+<translation id="4070039109671307724">其他</translation>
 <translation id="4072225853834793549">在登入畫面上停用無障礙捷徑</translation>
 <translation id="4075675819066819571">將檔案櫃放在畫面的左側</translation>
 <translation id="408029843066770167">允許向 Google 時間服務傳送查詢</translation>
@@ -3528,6 +3564,7 @@
 <translation id="4492287494009043413">停用螢幕畫面擷取功能</translation>
 <translation id="4494132853995232608">Wilco DTC</translation>
 <translation id="449423975179525290">設定 <ph name="PLUGIN_VM_NAME" /> 的相關政策。</translation>
+<translation id="449561952193478261">藍色鍵盤背光顏色</translation>
 <translation id="449784980858429908">自動授權網站連線至所有序列埠。</translation>
 <translation id="4499376951770369935">ChromeOS 更新已設為資訊站應用程式資訊清單中所定義的版本</translation>
 <translation id="450080746522343150">封鎖所有下載作業。</translation>
@@ -3654,6 +3691,11 @@
 <translation id="4611983465824842867">不在不安全表單上顯示警告或停用自動填入功能</translation>
 <translation id="4615003180013429835">網站清單剖析模式</translation>
 <translation id="4617338332148204752">在 <ph name="PRODUCT_FRAME_NAME" /> 內略過中繼標記檢查</translation>
+<translation id="4624006912948309924">如果設定這項政策,就能修正 <ph name="PRODUCT_OS_NAME" /> 會在啟動器列中將哪些應用程式 ID 顯示為固定的應用程式,而且使用者無法進行變更。
+
+如要指定 Chrome 應用程式,可以使用應用程式的 ID,例如 pjkljhegncpnkpknbcohdijeoejaedia;如要指定 Android 應用程式,可以使用應用程式的套件名稱,例如 com.google.android.gm;如要指定網頁應用程式,可以使用「<ph name="WEB_APP_INSTALL_FORCE_LIST_POLICY_NAME" />」中所使用的網址,例如 https://google.com/maps;如要指定系統網頁應用程式,可以使用應用程式的蛇形命名名稱,例如 <ph name="PINNED_LAUNCHER_APPS_POLICY_SYSTEM_WEB_APP_EXAMPLE" />。
+
+如果不設定這項政策,使用者將可變更啟動器中的固定應用程式清單。</translation>
 <translation id="4624417808625504735">禁止 JavaScript 在這些網站上使用 JIT</translation>
 <translation id="46321462262887935">將最上排按鍵設為功能鍵,但允許使用者變更</translation>
 <translation id="4632343302005518762">允許 <ph name="PRODUCT_FRAME_NAME" /> 處理下列內容類型</translation>
@@ -3673,6 +3715,12 @@
 
       如果某項政策不在清單中,且發生來源、範圍或層級衝突,系統就會套用優先順序最高的政策。</translation>
 <translation id="4646739075621507361">回報列印工作</translation>
+<translation id="4647870063570047503">如果將這項政策設為啟用,<ph name="PRODUCT_NAME" /> 在驗證伺服器憑證時將使用內建憑證驗證器和 Chrome Root Store 做為公開信任來源。
+如果將這項政策設為停用,<ph name="PRODUCT_NAME" /> 將使用系統憑證驗證器和系統根憑證。
+
+如果不設定這項政策,系統可能會使用 Chrome Root Store 或系統提供的根層級。
+
+我們計劃在 <ph name="MS_WIN_NAME" /> 和 <ph name="MAC_OS_NAME" /> 113 版的 <ph name="PRODUCT_NAME" /> 中移除這項政策,屆時將停止支援平台提供的憑證驗證器和根層級。</translation>
 <translation id="4649395978608361979">本機印表機目的地</translation>
 <translation id="4650044303940238102">本機字型設定</translation>
 <translation id="4650759511838826572">停用網址通訊協定機制</translation>
@@ -3688,6 +3736,7 @@
 
       注意:這項設定會覆寫 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> (如有設定的話)。</translation>
 <translation id="4658380868451934335">在登入畫面上啟用語音輸入功能</translation>
+<translation id="4660356908994631271">在「新分頁」頁面的搜尋框中顯示 Google 智慧鏡頭按鈕。</translation>
 <translation id="4661889655253181651">內容設定可讓你指定特定內容類型 (例如 Cookie、圖片或 JavaScript) 的處理方式。</translation>
 <translation id="4663509616441994711">禁止合併使用者層級的雲端政策。</translation>
 <translation id="4665897631924472251">擴充功能管理設定</translation>
@@ -3786,6 +3835,7 @@
 <translation id="4812270373673968774">如果將這項政策設為 Always,系統會自動隱藏 <ph name="PRODUCT_OS_NAME" />檔案櫃。如果將這項政策設為 Never,系統一律不會自動隱藏檔案櫃。
 
       如果設定這項政策,使用者將無法變更。如果未設定,使用者可自行決定是否要自動隱藏檔案櫃。</translation>
+<translation id="4812309945046430049">紅色鍵盤背光顏色</translation>
 <translation id="4812714598405913256">設定 DeviceMinimumVersion 政策的自動更新期限訊息</translation>
 <translation id="4815581264328351694">顯示系統匣選單中的無障礙選項</translation>
 <translation id="4816674326202173458">允許企業使用者成為主要或次要使用者 (非管理化環境中使用者的預設行為)</translation>
@@ -3830,6 +3880,7 @@
 <translation id="487460824085252184">自動遷移,不要求使用者同意。</translation>
 <translation id="4874982543810021567">在這些網站上封鎖 WebUSB</translation>
 <translation id="4876805738539874299">已啟用 SSL 最高版本</translation>
+<translation id="4877305769899044884">預設鍵盤背光顏色</translation>
 <translation id="4886783562285047261">如果將這項政策設為啟用,系統會強制要求註冊 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />。如果註冊失敗,系統會封鎖 <ph name="PRODUCT_NAME" /> 啟動程序。
 
       如果將這項政策設為停用或不設定,使用者可選擇是否要註冊 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />。如果註冊失敗,系統不會封鎖 <ph name="PRODUCT_NAME" /> 啟動程序。
@@ -4275,6 +4326,7 @@
 <translation id="5331746669335642668"><ph name="PRODUCT_NAME" /> 雲端政策會覆寫平台政策。</translation>
 <translation id="5334501839642146593">一律不傳送指標資料給 Google</translation>
 <translation id="5340008866815063393">啟用政策資料報告功能</translation>
+<translation id="5345910753471481870">不要在「新分頁」頁面的搜尋框中顯示 Google 智慧鏡頭按鈕。</translation>
 <translation id="5346587320074666194">禁止在這些網站上存取感應器</translation>
 <translation id="534836255587440809">在登入畫面上停用自動點選功能</translation>
 <translation id="5362531528507578966">覆寫預設的背景圖形列印模式。</translation>
@@ -4853,6 +4905,7 @@
       這項政策目前僅適用於受管理的訪客工作階段。
 
       這項政策的每個清單項目都是一個物件,由更新資訊清單 (<ph name="URL_LABEL" />) 和隔離網頁應用程式的網頁軟體包 ID 組成。請務必填寫這兩個欄位。</translation>
+<translation id="596523880465577341">這項政策已淘汰,因此系統不再支援,請改用「<ph name="EXTENSION_INSTALL_ALLOWLIST_POLICY_NAME" />」政策。</translation>
 <translation id="5966615072639944554">允許擴充功能使用 Remote Attestation API</translation>
 <translation id="596732417280023843">憑證設定檔的名稱。</translation>
 <translation id="5972538402066550344">允許使用精細回報控制項</translation>
@@ -5072,6 +5125,7 @@
 <translation id="6221175752766085998">允許由本機信任錨點核發但缺少 subjectAlternativeName 擴充功能的憑證</translation>
 <translation id="6224070048795197148">允許使用者在不登入的情況下使用瀏覽器</translation>
 <translation id="6224304369267200483">自動允許直接安全金鑰認證的網址/網域</translation>
+<translation id="6225938950222983458">這項政策已淘汰,因此系統不再支援,請改用 <ph name="NOTE_TAKING_APPS_LOCK_SCREEN_ALLOWLIST" />。</translation>
 <translation id="6230442621691161858">這項功能可讓系統建議值得探索的新內容,包括應用程式和網頁等等。
       如果將這項政策設為 True,系統即會建議可探索的新內容。
       如果將這項政策設為 False,系統即不會建議可探索的新內容。
@@ -5120,6 +5174,7 @@
           這項政策的每個清單項目都是一行字串,其中包含以分號 (<ph name="SEMICOLON" />) 區隔的擴充功能 ID 和「更新」網址 (選用)。擴充功能 ID 為 32 個字母的字串,如需查看範例,請在開發人員模式下前往 <ph name="CHROME_EXTENSIONS_LINK" />。「更新」網址 (如有指定) 應指向更新資訊清單 XML 文件,如 <ph name="LINK_TO_EXTENSION_DOC1" /> 所述。根據預設,系統會使用 Chrome 線上應用程式商店的更新網址 (目前為「https://clients2.google.com/service/update2/crx」)。請注意,這項政策設定的「更新」網址僅適用於初次安裝,後續的擴充功能更新將採用擴充功能資訊清單指定的更新網址。
 
       舉例來說,<ph name="LOGIN_SCREEN_EXTENSION_POLICY_EXAMPLE" /> 會從標準的 Chrome 線上應用程式商店「更新」網址安裝「<ph name="SMART_CARD_CONNECTOR_APP_NAME" />」應用程式。如要進一步瞭解如何代管擴充功能,請參閱以下連結:<ph name="LINK_TO_EXTENSION_DOC2" />。</translation>
+<translation id="6273107124506133797">這項政策已淘汰,因此系統不再支援,請改用 <ph name="USB_DETACHABLE_ALLOWLIST_POLICY_NAME" />。</translation>
 <translation id="6274202259872570803">螢幕側錄</translation>
 <translation id="6275497712828649588">在使用具有安全疑慮的指令列旗標時,隱藏安全性警告。</translation>
 <translation id="6275833043726517413">使用舊版 <ph name="CORS" /> 模式,而不使用新版 <ph name="CORS" />。
@@ -5334,11 +5389,13 @@
       如果將這項政策設為「停用」或不設定,則無法在 chrome://password-change 變更 SAML 密碼;當 SAML 密碼即將到期時,系統也不會顯示通知。</translation>
 <translation id="6457477291648119596">Type42</translation>
 <translation id="6458361632497500815">如果將這項政策設為啟用或不設定,只要 <ph name="VIRTUAL_MACHINES_ALLOWED_POLICY_NAME" />、<ph name="CROSTINI_ALLOWED_POLICY_NAME" /> 和 <ph name="DEVICE_UNAFFILIATED_CROSTINI_ALLOWED_POLICY_NAME" /> 這 3 項政策都設為啟用,所有使用者將可使用 <ph name="PRODUCT_CROSTINI_NAME" />。如果將這項政策設為停用,無關聯的使用者將無法使用 <ph name="PRODUCT_CROSTINI_NAME" />。變更為停用後,系統會開始將這項政策套用到新的 <ph name="PRODUCT_CROSTINI_NAME" /> 容器,不會套用到已經在執行的這類容器。</translation>
+<translation id="6462604655173570082">如果將這項政策設為啟用或不設定,使用者即可在「新分頁」頁面的搜尋框中查看及使用 <ph name="GOOGLE_LENS_PRODUCT_NAME" />按鈕。如果停用這項政策,使用者將不會在「新分頁」頁面的搜尋框中看到 <ph name="GOOGLE_LENS_PRODUCT_NAME" />按鈕。</translation>
 <translation id="6464074037294098618">啟用地址的自動填入功能</translation>
 <translation id="6467613372414922590">允許使用者層級的內建訊息傳遞主機 (在無管理員權限的情況下安裝)。</translation>
 <translation id="6473623140202114570">設定安全瀏覽功能在哪些網域中不會觸發警告。</translation>
 <translation id="647645276885673708">啟用 <ph name="LACROS_NAME" /> 並設為主要瀏覽器</translation>
 <translation id="647698599569353771">允許啟用鄰近分享功能。</translation>
+<translation id="6477685422297715670">綠色鍵盤背光顏色</translation>
 <translation id="6478258366184919502">登入及螢幕來源</translation>
 <translation id="6478261301433199402">你可以透過這項政策,指定使用者的 <ph name="PLUGIN_VM_NAME" /> 映像檔。請使用 JSON 格式字串指定這項政策,其中 <ph name="URL_PLUGIN_VM_IMAGE_FIELD" /> 可指定要下載映像檔的位置,而 <ph name="HASH_PLUGIN_VM_IMAGE_FIELD" /> 可做為 SHA-256 雜湊,用於驗證下載內容的完整性。</translation>
 <translation id="6481245670325946423">允許使用無頭模式</translation>
@@ -5846,6 +5903,7 @@
 <translation id="6926703471186170050">啟用長邊雙面列印</translation>
 <translation id="6929746927224321095">停用自動填入功能</translation>
 <translation id="6931242315485576290">停用 Google 資料同步處理功能</translation>
+<translation id="6932282102911647185">紫色鍵盤背光顏色</translation>
 <translation id="6940243892299228102">禁止使用者使用桌面範本</translation>
 <translation id="6943577887654905793">Mac/Linux 偏好設定名稱:</translation>
 <translation id="6946652757373377924">
@@ -6630,6 +6688,7 @@
 <translation id="7724161903134898864">如果將這項政策設為 1,網站即可顯示彈出式視窗。如果將這項政策設為 2,網站將無法顯示彈出式視窗。
 
       如果不設定,系統會套用 <ph name="BLOCK_POPUPS_POLICY_NAME" />,但使用者可以變更這項設定。</translation>
+<translation id="7728486978686128364">請勿使用大寫字母要求方法,但 DELETE/GET/HEAD/OPTIONS/POST/PUT 除外</translation>
 <translation id="7731026922044991970">將所有網站上的 Cookie 還原成舊版的 <ph name="ATTRIBUTE_SAMESITE_NAME" /> 行為</translation>
 <translation id="7732907212083471072">已移除的政策</translation>
 <translation id="7734212505800048991">
@@ -7041,6 +7100,7 @@
 <translation id="8164687848393015214">如果將這項政策設為啟用,系統會將監控網路封包 (<ph name="HEARTBEATS_TERM" />) 傳送到可監控上線狀態的管理伺服器,讓伺服器偵測裝置是否處於離線狀態。
 
       如果將這項政策設為停用或不設定,系統不會傳送任何封包。</translation>
+<translation id="8168359201203671567">彩虹鍵盤背光顏色</translation>
 <translation id="8169452762291746260">停用裝置健康狀態監控功能</translation>
 <translation id="8171262216089271568">在登入畫面上啟用大型游標</translation>
 <translation id="8171924760436219650">在登入畫面上將滑鼠的主要按鈕切換為右鍵</translation>
@@ -7257,6 +7317,7 @@
           如果不設定這項政策,內容更具體的政策行為將不會受到影響。</translation>
 <translation id="8350643689940867542">停用政策資料報告功能</translation>
 <translation id="835283681355955417">回報周邊裝置詳細資料</translation>
+<translation id="8356953698979920095">如果將這項政策設為這些值,系統會在使用者登入時,使用指定的顏色做為預設的裝置鍵盤背光顏色。</translation>
 <translation id="8357681633047935212">限制使用者工作階段的時間長度</translation>
 <translation id="8357989008292691856">登入使用者許可清單</translation>
 <translation id="8359734107661430198">從 2008 年 9 月 2 日開始啟用 ExampleDeprecatedFeature API</translation>
@@ -7277,6 +7338,7 @@
 <translation id="8381774264911275515">禁止在登入時將 SAML 單一登入 (SSO) Cookie 傳輸到使用者工作階段</translation>
 <translation id="8382184662529825177">啟用可用於保護裝置內容的遠端認證機制</translation>
 <translation id="838870586332499308">啟用數據漫遊</translation>
+<translation id="8392478748777481636">這項政策已淘汰,因此系統不再支援,請改用「<ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME" />」政策。</translation>
 <translation id="8393850527597048037">僅限平台</translation>
 <translation id="8395749934754392549">控管 Android 容器 (ARC) 和 Android 應用程式的設定。</translation>
 <translation id="8398952282584132331">啟用隱私保護畫面</translation>
@@ -7575,6 +7637,7 @@
       在 <ph name="MS_WIN_NAME" /> 上,這項功能僅適用於已加入 <ph name="MS_AD_NAME" /> 網域的執行個體、在 Windows 10 專業版上執行的執行個體,或是已註冊 <ph name="CHROME_BROWSER_CLOUD_MANAGEMENT_NAME" />服務的執行個體。在 <ph name="MAC_OS_NAME" /> 上,這項功能僅適用於透過行動裝置管理 (MDM) 軟體進行管理或透過 MCX 加入網域的執行個體。</translation>
 <translation id="8671119576957984818">啟用桌面分享中心</translation>
 <translation id="8671193325113134911">為工作站指令碼啟用嚴格的 MIME 類型檢查</translation>
+<translation id="8671303329680827168">這項政策已淘汰,請改用「<ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />」政策。</translation>
 <translation id="8671314659400112135">如果將這項政策設為啟用或不設定,系統會允許 <ph name="PRODUCT_NAME" /> 套用額外的擴充點安全性防護機制,藉此封鎖瀏覽器程序中的舊版擴充點。
 
       將這項政策設為停用會對 <ph name="PRODUCT_NAME" /> 的安全性和穩定性造成負面影響,因為這樣一來,<ph name="PRODUCT_NAME" /> 會允許瀏覽器程序載入可能具有惡意的未知程式碼。建議只有必須在 <ph name="PRODUCT_NAME" /> 的瀏覽器程序中執行的第三方軟體發生相容性問題時,才停用這項政策。
@@ -7668,6 +7731,7 @@
 <translation id="8767743923206070405">如果將這項政策設為啟用,<ph name="PRODUCT_NAME" /> 的工具列上會顯示「首頁」按鈕。如果將這項政策設為停用,則不會顯示「首頁」按鈕。
 
       如果設定這項政策,使用者將無法在 <ph name="PRODUCT_NAME" /> 中進行變更。如果未設定,使用者可選擇是否要顯示「首頁」按鈕。</translation>
+<translation id="8767749141825412133">這項政策已淘汰,因此系統不再支援,請改用「<ph name="AUTH_SERVER_ALLOWLIST_POLICY_NAME" />」政策。</translation>
 <translation id="8768528324886802059">你可以透過這項政策,指定哪些原生訊息傳遞主機可不受拒絕清單影響。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有原生訊息傳遞主機,但政策明確允許使用的主機除外。
       根據預設,系統會允許使用所有原生訊息傳遞主機,但如果政策拒絕了所有原生訊息傳遞主機,管理員可以使用允許清單修改該政策。</translation>
 <translation id="877557628527387598">密碼登入資料</translation>
@@ -7842,6 +7906,7 @@
 <translation id="8955719471735800169">返回頁首</translation>
 <translation id="8956312248048980644">在預設情況下,允許使用 origin-keyed 代理程式叢集。</translation>
 <translation id="8970205333161758602">隱藏停止支援 <ph name="PRODUCT_FRAME_NAME" />的提示</translation>
+<translation id="8974588819713914715">這項政策已淘汰,因此系統不再支援,請改用「<ph name="URL_ALLOWLIST_POLICY_NAME" />」政策。</translation>
 <translation id="8976248126101463034">允許針對遠端存取主機進行 gnubby 驗證機制</translation>
 <translation id="8976531594979650914">使用系統預設印表機做為預設值</translation>
 <translation id="8977192934280677167">允許透過內容選單使用預設搜尋引擎</translation>
@@ -7895,6 +7960,8 @@
 
       指定政策值時,請以秒為單位進行設定。</translation>
 <translation id="9015578113567730893">以毫秒為單位的音訊遙測收集率。</translation>
+<translation id="9015952763003753868">讓符合 <ph name="CORS" /> 預檢規格的 <ph name="ACAM_HEADER_NAME" /> 相容</translation>
+<translation id="9020630127193895800">靛藍色鍵盤背光顏色</translation>
 <translation id="9031831501689819108">啟用舊版瀏覽器支援</translation>
 <translation id="9035086760683255833">啟用鍵盤焦點醒目顯示無障礙功能。
 
@@ -8016,6 +8083,7 @@
       如果設為 True,系統會回報裝置的系統資訊。</translation>
 <translation id="9131419675479917141">允許使用者設定低強度 PIN 碼,但要顯示警告訊息</translation>
 <translation id="913195841488580904">禁止存取清單中的網址</translation>
+<translation id="9133526448421932754">黃色鍵盤背光顏色</translation>
 <translation id="9135033364005346124">啟用 <ph name="CLOUD_PRINT_NAME" /> Proxy</translation>
 <translation id="9136212796239682721">停用下載對話框 UI</translation>
 <translation id="9136399279941091445">發布指定裝置政策時的停機時間間隔</translation>
@@ -8122,6 +8190,7 @@
 <translation id="982497069985795632">啟用拼字檢查</translation>
 <translation id="983256325512298435">定義一組通訊協定清單,其中的通訊協定無須提示使用者,即可啟動已列出來源的外部應用程式</translation>
 <translation id="987261962216071510">僅允許透過瀏覽器訪客模式登入</translation>
+<translation id="989197274317162189">這項政策已淘汰,因此系統不再支援,請改用「<ph name="URL_BLOCKLIST_POLICY_NAME" />」政策。</translation>
 <translation id="991560005425213776">將使用者名稱和檔案名稱傳送到原生印表機</translation>
 <translation id="99202634486128833">如果將這項政策設為 CopyCaCerts,ARC 應用程式可以使用所有已安裝 ONC 且具有 <ph name="WEB_TRUSTED_BIT" /> 的 CA 憑證。
 
diff --git a/components/policy/resources/templates/policy_definitions/Miscellaneous/RequireOnlineRevocationChecksForLocalAnchors.yaml b/components/policy/resources/templates/policy_definitions/Miscellaneous/RequireOnlineRevocationChecksForLocalAnchors.yaml
index 805c77a..140b969 100644
--- a/components/policy/resources/templates/policy_definitions/Miscellaneous/RequireOnlineRevocationChecksForLocalAnchors.yaml
+++ b/components/policy/resources/templates/policy_definitions/Miscellaneous/RequireOnlineRevocationChecksForLocalAnchors.yaml
@@ -4,6 +4,8 @@
   Setting the policy to True means <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> always performs revocation checking for successfully validated server certificates signed by locally installed CA certificates. If <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> can't get revocation status information, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> treats these certificates as revoked (hard-fail).
 
         Setting the policy to False or leaving it unset means <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> uses existing online revocation-checking settings.
+
+        On <ph name="MAC_OS_NAME">macOS</ph>, this policy has no effect if the <ph name="CHROME_ROOT_STORE_ENABLED_POLICY_NAME">ChromeRootStoreEnabled</ph> policy is set to False.
 example_value: false
 features:
   dynamic_refresh: true
@@ -18,12 +20,13 @@
   value: false
 owners:
 - file://net/cert/OWNERS
-- rsleevi@chromium.org
+- mattm@chromium.org
 schema:
   type: boolean
 supported_on:
 - chrome_os:30-
 - chrome.linux:30-
 - chrome.win:30-
+- chrome.mac:109-
 tags: []
 type: main
diff --git a/components/policy/resources/webui/policy_row.js b/components/policy/resources/webui/policy_row.js
index eb1b1fb..de080a0 100644
--- a/components/policy/resources/webui/policy_row.js
+++ b/components/policy/resources/webui/policy_row.js
@@ -107,10 +107,20 @@
       const sourceDisplay = this.shadowRoot.querySelector('.source');
       sourceDisplay.textContent = loadTimeData.getString(policy.source);
       // Reduces load on the DOM for long values;
-      const truncatedValue =
-          (policy.value && policy.value.toString().length > 256) ?
-          `${policy.value.toString().substr(0, 256)}\u2026` :
-          policy.value;
+
+      const convertValue = (value, format) => {
+        // Skip 'string' policy to avoid unnecessary conversions.
+        if (typeof value == 'string') {
+          return value;
+        }
+        return JSON.stringify(value, null, format ? 2 : null);
+      };
+
+      // If value is longer than 256 characters, truncate and add ellipsis.
+      const policyValueStr = convertValue(policy.value);
+      const truncatedValue = policyValueStr.length > 256 ?
+          `${policyValueStr.substring(0, 256)}\u2026` :
+          policyValueStr;
 
       const valueDisplay = this.shadowRoot.querySelector('.value');
       valueDisplay.textContent = truncatedValue;
@@ -120,7 +130,9 @@
 
       const valueRowContentDisplay =
           this.shadowRoot.querySelector('.value.row .value');
-      valueRowContentDisplay.textContent = policy.value;
+      // Expanded policy value is formatted.
+      valueRowContentDisplay.textContent =
+          convertValue(policy.value, /*format=*/ true);
 
       const errorRowContentDisplay =
           this.shadowRoot.querySelector('.errors.row .value');
diff --git a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.cc b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.cc
index b39a075..ce076fdfe 100644
--- a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.cc
+++ b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.cc
@@ -13,8 +13,6 @@
 
 namespace safe_browsing {
 
-const int kThresholdForInFlowNotificationMinutes = 5;
-
 bool CanQueryTailoredSecurityForUrl(GURL url) {
   return url.DomainIs("google.com") || url.DomainIs("youtube.com");
 }
@@ -42,4 +40,4 @@
   return true;
 }
 
-}  // namespace safe_browsing
\ No newline at end of file
+}  // namespace safe_browsing
diff --git a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h
index 2a554b6..8b725e6c 100644
--- a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h
+++ b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_SAFE_BROWSING_CORE_BROWSER_TAILORED_SECURITY_SERVICE_TAILORED_SECURITY_SERVICE_OBSERVER_UTIL_H_
 #define COMPONENTS_SAFE_BROWSING_CORE_BROWSER_TAILORED_SECURITY_SERVICE_TAILORED_SECURITY_SERVICE_OBSERVER_UTIL_H_
 
+#include "base/time/time.h"
+
 class GURL;
 class PrefService;
 
@@ -14,7 +16,8 @@
 
 namespace safe_browsing {
 
-extern const int kThresholdForInFlowNotificationMinutes;
+inline constexpr base::TimeDelta kThresholdForInFlowNotification =
+    base::Minutes(5);
 
 // Checks if we can query TailoredSecurity for a url.
 bool CanQueryTailoredSecurityForUrl(GURL url);
diff --git a/components/safe_browsing/core/browser/verdict_cache_manager.cc b/components/safe_browsing/core/browser/verdict_cache_manager.cc
index c4379ff..f46171821 100644
--- a/components/safe_browsing/core/browser/verdict_cache_manager.cc
+++ b/components/safe_browsing/core/browser/verdict_cache_manager.cc
@@ -26,7 +26,7 @@
 
 namespace {
 
-// Keys for storing password protection verdict into a DictionaryValue.
+// Keys for storing password protection verdict into a base::Value::Dict.
 const char kCacheCreationTime[] = "cache_creation_time";
 const char kVerdictProto[] = "verdict_proto";
 const char kRealTimeThreatInfoProto[] = "rt_threat_info_proto";
@@ -60,21 +60,17 @@
 // place to determine if the current cache entry should be considered as a
 // match.
 struct MatchParams {
-  MatchParams()
-      : is_exact_host(false),
-        is_exact_path(false),
-        is_only_exact_match_allowed(true) {}
-
+  MatchParams() = default;
   bool ShouldMatch() {
     return !is_only_exact_match_allowed || (is_exact_host && is_exact_path);
   }
   // Indicates whether the current cache entry and the url have the same host.
-  bool is_exact_host;
+  bool is_exact_host = false;
   // Indicates whether the current cache entry and the url have the same path.
-  bool is_exact_path;
+  bool is_exact_path = false;
   // Indicates whether the current cache entry is only applicable for exact
   // match.
-  bool is_only_exact_match_allowed;
+  bool is_only_exact_match_allowed = true;
 };
 
 // Given a URL of either http or https scheme, return its http://hostname.
@@ -100,21 +96,18 @@
   return GetHostNameWithHTTPScheme(GURL(cache_expression_url));
 }
 
-// Convert a Proto object into a DictionaryValue.
+// Convert a Proto object into a base::Value::Dict.
 template <class T>
-std::unique_ptr<base::DictionaryValue> CreateDictionaryFromVerdict(
-    const T& verdict,
-    const base::Time& receive_time,
-    const char* proto_name) {
+base::Value::Dict CreateDictionaryFromVerdict(const T& verdict,
+                                              const base::Time& receive_time,
+                                              const char* proto_name) {
   DCHECK(proto_name == kVerdictProto || proto_name == kRealTimeThreatInfoProto);
-  std::unique_ptr<base::DictionaryValue> result =
-      std::make_unique<base::DictionaryValue>();
-  result->SetInteger(kCacheCreationTime,
-                     static_cast<int>(receive_time.ToDoubleT()));
+  base::Value::Dict result;
+  result.Set(kCacheCreationTime, static_cast<int>(receive_time.ToDoubleT()));
   std::string serialized_proto(verdict.SerializeAsString());
   // Performs a base64 encoding on the serialized proto.
   base::Base64Encode(serialized_proto, &serialized_proto);
-  result->SetString(proto_name, serialized_proto);
+  result.Set(proto_name, serialized_proto);
   return result;
 }
 
@@ -282,16 +275,14 @@
   DCHECK(proto_name == kVerdictProto || proto_name == kRealTimeThreatInfoProto);
 
   GURL hostname = GetHostNameWithHTTPScheme(url);
-  std::unique_ptr<base::DictionaryValue> cache_dictionary =
-      base::DictionaryValue::From(content_settings::ToNullableUniquePtrValue(
-          content_settings->GetWebsiteSetting(hostname, GURL(),
-                                              contents_setting_type, nullptr)));
+  base::Value cache_dictionary_value = content_settings->GetWebsiteSetting(
+      hostname, GURL(), contents_setting_type, nullptr);
 
-  if (!cache_dictionary || cache_dictionary->DictEmpty())
+  if (!cache_dictionary_value.is_dict())
     return T::VERDICT_TYPE_UNSPECIFIED;
 
-  base::Value* verdict_dictionary =
-      cache_dictionary->FindKeyOfType(type_key, base::Value::Type::DICTIONARY);
+  base::Value::Dict* verdict_dictionary =
+      cache_dictionary_value.GetDict().FindDict(type_key);
   if (!verdict_dictionary) {
     return T::VERDICT_TYPE_UNSPECIFIED;
   }
@@ -308,14 +299,14 @@
   typename T::VerdictType most_matching_verdict_type =
       T::VERDICT_TYPE_UNSPECIFIED;
   // For all the verdicts of the same origin, we key them by |cache_expression|.
-  // Its corresponding value is a DictionaryValue contains its creation time and
+  // Its corresponding value is a Dict containing its creation time and
   // the serialized verdict proto.
-  for (auto item : verdict_dictionary->DictItems()) {
+  for (const auto [key, value] : *verdict_dictionary) {
     int verdict_received_time;
     T verdict;
     // Ignore any entry that we cannot parse. These invalid entries will be
     // cleaned up during shutdown.
-    if (!ParseVerdictEntry<T>(&item.second, &verdict_received_time, &verdict,
+    if (!ParseVerdictEntry<T>(&value, &verdict_received_time, &verdict,
                               proto_name))
       continue;
     // Since verdict content settings are keyed by origin, we only need to
@@ -436,7 +427,7 @@
   weak_factory_.InvalidateWeakPtrs();
 }
 
-VerdictCacheManager::~VerdictCacheManager() {}
+VerdictCacheManager::~VerdictCacheManager() = default;
 
 void VerdictCacheManager::CachePhishGuardVerdict(
     LoginReputationClientRequest::TriggerType trigger_type,
@@ -452,31 +443,29 @@
 
   GURL hostname = GetHostNameFromCacheExpression(GetCacheExpression(verdict));
 
-  std::unique_ptr<base::DictionaryValue> cache_dictionary =
-      base::DictionaryValue::From(content_settings::ToNullableUniquePtrValue(
-          content_settings_->GetWebsiteSetting(
-              hostname, GURL(), ContentSettingsType::PASSWORD_PROTECTION,
-              nullptr)));
+  base::Value cache_dictionary_value = content_settings_->GetWebsiteSetting(
+      hostname, GURL(), ContentSettingsType::PASSWORD_PROTECTION, nullptr);
 
-  if (!cache_dictionary)
-    cache_dictionary = std::make_unique<base::DictionaryValue>();
+  base::Value::Dict cache_dictionary =
+      cache_dictionary_value.is_dict()
+          ? std::move(cache_dictionary_value.GetDict())
+          : base::Value::Dict();
 
-  std::unique_ptr<base::DictionaryValue> verdict_entry(
+  base::Value::Dict verdict_entry(
       CreateDictionaryFromVerdict<LoginReputationClientResponse>(
           verdict, receive_time, kVerdictProto));
 
   std::string type_key =
       GetKeyOfTypeFromTriggerType(trigger_type, password_type);
-  base::Value* verdict_dictionary =
-      cache_dictionary->FindKeyOfType(type_key, base::Value::Type::DICTIONARY);
+  base::Value::Dict* verdict_dictionary = cache_dictionary.FindDict(type_key);
   if (!verdict_dictionary) {
-    verdict_dictionary = cache_dictionary->SetKey(
-        type_key, base::Value(base::Value::Type::DICTIONARY));
+    verdict_dictionary =
+        cache_dictionary.Set(type_key, base::Value::Dict())->GetIfDict();
   }
 
   // Increases stored verdict count if we haven't seen this cache expression
   // before.
-  if (!verdict_dictionary->FindKey(GetCacheExpression(verdict))) {
+  if (!verdict_dictionary->contains(GetCacheExpression(verdict))) {
     absl::optional<size_t>* stored_verdict_count =
         trigger_type == LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE
             ? &stored_verdict_count_password_on_focus_
@@ -486,12 +475,11 @@
 
   // If same cache_expression is already in this verdict_dictionary, we simply
   // override it.
-  verdict_dictionary->SetKey(
-      GetCacheExpression(verdict),
-      base::Value::FromUniquePtrValue(std::move(verdict_entry)));
+  verdict_dictionary->Set(GetCacheExpression(verdict),
+                          std::move(verdict_entry));
   content_settings_->SetWebsiteSettingDefaultScope(
       hostname, GURL(), ContentSettingsType::PASSWORD_PROTECTION,
-      base::Value::FromUniquePtrValue(std::move(cache_dictionary)));
+      base::Value(std::move(cache_dictionary)));
 }
 
 LoginReputationClientResponse::VerdictType
@@ -593,40 +581,39 @@
       continue;
 
     GURL hostname = GetHostNameFromCacheExpression(cache_expression);
-    std::unique_ptr<base::DictionaryValue> cache_dictionary =
-        base::DictionaryValue::From(content_settings::ToNullableUniquePtrValue(
-            content_settings_->GetWebsiteSetting(
-                hostname, GURL(),
-                ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA, nullptr)));
+    base::Value cache_dictionary_value = content_settings_->GetWebsiteSetting(
+        hostname, GURL(), ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA,
+        nullptr);
 
-    if (!cache_dictionary)
-      cache_dictionary = std::make_unique<base::DictionaryValue>();
+    base::Value::Dict cache_dictionary =
+        cache_dictionary_value.is_dict()
+            ? std::move(cache_dictionary_value.GetDict())
+            : base::Value::Dict();
 
-    base::Value* verdict_dictionary = cache_dictionary->FindKeyOfType(
-        kRealTimeUrlCacheKey, base::Value::Type::DICTIONARY);
+    base::Value::Dict* verdict_dictionary =
+        cache_dictionary.FindDict(kRealTimeUrlCacheKey);
     if (!verdict_dictionary) {
-      verdict_dictionary = cache_dictionary->SetKey(
-          kRealTimeUrlCacheKey, base::Value(base::Value::Type::DICTIONARY));
+      verdict_dictionary =
+          cache_dictionary.Set(kRealTimeUrlCacheKey, base::Value::Dict())
+              ->GetIfDict();
     }
 
-    std::unique_ptr<base::DictionaryValue> threat_info_entry(
+    base::Value::Dict threat_info_entry =
         CreateDictionaryFromVerdict<RTLookupResponse::ThreatInfo>(
-            threat_info, receive_time, kRealTimeThreatInfoProto));
+            threat_info, receive_time, kRealTimeThreatInfoProto);
     // Increases stored verdict count if we haven't seen this cache expression
     // before.
-    if (!verdict_dictionary->FindKey(cache_expression)) {
+    if (!verdict_dictionary->contains(cache_expression)) {
       stored_verdict_count_real_time_url_check_ =
           GetStoredRealTimeUrlCheckVerdictCount() + 1;
     }
 
-    verdict_dictionary->SetKey(
-        cache_expression,
-        base::Value::FromUniquePtrValue(std::move(threat_info_entry)));
+    verdict_dictionary->Set(cache_expression, std::move(threat_info_entry));
     visited_cache_expressions.push_back(cache_expression);
 
     content_settings_->SetWebsiteSettingDefaultScope(
         hostname, GURL(), ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA,
-        base::Value::FromUniquePtrValue(std::move(cache_dictionary)));
+        base::Value(std::move(cache_dictionary)));
   }
   base::UmaHistogramCounts10000(
       "SafeBrowsing.RT.CacheManager.RealTimeVerdictCount",
@@ -711,13 +698,15 @@
   int removed_count = 0;
   for (ContentSettingPatternSource& source : password_protection_settings) {
     // Find all verdicts associated with this origin.
-    base::Value cache_dictionary = std::move(source.setting_value);
-    bool has_expired_password_on_focus_entry = RemoveExpiredPhishGuardVerdicts(
-        LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, &cache_dictionary);
-    bool has_expired_password_reuse_entry = RemoveExpiredPhishGuardVerdicts(
-        LoginReputationClientRequest::PASSWORD_REUSE_EVENT, &cache_dictionary);
+    base::Value::Dict cache_dictionary =
+        std::move(source.setting_value.GetDict());
 
-    if (!cache_dictionary.DictEmpty() && !has_expired_password_on_focus_entry &&
+    bool has_expired_password_on_focus_entry = RemoveExpiredPhishGuardVerdicts(
+        LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE, cache_dictionary);
+    bool has_expired_password_reuse_entry = RemoveExpiredPhishGuardVerdicts(
+        LoginReputationClientRequest::PASSWORD_REUSE_EVENT, cache_dictionary);
+
+    if (!cache_dictionary.empty() && !has_expired_password_on_focus_entry &&
         !has_expired_password_reuse_entry) {
       continue;
     }
@@ -727,8 +716,8 @@
     content_settings_->SetWebsiteSettingCustomScope(
         source.primary_pattern, source.secondary_pattern,
         ContentSettingsType::PASSWORD_PROTECTION,
-        cache_dictionary.DictEmpty() ? base::Value()
-                                     : std::move(cache_dictionary));
+        cache_dictionary.empty() ? base::Value()
+                                 : base::Value(std::move(cache_dictionary)));
 
     if ((++removed_count) == kMaxRemovedEntriesCount) {
       return;
@@ -749,11 +738,12 @@
   for (ContentSettingPatternSource& source :
        safe_browsing_url_check_data_settings) {
     // Find all verdicts associated with this origin.
-    base::Value cache_dictionary = std::move(source.setting_value);
+    base::Value::Dict cache_dictionary =
+        std::move(source.setting_value.GetDict());
     bool has_expired_entry =
-        RemoveExpiredRealTimeUrlCheckVerdicts(&cache_dictionary);
+        RemoveExpiredRealTimeUrlCheckVerdicts(cache_dictionary);
 
-    if (!cache_dictionary.DictEmpty() && !has_expired_entry) {
+    if (!cache_dictionary.empty() && !has_expired_entry) {
       continue;
     }
 
@@ -762,8 +752,8 @@
     content_settings_->SetWebsiteSettingCustomScope(
         source.primary_pattern, source.secondary_pattern,
         ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA,
-        cache_dictionary.DictEmpty() ? base::Value()
-                                     : std::move(cache_dictionary));
+        cache_dictionary.empty() ? base::Value()
+                                 : base::Value(std::move(cache_dictionary)));
 
     if ((++removed_count) == kMaxRemovedEntriesCount) {
       return;
@@ -810,57 +800,54 @@
 
 bool VerdictCacheManager::RemoveExpiredPhishGuardVerdicts(
     LoginReputationClientRequest::TriggerType trigger_type,
-    base::Value* cache_dictionary) {
+    base::Value::Dict& cache_dictionary) {
   DCHECK(trigger_type == LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE ||
          trigger_type == LoginReputationClientRequest::PASSWORD_REUSE_EVENT);
-  if (!cache_dictionary || cache_dictionary->DictEmpty())
+  if (cache_dictionary.empty())
     return false;
 
   size_t verdicts_removed = 0;
   std::vector<std::string> empty_keys;
-  for (auto item : cache_dictionary->DictItems()) {
+  for (auto [key, value] : cache_dictionary) {
     if (trigger_type == LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE &&
-        item.first == std::string(kPasswordOnFocusCacheKey)) {
+        key == std::string(kPasswordOnFocusCacheKey)) {
       size_t removed_cnt = RemoveExpiredEntries<LoginReputationClientResponse>(
-          &item.second, kVerdictProto);
+          &value, kVerdictProto);
       verdicts_removed += removed_cnt;
       if (stored_verdict_count_password_on_focus_.has_value())
         stored_verdict_count_password_on_focus_.value() -= removed_cnt;
     } else {
       size_t removed_cnt = RemoveExpiredEntries<LoginReputationClientResponse>(
-          &item.second, kVerdictProto);
+          &value, kVerdictProto);
       verdicts_removed += removed_cnt;
       if (stored_verdict_count_password_entry_.has_value())
         stored_verdict_count_password_entry_.value() -= removed_cnt;
     }
 
-    if (item.second.DictSize() == 0U)
-      empty_keys.push_back(item.first);
+    if (value.GetDict().size() == 0U)
+      empty_keys.push_back(key);
   }
   for (const auto& key : empty_keys)
-    cache_dictionary->RemoveKey(key);
+    cache_dictionary.Remove(key);
 
   return verdicts_removed > 0U;
 }
 
 bool VerdictCacheManager::RemoveExpiredRealTimeUrlCheckVerdicts(
-    base::Value* cache_dictionary) {
-  if (!cache_dictionary || cache_dictionary->DictEmpty())
-    return false;
-
+    base::Value::Dict& cache_dictionary) {
   size_t verdicts_removed = 0;
   std::vector<std::string> empty_keys;
-  for (auto item : cache_dictionary->DictItems()) {
+  for (auto [key, value] : cache_dictionary) {
     size_t removed_cnt = RemoveExpiredEntries<RTLookupResponse::ThreatInfo>(
-        &item.second, kRealTimeThreatInfoProto);
+        &value, kRealTimeThreatInfoProto);
     verdicts_removed += removed_cnt;
     if (stored_verdict_count_real_time_url_check_.has_value())
       stored_verdict_count_real_time_url_check_.value() -= removed_cnt;
-    if (item.second.DictSize() == 0U)
-      empty_keys.push_back(item.first);
+    if (value.GetDict().size() == 0U)
+      empty_keys.push_back(key);
   }
   for (const auto& key : empty_keys)
-    cache_dictionary->RemoveKey(key);
+    cache_dictionary.Remove(key);
 
   return verdicts_removed > 0U;
 }
@@ -920,25 +907,23 @@
     LoginReputationClientRequest::TriggerType trigger_type) {
   DCHECK(trigger_type == LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE ||
          trigger_type == LoginReputationClientRequest::PASSWORD_REUSE_EVENT);
-  std::unique_ptr<base::DictionaryValue> cache_dictionary =
-      base::DictionaryValue::From(content_settings::ToNullableUniquePtrValue(
-          content_settings_->GetWebsiteSetting(
-              url, GURL(), ContentSettingsType::PASSWORD_PROTECTION, nullptr)));
-  if (!cache_dictionary || cache_dictionary->DictEmpty())
+  base::Value cache_dictionary_value = content_settings_->GetWebsiteSetting(
+      url, GURL(), ContentSettingsType::PASSWORD_PROTECTION, nullptr);
+
+  if (!cache_dictionary_value.is_dict())
     return 0;
 
   int verdict_cnt = 0;
   if (trigger_type == LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE) {
-    base::Value* password_on_focus_dict = nullptr;
-    password_on_focus_dict =
-        cache_dictionary->FindKey(kPasswordOnFocusCacheKey);
+    base::Value* password_on_focus_dict =
+        cache_dictionary_value.GetDict().Find(kPasswordOnFocusCacheKey);
     verdict_cnt +=
         password_on_focus_dict ? password_on_focus_dict->DictSize() : 0;
   } else {
-    for (auto item : cache_dictionary->DictItems()) {
-      if (item.first == kPasswordOnFocusCacheKey)
+    for (auto [key, value] : cache_dictionary_value.GetDict()) {
+      if (key == kPasswordOnFocusCacheKey)
         continue;
-      verdict_cnt += item.second.DictSize();
+      verdict_cnt += value.GetDict().size();
     }
   }
   return verdict_cnt;
@@ -946,16 +931,15 @@
 
 size_t VerdictCacheManager::GetRealTimeUrlCheckVerdictCountForURL(
     const GURL& url) {
-  std::unique_ptr<base::DictionaryValue> cache_dictionary =
-      base::DictionaryValue::From(content_settings::ToNullableUniquePtrValue(
-          content_settings_->GetWebsiteSetting(
-              url, GURL(), ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA,
-              nullptr)));
-  if (!cache_dictionary || cache_dictionary->DictEmpty())
+  base::Value cache_dictionary_value = content_settings_->GetWebsiteSetting(
+      url, GURL(), ContentSettingsType::SAFE_BROWSING_URL_CHECK_DATA, nullptr);
+  if (!cache_dictionary_value.is_dict())
     return 0;
   base::Value* verdict_dictionary =
-      cache_dictionary->FindKey(kRealTimeUrlCacheKey);
-  return verdict_dictionary ? verdict_dictionary->DictSize() : 0;
+      cache_dictionary_value.GetDict().Find(kRealTimeUrlCacheKey);
+  return verdict_dictionary && verdict_dictionary->is_dict()
+             ? verdict_dictionary->GetDict().size()
+             : 0;
 }
 
 void VerdictCacheManager::CacheArtificialRealTimeUrlVerdict() {
diff --git a/components/safe_browsing/core/browser/verdict_cache_manager.h b/components/safe_browsing/core/browser/verdict_cache_manager.h
index ee9425b..6e20673 100644
--- a/components/safe_browsing/core/browser/verdict_cache_manager.h
+++ b/components/safe_browsing/core/browser/verdict_cache_manager.h
@@ -156,8 +156,9 @@
                                           const history::URLRows& deleted_rows);
   bool RemoveExpiredPhishGuardVerdicts(
       LoginReputationClientRequest::TriggerType trigger_type,
-      base::Value* cache_dictionary);
-  bool RemoveExpiredRealTimeUrlCheckVerdicts(base::Value* cache_dictionary);
+      base::Value::Dict& cache_dictionary);
+  bool RemoveExpiredRealTimeUrlCheckVerdicts(
+      base::Value::Dict& cache_dictionary);
 
   size_t GetPhishGuardVerdictCountForURL(
       const GURL& url,
diff --git a/components/security_interstitials/core/https_only_mode_metrics.h b/components/security_interstitials/core/https_only_mode_metrics.h
index d76059a..a5bc86c 100644
--- a/components/security_interstitials/core/https_only_mode_metrics.h
+++ b/components/security_interstitials/core/https_only_mode_metrics.h
@@ -34,7 +34,10 @@
   // Navigation failed due to timing out.
   kUpgradeTimedOut = 5,
 
-  kMaxValue = kUpgradeTimedOut,
+  // A prerendered HTTP navigation was cancelled.
+  kPrerenderCancelled = 6,
+
+  kMaxValue = kPrerenderCancelled,
 };
 
 }  // namespace https_only_mode
diff --git a/components/signin/internal/identity_manager/account_capabilities_list.h b/components/signin/internal/identity_manager/account_capabilities_list.h
index e7ffca5..31f33c8 100644
--- a/components/signin/internal/identity_manager/account_capabilities_list.h
+++ b/components/signin/internal/identity_manager/account_capabilities_list.h
@@ -24,6 +24,10 @@
                    IS_ALLOWED_FOR_MACHINE_LEARNING_CAPABILITY_NAME,
                    "accountcapabilities/g42tslldmfya")
 
+ACCOUNT_CAPABILITY(kCanHaveEmailAddressDisplayedCapabilityName,
+                   CAN_HAVE_EMAIL_ADDRESS_DISPLAYED_CAPABILITY_NAME,
+                   "accountcapabilities/haytqlldmfya")
+
 ACCOUNT_CAPABILITY(kCanOfferExtendedChromeSyncPromosCapabilityName,
                    CAN_OFFER_EXTENDED_CHROME_SYNC_PROMOS_CAPABILITY_NAME,
                    "accountcapabilities/gi2tklldmfya")
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
index 19594634..0c5354b 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountManagerFacadeImpl.java
@@ -279,6 +279,9 @@
                     } else {
                         mCoreAccountInfosPromise.fulfill(coreAccountInfos);
                     }
+                    for (AccountsChangeObserver observer : mObservers) {
+                        observer.onCoreAccountInfosChanged();
+                    }
                 }
             }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
         });
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java
index 2705ae8..0b4123f 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountsChangeObserver.java
@@ -17,4 +17,11 @@
      */
     @MainThread
     void onAccountsChanged();
+
+    /**
+     * Called after updating {@link org.chromium.components.signin.base.CoreAccountInfo} on every
+     * change to the accounts or to the error condition that occurred while getting accounts.
+     */
+    @MainThread
+    default void onCoreAccountInfosChanged() {}
 }
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java
index 5d6059a..5dece93 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/base/AccountCapabilities.java
@@ -88,6 +88,14 @@
     }
 
     /**
+     * @return canHaveEmailAddressDisplayed capability value.
+     */
+    public @Tribool int canHaveEmailAddressDisplayed() {
+        return getCapabilityByName(
+                AccountCapabilitiesConstants.CAN_HAVE_EMAIL_ADDRESS_DISPLAYED_CAPABILITY_NAME);
+    }
+
+    /**
      * @return canRunChromePrivacySandboxTrials capability value.
      */
     public @Tribool int canRunChromePrivacySandboxTrials() {
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java
index af59a8c8..703d3cb 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/identitymanager/AccountTrackerService.java
@@ -37,7 +37,7 @@
  *
  * TODO(crbug/1176136): Move this class to components/signin/internal
  */
-public class AccountTrackerService {
+public class AccountTrackerService implements AccountsChangeObserver {
     /**
      * Observers the account seeding.
      */
@@ -72,7 +72,7 @@
     private final Queue<Runnable> mRunnablesWaitingForAccountsSeeding;
     private @AccountsSeedingStatus int mAccountsSeedingStatus;
     private final ObserverList<Observer> mObservers = new ObserverList<>();
-    private AccountsChangeObserver mAccountsChangeObserver;
+    private boolean mAccountsChangeObserverAdded;
     private boolean mExistsPendingSeedAccountsTask;
 
     @VisibleForTesting
@@ -119,14 +119,29 @@
         }
     }
 
+    /** Implements {@link AccountsChangeObserver}. */
+    @Override
+    public void onAccountsChanged() {
+        if (!AccountTrackerServiceJni.get().isGaiaIdInAMFEnabled()) {
+            onAccountsChangedInternal();
+        }
+    }
+
+    /** Implements {@link AccountsChangeObserver}. */
+    @Override
+    public void onCoreAccountInfosChanged() {
+        if (AccountTrackerServiceJni.get().isGaiaIdInAMFEnabled()) {
+            onAccountsChangedInternal();
+        }
+    }
+
     /**
-     * Implements {@link AccountsChangeObserver}.
-     * This is invoked when accounts change on device. When there is already a seeding in
+     * Invoked when accounts change on device. When there is already a seeding in
      * progress, the {@link #seedAccounts()} task will be added to the pending task list so
      * that we will seed the accounts again in the end of the current seeding to avoid
      * the race condition.
      */
-    public void onAccountsChanged() {
+    private void onAccountsChangedInternal() {
         if (mAccountsSeedingStatus == AccountsSeedingStatus.IN_PROGRESS) {
             mExistsPendingSeedAccountsTask = true;
         } else {
@@ -153,9 +168,9 @@
                 != AccountsSeedingStatus.IN_PROGRESS : "There is already a seeding in progress!";
         mAccountsSeedingStatus = AccountsSeedingStatus.IN_PROGRESS;
 
-        if (mAccountsChangeObserver == null) {
-            mAccountsChangeObserver = this::onAccountsChanged;
-            accountManagerFacade.addObserver(mAccountsChangeObserver);
+        if (!mAccountsChangeObserverAdded) {
+            mAccountsChangeObserverAdded = true;
+            accountManagerFacade.addObserver(this);
         }
 
         if (AccountTrackerServiceJni.get().isGaiaIdInAMFEnabled()) {
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
index c1037da..ad0569b 100644
--- a/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
+++ b/components/signin/public/android/java/src/org/chromium/components/signin/test/util/FakeAccountManagerFacade.java
@@ -282,6 +282,7 @@
     private void fireOnAccountsChangedNotification() {
         for (AccountsChangeObserver observer : mObservers) {
             observer.onAccountsChanged();
+            observer.onCoreAccountInfosChanged();
         }
     }
 
diff --git a/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java b/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java
index 46d4cd8..a4f737e 100644
--- a/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java
+++ b/components/signin/public/android/junit/src/org/chromium/components/signin/AccountManagerFacadeImplTest.java
@@ -116,10 +116,12 @@
     public void testAccountsChangerObservationInitialization() {
         mFacadeWithSystemDelegate.addObserver(mObserverMock);
         verify(mObserverMock, never()).onAccountsChanged();
+        verify(mObserverMock, never()).onCoreAccountInfosChanged();
 
         mContext.sendBroadcast(new Intent(AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION));
 
         verify(mObserverMock).onAccountsChanged();
+        verify(mObserverMock).onCoreAccountInfosChanged();
     }
 
     @Test
diff --git a/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java b/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java
index d8b36ea1..262c37f 100644
--- a/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java
+++ b/components/signin/public/android/junit/src/org/chromium/components/signin/base/AccountCapabilitiesTest.java
@@ -44,6 +44,8 @@
     public static @Tribool int getCapability(
             String capabilityName, AccountCapabilities capabilities) {
         switch (capabilityName) {
+            case AccountCapabilitiesConstants.CAN_HAVE_EMAIL_ADDRESS_DISPLAYED_CAPABILITY_NAME:
+                return capabilities.canHaveEmailAddressDisplayed();
             case AccountCapabilitiesConstants.CAN_OFFER_EXTENDED_CHROME_SYNC_PROMOS_CAPABILITY_NAME:
                 return capabilities.canOfferExtendedSyncPromos();
             case AccountCapabilitiesConstants.CAN_RUN_CHROME_PRIVACY_SANDBOX_TRIALS_CAPABILITY_NAME:
@@ -78,6 +80,10 @@
     public static class CapabilitiesTestParams implements ParameterProvider {
         private static List<ParameterSet> sCapabilties = Arrays.asList(
                 new ParameterSet()
+                        .name("CanHaveEmailAddressDisplayed")
+                        .value(AccountCapabilitiesConstants
+                                        .CAN_HAVE_EMAIL_ADDRESS_DISPLAYED_CAPABILITY_NAME),
+                new ParameterSet()
                         .name("CanRunChromePrivacySandboxTrials")
                         .value(AccountCapabilitiesConstants
                                         .CAN_RUN_CHROME_PRIVACY_SANDBOX_TRIALS_CAPABILITY_NAME),
diff --git a/components/signin/public/identity_manager/account_capabilities.cc b/components/signin/public/identity_manager/account_capabilities.cc
index 5e6d0f39..567f7c2 100644
--- a/components/signin/public/identity_manager/account_capabilities.cc
+++ b/components/signin/public/identity_manager/account_capabilities.cc
@@ -59,6 +59,10 @@
   return iterator->second ? signin::Tribool::kTrue : signin::Tribool::kFalse;
 }
 
+signin::Tribool AccountCapabilities::can_have_email_address_displayed() const {
+  return GetCapabilityByName(kCanHaveEmailAddressDisplayedCapabilityName);
+}
+
 signin::Tribool AccountCapabilities::can_offer_extended_chrome_sync_promos()
     const {
   return GetCapabilityByName(kCanOfferExtendedChromeSyncPromosCapabilityName);
diff --git a/components/signin/public/identity_manager/account_capabilities.h b/components/signin/public/identity_manager/account_capabilities.h
index 124f23d..e03760dc 100644
--- a/components/signin/public/identity_manager/account_capabilities.h
+++ b/components/signin/public/identity_manager/account_capabilities.h
@@ -38,6 +38,9 @@
       JNIEnv* env) const;
 #endif
 
+  // Chrome can display the email address for accounts with this capability.
+  signin::Tribool can_have_email_address_displayed() const;
+
   // Chrome can offer extended promos for turning on Sync to accounts with this
   // capability.
   signin::Tribool can_offer_extended_chrome_sync_promos() const;
diff --git a/components/signin/public/identity_manager/account_capabilities_test_mutator.cc b/components/signin/public/identity_manager/account_capabilities_test_mutator.cc
index 321dc95..e8bf798 100644
--- a/components/signin/public/identity_manager/account_capabilities_test_mutator.cc
+++ b/components/signin/public/identity_manager/account_capabilities_test_mutator.cc
@@ -16,6 +16,12 @@
   return AccountCapabilities::GetSupportedAccountCapabilityNames();
 }
 
+void AccountCapabilitiesTestMutator::set_can_have_email_address_displayed(
+    bool value) {
+  capabilities_
+      ->capabilities_map_[kCanHaveEmailAddressDisplayedCapabilityName] = value;
+}
+
 void AccountCapabilitiesTestMutator::set_can_offer_extended_chrome_sync_promos(
     bool value) {
   capabilities_
diff --git a/components/signin/public/identity_manager/account_capabilities_test_mutator.h b/components/signin/public/identity_manager/account_capabilities_test_mutator.h
index a200dc3..41648993 100644
--- a/components/signin/public/identity_manager/account_capabilities_test_mutator.h
+++ b/components/signin/public/identity_manager/account_capabilities_test_mutator.h
@@ -18,6 +18,7 @@
   static const std::vector<std::string>& GetSupportedAccountCapabilityNames();
 
   // Exposes setters for the supported capabilities.
+  void set_can_have_email_address_displayed(bool value);
   void set_can_offer_extended_chrome_sync_promos(bool value);
   void set_can_run_chrome_privacy_sandbox_trials(bool value);
   void set_can_stop_parental_supervision(bool value);
diff --git a/components/signin/public/identity_manager/account_capabilities_unittest.cc b/components/signin/public/identity_manager/account_capabilities_unittest.cc
index 9a427520..dd420db3 100644
--- a/components/signin/public/identity_manager/account_capabilities_unittest.cc
+++ b/components/signin/public/identity_manager/account_capabilities_unittest.cc
@@ -13,6 +13,21 @@
 
 class AccountCapabilitiesTest : public testing::Test {};
 
+TEST_F(AccountCapabilitiesTest, CanHaveEmailAddressDisplayed) {
+  AccountCapabilities capabilities;
+  EXPECT_EQ(capabilities.can_have_email_address_displayed(),
+            signin::Tribool::kUnknown);
+
+  AccountCapabilitiesTestMutator mutator(&capabilities);
+  mutator.set_can_have_email_address_displayed(true);
+  EXPECT_EQ(capabilities.can_have_email_address_displayed(),
+            signin::Tribool::kTrue);
+
+  mutator.set_can_have_email_address_displayed(false);
+  EXPECT_EQ(capabilities.can_have_email_address_displayed(),
+            signin::Tribool::kFalse);
+}
+
 TEST_F(AccountCapabilitiesTest, CanOfferExtendedChromeSyncPromos) {
   AccountCapabilities capabilities;
   EXPECT_EQ(capabilities.can_offer_extended_chrome_sync_promos(),
diff --git a/components/signin/public/identity_manager/account_info.cc b/components/signin/public/identity_manager/account_info.cc
index 1fb6f907..ca8715c 100644
--- a/components/signin/public/identity_manager/account_info.cc
+++ b/components/signin/public/identity_manager/account_info.cc
@@ -156,6 +156,7 @@
 base::android::ScopedJavaLocalRef<jobject> ConvertToJavaCoreAccountInfo(
     JNIEnv* env,
     const CoreAccountInfo& account_info) {
+  DCHECK(!account_info.IsEmpty());
   return signin::Java_CoreAccountInfo_Constructor(
       env, ConvertToJavaCoreAccountId(env, account_info.account_id),
       base::android::ConvertUTF8ToJavaString(env, account_info.email),
@@ -165,6 +166,7 @@
 base::android::ScopedJavaLocalRef<jobject> ConvertToJavaAccountInfo(
     JNIEnv* env,
     const AccountInfo& account_info) {
+  DCHECK(!account_info.IsEmpty());
   gfx::Image avatar_image = account_info.account_image;
   return signin::Java_AccountInfo_Constructor(
       env, ConvertToJavaCoreAccountId(env, account_info.account_id),
@@ -189,6 +191,7 @@
 CoreAccountInfo ConvertFromJavaCoreAccountInfo(
     JNIEnv* env,
     const base::android::JavaRef<jobject>& j_core_account_info) {
+  DCHECK(j_core_account_info);
   CoreAccountInfo account;
   account.account_id = ConvertFromJavaCoreAccountId(
       env, signin::Java_CoreAccountInfo_getId(env, j_core_account_info));
@@ -202,6 +205,7 @@
 CoreAccountId ConvertFromJavaCoreAccountId(
     JNIEnv* env,
     const base::android::JavaRef<jobject>& j_core_account_id) {
+  DCHECK(j_core_account_id);
   CoreAccountId id =
       CoreAccountId::FromString(base::android::ConvertJavaStringToUTF8(
           signin::Java_CoreAccountId_getId(env, j_core_account_id)));
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 9fa406d..7e8f67ca 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -137,6 +137,7 @@
 <translation id="129553762522093515">Onlangs toegemaak</translation>
 <translation id="1296930489679394997">Verkope</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Probeer om jou webkoekies uit te vee<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Wetlik Ekstra</translation>
 <translation id="1301324364792935241">Gaan jou veilige-DNS-instellings na</translation>
 <translation id="1307966114820526988">Opgeskorte kenmerke</translation>
 <translation id="1308113895091915999">Aanbieding beskikbaar</translation>
@@ -443,6 +444,7 @@
 <translation id="205212645995975601">Braai en rooster</translation>
 <translation id="2053111141626950936">Bladsye in <ph name="LANGUAGE" /> sal nie vertaal word nie.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Wanneer hierdie kontrole aan is en die status aktief is, bepaal Chrome met watter groot groep mense, of "kohort", jou onlangse blaai-aktiwiteit die meeste ooreenstem. Adverteerders kan advertensies vir die groep kies en jou blaai-aktiwiteit word privaat op jou toestel gehou. Jou groep word elke dag opgedateer.}=1{Wanneer hierdie kontrole aan is en die status aktief is, bepaal Chrome met watter groot groep mense, of "kohort", jou onlangse blaai-aktiwiteit die meeste ooreenstem. Adverteerders kan advertensies vir die groep kies en jou blaai-aktiwiteit word privaat op jou toestel gehou. Jou groep word elke dag opgedateer.}other{Wanneer hierdie kontrole aan is en die status aktief is, bepaal Chrome met watter groot groep mense, of "kohort", jou onlangse blaai-aktiwiteit die meeste ooreenstem. Adverteerders kan advertensies vir die groep kies en jou blaai-aktiwiteit word privaat op jou toestel gehou. Jou groep word elke {NUM_DAYS} dae opgedateer.}}</translation>
+<translation id="2059202684901022309">22x34 dm.</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 voorstel}other{# voorstelle}}</translation>
 <translation id="2066915425250589881">versoek om uit te vee</translation>
 <translation id="2068528718802935086">Babas en kleuters</translation>
@@ -532,6 +534,7 @@
 <translation id="2277753418458118549">Wys verbindingbesonderhede</translation>
 <translation id="2283340219607151381">Stoor en vul adresse in</translation>
 <translation id="2283447177162560884">"<ph name="PAGE_TITLE" />" is uitgevee</translation>
+<translation id="2286383991450886080">34x44 dm.</translation>
 <translation id="2288422996159078444">Enigiets wat jy tik, enige bladsye wat jy bekyk of enige ander aktiwiteit op die web word dopgehou. Inhoud op werwe kan sonder jou wete verander word.</translation>
 <translation id="2289385804009217824">Knip</translation>
 <translation id="2292556288342944218">Jou internettoegang is geblokkeer</translation>
@@ -692,6 +695,7 @@
 <translation id="2709516037105925701">Outovul</translation>
 <translation id="2713444072780614174">Wit</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />, druk Tab en dan Enter om jou betalings- en kredietkaartinligting in Chrome-instellings te bestuur</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">Druk |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| om volskerm te verlaat</translation>
 <translation id="2721148159707890343">Versoek was suksesvol</translation>
 <translation id="2723669454293168317">Doen 'n veiligheidskontrole in Chrome-instellings</translation>
@@ -699,6 +703,7 @@
 <translation id="2728127805433021124">Bediener se sertifikaat is met 'n swak handtekening-algoritme onderteken.</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />Voer tans konnektiwiteitdiagnostiek uit<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">Klassieke musiek</translation>
+<translation id="2731382536835015353">44x68 dm.</translation>
 <translation id="2734319753272419592">Laat Google jou mandjies gebruik om gepersonaliseerde afslag te soek. Wanneer afslag beskikbaar is, sal dit outomaties in jou mandjies verskyn.</translation>
 <translation id="2738330467931008676">Kies oplaaiadres</translation>
 <translation id="2740531572673183784">OK</translation>
@@ -771,6 +776,7 @@
 <translation id="2955913368246107853">Maak vindbalk toe</translation>
 <translation id="2958544468932521864">Krieket</translation>
 <translation id="2959113999220720579">Gesig- en liggaamsorg</translation>
+<translation id="2962073860865348475">12x18 dm.</translation>
 <translation id="2968103128155246731">Vervoer- en miniwaens</translation>
 <translation id="2972581237482394796">Herdoen</translation>
 <translation id="2977665033722899841"><ph name="ROW_NAME" />, tans gekies. <ph name="ROW_CONTENT" /></translation>
@@ -874,6 +880,7 @@
 <translation id="3249151924975132674">Studentelenings en kollegefinansiering</translation>
 <translation id="3249845759089040423">Fantasties</translation>
 <translation id="3250640885957938546">Reklame en bemarking</translation>
+<translation id="3251133337102041130">Regering Wetlik</translation>
 <translation id="3252266817569339921">Frans</translation>
 <translation id="3254301855501243548">18x22 dm.</translation>
 <translation id="3256863843508922226">Aftrede en pensioen</translation>
@@ -886,6 +893,7 @@
 <translation id="3270156322180235608">Lugreise</translation>
 <translation id="3270847123878663523">Ontdoen herrangskikking</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> wil koppel</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">Jou organisasie, <ph name="ENROLLMENT_DOMAIN" />, het sommige inligting, soos instellings of beleide, na die volgende webwerwe gestuur.</translation>
 <translation id="3282497668470633863">Voeg naam op kaart by</translation>
 <translation id="3286372614333682499">portret</translation>
@@ -988,6 +996,7 @@
 <translation id="3531780078352352885">Taakbladsye</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> wil jou mikrofoon gebruik</translation>
 <translation id="3533328374079021623">Posbus 5</translation>
+<translation id="3537165859691846083">Brief Plus</translation>
 <translation id="3542768452570884558">Maak skakel in nuwe venster oop</translation>
 <translation id="3547746132308051926">20x24 dm.</translation>
 <translation id="3550112004925580947">Gasvryheidsbedryf</translation>
@@ -1173,6 +1182,7 @@
 <translation id="4030383055268325496">Ontdoen voeg by</translation>
 <translation id="4031179711345676612">Mikrofoon word toegelaat</translation>
 <translation id="4040350669425716613">Kolleges en universiteite</translation>
+<translation id="4047351652147966654">18x24 dm.</translation>
 <translation id="405399507749852140">Kry kennisgewings as die prys op enige werf daal</translation>
 <translation id="4056223980640387499">Sepia</translation>
 <translation id="4063063121357725926">Laat Google jou help om afslag vir jou mandjies te kry</translation>
@@ -1488,6 +1498,7 @@
 <translation id="4813512666221746211">Netwerkfout</translation>
 <translation id="4816492930507672669">Pas op bladsy</translation>
 <translation id="4819347708020428563">Redigeer aantekeninge in verstekaansig?</translation>
+<translation id="4823325221257637040">Begin tans</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />, druk Tab en dan Enter om vinnig 'n nuwe Google Blad te skep</translation>
 <translation id="4825507807291741242">Kragtig</translation>
 <translation id="483241715238664915">Skakel waarskuwings aan</translation>
@@ -1603,6 +1614,7 @@
 <translation id="5093232627742069661">Z-vou</translation>
 <translation id="5094747076828555589">Hierdie bediener kon nie bewys dat dit <ph name="DOMAIN" /> is nie; sy sekuriteitsertifikaat word nie deur Chromium vertrou nie. Dit kan veroorsaak word deur 'n wanopstelling of 'n aanvaller wat jou verbinding onderskep.</translation>
 <translation id="5097099694988056070">Toestelstatistieke, soos CPU- of RAM-gebruik</translation>
+<translation id="5097468150760963273">27x39 dm.</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">Werf is nie veilig nie</translation>
 <translation id="5109892411553231226">Bestuur betaalmetodes</translation>
@@ -1927,6 +1939,7 @@
 <translation id="5953516610448771166">Intydse Onderskrifte is nie beskikbaar vir hierdie media nie. Blokkeer <ph name="CONTENT_SETTINGS" /> vir hierdie werf om onderskrifte te kry.</translation>
 <translation id="5955063559762970069">Hotelle en akkommodasie</translation>
 <translation id="5963413905009737549">Afdeling</translation>
+<translation id="5967260682280773804">36x48 dm.</translation>
 <translation id="5967592137238574583">Wysig kontakinligting</translation>
 <translation id="5967867314010545767">Verwyder uit geskiedenis</translation>
 <translation id="5968022600320704045">Geen soekresultate nie</translation>
@@ -1998,6 +2011,7 @@
 <translation id="6127379762771434464">Item is verwyder</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />Kom meer te wete oor Incognito in Chrome<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">Lêeruitbreidings is leeg of misvorm.</translation>
+<translation id="6139975341602920272">17x22 dm.</translation>
 <translation id="6146055958333702838">Gaan alle kabels na en herselflaai enige roeteerders, modems of ander
     netwerktoestelle wat jy gebruik.</translation>
 <translation id="614940544461990577">Probeer:</translation>
@@ -2020,6 +2034,7 @@
 <translation id="6196640612572343990">Blokkeer derdeparty-webkoekies</translation>
 <translation id="6197648101609735209">89x89 mm</translation>
 <translation id="6203231073485539293">Gaan jou internetverbinding na</translation>
+<translation id="6212314149070368045">VS Valvou</translation>
 <translation id="6218753634732582820">Verwyder adres uit Chromium?</translation>
 <translation id="622039917539443112">Parallelvou</translation>
 <translation id="6221345481584921695">Google Veiligblaai het onlangs <ph name="BEGIN_LINK" />wanware bespeur<ph name="END_LINK" /> op <ph name="SITE" />. Webwerwe wat gewoonlik veilig is, word soms met wanware besmet. Die kwaadwillige inhoud kom van <ph name="SUBRESOURCE_HOST" />, 'n bekende verspreider van wanware, af.</translation>
@@ -2046,6 +2061,7 @@
 <translation id="627746635834430766">Stoor jou kaart en faktureringadres in jou Google-rekening om volgende keer vinniger te betaal.</translation>
 <translation id="6279183038361895380">Druk |<ph name="ACCELERATOR" />| om jou merker te wys</translation>
 <translation id="6280223929691119688">Kan nie by hierdie adres aflewer nie. Kies 'n ander adres.</translation>
+<translation id="6284292079994426700">26x38 dm.</translation>
 <translation id="6285507000506177184">Knoppie om aflaaie in Chrome te bestuur; druk Enter om lêers wat jy in Chrome afgelaai het, te bestuur</translation>
 <translation id="6289939620939689042">Bladsykleur</translation>
 <translation id="6290238015253830360">Jou voorgestelde artikels verskyn hier</translation>
@@ -2099,6 +2115,7 @@
 <translation id="6410264514553301377">Voer die vervaldatum en CVC vir <ph name="CREDIT_CARD" /> in</translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">Chromium kan jou help om jou Google-rekening te beskerm en jou wagwoord te verander.</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">Materiaal</translation>
 <translation id="6427730057873428458">Uitvoublad</translation>
 <translation id="6428450836711225518">Verifieer jou foonnommer</translation>
@@ -2112,6 +2129,7 @@
 <translation id="6443406338865242315">Watter uitbreidings en inproppe jy geïnstalleer het</translation>
 <translation id="6446608382365791566">Voeg meer inligting by</translation>
 <translation id="6447842834002726250">Webkoekies</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">Koevert Chou 40</translation>
 <translation id="6451458296329894277">Bevestig vormherindiening</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2278,6 +2296,7 @@
 <translation id="6915804003454593391">Gebruiker:</translation>
 <translation id="6916954549222464607">Finansiële beplanning en bestuur</translation>
 <translation id="6917795328362592458">Die wagwoord wat jy sopas gebruik het, is in ’n dataskending gekry. Wagwoordbestuurder beveel aan dat jy jou gestoorde wagwoorde nagaan om jou rekeninge te beveilig.</translation>
+<translation id="6925267999184670015">Noord-Amerikaanse B+</translation>
 <translation id="6934672428414710184">Hierdie naam is van jou Google-rekening af</translation>
 <translation id="6936976777388162184">Dit is ’n gebondelde toestel en dit kan nie by kiosk- en naambordopgradering ingeskryf word nie.</translation>
 <translation id="6939469646605424232">TV-dramas</translation>
@@ -2327,6 +2346,7 @@
 <translation id="7030436163253143341">Sertifikaat is nie geldig nie</translation>
 <translation id="7031646650991750659">Watter Google Play-programme jy geïnstalleer het</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, druk Tab en dan Enter om jou Google-rekening se privaatheidsinstellings te bestuur</translation>
+<translation id="7048095965575426564">Europese Valvou</translation>
 <translation id="7050187094878475250">Jy het <ph name="DOMAIN" /> probeer bereik, maar die bediener het 'n sertifikaat aangebied waarvan die geldigheidtydperk te lank is om betroubaar te wees.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{Hierdie kaart kan nie op die oomblik gestoor word nie}other{Hierdie kaarte kan nie op die oomblik gestoor word nie}}</translation>
 <translation id="7053983685419859001">Blokkeer</translation>
@@ -2389,6 +2409,7 @@
 <translation id="7192203810768312527">Maak <ph name="SIZE" /> beskikbaar. Sommige werwe sal dalk stadiger laai met jou volgende besoek.</translation>
 <translation id="7193661028827781021">Naslaanwerke</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">Jou administrateur kan sien:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, druk Tab en dan Enter om 'n nuwe Incognito-oortjie oop te maak om privaat te blaai</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> kom nie sekuriteitstandaarde na nie.</translation>
@@ -2489,6 +2510,7 @@
 <translation id="7421067045979951561">protokolhanteerders</translation>
 <translation id="7426022697669111648">Knoppie om jou Chrome-geskiedenis te bekyk. Druk Enter om jou blaaigeskiedenis in Chrome-instellings te bekyk en te bestuur</translation>
 <translation id="7427366580982928791">Kinderinternetveiligheid</translation>
+<translation id="7429429656042611765">Bestuurder</translation>
 <translation id="7437289804838430631">Voeg kontakinligting by</translation>
 <translation id="7437490109271760224">Kaartspeletjies</translation>
 <translation id="7440140511386898319">Verken terwyl jy vanlyn is</translation>
@@ -2696,6 +2718,7 @@
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, druk Tab en dan Enter om meer oor Chrome-kenmerke uit te vind</translation>
 <translation id="7950027195171824198">Bestuur jou webkoekievoorkeure in Chrome-instellings</translation>
 <translation id="7951415247503192394">(32 bis)</translation>
+<translation id="7952192831285741665">Europese EDP</translation>
 <translation id="7953569069500808819">Randhegting bo</translation>
 <translation id="7956713633345437162">Mobiele boekmerke</translation>
 <translation id="7961015016161918242">Nooit</translation>
@@ -2781,6 +2804,7 @@
 <translation id="8153865548451212769">{0,plural, =1{Administrateursbeleid beveel aan dat jy nie hierdie lêer na <ph name="DESTINATION_NAME" /> toe aflaai nie}other{Administrateursbeleid beveel aan dat jy nie hierdie lêers na <ph name="DESTINATION_NAME" /> toe aflaai nie}}</translation>
 <translation id="8157295877370077682">Verlaat werf</translation>
 <translation id="8163866351304776260">Vierpons links</translation>
+<translation id="8175330382720204696">Regeringsbrief</translation>
 <translation id="8175796834047840627">Chrome bied aan om jou kaarte in jou Google-rekening te stoor omdat jy aangemeld is. Jy kan hierdie gedrag in instellings verander.</translation>
 <translation id="8176440868214972690">Die administrateur van hierdie toestel het sommige inligting, soos instellings of beleide, na die volgende webwerwe gestuur.</translation>
 <translation id="8184538546369750125">Gebruik globale verstek (Laat toe)</translation>
@@ -2891,6 +2915,7 @@
 <translation id="8449155699563577224">17x24 dm.</translation>
 <translation id="8449836157089738489">Maak almal in nuwe oortjiegroep oop</translation>
 <translation id="8457125768502047971">Onbepaald</translation>
+<translation id="8458202188076138974">Brief Ekstra</translation>
 <translation id="8461694314515752532">Enkripteer gesinkroniseerde data met jou eie sinkroniseringwagfrase</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 kredietkaart}other{# kredietkaarte}}</translation>
 <translation id="8468358362970107653">Koevert C3</translation>
@@ -3097,6 +3122,7 @@
 <translation id="9042617223719777575">Groot kapasiteit</translation>
 <translation id="9044359186343685026">Gebruik Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24x36 dm.</translation>
 <translation id="9049981332609050619">Jy het probeer om <ph name="DOMAIN" /> te bereik, maar die bediener het 'n ongeldige sertifikaat voorgehou.</translation>
 <translation id="9050666287014529139">Wagfrase</translation>
 <translation id="9056953843249698117">Winkel</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index dccf582e..930566e3 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -137,6 +137,7 @@
 <translation id="129553762522093515">Nedavno zatvoreno</translation>
 <translation id="1296930489679394997">Rasprodaje</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Pokušajte obrisati kolačiće<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Legal Extra</translation>
 <translation id="1301324364792935241">Provjerite postavke sigurnosnog DNS-a</translation>
 <translation id="1307966114820526988">Zastarjele funkcije</translation>
 <translation id="1308113895091915999">Dostupna je ponuda</translation>
@@ -443,6 +444,7 @@
 <translation id="205212645995975601">Roštilj i grilovanje</translation>
 <translation id="2053111141626950936">Stranice čiji jezik je <ph name="LANGUAGE" />, neće se prevoditi.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svaki dan.}=1{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svaki dan.}one{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svakih {NUM_DAYS} dan.}few{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svaka {NUM_DAYS} dana.}other{Kada je ova kontrola uključena i status aktivan, Chrome određuje kojoj je velikoj grupi ljudi, ili "kohorti", vaša nedavna aktivnost pregledanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledanja ostaje privatna na vašem uređaju. Vaša grupa se ažurira svakih {NUM_DAYS} dana.}}</translation>
+<translation id="2059202684901022309">22 x 34 inča</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{Jedan prijedlog}one{# prijedlog}few{# prijedloga}other{# prijedloga}}</translation>
 <translation id="2066915425250589881">zatražiti da se izbriše</translation>
 <translation id="2068528718802935086">Bebe i mala djeca</translation>
@@ -532,6 +534,7 @@
 <translation id="2277753418458118549">Prikaži detalje o vezi</translation>
 <translation id="2283340219607151381">Sačuvaj i popuni adrese</translation>
 <translation id="2283447177162560884">Stavka "<ph name="PAGE_TITLE" />" je izbrisana</translation>
+<translation id="2286383991450886080">34 x 44 inča</translation>
 <translation id="2288422996159078444">Sve što napišete, svaka stranica koju pregledate ili bilo koja druga aktivnost na webu se nadzire. Sadržaj na web lokacijama se može promijeniti bez vašeg znanja.</translation>
 <translation id="2289385804009217824">Skrati</translation>
 <translation id="2292556288342944218">Vaš pristup internetu je blokiran</translation>
@@ -692,6 +695,7 @@
 <translation id="2709516037105925701">Automatsko popunjavanje</translation>
 <translation id="2713444072780614174">Bijela</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pritisnite Tab, a nakon toga Enter da upravljate plaćanjima i informacijama o kreditnim karticama u postavkama Chromea</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">Pritisnite |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| da zatvorite prikaz preko cijelog ekrana</translation>
 <translation id="2721148159707890343">Zahtjev je uspio</translation>
 <translation id="2723669454293168317">Pokrenite sigurnosnu provjeru u postavkama Chromea</translation>
@@ -699,6 +703,7 @@
 <translation id="2728127805433021124">Certifikat poslužitelja potpisan je slabim algoritmom potpisa.</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />Pokrenuti dijagnostiku povezivosti<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">Klasična muzika</translation>
+<translation id="2731382536835015353">44 x 68 inča</translation>
 <translation id="2734319753272419592">Dozvolite Googleu da koristi vaša kolica da pretraži personalizirane popuste. Kada su dostupni, popusti će se automatski prikazivati u kolicima.</translation>
 <translation id="2738330467931008676">Izaberite adresu preuzimanja</translation>
 <translation id="2740531572673183784">Uredu</translation>
@@ -771,6 +776,7 @@
 <translation id="2955913368246107853">Zatvori traku za traženje</translation>
 <translation id="2958544468932521864">Kriket</translation>
 <translation id="2959113999220720579">Njega lica i tijela</translation>
+<translation id="2962073860865348475">12 x 18 inča</translation>
 <translation id="2968103128155246731">Kombi i minikombi vozila</translation>
 <translation id="2972581237482394796">&amp;Ponovi</translation>
 <translation id="2977665033722899841"><ph name="ROW_NAME" />, trenutno odabrano. <ph name="ROW_CONTENT" /></translation>
@@ -874,6 +880,7 @@
 <translation id="3249151924975132674">Studentski krediti i finansiranje fakulteta</translation>
 <translation id="3249845759089040423">Cool</translation>
 <translation id="3250640885957938546">Oglašavanje i marketing</translation>
+<translation id="3251133337102041130">Government Legal</translation>
 <translation id="3252266817569339921">Francuska</translation>
 <translation id="3254301855501243548">18 x 22 in</translation>
 <translation id="3256863843508922226">Umirovljenje i penzija</translation>
@@ -886,6 +893,7 @@
 <translation id="3270156322180235608">Putovanje avionom</translation>
 <translation id="3270847123878663523">&amp;Poništi preuređivanje</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> se želi povezati</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">Vaša organizacija, <ph name="ENROLLMENT_DOMAIN" />, je poslala određene informacije web lokacijama u nastavku, naprimjer postavke ili pravila.</translation>
 <translation id="3282497668470633863">Dodajte ime na kartici</translation>
 <translation id="3286372614333682499">uspravno</translation>
@@ -988,6 +996,7 @@
 <translation id="3531780078352352885">Tabele za posao</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> želi koristiti vaš mikrofon</translation>
 <translation id="3533328374079021623">Poštansko sanduče 5</translation>
+<translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542768452570884558">Otvori link u novom prozoru</translation>
 <translation id="3547746132308051926">20 x 24 in</translation>
 <translation id="3550112004925580947">Ugostiteljstvo</translation>
@@ -1173,6 +1182,7 @@
 <translation id="4030383055268325496">&amp;Opozovi dodavanje</translation>
 <translation id="4031179711345676612">Mikrofon je dozvoljen</translation>
 <translation id="4040350669425716613">Fakulteti i univerziteti</translation>
+<translation id="4047351652147966654">18 x 24 inča</translation>
 <translation id="405399507749852140">Primajte obavještenja ako cijena padne na bilo kojoj web lokaciji</translation>
 <translation id="4056223980640387499">Sepija</translation>
 <translation id="4063063121357725926">Dozvolite Googleu da vam pomogne da pronađete popuste za sadržaj kolica</translation>
@@ -1372,6 +1382,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pritisnite Tab, a zatim Enter da prevedete ovu stranicu pomoću Google Prevodioca</translation>
 <translation id="4514308731478712184">Isključi iskustva pregledanja</translation>
 <translation id="4515275063822566619">Kartice i adrese dolaze iz Cromea i vašeg Google računa (<ph name="ACCOUNT_EMAIL" />). Njima možete upravljati u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Administratorska pravila blokiraju preuzimanje te datoteke</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Koverta Monarch</translation>
 <translation id="4521916730539354575">Lijeva ladica</translation>
@@ -1487,6 +1498,7 @@
 <translation id="4813512666221746211">Greška na mreži</translation>
 <translation id="4816492930507672669">Prilagodi stranici</translation>
 <translation id="4819347708020428563">Urediti bilješke u zadanom prikazu?</translation>
+<translation id="4823325221257637040">Pokretanje</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da brzo kreirate novu Google tabelu</translation>
 <translation id="4825507807291741242">Snažno</translation>
 <translation id="483241715238664915">Uključi upozorenja</translation>
@@ -1602,6 +1614,7 @@
 <translation id="5093232627742069661">Z-presavijanje</translation>
 <translation id="5094747076828555589">Ovaj server ne može dokazati da pripada domeni <ph name="DOMAIN" />; Chromium ne vjeruje njegovoj sigurnosnoj potvrdi. Uzrok tome može biti pogrešna konfiguracija ili napadač koji je prekinuo vašu vezu.</translation>
 <translation id="5097099694988056070">Statistika uređaja kao što je iskorištenost CPU-a/RAM-a</translation>
+<translation id="5097468150760963273">27 x 39 inča</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">Web lokacija nije sigurna</translation>
 <translation id="5109892411553231226">Upravljajte načinima plaćanja</translation>
@@ -1926,6 +1939,7 @@
 <translation id="5953516610448771166">Automatski titlovi nisu dostupni za ovaj medijski sadržaj. Da preuzmete titlove, blokirajte postavku <ph name="CONTENT_SETTINGS" /> za ovu web lokaciju.</translation>
 <translation id="5955063559762970069">Hoteli i smještaj</translation>
 <translation id="5963413905009737549">Odjeljak</translation>
+<translation id="5967260682280773804">36 x 48 inča</translation>
 <translation id="5967592137238574583">Uredite kontakt informacije</translation>
 <translation id="5967867314010545767">Ukloni iz historije</translation>
 <translation id="5968022600320704045">Nema rezultata pretraživanja</translation>
@@ -1997,6 +2011,7 @@
 <translation id="6127379762771434464">Stavka je uklonjena</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />Saznajte više o anonimnom načinu rada u Chromeu<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">Ekstenzija fajla je prazna ili neispravna.</translation>
+<translation id="6139975341602920272">17 x 22 inča</translation>
 <translation id="6146055958333702838">Provjerite sve kablove i ponovo pokrenite sve rutere, modeme ili druge mrežne
     uređaje koje koristite.</translation>
 <translation id="614940544461990577">Pokušajte:</translation>
@@ -2019,6 +2034,7 @@
 <translation id="6196640612572343990">Blokiraj kolačiće trećih strana</translation>
 <translation id="6197648101609735209">89 x 89 mm</translation>
 <translation id="6203231073485539293">Provjerite internetsku vezu</translation>
+<translation id="6212314149070368045">US Fanfold</translation>
 <translation id="6218753634732582820">Ukloniti adresu iz Chromiuma?</translation>
 <translation id="622039917539443112">Paralelno presavijanje</translation>
 <translation id="6221345481584921695">Sigurno pregledanje na Googleu je nedavno <ph name="BEGIN_LINK" />otkrilo zlonamjerni softver<ph name="END_LINK" /> na <ph name="SITE" />. Web lokacije koje su inače sigurne ponekad budu zaražene zlonamjernim softverom. Zlonamjerni sadržaj dolazi sa hosta <ph name="SUBRESOURCE_HOST" />, koji je poznati distributer ovakvog softvera.</translation>
@@ -2045,6 +2061,7 @@
 <translation id="627746635834430766">Da sljedeći put brže izvršite plaćanje, sačuvajte adresu kartice i adresu za naplatu na svoj Google račun.</translation>
 <translation id="6279183038361895380">Pritisnite |<ph name="ACCELERATOR" />| da prikažete kursor</translation>
 <translation id="6280223929691119688">Isporuka na ovu adresu nije moguća. Odaberite drugu adresu.</translation>
+<translation id="6284292079994426700">26 x 38 inča</translation>
 <translation id="6285507000506177184">Dugme za upravljanje preuzimanjima u Chromeu, pritisnite Enter da upravljate fajlovima koje ste preuzeli u Chromeu</translation>
 <translation id="6289939620939689042">Boja stranice</translation>
 <translation id="6290238015253830360">Predloženi članci će se pojaviti ovdje</translation>
@@ -2098,6 +2115,7 @@
 <translation id="6410264514553301377">Unesite datum isteka i CVC za karticu <ph name="CREDIT_CARD" /></translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">Chromium vam može pomoći da zaštitite svoj Google račun i promijenite lozinku.</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">Materijal</translation>
 <translation id="6427730057873428458">Presavijanje</translation>
 <translation id="6428450836711225518">Potvrdite broj telefona</translation>
@@ -2111,6 +2129,7 @@
 <translation id="6443406338865242315">Koje ekstenzije i dodatke ste instalirali</translation>
 <translation id="6446608382365791566">Dodajte više informacija</translation>
 <translation id="6447842834002726250">Kolačići</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">Koverta Chou 40</translation>
 <translation id="6451458296329894277">Potvrdite ponovno slanje obrasca</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2277,6 +2296,7 @@
 <translation id="6915804003454593391">Korisnik:</translation>
 <translation id="6916954549222464607">Finansijsko planiranje i upravljanje</translation>
 <translation id="6917795328362592458">Lozinka koju ste upravo koristili pronađena je prilikom narušavanja podataka. Da osigura vaše račune, Upravitelj lozinki preporučuje da provjerite sačuvane lozinke.</translation>
+<translation id="6925267999184670015">North American B+</translation>
 <translation id="6934672428414710184">Ovaj naziv je s vašeg Google računa</translation>
 <translation id="6936976777388162184">Ovo je uređaj u paketu i nije se moguće prijaviti pomoću Kioska i Nadogradnje potpisivanja.</translation>
 <translation id="6939469646605424232">TV drame</translation>
@@ -2326,6 +2346,7 @@
 <translation id="7030436163253143341">Certifikat nije važeći</translation>
 <translation id="7031646650991750659">Koje Google Play aplikacije ste instalirali</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da upravljate postavkama privatnosti Google računa</translation>
+<translation id="7048095965575426564">European Fanfold</translation>
 <translation id="7050187094878475250">Pokušali ste pristupiti domeni <ph name="DOMAIN" />, ali je server prikazao potvrdu čiji period važenja je predugačak da bi bio vjerodostojan.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{Trenutno nije moguće sačuvati ovu karticu}one{Trenutno nije moguće sačuvati ove kartice}few{Trenutno nije moguće sačuvati ove kartice}other{Trenutno nije moguće sačuvati ove kartice}}</translation>
 <translation id="7053983685419859001">Blokiraj</translation>
@@ -2363,6 +2384,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Dostava na ovu adresu nije moguća. Odaberite drugu adresu.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Blokirani prijenos</translation>
 <translation id="7132939140423847331">Vaš administrator je zabranio kopiranje ovih podataka.</translation>
 <translation id="7135130955892390533">Prikaži status</translation>
 <translation id="7138472120740807366">Način dostave</translation>
@@ -2387,6 +2409,7 @@
 <translation id="7192203810768312527">Oslobodit će se <ph name="SIZE" />. Neke web lokacije će se možda učitavati sporije kada ih posjetite sljedeći put.</translation>
 <translation id="7193661028827781021">Reference</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">Administrator može vidjeti:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pritisnite Tab, a zatim Enter da otvorite novu anonimnu karticu i da privatno pregledate</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> se ne pridržava sigurnosnih standarda.</translation>
@@ -2487,6 +2510,7 @@
 <translation id="7421067045979951561">obrađivači protokola</translation>
 <translation id="7426022697669111648">Dugme za pregledanje historije Chromea, pritisnite Enter da pregledate historiju pregledanja i upravljate njome u postavkama Chromea</translation>
 <translation id="7427366580982928791">Sigurnost djece na internetu</translation>
+<translation id="7429429656042611765">Executive</translation>
 <translation id="7437289804838430631">Dodaj kontakt podatke</translation>
 <translation id="7437490109271760224">Kartaške igre</translation>
 <translation id="7440140511386898319">Istražite dok ste van mreže</translation>
@@ -2593,6 +2617,7 @@
 <translation id="7658239707568436148">Otkaži</translation>
 <translation id="7659327900411729175">Koverta Kaku 8</translation>
 <translation id="7659878911471462949">Suze radosnice</translation>
+<translation id="766014026101194726">{0,plural, =1{Administratorska pravila blokiraju prijenos te datoteke}one{Administratorska pravila blokiraju prijenos # datoteke}few{Administratorska pravila blokiraju prijenos # datoteke}other{Administratorska pravila blokiraju prijenos # datoteka}}</translation>
 <translation id="7662298039739062396">Postavku kontrolira ekstenzija</translation>
 <translation id="7663736086183791259">Potvrda <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Nije dozvoljeno u anonimnom načinu rada</translation>
@@ -2687,11 +2712,13 @@
 <translation id="7939744324936979484">Narodna i tradicionalna muzika</translation>
 <translation id="7941628148012649605">Koverta Chou 4</translation>
 <translation id="7942349550061667556">Crvena</translation>
+<translation id="7943397946612013052">Blokirano preuzimanje</translation>
 <translation id="7943893128817522649">Može tražiti da automatski preuzima više fajlova</translation>
 <translation id="7947285636476623132">Provjerite godinu isteka kartice i pokušajte ponovo</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da saznate više o funkcijama Chromea</translation>
 <translation id="7950027195171824198">Upravljajte preferencama za kolačiće u postavkama Chromea</translation>
 <translation id="7951415247503192394">(32-bitno)</translation>
+<translation id="7952192831285741665">European EDP</translation>
 <translation id="7953569069500808819">Uvez gornjeg ruba</translation>
 <translation id="7956713633345437162">Mobilne oznake</translation>
 <translation id="7961015016161918242">Nikada</translation>
@@ -2777,6 +2804,7 @@
 <translation id="8153865548451212769">{0,plural, =1{Pravila administratora ne preporučuju preuzimanje ovog fajla na uređaj <ph name="DESTINATION_NAME" />}one{Pravila administratora ne preporučuju preuzimanje ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}few{Pravila administratora ne preporučuju preuzimanje ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}other{Pravila administratora ne preporučuju preuzimanje ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Napusti web lokaciju</translation>
 <translation id="8163866351304776260">Četverostruko bušenje na lijevoj strani</translation>
+<translation id="8175330382720204696">Government Letter</translation>
 <translation id="8175796834047840627">Chrome vam nudi pohranjivanje vaših kartica na Google računu zato što ste prijavljeni. Ovo ponašanje možete promjeniti u postavkama</translation>
 <translation id="8176440868214972690">Administrator ovog uređaja je poslao određene informacije web lokacijama u nastavku, naprimjer postavke ili pravila.</translation>
 <translation id="8184538546369750125">Koristi opću zadanu postavku (dozvoli)</translation>
@@ -2887,6 +2915,7 @@
 <translation id="8449155699563577224">17 x 24 in</translation>
 <translation id="8449836157089738489">Otvori sve u novoj grupi kartica</translation>
 <translation id="8457125768502047971">Neodređeno</translation>
+<translation id="8458202188076138974">Letter Extra</translation>
 <translation id="8461694314515752532">Šifrirajte sinhronizirane podatke svojim pristupnim izrazom</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 kreditna kartica}one{# kreditna kartica}few{# kreditne kartice}other{# kreditnih kartica}}</translation>
 <translation id="8468358362970107653">Koverta C3</translation>
@@ -3093,6 +3122,7 @@
 <translation id="9042617223719777575">Veliki kapacitet</translation>
 <translation id="9044359186343685026">Koristi Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24 x 36 inča</translation>
 <translation id="9049981332609050619">Pokušali ste pristupiti domeni <ph name="DOMAIN" />, ali je server prikazao nevažeću potvrdu.</translation>
 <translation id="9050666287014529139">Zaporka</translation>
 <translation id="9056953843249698117">Trgovina</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index 848bff1..448632e 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -1372,6 +1372,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, pwyswch Tab ac Enter i gyfieithu'r dudalen hon gyda Google Translate</translation>
 <translation id="4514308731478712184">Diffodd Teithiau</translation>
 <translation id="4515275063822566619">Daw cardiau a chyfeiriadau o Chrome a'ch Cyfrif Google (<ph name="ACCOUNT_EMAIL" />). Gallwch eu rheoli yn y <ph name="BEGIN_LINK" />Gosodiadau<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Mae lawrlwytho'r ffeil hon wedi'i rwystro gan bolisi gweinyddwr</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Amlen Monarch</translation>
 <translation id="4521916730539354575">Hambwrdd Chwith</translation>
@@ -2363,6 +2364,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Methu ag anfon i'r cyfeiriad hwn. Dewiswch gyfeiriad gwahanol.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Uwchlwytho wedi'i rwystro</translation>
 <translation id="7132939140423847331">Mae eich gweinyddwr wedi gwahardd y data hyn rhag cael eu copïo.</translation>
 <translation id="7135130955892390533">Dangos statws</translation>
 <translation id="7138472120740807366">Dull cyflwyno</translation>
@@ -2593,6 +2595,7 @@
 <translation id="7658239707568436148">Canslo</translation>
 <translation id="7659327900411729175">Amlen Kaku 8</translation>
 <translation id="7659878911471462949">Dagrau Llawenydd</translation>
+<translation id="766014026101194726">{0,plural, =1{Mae uwchlwytho'r ffeil hon wedi'i rwystro gan bolisi gweinyddwr}zero{Mae uwchlwytho # ffeil wedi'i rwystro gan bolisi gweinyddwr}two{Mae uwchlwytho # ffeil wedi'i rwystro gan bolisi gweinyddwr}few{Mae uwchlwytho # ffeil wedi'i rwystro gan bolisi gweinyddwr}many{Mae uwchlwytho # ffeil wedi'i rwystro gan bolisi gweinyddwr}other{Mae uwchlwytho # ffeil wedi'i rwystro gan bolisi gweinyddwr}}</translation>
 <translation id="7662298039739062396">Rheolir y gosodiad gan estyniad</translation>
 <translation id="7663736086183791259">Tystysgrif <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Ni chaniateir yn anhysbys</translation>
@@ -2687,6 +2690,7 @@
 <translation id="7939744324936979484">Cerddoriaeth werin a thraddodiadol</translation>
 <translation id="7941628148012649605">Amlen Chou 4</translation>
 <translation id="7942349550061667556">Coch</translation>
+<translation id="7943397946612013052">Lawrlwytho wedi'i rwystro</translation>
 <translation id="7943893128817522649">Yn gallu gofyn am lawrlwytho mwy nag un ffeil yn awtomatig</translation>
 <translation id="7947285636476623132">Gwiriwch eich blwyddyn darfod a rhowch gynnig arall arni</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, pwyswch Tab yna Enter i ddysgu am nodweddion Chrome</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 778bbe0f..a555f6b 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -137,6 +137,7 @@
 <translation id="129553762522093515">Έκλεισαν πρόσφατα</translation>
 <translation id="1296930489679394997">Πωλήσεις</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Δοκιμάστε να διαγράψετε τα cookie σας<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Legal Extra</translation>
 <translation id="1301324364792935241">Ελέγξτε τις ρυθμίσεις ασφαλούς DNS</translation>
 <translation id="1307966114820526988">Λειτουργίες που καταργήθηκαν</translation>
 <translation id="1308113895091915999">Υπάρχει διαθέσιμη προσφορά</translation>
@@ -264,6 +265,7 @@
 <translation id="1567040042588613346">Αυτή η πολιτική λειτουργεί με τον αναμενόμενο τρόπο αλλά η ίδια τιμή έχει οριστεί αλλού και αντικαθίσταται από αυτήν την πολιτική.</translation>
 <translation id="1569487616857761740">Εισαγωγή ημερομηνίας λήξης</translation>
 <translation id="1569694109004336106">Το Google Chrome επιχειρεί να ενεργοποιήσει το Windows Hello για τη συμπλήρωση κωδικών πρόσβασης.</translation>
+<translation id="1572765991610098222"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ίντσες</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">Παρουσιάστηκε πρόβλημα κατά την εμφάνιση αυτής της ιστοσελίδας.</translation>
 <translation id="1586541204584340881">Ποιες επεκτάσεις έχετε εγκαταστήσει</translation>
@@ -443,6 +445,7 @@
 <translation id="205212645995975601">Μπάρμπεκιου και ψητά</translation>
 <translation id="2053111141626950936">Οι σελίδες στα <ph name="LANGUAGE" /> δεν θα μεταφράζονται.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Όταν αυτό το στοιχείο ελέγχου είναι ενεργοποιημένο και η κατάσταση είναι ενεργή, το Chrome καθορίζει τη μεγάλη ομάδα ατόμων ή "κοόρτη" με την οποία μοιάζει περισσότερο η πιο πρόσφατη δραστηριότητα περιήγησής σας. Οι διαφημιζόμενοι μπορούν να επιλέξουν διαφημίσεις για την ομάδα και η δραστηριότητα περιήγησής σας διατηρείται ιδιωτική στη συσκευή σας. Η ομάδα σας ενημερώνεται καθημερινά.}=1{Όταν αυτό το στοιχείο ελέγχου είναι ενεργοποιημένο και η κατάσταση είναι ενεργή, το Chrome καθορίζει τη μεγάλη ομάδα ατόμων ή "κοόρτη" με την οποία μοιάζει περισσότερο η πιο πρόσφατη δραστηριότητα περιήγησής σας. Οι διαφημιζόμενοι μπορούν να επιλέξουν διαφημίσεις για την ομάδα και η δραστηριότητα περιήγησής σας διατηρείται ιδιωτική στη συσκευή σας. Η ομάδα σας ενημερώνεται καθημερινά.}other{Όταν αυτό το στοιχείο ελέγχου είναι ενεργοποιημένο και η κατάσταση είναι ενεργή, το Chrome καθορίζει τη μεγάλη ομάδα ατόμων ή "κοόρτη" με την οποία μοιάζει περισσότερο η πιο πρόσφατη δραστηριότητα περιήγησής σας. Οι διαφημιζόμενοι μπορούν να επιλέξουν διαφημίσεις για την ομάδα και η δραστηριότητα περιήγησής σας διατηρείται ιδιωτική στη συσκευή σας. Η ομάδα σας ενημερώνεται κάθε {NUM_DAYS} ημέρες.}}</translation>
+<translation id="2059202684901022309">22 x 34 ίντσες</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 πρόταση}other{# προτάσεις}}</translation>
 <translation id="2066915425250589881">ζητήσετε να διαγραφούν</translation>
 <translation id="2068528718802935086">Βρέφη και νήπια</translation>
@@ -532,6 +535,7 @@
 <translation id="2277753418458118549">Εμφάνιση λεπτομερειών σύνδεσης</translation>
 <translation id="2283340219607151381">Αποθήκευση και συμπλήρωση διευθύνσεων</translation>
 <translation id="2283447177162560884">Το "<ph name="PAGE_TITLE" />" διαγράφηκε</translation>
+<translation id="2286383991450886080">34 x 44 ίντσες</translation>
 <translation id="2288422996159078444">Οτιδήποτε πληκτρολογείτε, τυχόν σελίδες που βλέπετε ή οποιαδήποτε άλλη δραστηριότητα στον ιστό παρακολουθείται. Το περιεχόμενο σε ιστοτόπους μπορεί να αλλάξει χωρίς να το γνωρίζετε.</translation>
 <translation id="2289385804009217824">Περικοπή</translation>
 <translation id="2292556288342944218">Η πρόσβασή σας στο διαδίκτυο είναι αποκλεισμένη</translation>
@@ -692,6 +696,7 @@
 <translation id="2709516037105925701">Αυτόματη συμπλήρωση</translation>
 <translation id="2713444072780614174">Λευκό</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε Tab και έπειτα Enter για να διαχειριστείτε τα στοιχεία πληρωμών και πιστωτικών καρτών στις ρυθμίσεις του Chrome.</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">Πατήστε |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| για έξοδο από την πλήρη οθόνη</translation>
 <translation id="2721148159707890343">Το αίτημα ήταν επιτυχές</translation>
 <translation id="2723669454293168317">Εκτέλεση ελέγχου ασφαλείας στις ρυθμίσεις του Chrome</translation>
@@ -699,6 +704,7 @@
 <translation id="2728127805433021124">Το πιστοποιητικό του διακομιστή είναι υπογεγραμμένο με έναν αδύναμο αλγόριθμο υπογραφής.</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />Να εκτελέσετε τα Διαγνωστικά στοιχεία συνδεσιμότητας<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">Κλασική μουσική</translation>
+<translation id="2731382536835015353">44 x 68 ίντσες</translation>
 <translation id="2734319753272419592">Να επιτρέπεται στην Google να χρησιμοποιεί τα καλάθια σας για να αναζητά εξατομικευμένες εκπτώσεις. Όταν είναι διαθέσιμες, οι εκπτώσεις θα εμφανίζονται αυτόματα στα καλάθια σας.</translation>
 <translation id="2738330467931008676">Επιλογή διεύθυνσης παραλαβής</translation>
 <translation id="2740531572673183784">ΟK</translation>
@@ -771,6 +777,7 @@
 <translation id="2955913368246107853">Κλείσιμο γραμμής εύρεσης</translation>
 <translation id="2958544468932521864">Κρίκετ</translation>
 <translation id="2959113999220720579">Περιποίηση προσώπου και σώματος</translation>
+<translation id="2962073860865348475">12 x 18 ίντσες</translation>
 <translation id="2968103128155246731">Βαν και μίνιβαν</translation>
 <translation id="2972581237482394796">&amp;Επανάληψη ενέργειας</translation>
 <translation id="2977665033722899841">Έχει επιλεγεί ο λογαριασμός <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation>
@@ -874,6 +881,7 @@
 <translation id="3249151924975132674">Φοιτητικά δάνεια και χρηματοδότηση σπουδών</translation>
 <translation id="3249845759089040423">Μοδάτο</translation>
 <translation id="3250640885957938546">Διαφήμιση και μάρκετινγκ</translation>
+<translation id="3251133337102041130">Government Legal</translation>
 <translation id="3252266817569339921">Γαλλικά
 </translation>
 <translation id="3254301855501243548">18 x 22 ίντσες</translation>
@@ -887,6 +895,7 @@
 <translation id="3270156322180235608">Αεροπορικά ταξίδια</translation>
 <translation id="3270847123878663523">&amp;Αναίρεση αναδιάταξης</translation>
 <translation id="3271648667212143903">Ο ιστότοπος <ph name="ORIGIN" /> επιθυμεί σύνδεση</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">Ο οργανισμός σας, <ph name="ENROLLMENT_DOMAIN" />, έστειλε ορισμένες πληροφορίες στους παρακάτω ιστοτόπους, όπως ρυθμίσεις ή πολιτικές.</translation>
 <translation id="3282497668470633863">Προσθήκη ονόματος στην κάρτα</translation>
 <translation id="3286372614333682499">κατακόρυφος προσανατολισμός</translation>
@@ -989,6 +998,7 @@
 <translation id="3531780078352352885">Φύλλα εργασίας</translation>
 <translation id="3532844647053365774">Ο ιστότοπος <ph name="HOST" /> επιθυμεί να χρησιμοποιήσει το μικρόφωνο σας</translation>
 <translation id="3533328374079021623">Γραμματοκιβώτιο 5</translation>
+<translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542768452570884558">Άνοιγμα συνδέσμου σε νέο παράθυρο</translation>
 <translation id="3547746132308051926">20 x 24 ίντσες</translation>
 <translation id="3550112004925580947">Κλάδος φιλοξενίας</translation>
@@ -1099,6 +1109,7 @@
 <translation id="3787705759683870569">Λήγει <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="3789155188480882154">Μέγεθος 16</translation>
 <translation id="3789841737615482174">Εγκατάσταση</translation>
+<translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> ίντσες)</translation>
 <translation id="3793574014653384240">Αριθμοί και αιτίες των σφαλμάτων που παρουσιάστηκαν πρόσφατα</translation>
 <translation id="3795344968043407227">Ανεξάρτητη (indie) και εναλλακτική μουσική</translation>
 <translation id="3799805948399000906">Ζητήθηκε γραμματοσειρά</translation>
@@ -1174,6 +1185,7 @@
 <translation id="4030383055268325496">&amp;Αναίρεση προσθήκης</translation>
 <translation id="4031179711345676612">Επιτρέπεται το μικρόφωνο</translation>
 <translation id="4040350669425716613">Κολέγια και πανεπιστήμια</translation>
+<translation id="4047351652147966654">18 x 24 ίντσες</translation>
 <translation id="405399507749852140">Λάβετε ειδοποιήσεις σε περίπτωση πτώσης τιμής σε οποιονδήποτε ιστότοπο</translation>
 <translation id="4056223980640387499">Σέπια</translation>
 <translation id="4063063121357725926">Επιτρέψτε στο Google να σας βοηθήσει να βρείτε εκπτώσεις για τα καλάθια σας</translation>
@@ -1489,6 +1501,7 @@
 <translation id="4813512666221746211">Σφάλμα δικτύου</translation>
 <translation id="4816492930507672669">Προσαρμογή στη σελίδα</translation>
 <translation id="4819347708020428563">Επεξεργασία σχολιασμών στην προεπιλεγμένη προβολή;</translation>
+<translation id="4823325221257637040">Έναρξη</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε το πλήκτρο Tab και έπειτα το πλήκτρο Enter για να δημιουργήσετε γρήγορα ένα νέο Φύλλο Google</translation>
 <translation id="4825507807291741242">Ισχυρό</translation>
 <translation id="483241715238664915">Ενεργοποίηση ειδοποιήσεων</translation>
@@ -1605,6 +1618,7 @@
 <translation id="5093232627742069661">Δίπλωση Z</translation>
 <translation id="5094747076828555589">Ο διακομιστής δεν μπορεί να αποδείξει ότι είναι το <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του δεν θεωρείται έμπιστο από το Chromium. Αυτό μπορεί να οφείλεται σε λανθασμένη ρύθμιση ή σε κάποιον τρίτο που επιτίθεται στη σύνδεσή σας.</translation>
 <translation id="5097099694988056070">Στατιστικά στοιχεία συσκευής, όπως χρήση CPU/RAM</translation>
+<translation id="5097468150760963273">27 x 39 ίντσες</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">Ο ιστότοπος δεν είναι ασφαλής</translation>
 <translation id="5109892411553231226">Διαχείριση τρόπων πληρωμής</translation>
@@ -1930,6 +1944,7 @@
 <translation id="5953516610448771166">Οι Ζωντανοί υπότιτλοι δεν είναι διαθέσιμοι για αυτό το μέσο. Για τη λήψη υποτίτλων, αποκλείστε τις ακόλουθες ρυθμίσεις για αυτόν τον ιστότοπο: <ph name="CONTENT_SETTINGS" />.</translation>
 <translation id="5955063559762970069">Ξενοδοχεία και διαμονή</translation>
 <translation id="5963413905009737549">Ενότητα</translation>
+<translation id="5967260682280773804">36 x 48 ίντσες</translation>
 <translation id="5967592137238574583">Επεξεργασία στοιχείων επικοινωνίας</translation>
 <translation id="5967867314010545767">Κατάργηση από το ιστορικό</translation>
 <translation id="5968022600320704045">Κανένα αποτέλεσμα αναζήτησης</translation>
@@ -2001,6 +2016,7 @@
 <translation id="6127379762771434464">Το στοιχείο καταργήθηκε</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />Μάθετε περισσότερα σχετικά με την Ανώνυμη περιήγηση στο Chrome<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">Η επέκταση αρχείου είναι κενή ή έχει λανθασμένη μορφή.</translation>
+<translation id="6139975341602920272">17 x 22 ίντσες</translation>
 <translation id="6146055958333702838">Ελέγξτε τυχόν καλώδια και επανεκκινήστε δρομολογητές, μόντεμ ή άλλες συσκευές
     του δικτύου που ενδεχομένως χρησιμοποιείτε.</translation>
 <translation id="614940544461990577">Δοκιμάστε να κάνετε τα εξής:</translation>
@@ -2023,6 +2039,7 @@
 <translation id="6196640612572343990">Αποκλεισμός cookie τρίτων</translation>
 <translation id="6197648101609735209">89 x 89 χιλ.</translation>
 <translation id="6203231073485539293">Ελέγξτε τη σύνδεσή σας στο Internet</translation>
+<translation id="6212314149070368045">US Fanfold</translation>
 <translation id="6218753634732582820">Να καταργηθεί η διεύθυνση από το Chromium;</translation>
 <translation id="622039917539443112">Παράλληλη δίπλωση</translation>
 <translation id="6221345481584921695">Πρόσφατα η Ασφαλής περιήγηση Google <ph name="BEGIN_LINK" />εντόπισε κακόβουλο λογισμικό<ph name="END_LINK" /> στον ιστότοπο <ph name="SITE" />. Οι ιστότοποι που είναι ασφαλείς υπό φυσιολογικές συνθήκες μερικές φορές προσβάλλονται από κακόβουλα λογισμικά. Το κακόβουλο περιεχόμενο προέρχεται από το <ph name="SUBRESOURCE_HOST" />, έναν γνωστό διανομέα κακόβουλου λογισμικού.</translation>
@@ -2049,6 +2066,7 @@
 <translation id="627746635834430766">Για πιο γρήγορες πληρωμές, αποθηκεύστε τα στοιχεία της κάρτας και τη διεύθυνση χρέωσης στον Λογαριασμό σας Google.</translation>
 <translation id="6279183038361895380">Πιέστε |<ph name="ACCELERATOR" />| για να εμφανιστεί ο δρομέας</translation>
 <translation id="6280223929691119688">Δεν είναι δυνατή η παράδοση σε αυτήν τη διεύθυνση. Επιλέξτε μια άλλη διεύθυνση.</translation>
+<translation id="6284292079994426700">26 x 38 ίντσες</translation>
 <translation id="6285507000506177184">Κουμπί Διαχείριση λήψεων στο Chrome, πατήστε το πλήκτρο Enter για να διαχειριστείτε τα αρχεία που έχετε κατεβάσει στο Chrome</translation>
 <translation id="6289939620939689042">Χρώμα σελίδας</translation>
 <translation id="6290238015253830360">Τα προτεινόμενα άρθρα σας εμφανίζονται εδώ</translation>
@@ -2102,6 +2120,7 @@
 <translation id="6410264514553301377">Εισαγάγετε την ημερομηνία λήξης και τον κωδικό CVC για την κάρτα <ph name="CREDIT_CARD" /></translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">Το Chromium μπορεί να σας βοηθήσει να προστατεύσετε τον Λογαριασμό σας Google και να αλλάξετε τον κωδικό πρόσβασής σας.</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">Material</translation>
 <translation id="6427730057873428458">Δίπλωση παράθυρο</translation>
 <translation id="6428450836711225518">Επαλήθευση του αριθμού τηλεφώνου σας</translation>
@@ -2115,6 +2134,7 @@
 <translation id="6443406338865242315">Ποιες επεκτάσεις και προσθήκες έχετε εγκαταστήσει</translation>
 <translation id="6446608382365791566">Προσθήκη περισσότερων πληροφοριών</translation>
 <translation id="6447842834002726250">Cookie</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">Φάκελος Chou 40</translation>
 <translation id="6451458296329894277">Επιβεβαίωση νέας υποβολής φόρμας</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2281,6 +2301,7 @@
 <translation id="6915804003454593391">Χρήστης</translation>
 <translation id="6916954549222464607">Χρηματοοικονομικός σχεδιασμός και διαχείριση</translation>
 <translation id="6917795328362592458">Ο κωδικός πρόσβασης που μόλις χρησιμοποιήσατε εντοπίστηκε σε μια παραβίαση δεδομένων. Για την ασφάλεια των λογαριασμών σας, ο Διαχειριστής κωδικών πρόσβασης συνιστά να ελέγξετε τους αποθηκευμένους κωδικούς πρόσβασής σας.</translation>
+<translation id="6925267999184670015">North American B+</translation>
 <translation id="6934672428414710184">Αυτό το όνομα προέρχεται από τον Λογαριασμό σας Google</translation>
 <translation id="6936976777388162184">Αυτή είναι μια συσκευή που περιλαμβάνεται σε πακέτο και δεν μπορεί να εγγραφεί στην Αναβάθμιση kiosk και σήμανσης.</translation>
 <translation id="6939469646605424232">Τηλεοπτικά δράματα</translation>
@@ -2330,6 +2351,7 @@
 <translation id="7030436163253143341">Το πιστοποιητικό δεν είναι έγκυρο</translation>
 <translation id="7031646650991750659">Ποιες εφαρμογές Google Play έχετε εγκαταστήσει</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε Tab και, στη συνέχεια, Enter για να διαχειριστείτε τις ρυθμίσεις απορρήτου του Λογαριασμού σας Google.</translation>
+<translation id="7048095965575426564">European Fanfold</translation>
 <translation id="7050187094878475250">Επιχειρήσατε να μεταβείτε στο <ph name="DOMAIN" />, αλλά ο διακομιστής παρουσίασε ένα πιστοποιητικό με περίοδο εγκυρότητας η οποία είναι πολύ μεγάλη για να θεωρηθεί αξιόπιστη.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{Αυτήν τη στιγμή, δεν είναι δυνατή η αποθήκευση αυτής της κάρτας}other{Αυτήν τη στιγμή, δεν είναι δυνατή η αποθήκευση αυτών των καρτών}}</translation>
 <translation id="7053983685419859001">Αποκλεισμός</translation>
@@ -2391,6 +2413,7 @@
 <translation id="7192203810768312527">Απελευθερώνει <ph name="SIZE" />. Ορισμένοι ιστότοποι μπορεί να φορτωθούν πιο αργά κατά την επόμενη επίσκεψή σας.</translation>
 <translation id="7193661028827781021">Παραπομπές</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">Ο διαχειριστής σας μπορεί να βλέπει:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε Tab και έπειτα Enter για να ανοίξετε μια νέα καρτέλα ανώνυμης περιήγησης για ιδιωτική περιήγηση</translation>
 <translation id="7210863904660874423">Ο κεντρικός υπολογιστής <ph name="HOST_NAME" /> δεν συμμορφώνεται με τα πρότυπα ασφάλειας.</translation>
@@ -2491,12 +2514,14 @@
 <translation id="7421067045979951561">δείκτες χειρισμού πρωτοκόλλου</translation>
 <translation id="7426022697669111648">Κουμπί Προβολή του ιστορικού Chrome, πατήστε Enter για να δείτε και να διαχειριστείτε το ιστορικό περιήγησής σας στις ρυθμίσεις του Chrome.</translation>
 <translation id="7427366580982928791">Ασφάλεια παιδιών στο διαδίκτυο</translation>
+<translation id="7429429656042611765">Executive</translation>
 <translation id="7437289804838430631">Προσθήκη στοιχείων επικοινωνίας</translation>
 <translation id="7437490109271760224">Παιχνίδια τράπουλας</translation>
 <translation id="7440140511386898319">Αναζήτηση εκτός σύνδεσης</translation>
 <translation id="7441627299479586546">Εσφαλμένο θέμα πολιτικής</translation>
 <translation id="7442725080345379071">Ανοιχτό πορτοκαλί</translation>
 <translation id="7445762425076701745">Η ταυτότητα του διακομιστή στον οποίο έχετε συνδεθεί δεν μπορεί να επικυρωθεί πλήρως. Είστε συδεδεμένοι σε ένα διακομιστή χρησιμοποιώντας ένα όνομα που είναι έγκυρο μόνο εντός του δικτύου σας, την κατοχή του οποίου δεν έχει τρόπο να επικυρώσει μια εξωτερική αρχή πιστοποίησης. Καθώς ορισμένες αρχές πιστοποιητικών εκδίδουν πιστοποιητικά για αυτά τα ονόματα ούτως ή άλλως, δεν υπάρχει τρόπος να βεβαιωθείτε ότι είστε συνδεδεμένοι στον ιστότοπο που επιθυμείτε και όχι σε έναν εισβολέα.</translation>
+<translation id="7447625772313191651"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> χλστ.)</translation>
 <translation id="7451311239929941790"><ph name="BEGIN_LINK" />Να μάθετε περισσότερα<ph name="END_LINK" /> σχετικά με αυτό το πρόβλημα.</translation>
 <translation id="7455133967321480974">Χρήση καθολικής προεπιλεγμένης ρύθμισης (Αποκλεισμός)</translation>
 <translation id="745640750744109667">A0x3</translation>
@@ -2696,6 +2721,7 @@
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, πατήστε το πλήκτρο Tab και έπειτα το πλήκτρο Enter για να μάθετε σχετικά με τις λειτουργίες του Chrome</translation>
 <translation id="7950027195171824198">Διαχειριστείτε τις προτιμήσεις σας για τα cookie από τις ρυθμίσεις του Chrome</translation>
 <translation id="7951415247503192394">(32-bit)</translation>
+<translation id="7952192831285741665">European EDP</translation>
 <translation id="7953569069500808819">Ραφή στο επάνω άκρο</translation>
 <translation id="7956713633345437162">Σελιδοδείκτες κινητής συσκευής</translation>
 <translation id="7961015016161918242">Ποτέ</translation>
@@ -2781,6 +2807,7 @@
 <translation id="8153865548451212769">{0,plural, =1{Η πολιτική διαχειριστή δεν συνιστά τη λήψη αυτού του αρχείου σε <ph name="DESTINATION_NAME" />.}other{Η πολιτική διαχειριστή δεν συνιστά τη λήψη αυτών των αρχείων σε <ph name="DESTINATION_NAME" />.}}</translation>
 <translation id="8157295877370077682">Αποχώρηση από τον ιστότοπο</translation>
 <translation id="8163866351304776260">Τετραπλό τρύπημα στα αριστερά</translation>
+<translation id="8175330382720204696">Government Letter</translation>
 <translation id="8175796834047840627">Το Chrome προσφέρεται να αποθηκεύσει τις κάρτες σας στον Λογαριασμό σας Google επειδή έχετε συνδεθεί. Μπορείτε να αλλάξετε αυτήν τη συμπεριφορά στις ρυθμίσεις.</translation>
 <translation id="8176440868214972690">Ο διαχειριστής αυτής της συσκευής έστειλε ορισμένες πληροφορίες στους παρακάτω ιστοτόπους, όπως ρυθμίσεις ή πολιτικές.</translation>
 <translation id="8184538546369750125">Χρήση καθολικής προεπιλεγμένης ρύθμισης (Επιτρέπεται)</translation>
@@ -2800,6 +2827,7 @@
 <translation id="8218327578424803826">Εκχωρημένη τοποθεσία:</translation>
 <translation id="8225771182978767009">Το άτομο που ρύθμισε αυτόν τον υπολογιστή επέλεξε να αποκλείσει αυτόν τον ιστότοπο.</translation>
 <translation id="8228419419708659934">Προβολή δύο σελίδων</translation>
+<translation id="8229288958566709448"><ph name="WIDTH" /> x <ph name="HEIGHT" /> χλστ.</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8231564988424805352">Αθλητικά παιχνίδια</translation>
 <translation id="8232343881378637145">Θερμοκρασία πλατφόρμας</translation>
@@ -2892,6 +2920,7 @@
 <translation id="8449155699563577224">17 x 24 ίντσες</translation>
 <translation id="8449836157089738489">Άνοιγμα όλων σε νέα ομάδα καρτελών</translation>
 <translation id="8457125768502047971">Επ' αόριστον</translation>
+<translation id="8458202188076138974">Letter Extra</translation>
 <translation id="8461694314515752532">Κρυπτογράφηση συγχρονισμένων δεδομένων με τη δική σας φράση πρόσβασης συγχρονισμού</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 πιστωτική κάρτα}other{# πιστωτικές κάρτες}}</translation>
 <translation id="8468358362970107653">Φάκελος C3</translation>
@@ -3100,6 +3129,7 @@
 <translation id="9042617223719777575">Μεγάλη χωρητικότητα</translation>
 <translation id="9044359186343685026">Χρήση Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24 x 36 ίντσες</translation>
 <translation id="9049981332609050619">Επιχειρήσατε να μεταβείτε στον <ph name="DOMAIN" /> , αλλά ο διακομιστής παρουσίασε ένα μη έγκυρο πιστοποιητικό.</translation>
 <translation id="9050666287014529139">Φράση πρόσβασής σας</translation>
 <translation id="9056953843249698117">Κατάστημα</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index c1e9141..e504b66 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -1372,6 +1372,7 @@
 <translation id="4509074745930862522">‏<ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />، برای ترجمه کردن این صفحه بااستفاده از «ترجمه Google»، کلید Tab (جهش) و سپس Enter (ورود) را فشار دهید</translation>
 <translation id="4514308731478712184">خاموش کردن «سفرها»</translation>
 <translation id="4515275063822566619">‏کارت‌ها و نشانی‌ها از Chrome و حساب Google شما (<ph name="ACCOUNT_EMAIL" />) هستند. می‌توانید آن‌ها را در <ph name="BEGIN_LINK" />تنظیمات<ph name="END_LINK" /> مدیریت کنید.</translation>
+<translation id="4520048001084013693">خط‌مشی سرپرست بارگیری این فایل را مسدود کرده است</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> میلی‌متر (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">پاکت شاهی</translation>
 <translation id="4521916730539354575">سینی چپ</translation>
@@ -2363,6 +2364,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">ارسال به این نشانی ممکن نیست. نشانی دیگری را انتخاب کنید.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /><ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">بارگذاری مسدود شد</translation>
 <translation id="7132939140423847331">سرپرست کپی شدن این داده‌ها را ممنوع کرده است.</translation>
 <translation id="7135130955892390533">نمایش وضعیت</translation>
 <translation id="7138472120740807366">روش تحویل</translation>
@@ -2593,6 +2595,7 @@
 <translation id="7658239707568436148">لغو</translation>
 <translation id="7659327900411729175">پاکت کاکو ۸</translation>
 <translation id="7659878911471462949">اشک شوق</translation>
+<translation id="766014026101194726">{0,plural, =1{خط‌مشی سرپرست بارگذاری این فایل را مسدود کرده است}one{خط‌مشی سرپرست بارگذاری # فایل را مسدود کرده است}other{خط‌مشی سرپرست بارگذاری # فایل را مسدود کرده است}}</translation>
 <translation id="7662298039739062396">تنظیم توسط افزونه کنترل می‌شود</translation>
 <translation id="7663736086183791259">گواهی <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">در حالت «ناشناس» مجاز نیست</translation>
@@ -2687,6 +2690,7 @@
 <translation id="7939744324936979484">موسیقی سنتی و فولکلور</translation>
 <translation id="7941628148012649605">پاکت چو ۴</translation>
 <translation id="7942349550061667556">قرمز</translation>
+<translation id="7943397946612013052">بارگیری مسدود شد</translation>
 <translation id="7943893128817522649">می‌تواند برای بارگیری خودکار چند فایل درخواست دهد</translation>
 <translation id="7947285636476623132">سال انقضا را بررسی و دوباره امتحان کنید</translation>
 <translation id="7947813448670013867">‏<ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />؛ برای اطلاع از ویژگی‌های جدید Chrome، کلید «جهش» و سپس «ورود» را فشار دهید</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index c1ad811..475621a2 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -137,6 +137,7 @@
 <translation id="129553762522093515">Récemment fermés</translation>
 <translation id="1296930489679394997">Ventes</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Essayez d'effacer vos témoins<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Légal extra</translation>
 <translation id="1301324364792935241">Vérifiez les paramètres de DNS sécurisés</translation>
 <translation id="1307966114820526988">Fonctionnalités obsolètes</translation>
 <translation id="1308113895091915999">Offre proposée</translation>
@@ -443,6 +444,7 @@
 <translation id="205212645995975601">Barbecue et grillades</translation>
 <translation id="2053111141626950936">Les pages en <ph name="LANGUAGE" /> ne seront pas traduites.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Lorsque cette commande est activée et que son état est défini à actif, Chrome détermine à quel grand groupe de personnes, ou « cohorte », votre activité de navigation récente ressemble le plus. Les annonceurs peuvent sélectionner des annonces pour le groupe, et votre activité de navigation reste privée sur votre appareil. Votre groupe est mis à jour tous les jours.}=1{Lorsque cette commande est activée et que son état est défini à actif, Chrome détermine à quel grand groupe de personnes, ou « cohorte », votre activité de navigation récente ressemble le plus. Les annonceurs peuvent sélectionner des annonces pour le groupe, et votre activité de navigation reste privée sur votre appareil. Votre groupe est mis à jour tous les jours.}one{Lorsque cette commande est activée et que son état est défini à actif, Chrome détermine à quel grand groupe de personnes, ou « cohorte », votre activité de navigation récente ressemble le plus. Les annonceurs peuvent sélectionner des annonces pour le groupe, et votre activité de navigation reste privée sur votre appareil. Votre groupe est mis à jour chaque {NUM_DAYS} jour.}other{Lorsque cette commande est activée et que son état est défini à actif, Chrome détermine à quel grand groupe de personnes, ou « cohorte », votre activité de navigation récente ressemble le plus. Les annonceurs peuvent sélectionner des annonces pour le groupe, et votre activité de navigation reste privée sur votre appareil. Votre groupe est mis à jour tous les {NUM_DAYS} jours.}}</translation>
+<translation id="2059202684901022309">22 po x 34 po</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suggestion}one{# suggestion}other{# suggestions}}</translation>
 <translation id="2066915425250589881">demander la suppression</translation>
 <translation id="2068528718802935086">Bébés et tout-petits</translation>
@@ -532,6 +534,7 @@
 <translation id="2277753418458118549">Afficher les détails de la connexion</translation>
 <translation id="2283340219607151381">Enregistrer et remplir les adresses</translation>
 <translation id="2283447177162560884">« <ph name="PAGE_TITLE" /> » supprimé</translation>
+<translation id="2286383991450886080">34 po x 44 po</translation>
 <translation id="2288422996159078444">Tout ce que vous écrivez, toutes les pages que vous consultez ou toute autre activité sur le Web sont sous surveillance, et le contenu des sites peut être changé sans que vous le sachiez.</translation>
 <translation id="2289385804009217824">Découper</translation>
 <translation id="2292556288342944218">Votre accès à Internet est bloqué</translation>
@@ -692,6 +695,7 @@
 <translation id="2709516037105925701">Remplissage automatique</translation>
 <translation id="2713444072780614174">Blanc</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur la touche Tabulation, puis sur la touche Entrée pour gérer vos données de paiement et vos cartes de crédit dans les paramètres de Chrome</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">Appuyez sur |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| pour quitter le mode plein écran</translation>
 <translation id="2721148159707890343">Demande réussie</translation>
 <translation id="2723669454293168317">Effectuer une vérification de sécurité dans les paramètres de Chrome</translation>
@@ -699,6 +703,7 @@
 <translation id="2728127805433021124">Le certificat du serveur a été signé avec un algorithme de signature faible.</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />d'exécuter Connectivity Diagnostics<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">Musique classique</translation>
+<translation id="2731382536835015353">44 po x 68 po</translation>
 <translation id="2734319753272419592">Laissez Google utiliser vos paniers pour rechercher des rabais personnalisés. Lorsqu'ils sont offerts, les rabais s'affichent automatiquement sur vos paniers.</translation>
 <translation id="2738330467931008676">Choisir une adresse de ramassage</translation>
 <translation id="2740531572673183784">OK</translation>
@@ -771,6 +776,7 @@
 <translation id="2955913368246107853">Fermer la barre de recherche</translation>
 <translation id="2958544468932521864">Cricket</translation>
 <translation id="2959113999220720579">Soins du visage et du corps</translation>
+<translation id="2962073860865348475">12 po x 18 po</translation>
 <translation id="2968103128155246731">Fourgons et fourgonnettes</translation>
 <translation id="2972581237482394796">&amp;Rétablir</translation>
 <translation id="2977665033722899841">Ligne <ph name="ROW_NAME" /> actuellement sélectionnée. <ph name="ROW_CONTENT" /></translation>
@@ -874,6 +880,7 @@
 <translation id="3249151924975132674">Prêts aux étudiants et financement des études supérieures</translation>
 <translation id="3249845759089040423">Pimpant</translation>
 <translation id="3250640885957938546">Annonces et marketing</translation>
+<translation id="3251133337102041130">Légal, gouvernement</translation>
 <translation id="3252266817569339921">Français</translation>
 <translation id="3254301855501243548">18 po x 22 po</translation>
 <translation id="3256863843508922226">Pension et retraite</translation>
@@ -886,6 +893,7 @@
 <translation id="3270156322180235608">Voyage en avion</translation>
 <translation id="3270847123878663523">&amp;Annuler la réorganisation</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> veut se connecter</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">Votre organisation, <ph name="ENROLLMENT_DOMAIN" />, a envoyé de l'information, comme des paramètres ou des politiques, aux sites Web suivants.</translation>
 <translation id="3282497668470633863">Ajouter le nom sur la carte</translation>
 <translation id="3286372614333682499">portrait</translation>
@@ -988,6 +996,7 @@
 <translation id="3531780078352352885">Feuilles de travail</translation>
 <translation id="3532844647053365774">L'hôte <ph name="HOST" /> veut utiliser votre microphone</translation>
 <translation id="3533328374079021623">Boîte aux lettres 5</translation>
+<translation id="3537165859691846083">Lettre plus</translation>
 <translation id="3542768452570884558">Ouvrir le lien dans une nouvelle fenêtre</translation>
 <translation id="3547746132308051926">20 po x 24 po</translation>
 <translation id="3550112004925580947">Tourisme réceptif</translation>
@@ -1173,6 +1182,7 @@
 <translation id="4030383055268325496">&amp;Annuler l'ajout</translation>
 <translation id="4031179711345676612">Le microphone est autorisé</translation>
 <translation id="4040350669425716613">Collèges et universités</translation>
+<translation id="4047351652147966654">18 po x 24 po</translation>
 <translation id="405399507749852140">Obtenez des alertes si le prix est réduit sur un site</translation>
 <translation id="4056223980640387499">Sépia</translation>
 <translation id="4063063121357725926">Laissez Google vous aider à trouver des rabais pour vos paniers</translation>
@@ -1487,6 +1497,7 @@
 <translation id="4813512666221746211">Erreur réseau</translation>
 <translation id="4816492930507672669">Ajuster à la page</translation>
 <translation id="4819347708020428563">Modifier les annotations dans la vue par défaut?</translation>
+<translation id="4823325221257637040">À compter du</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur Tabulation, puis sur Entrée pour rapidement créer une feuille Google</translation>
 <translation id="4825507807291741242">Puissant</translation>
 <translation id="483241715238664915">Activer les avertissements</translation>
@@ -1602,6 +1613,7 @@
 <translation id="5093232627742069661">Pli en Z</translation>
 <translation id="5094747076828555589">Impossible de vérifier sur le serveur qu'il s'agit bien du domaine <ph name="DOMAIN" />, car son certificat de sécurité n'est pas considéré comme fiable par Chromium. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation>
 <translation id="5097099694988056070">Statistiques relatives à l'appareil, comme l'utilisation du processeur ou de la mémoire vive</translation>
+<translation id="5097468150760963273">27 po x 39 po</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">Ce site n'est pas sécurisé</translation>
 <translation id="5109892411553231226">Gérer les modes de paiement</translation>
@@ -1926,6 +1938,7 @@
 <translation id="5953516610448771166">La transcription instantanée n'est pas offerte pour ce contenu. Pour afficher des sous-titres, bloquez <ph name="CONTENT_SETTINGS" /> pour ce site.</translation>
 <translation id="5955063559762970069">Hôtels et hébergement</translation>
 <translation id="5963413905009737549">Section</translation>
+<translation id="5967260682280773804">36 po x 48 po</translation>
 <translation id="5967592137238574583">Modifier les coordonnées</translation>
 <translation id="5967867314010545767">Supprimer de l'historique</translation>
 <translation id="5968022600320704045">Aucun résultat de recherche</translation>
@@ -1997,6 +2010,7 @@
 <translation id="6127379762771434464">Élément supprimé</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />En savoir plus sur la navigation privée dans Chrome<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">L'extension de fichier est vide ou malformée.</translation>
+<translation id="6139975341602920272">17 po x 22 po</translation>
 <translation id="6146055958333702838">Vérifiez les câbles et redémarrez votre routeur, votre modem
     ou tout autre périphérique réseau utilisé.</translation>
 <translation id="614940544461990577">Essayez ceci :</translation>
@@ -2019,6 +2033,7 @@
 <translation id="6196640612572343990">Bloquer les témoins de tiers</translation>
 <translation id="6197648101609735209">89 mm x 89 mm</translation>
 <translation id="6203231073485539293">Vérifiez votre connexion Internet</translation>
+<translation id="6212314149070368045">Pli accordéon américain</translation>
 <translation id="6218753634732582820">Supprimer l'adresse de Chromium?</translation>
 <translation id="622039917539443112">Pli parallèle</translation>
 <translation id="6221345481584921695">La fonctionnalité de navigation sécurisée Google a récemment permis de <ph name="BEGIN_LINK" />détecter des logiciels malveillants<ph name="END_LINK" /> sur le site <ph name="SITE" />. Un site Web qui est normalement inoffensif peut parfois être infecté par des logiciels malveillants. Le contenu en cause provient de l'hôte « <ph name="SUBRESOURCE_HOST" /> », un distributeur de logiciels malveillants connu.</translation>
@@ -2045,6 +2060,7 @@
 <translation id="627746635834430766">Pour accélérer le paiement la prochaine fois, enregistrez votre carte et votre adresse de facturation dans votre compte Google.</translation>
 <translation id="6279183038361895380">Appuyez sur |<ph name="ACCELERATOR" />| pour afficher votre curseur</translation>
 <translation id="6280223929691119688">Impossible d'effectuer une livraison à cette adresse. Sélectionnez une autre adresse.</translation>
+<translation id="6284292079994426700">26 po x 38 po</translation>
 <translation id="6285507000506177184">Bouton Gérer les téléchargements dans Chrome, appuyez sur la touche Entrée pour gérer les fichiers que vous avez téléchargés dans Chrome</translation>
 <translation id="6289939620939689042">Couleur de la page</translation>
 <translation id="6290238015253830360">Les articles que vous avez suggérés s'afficheront ici</translation>
@@ -2098,6 +2114,7 @@
 <translation id="6410264514553301377">Entrez la date d'expiration et le code de vérification de carte (CVC) pour <ph name="CREDIT_CARD" /></translation>
 <translation id="6411107829285739505">A4 x 8</translation>
 <translation id="6415778972515849510">Chromium peut vous aider à protéger votre compte Google et à changer votre mot de passe.</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">Matériel</translation>
 <translation id="6427730057873428458">Pli fenêtre</translation>
 <translation id="6428450836711225518">Vérifier votre numéro de téléphone</translation>
@@ -2111,6 +2128,7 @@
 <translation id="6443406338865242315">Les extensions et les plugiciels que vous avez installés</translation>
 <translation id="6446608382365791566">Ajouter plus de renseignements</translation>
 <translation id="6447842834002726250">Témoins</translation>
+<translation id="6450077999570164268">In-quarto</translation>
 <translation id="6450212216969386944">Enveloppe Chou nᵒ 40</translation>
 <translation id="6451458296329894277">Confirmer le nouvel envoi du formulaire</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2277,6 +2295,7 @@
 <translation id="6915804003454593391">Utilisateur :</translation>
 <translation id="6916954549222464607">Planification et gestion financières</translation>
 <translation id="6917795328362592458">Le mot de passe que vous venez d'utiliser a été trouvé dans un cas de violation de données. Pour sécuriser vos comptes, le Gestionnaire de mots de passe vous recommande de vérifier vos mots de passe enregistrés.</translation>
+<translation id="6925267999184670015">Amérique du Nord B+</translation>
 <translation id="6934672428414710184">Ce nom provient de votre compte Google</translation>
 <translation id="6936976777388162184">Il s'agit d'un appareil lié, il ne peut donc pas être inscrit avec la mise à niveau de Kiosk et Signage.</translation>
 <translation id="6939469646605424232">Émissions dramatiques</translation>
@@ -2326,6 +2345,7 @@
 <translation id="7030436163253143341">Le certificat n'est pas valide</translation>
 <translation id="7031646650991750659">Les applications Google Play que vous avez installées</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur la touche Tabulation, puis sur la touche Entrée pour gérer les paramètres de confidentialité de votre compte Google</translation>
+<translation id="7048095965575426564">Pli accordéon européen</translation>
 <translation id="7050187094878475250">Vous avez essayé d’atteindre <ph name="DOMAIN" />, mais le serveur a présenté un certificat dont la période de validité est trop longue pour être sûre.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{Cette carte ne peut pas être enregistrée pour le moment}one{Cette carte ne peut pas être enregistrée pour le moment}other{Ces cartes ne peuvent pas être enregistrées pour le moment}}</translation>
 <translation id="7053983685419859001">Bloquer</translation>
@@ -2387,6 +2407,7 @@
 <translation id="7192203810768312527">Libère <ph name="SIZE" />. Certains sites peuvent être plus longs à charger lors de votre prochaine visite.</translation>
 <translation id="7193661028827781021">Références</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">Votre administrateur peut voir :</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur Tabulation, puis sur Entrée pour ouvrir un nouvel onglet de navigation privée afin de naviguer en mode privé</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> ne respecte pas les normes en matière de sécurité.</translation>
@@ -2487,6 +2508,7 @@
 <translation id="7421067045979951561">gestionnaires de protocoles</translation>
 <translation id="7426022697669111648">Bouton Afficher votre historique de Chrome, appuyez sur la touche Entrée pour afficher et gérer votre historique de navigation dans les paramètres de Chrome</translation>
 <translation id="7427366580982928791">Sécurité des enfants sur Internet</translation>
+<translation id="7429429656042611765">Dirigeant</translation>
 <translation id="7437289804838430631">Ajouter des coordonnées</translation>
 <translation id="7437490109271760224">Jeux de cartes</translation>
 <translation id="7440140511386898319">Explorer du contenu en étant hors connexion</translation>
@@ -2692,6 +2714,7 @@
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur Tabulation, puis sur Entrée pour en savoir plus sur les fonctionnalités de Chrome</translation>
 <translation id="7950027195171824198">Gérez vos préférences relatives aux témoins dans les paramètres de Chrome</translation>
 <translation id="7951415247503192394">(32 bits)</translation>
+<translation id="7952192831285741665">EDP Europe</translation>
 <translation id="7953569069500808819">Agrafage par le bord supérieur</translation>
 <translation id="7956713633345437162">Favoris d'appareil mobile</translation>
 <translation id="7961015016161918242">Jamais</translation>
@@ -2777,6 +2800,7 @@
 <translation id="8153865548451212769">{0,plural, =1{La politique de l'administrateur ne recommande pas de télécharger ce fichier sur <ph name="DESTINATION_NAME" />}one{La politique de l'administrateur ne recommande pas de télécharger ce fichier sur <ph name="DESTINATION_NAME" />}other{La politique de l'administrateur ne recommande pas de télécharger ces fichiers sur <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Quitter ce site</translation>
 <translation id="8163866351304776260">Quadruple perforation à gauche</translation>
+<translation id="8175330382720204696">Lettre au gouvernement</translation>
 <translation id="8175796834047840627">Chrome vous propose d'enregistrer vos cartes dans votre compte Google parce que vous y êtes connecté. Vous pouvez modifier ce comportement dans les paramètres.</translation>
 <translation id="8176440868214972690">L'administrateur de cet appareil a envoyé de l'information, comme des paramètres ou des politiques, aux sites Web suivants.</translation>
 <translation id="8184538546369750125">Utiliser le paramètre global par défaut (« Autoriser »)</translation>
@@ -2887,6 +2911,7 @@
 <translation id="8449155699563577224">17 po x 24 po</translation>
 <translation id="8449836157089738489">Tout ouvrir dans un nouveau groupe d'onglets</translation>
 <translation id="8457125768502047971">Indéfini</translation>
+<translation id="8458202188076138974">Lettre extra</translation>
 <translation id="8461694314515752532">Chiffrer vos données synchronisées avec votre propre phrase de passe de synchronisation</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 carte de crédit}one{# carte de crédit}other{# cartes de crédit}}</translation>
 <translation id="8468358362970107653">Enveloppe C3</translation>
@@ -3093,6 +3118,7 @@
 <translation id="9042617223719777575">Grande capacité</translation>
 <translation id="9044359186343685026">Utiliser Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24 po x 36 po</translation>
 <translation id="9049981332609050619">Vous avez essayé d'accéder à <ph name="DOMAIN" />, mais le serveur a présenté un certificat non valide.</translation>
 <translation id="9050666287014529139">Phrase de passe</translation>
 <translation id="9056953843249698117">Boutique</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index a2ec1dd9..3997879 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -137,6 +137,7 @@
 <translation id="129553762522093515">Nedavno zatvoreno</translation>
 <translation id="1296930489679394997">Prodaja</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Izbrišite kolačiće<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Legal Extra</translation>
 <translation id="1301324364792935241">Provjerite postavke sigurnog DNS-a</translation>
 <translation id="1307966114820526988">Ukinute značajke</translation>
 <translation id="1308113895091915999">Dostupna je ponuda</translation>
@@ -443,6 +444,7 @@
 <translation id="205212645995975601">Roštilj</translation>
 <translation id="2053111141626950936">Neće se prevoditi <ph name="LANGUAGE" />.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaki dan.}=1{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaki dan.}one{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaki {NUM_DAYS} dan.}few{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svaka {NUM_DAYS} dana.}other{Kada je ta kontrola uključena i status je aktivan, Chrome određuje kojoj je velikoj grupi ljudi, odnosno skupini, vaša nedavna aktivnost pregledavanja najsličnija. Oglašivači mogu odabrati oglase za tu grupu, a vaša aktivnost pregledavanja ostaje privatna na vašem uređaju. Vaša se grupa ažurira svakih {NUM_DAYS} dana.}}</translation>
+<translation id="2059202684901022309">22 x 34 inča</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 prijedlog}one{# prijedlog}few{# prijedloga}other{# prijedloga}}</translation>
 <translation id="2066915425250589881">zatražiti da se izbrišu</translation>
 <translation id="2068528718802935086">Novorođenčad i mala djeca</translation>
@@ -532,6 +534,7 @@
 <translation id="2277753418458118549">Prikaži pojedinosti o vezi</translation>
 <translation id="2283340219607151381">Spremi i popuni adrese</translation>
 <translation id="2283447177162560884">Izbrisana je stavka "<ph name="PAGE_TITLE" />"</translation>
+<translation id="2286383991450886080">34 x 44 inča</translation>
 <translation id="2288422996159078444">Prati se sve što upisujete, stranice koje pregledavate ili druge aktivnosti na webu, a sadržaj na web-lokacijama može se izmijeniti bez vašeg znanja.</translation>
 <translation id="2289385804009217824">Obrezivanje</translation>
 <translation id="2292556288342944218">Internetski je pristup blokiran</translation>
@@ -692,6 +695,7 @@
 <translation id="2709516037105925701">Automatsko popunjavanje</translation>
 <translation id="2713444072780614174">Bijela</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste upravljali podacima o plaćanju i kreditnoj kartici u postavkama Chromea</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">Pritisnite |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| da biste zatvorili prikaz na cijelom zaslonu.</translation>
 <translation id="2721148159707890343">Zahtjev je uspio</translation>
 <translation id="2723669454293168317">Izvršite sigurnosnu provjeru u postavkama Chromea</translation>
@@ -699,6 +703,7 @@
 <translation id="2728127805433021124">Certifikat poslužitelja potpisan je slabim algoritmom potpisa.</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />pokrenuti Dijagnostiku povezivosti<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">Klasična glazba</translation>
+<translation id="2731382536835015353">44 x 68 inča</translation>
 <translation id="2734319753272419592">Dopustite Googleu da koristi vaše košarice radi pretraživanja personaliziranih popusta. Popusti će se automatski prikazati u košaricama kad budu dostupni.</translation>
 <translation id="2738330467931008676">Odaberite adresu preuzimanja</translation>
 <translation id="2740531572673183784">U redu</translation>
@@ -771,6 +776,7 @@
 <translation id="2955913368246107853">Zatvori traku za traženje</translation>
 <translation id="2958544468932521864">Kriket</translation>
 <translation id="2959113999220720579">Njega lica i tijela</translation>
+<translation id="2962073860865348475">12 x 18 inča</translation>
 <translation id="2968103128155246731">Kombiji i minikombiji</translation>
 <translation id="2972581237482394796">&amp;Vrati poništeno</translation>
 <translation id="2977665033722899841"><ph name="ROW_NAME" />, trenutačno odabrano. <ph name="ROW_CONTENT" /></translation>
@@ -874,6 +880,7 @@
 <translation id="3249151924975132674">Studentski krediti i financiranje obrazovanja</translation>
 <translation id="3249845759089040423">Živopisno</translation>
 <translation id="3250640885957938546">Oglašavanje i marketing</translation>
+<translation id="3251133337102041130">Government Legal</translation>
 <translation id="3252266817569339921">Francuski</translation>
 <translation id="3254301855501243548">18 x 22 in</translation>
 <translation id="3256863843508922226">Umirovljenje i mirovinski fondovi</translation>
@@ -886,6 +893,7 @@
 <translation id="3270156322180235608">Putovanje zrakoplovom</translation>
 <translation id="3270847123878663523">&amp;Poništi promjenu rasporeda</translation>
 <translation id="3271648667212143903">Web-lokacija <ph name="ORIGIN" /> želi se povezati</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">Vaša organizacija, <ph name="ENROLLMENT_DOMAIN" />, poslala je neke podatke, poput postavki ili pravila, sljedećim web-lokacijama.</translation>
 <translation id="3282497668470633863">Dodajte ime na kartici</translation>
 <translation id="3286372614333682499">portret</translation>
@@ -988,6 +996,7 @@
 <translation id="3531780078352352885">Radni listovi</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> želi upotrijebiti vaš mikrofon</translation>
 <translation id="3533328374079021623">Izlazni spremnik s odjeljcima 5</translation>
+<translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542768452570884558">Otvori vezu u novom prozoru</translation>
 <translation id="3547746132308051926">20 x 24 in</translation>
 <translation id="3550112004925580947">Ugostiteljstvo</translation>
@@ -1172,6 +1181,7 @@
 <translation id="4030383055268325496">&amp;Poništi dodavanje</translation>
 <translation id="4031179711345676612">Mikrofon je dopušten</translation>
 <translation id="4040350669425716613">Koledži i sveučilišta</translation>
+<translation id="4047351652147966654">18 x 24 inča</translation>
 <translation id="405399507749852140">Dobivajte upozorenja ako se cijena snizi na bilo kojoj web-lokaciji</translation>
 <translation id="4056223980640387499">Sepija</translation>
 <translation id="4063063121357725926">Dopustite Googleu da vam pomogne pronaći popuste za vaše košarice</translation>
@@ -1371,6 +1381,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste preveli ovu stranicu uz pomoć Google prevoditelja</translation>
 <translation id="4514308731478712184">Isključite putovanja</translation>
 <translation id="4515275063822566619">Kartice i adrese dolaze iz Cromea i vašeg Google računa (<ph name="ACCOUNT_EMAIL" />). Njima možete upravljati u <ph name="BEGIN_LINK" />Postavkama<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Administratorska pravila blokiraju preuzimanje te datoteke</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Omotnica Monarch</translation>
 <translation id="4521916730539354575">Lijeva ladica</translation>
@@ -1486,6 +1497,7 @@
 <translation id="4813512666221746211">Pogreška mreže</translation>
 <translation id="4816492930507672669">Prilagodi stranici</translation>
 <translation id="4819347708020428563">Želite li urediti napomene u zadanom prikazu?</translation>
+<translation id="4823325221257637040">Pokretanje</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste brzo izradili novu Google tablicu</translation>
 <translation id="4825507807291741242">Snažno</translation>
 <translation id="483241715238664915">Uključite upozorenja</translation>
@@ -1601,6 +1613,7 @@
 <translation id="5093232627742069661">Cik-cak presavijanje</translation>
 <translation id="5094747076828555589">Poslužitelj nije mogao dokazati da je <ph name="DOMAIN" />; Chromium smatra da njegov sigurnosni certifikat nije pouzdan. To može biti uzrokovano pogrešnom konfiguracijom ili napadom na vašu vezu.</translation>
 <translation id="5097099694988056070">Statistika uređaja kao što je upotreba procesora/RAM-a</translation>
+<translation id="5097468150760963273">27 x 39 inča</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">Web-lokacija nije sigurna</translation>
 <translation id="5109892411553231226">Upravljaj načinima plaćanja</translation>
@@ -1925,6 +1938,7 @@
 <translation id="5953516610448771166">Automatski titlovi nisu dostupni za ovaj medij. Da biste dobili titlove, blokirajte <ph name="CONTENT_SETTINGS" /> za ovu web-lokaciju.</translation>
 <translation id="5955063559762970069">Hoteli i smještaj</translation>
 <translation id="5963413905009737549">Odjeljak</translation>
+<translation id="5967260682280773804">36 x 48 inča</translation>
 <translation id="5967592137238574583">Uredite podatke za kontakt</translation>
 <translation id="5967867314010545767">Ukloni iz povijesti</translation>
 <translation id="5968022600320704045">Nema rezultata pretraživanja</translation>
@@ -1996,6 +2010,7 @@
 <translation id="6127379762771434464">Stavka je uklonjena</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />Saznajte više o anonimnom načinu u Chromeu<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">Datotečni nastavak je prazan ili pogrešan.</translation>
+<translation id="6139975341602920272">17 x 22 inča</translation>
 <translation id="6146055958333702838">Provjerite kabele i ponovo pokrenite usmjerivače, modeme ili druge mrežne
         uređaje koje možda upotrebljavate.</translation>
 <translation id="614940544461990577">Pokušajte sljedeće:</translation>
@@ -2018,6 +2033,7 @@
 <translation id="6196640612572343990">Blokiraj kolačiće trećih strana</translation>
 <translation id="6197648101609735209">89 x 89 mm</translation>
 <translation id="6203231073485539293">Provjerite internetsku vezu</translation>
+<translation id="6212314149070368045">US Fanfold</translation>
 <translation id="6218753634732582820">Želite li ukloniti adresu iz Chromiuma?</translation>
 <translation id="622039917539443112">Paralelno presavijanje</translation>
 <translation id="6221345481584921695">Google sigurno pregledavanje nedavno je <ph name="BEGIN_LINK" />otkrilo zlonamjerni sadržaj<ph name="END_LINK" /> na <ph name="SITE" />. Web-lokacije koje su inače sigurne ponekad mogu biti zaražene zlonamjernim softverom. Zlonamjerni sadržaj potječe s hosta <ph name="SUBRESOURCE_HOST" /> koji je poznat po distribuciji zlonamjernog softvera.</translation>
@@ -2044,6 +2060,7 @@
 <translation id="627746635834430766">Da biste sljedeći put platili brže, karticu i adresu za naplatu spremite na svoj Google račun.</translation>
 <translation id="6279183038361895380">Pritisnite |<ph name="ACCELERATOR" />| da bi se prikazao pokazivač</translation>
 <translation id="6280223929691119688">Dostava na tu adresu nije moguća. Odaberite drugu adresu.</translation>
+<translation id="6284292079994426700">26 x 38 inča</translation>
 <translation id="6285507000506177184">Gumb Upravljaj preuzimanjima u Chromeu, pritisnite Enter da biste upravljali datotekama koje ste preuzeli u Chromeu</translation>
 <translation id="6289939620939689042">Boja stranice</translation>
 <translation id="6290238015253830360">Ovdje će se prikazivati predloženi članci</translation>
@@ -2097,6 +2114,7 @@
 <translation id="6410264514553301377">Unesite datum isteka i CVC za karticu <ph name="CREDIT_CARD" /></translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">Chromium vam može pomoći da zaštitite svoj Google račun i promijenite zaporku.</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">Materijal</translation>
 <translation id="6427730057873428458">Presavijanje u obliku prozora</translation>
 <translation id="6428450836711225518">Potvrdite svoj telefonski broj</translation>
@@ -2110,6 +2128,7 @@
 <translation id="6443406338865242315">koja ste proširenja i dodatke instalirali</translation>
 <translation id="6446608382365791566">Dodajte još podataka</translation>
 <translation id="6447842834002726250">Kolačići</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">Omotnica Chou 40</translation>
 <translation id="6451458296329894277">Potvrdi ponovno slanje obrasca</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2276,6 +2295,7 @@
 <translation id="6915804003454593391">Korisnik:</translation>
 <translation id="6916954549222464607">Usluge planiranja i upravljanja financijama</translation>
 <translation id="6917795328362592458">Zaporka koju ste upravo upotrijebili otkrivena je u povredi podataka. Radi zaštite vaših računa Upravitelj zaporki preporučuje da provjerite svoje spremljene zaporke.</translation>
+<translation id="6925267999184670015">North American B+</translation>
 <translation id="6934672428414710184">To je ime s vašeg Google računa</translation>
 <translation id="6936976777388162184">Ovo je grupirani uređaj i ne može se registrirati za nadogradnju za kiosk i znakovlje.</translation>
 <translation id="6939469646605424232">TV drame</translation>
@@ -2325,6 +2345,7 @@
 <translation id="7030436163253143341">Certifikat nije važeći</translation>
 <translation id="7031646650991750659">koje ste Google Play aplikacije instalirali</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste upravljali postavkama privatnosti svojeg Google računa</translation>
+<translation id="7048095965575426564">European Fanfold</translation>
 <translation id="7050187094878475250">Pokušali ste pristupiti domeni <ph name="DOMAIN" />, ali je poslužitelj pružio certifikat koji nije pouzdan zbog predugog razdoblja valjanosti.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{Ta se kartica trenutačno ne može spremiti}one{Te se kartice trenutačno ne mogu spremiti}few{Te se kartice trenutačno ne mogu spremiti}other{Te se kartice trenutačno ne mogu spremiti}}</translation>
 <translation id="7053983685419859001">Blokiraj</translation>
@@ -2362,6 +2383,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Dostava na tu adresu nije moguća. Odaberite drugu adresu.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Blokirani prijenos</translation>
 <translation id="7132939140423847331">Vaš je administrator zabranio kopiranje tih podataka.</translation>
 <translation id="7135130955892390533">Prikaži status</translation>
 <translation id="7138472120740807366">Način isporuke</translation>
@@ -2386,6 +2408,7 @@
 <translation id="7192203810768312527">Oslobodit će se <ph name="SIZE" />. Neke bi se web-lokacije pri sljedećem otvaranju mogle sporije učitavati.</translation>
 <translation id="7193661028827781021">Priručnici</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">Vaš administrator može vidjeti:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste otvorili novu anonimnu karticu i pregledavali u privatnosti</translation>
 <translation id="7210863904660874423">Host <ph name="HOST_NAME" /> ne pridržava se sigurnosnih standarda.</translation>
@@ -2486,6 +2509,7 @@
 <translation id="7421067045979951561">rukovatelji protokolima</translation>
 <translation id="7426022697669111648">Gumb Pregledaj povijest na Chromeu, pritisnite Enter da biste vidjeli svoju povijest pregledavanja u postavkama Chromea i upravljali njome</translation>
 <translation id="7427366580982928791">Sigurnost djece na internetu</translation>
+<translation id="7429429656042611765">Executive</translation>
 <translation id="7437289804838430631">Dodajte podatke za kontakt</translation>
 <translation id="7437490109271760224">Kartaške igre</translation>
 <translation id="7440140511386898319">Istraživanje dok ste offline</translation>
@@ -2592,6 +2616,7 @@
 <translation id="7658239707568436148">Odustani</translation>
 <translation id="7659327900411729175">Omotnica Kaku 8</translation>
 <translation id="7659878911471462949">Suze radosnice</translation>
+<translation id="766014026101194726">{0,plural, =1{Administratorska pravila blokiraju prijenos te datoteke}one{Administratorska pravila blokiraju prijenos # datoteke}few{Administratorska pravila blokiraju prijenos # datoteke}other{Administratorska pravila blokiraju prijenos # datoteka}}</translation>
 <translation id="7662298039739062396">Postavkom upravlja proširenje</translation>
 <translation id="7663736086183791259">Certifikat <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Nije dopušteno u anonimnom načinu</translation>
@@ -2686,11 +2711,13 @@
 <translation id="7939744324936979484">Narodna i tradicionalna glazba</translation>
 <translation id="7941628148012649605">Omotnica Chou 4</translation>
 <translation id="7942349550061667556">Crvena</translation>
+<translation id="7943397946612013052">Blokirano preuzimanje</translation>
 <translation id="7943893128817522649">Može tražiti dopuštenje za automatsko preuzimanje više datoteka</translation>
 <translation id="7947285636476623132">Provjerite godinu isteka, pa pokušajte ponovo</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, a zatim Enter da biste saznali više o Chromeovim značajkama</translation>
 <translation id="7950027195171824198">Preferencijama za kolačiće možete upravljati u postavkama Chromea</translation>
 <translation id="7951415247503192394">(32-bitni)</translation>
+<translation id="7952192831285741665">European EDP</translation>
 <translation id="7953569069500808819">Rubni šav pri vrhu</translation>
 <translation id="7956713633345437162">Mobilne oznake</translation>
 <translation id="7961015016161918242">Nikad</translation>
@@ -2776,6 +2803,7 @@
 <translation id="8153865548451212769">{0,plural, =1{Prema pravilima administratora ne preporučuje se preuzimanje te datoteke na: <ph name="DESTINATION_NAME" />}one{Prema pravilima administratora ne preporučuje se preuzimanje tih datoteka na: <ph name="DESTINATION_NAME" />}few{Prema pravilima administratora ne preporučuje se preuzimanje tih datoteka na: <ph name="DESTINATION_NAME" />}other{Prema pravilima administratora ne preporučuje se preuzimanje tih datoteka na: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Napusti web-lokaciju</translation>
 <translation id="8163866351304776260">Četverostruko bušenje s lijeve strane</translation>
+<translation id="8175330382720204696">Government Letter</translation>
 <translation id="8175796834047840627">Chrome vam nudi spremanje vaših kartica na vaš Google račun jer ste prijavljeni. To ponašanje možete promijeniti u postavkama.</translation>
 <translation id="8176440868214972690">Administrator uređaja poslao je neke podatke, poput postavki ili pravila, sljedećim web-lokacijama.</translation>
 <translation id="8184538546369750125">Upotrijebi globalnu zadanu vrijednost (dopusti)</translation>
@@ -2886,6 +2914,7 @@
 <translation id="8449155699563577224">17 x 24 in</translation>
 <translation id="8449836157089738489">Otvori sve u novoj grupi kartica</translation>
 <translation id="8457125768502047971">Neodređeno</translation>
+<translation id="8458202188076138974">Letter Extra</translation>
 <translation id="8461694314515752532">Šifriraj sinkronizirane podatke vlastitom šifrom za sinkronizaciju</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 kreditna kartica}one{# kreditna kartica}few{# kreditne kartice}other{# kreditnih kartica}}</translation>
 <translation id="8468358362970107653">Omotnica C3</translation>
@@ -3093,6 +3122,7 @@
 <translation id="9042617223719777575">Veliki kapacitet</translation>
 <translation id="9044359186343685026">Koristi Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> – <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24 x 36 inča</translation>
 <translation id="9049981332609050619">Pokušali ste pristupiti domeni <ph name="DOMAIN" />, ali poslužitelj je prikazao nevažeći certifikat.</translation>
 <translation id="9050666287014529139">Zaporka</translation>
 <translation id="9056953843249698117">Trgovina</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 7f5e4db..9f69bfd 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -80,6 +80,7 @@
 <translation id="1175875016430184367">3 か所のステープル(右)</translation>
 <translation id="1177802847690410663">ウェブブラウザ</translation>
 <translation id="1178581264944972037">一時停止</translation>
+<translation id="1178821169867863726">12x16 インチ</translation>
 <translation id="1181037720776840403">削除</translation>
 <translation id="1186201132766001848">パスワードを確認</translation>
 <translation id="1195558154361252544">許可したサイトを除くすべてのサイトで通知を自動的にブロックします</translation>
@@ -318,6 +319,7 @@
 <translation id="1717494416764505390">用紙受け 3</translation>
 <translation id="1718029547804390981">ドキュメントのサイズが大きすぎるため注釈を追加できません</translation>
 <translation id="1719434663396780149">値下げアラートはオンになっています。[<ph name="BEGIN_LINK" /><ph name="NOTIFICATION_SETTINGS" /><ph name="END_LINK" />] で変更できます。</translation>
+<translation id="1719838434204287058">24x30 インチ</translation>
 <translation id="1720941539803966190">チュートリアルを閉じる</translation>
 <translation id="1721424275792716183">* 必須欄です</translation>
 <translation id="1725591448053514783">洋形 6 号封筒</translation>
@@ -392,12 +394,14 @@
 <translation id="1916770123977586577">更新後の設定をこのサイトに適用するには、このページを再読み込みしてください</translation>
 <translation id="1919345977826869612">広告</translation>
 <translation id="1919367280705858090">特定のエラー メッセージに関する情報</translation>
+<translation id="1919526244108283799">400x600 mm</translation>
 <translation id="192020519938775529">{COUNT,plural, =0{なし}=1{1 件のサイト}other{# 件のサイト}}</translation>
 <translation id="1924727005275031552">新</translation>
 <translation id="1927439593081478069">[Chrome の安全確認を実行] ボタンです。Enter キーを押すと Chrome の設定で安全確認を実行できます</translation>
 <translation id="1939175642807587452">通知の送信を要求できる</translation>
 <translation id="1943994668912612445">設計、デザイン</translation>
 <translation id="1945968466830820669">組織のアカウントにアクセスできなくなったり、個人情報が盗まれたりする可能性があります。今すぐパスワードを変更することをおすすめします。</translation>
+<translation id="1946849748901605102">12x15 インチ</translation>
 <translation id="1947454675006758438">ステープル(右上)</translation>
 <translation id="1954847915560574887">A3x3</translation>
 <translation id="1956486093533522234">デバイスの位置の特定、保護、またはデータの消去を行います</translation>
@@ -421,6 +425,7 @@
 <translation id="2003775180883135320">4 穴パンチ(上)</translation>
 <translation id="201174227998721785">Chrome の設定ですべてのサイトに保存されている権限とデータを管理します</translation>
 <translation id="2019607688127825327">[ユーザー補助設定を管理] ボタンです。Enter キーを押すと Chrome の設定でユーザー補助ツールをカスタマイズできます</translation>
+<translation id="202224654587969958">12x19 インチ</translation>
 <translation id="2025115093177348061">拡張現実(AR)</translation>
 <translation id="2025186561304664664">プロキシは自動設定になっています。</translation>
 <translation id="2025891858974379949">安全でないコンテンツ</translation>
@@ -475,6 +480,7 @@
 <translation id="2153609454945889823">Google Play 開発者サービス(AR)をインストールしますか?</translation>
 <translation id="2154054054215849342">お使いのドメインでは同期機能をご利用いただけません</translation>
 <translation id="2154484045852737596">カードを編集</translation>
+<translation id="2155260325161282517">5x7 インチ</translation>
 <translation id="2157640075051554492">価格トラッキングの通知</translation>
 <translation id="2161656808144014275">テキスト</translation>
 <translation id="2162510787844374618">カード発行会社に問い合わせています...</translation>
@@ -492,6 +498,7 @@
 <translation id="219906046732893612">リフォーム</translation>
 <translation id="2202020181578195191">有効期限(年)を正しい形式で入力してください</translation>
 <translation id="22081806969704220">トレイ 3</translation>
+<translation id="2210794033760923560">レポートをアップロード</translation>
 <translation id="2212735316055980242">ポリシーが見つかりません</translation>
 <translation id="2213606439339815911">エントリを取得しています...</translation>
 <translation id="2213612003795704869">ページが印刷されました</translation>
@@ -506,6 +513,7 @@
 <translation id="2230458221926704099"><ph name="BEGIN_LINK" />診断アプリ<ph name="END_LINK" />を使用して接続を修正してください</translation>
 <translation id="2239100178324503013">送信</translation>
 <translation id="2241693394036365668">ファイルがダウンロードされた</translation>
+<translation id="2246264294482514010">10x12 インチ</translation>
 <translation id="2248949050832152960">WebAuthn を使用</translation>
 <translation id="2250931979407627383">端綴じ(左)</translation>
 <translation id="225207911366869382">この値は、このポリシーではサポートが終了しています。</translation>
@@ -669,6 +677,7 @@
 <translation id="2677748264148917807">このページを離れる</translation>
 <translation id="2679714844901977852">Google アカウント(<ph name="USER_EMAIL" />)にカードとお支払い情報を保存すると、すばやく安全にご購入手続きを行えます</translation>
 <translation id="2687555958734450033">最適サイズ</translation>
+<translation id="2688186765492306706">500x760 mm</translation>
 <translation id="2688969097326701645">はい、続行します</translation>
 <translation id="2691924980723297736">安全性に関する警告</translation>
 <translation id="2692131511336778528">SF、ファンタジー</translation>
@@ -715,8 +724,10 @@
 <translation id="2835170189407361413">フォームをクリア</translation>
 <translation id="2839032553903800133">通知をブロック中</translation>
 <translation id="2839501879576190149">偽のサイトにアクセスしようとしています</translation>
+<translation id="2851291081585704741">オフラインです</translation>
 <translation id="2854764410992194509">インターネット サービス プロバイダ(ISP)</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>
+<translation id="2858134430383535011">200x300 mm</translation>
 <translation id="2859806420264540918">このサイトでは煩わしい広告または誤解を招く広告が表示されます。</translation>
 <translation id="287596039013813457">フレンドリー</translation>
 <translation id="28761159517501904">映画</translation>
@@ -862,6 +873,7 @@
 <translation id="3249845759089040423">グルービー</translation>
 <translation id="3250640885957938546">広告、マーケティング</translation>
 <translation id="3252266817569339921">フランス語</translation>
+<translation id="3254301855501243548">18x22 インチ</translation>
 <translation id="3256863843508922226">老後、年金</translation>
 <translation id="3259648571731540213"><ph name="CREATE_GOOGLE_CALENDAR_EVENT_FOCUSED_FRIENDLY_MATCH_TEXT" /> です。Tab キー、Enter キーの順に押すと、Google カレンダーで新しいイベントをすばやく作成します</translation>
 <translation id="3261488570342242926">仮想カードについて</translation>
@@ -880,6 +892,7 @@
 <translation id="3293642807462928945"><ph name="POLICY_NAME" /> ポリシーの詳細</translation>
 <translation id="3295444047715739395">Chrome の設定でパスワードを表示、管理します</translation>
 <translation id="3299098170013242198">パスワード入力で Windows Hello が有効になっています</translation>
+<translation id="3303176609391916566">30x42 インチ</translation>
 <translation id="3303855915957856445">一致する結果は見つかりませんでした</translation>
 <translation id="3304073249511302126">Bluetooth のスキャン</translation>
 <translation id="3304777285002411338">A2x3</translation>
@@ -887,6 +900,7 @@
 <translation id="3308006649705061278">組織単位(OU)</translation>
 <translation id="3308738399950580893">広告</translation>
 <translation id="3320021301628644560">請求先住所を追加</translation>
+<translation id="3324687287337751929">4x6 インチ</translation>
 <translation id="3324983252691184275">クリムゾン</translation>
 <translation id="3329013043687509092">彩度</translation>
 <translation id="3333762389743153920">仮想カードは使用できません</translation>
@@ -964,6 +978,7 @@
 <translation id="3512163584740124171">より優先度の高いポリシーが同じポリシー グループにあるため、このポリシーは無視されます。</translation>
 <translation id="35172538073169599">住所を管理するボタンです。Enter キーを押して、Chrome の設定で住所を追加、管理します</translation>
 <translation id="3518941727116570328">複数オブジェクトの処理</translation>
+<translation id="3525130752944427905">10x14 インチ</translation>
 <translation id="3528171143076753409">サーバーの証明書を信頼できません。</translation>
 <translation id="3528485271872257980">暗い茶色</translation>
 <translation id="3530944546672790857">{COUNT,plural, =0{同期デバイスで 1 件以上のアイテム}=1{1 件のアイテム(同期デバイスではそれ以上のアイテム)}other{# 件のアイテム(同期デバイスではそれ以上のアイテム)}}</translation>
@@ -972,12 +987,15 @@
 <translation id="3532844647053365774"><ph name="HOST" /> から、マイクの使用許可を求められています</translation>
 <translation id="3533328374079021623">用紙受け 5</translation>
 <translation id="3542768452570884558">新しいウィンドウでリンクを開く</translation>
+<translation id="3547746132308051926">20x24 インチ</translation>
 <translation id="3550112004925580947">サービス業</translation>
 <translation id="3552297013052089404">Sans Serif フォント</translation>
 <translation id="3558573058928565255">日中</translation>
 <translation id="3560824484345057728">関連サイトを表示</translation>
 <translation id="3566021033012934673">この接続ではプライバシーが保護されません</translation>
+<translation id="3566336457819493938">215x315 mm</translation>
 <translation id="3567778190852720481">企業アカウントでは登録できません(企業アカウントは利用できません)。</translation>
+<translation id="3567901620846335314">100x150 mm</translation>
 <translation id="3574305903863751447"><ph name="COUNTRY" /> <ph name="STATE" /> <ph name="CITY" /></translation>
 <translation id="3575121482199441727">このサイトの通知を許可</translation>
 <translation id="3575168918110434329">A4x7</translation>
@@ -994,6 +1012,7 @@
 <translation id="3595699422137460894">{NUM_DAYS,plural, =0{グループはいつでもリセットできます。新しいグループに分類されるまでには約 1 日かかります。}=1{グループはいつでもリセットできます。新しいグループに分類されるまでには約 1 日かかります。}other{グループはいつでもリセットできます。新しいグループに分類されるまでには {NUM_DAYS} 日かかります。}}</translation>
 <translation id="3600246354004376029"><ph name="TITLE" />、<ph name="DOMAIN" />、<ph name="TIME" /></translation>
 <translation id="3603507503523709">アプリケーションは管理者によってブロックされています</translation>
+<translation id="3605899229568538311">5x5 インチ</translation>
 <translation id="3608932978122581043">給紙方向</translation>
 <translation id="3611317423880285981">日用品</translation>
 <translation id="3611395257124510155"><ph name="CARD_IDENTIFIER" /> の仮想カード</translation>
@@ -1085,6 +1104,7 @@
 <translation id="3807366285948165054">画像の X 軸移動</translation>
 <translation id="3807873520724684969">有害なコンテンツがブロックされました。</translation>
 <translation id="3810973564298564668">管理</translation>
+<translation id="3815434930383843058">8x12 インチ</translation>
 <translation id="3816482573645936981">値(優先)</translation>
 <translation id="3823402221513322552">お使いのブラウザは <ph name="BROWSER_DOMAIN" /> によって、プロフィールは <ph name="PROFILE_DOMAIN" /> によって管理されています</translation>
 <translation id="382518646247711829">プロキシ サーバーを使用している場合...</translation>
@@ -1124,6 +1144,7 @@
 <translation id="3949790930165450333"><ph name="DEVICE_NAME" />(<ph name="DEVICE_ID" />)</translation>
 <translation id="3949870428812919180">保存済みのお支払い方法がありません</translation>
 <translation id="3950820424414687140">ログイン</translation>
+<translation id="3958057596965527988">4x4 インチ</translation>
 <translation id="3961148744525529027">支払いハンドラのシートが半分開いています</translation>
 <translation id="3962859241508114581">前の曲</translation>
 <translation id="3963721102035795474">リーダーモード</translation>
@@ -1166,6 +1187,7 @@
 <translation id="4087296516249690906">[イベントを作成] ボタンです。Enter キーを押すと、Google カレンダーで新しいイベントをすばやく作成します</translation>
 <translation id="4088981014127559358">1 面の画像の Y 軸移動</translation>
 <translation id="4089152113577680600">トレイ 14</translation>
+<translation id="4096237801206588987">11x15 インチ</translation>
 <translation id="4097288585054919042">アラートをオフにする</translation>
 <translation id="4098354747657067197">偽のサイトにアクセスしようとしています</translation>
 <translation id="4099048595830172239">機密コンテンツが表示されているときに <ph name="APPLICATION_TITLE" /> で画面を共有することは、管理者が設定したポリシーで推奨されていません。</translation>
@@ -1411,6 +1433,7 @@
 <translation id="4704732901923281920">生物科学</translation>
 <translation id="4708268264240856090">接続が中断されました</translation>
 <translation id="4712404868219726379">Windows Hello</translation>
+<translation id="4718897478554657123">600x900 mm</translation>
 <translation id="4722547256916164131"><ph name="BEGIN_LINK" />Windows ネットワーク診断ツールを実行する<ph name="END_LINK" /></translation>
 <translation id="4722735765955348426"><ph name="USERNAME" /> のパスワード</translation>
 <translation id="4724144314178270921">クリップボード内のテキストや画像へのアクセスを要求できる</translation>
@@ -1448,6 +1471,7 @@
 <translation id="4789704664580239421">開いているタブに値下げアラートが表示されます</translation>
 <translation id="4791134497475588553">Linux アプリがインストールされ、最後に使用されたとき</translation>
 <translation id="4792686369684665359">送信しようとしている情報は保護されません</translation>
+<translation id="4793219378458250238">11x12 インチ</translation>
 <translation id="4796594887379589189">ジョブ管理 ID</translation>
 <translation id="4798078619018708837">カード情報を更新するには <ph name="CREDIT_CARD" /> の有効期限と CVC を入力します。確認後、Google アカウントのカード情報がこのサイトと共有されます。</translation>
 <translation id="4798269756263412078">値下げしたサイトがある場合に通知します。通知はメールで送信されます。</translation>
@@ -1484,6 +1508,7 @@
 <translation id="4879491255372875719">自動(デフォルト)</translation>
 <translation id="4880827082731008257">履歴を検索</translation>
 <translation id="4881695831933465202">開く</translation>
+<translation id="4881808915112408168">24x31.5 インチ</translation>
 <translation id="4885256590493466218">ご購入手続きの際に <ph name="CARD_DETAIL" /> で支払います</translation>
 <translation id="4887406273302438710">Windows Hello でパスワードを保護</translation>
 <translation id="4888600795924685526">外国語学習</translation>
@@ -1535,6 +1560,7 @@
 <translation id="5017554619425969104">コピーしたテキスト</translation>
 <translation id="5017828934289857214">後で通知する</translation>
 <translation id="5018422839182700155">このページを開けません</translation>
+<translation id="5018802455907704660">16x20 インチ</translation>
 <translation id="5019198164206649151">代替ストアの状態が不適切です</translation>
 <translation id="5020776957610079374">ワールド ミュージック</translation>
 <translation id="5021557570875267742">Chrome で価格をトラッキング</translation>
@@ -1577,6 +1603,7 @@
 <translation id="5109892411553231226">お支払い方法を管理</translation>
 <translation id="5112422516732747637">A5</translation>
 <translation id="5114288597538800140">トレイ 18</translation>
+<translation id="511431458895937675">DSC 写真</translation>
 <translation id="5114987907971894280">バーチャル リアリティ</translation>
 <translation id="5115232566827194440">制限付き管理対象ゲスト セッションのオーバーライド</translation>
 <translation id="5115563688576182185">(64 ビット)</translation>
@@ -1636,6 +1663,7 @@
 <translation id="5254043433801397071">印刷コンテンツの最適化</translation>
 <translation id="5254958791078852567">E1</translation>
 <translation id="5255690596502591079">このままキャプチャする</translation>
+<translation id="5255833070095767006">350x460 mm</translation>
 <translation id="5266128565379329178">製本(上綴じ)</translation>
 <translation id="5269225904387178860">4 穴パンチ(下)</translation>
 <translation id="5269999699920406580">システム全体に適用される機能は所有者(<ph name="OWNER_EMAIL" />)のみが設定できます</translation>
@@ -1730,6 +1758,7 @@
 <translation id="5510481203689988000">この設定は Cookie 設定で管理されています。</translation>
 <translation id="5510766032865166053">移動または削除された可能性があります。</translation>
 <translation id="5513528801833998679">デバイスのログイン情報を使用</translation>
+<translation id="5515388687005870733">55x85 mm</translation>
 <translation id="5518670652865028077">アート、エンターテインメント</translation>
 <translation id="5519516356611866228">変更後のバージョン</translation>
 <translation id="5523118979700054094">ポリシー名</translation>
@@ -1746,6 +1775,7 @@
 <translation id="5541086400771735334">用紙受け 7</translation>
 <translation id="5541546772353173584">メールの追加</translation>
 <translation id="5545756402275714221">おすすめの記事</translation>
+<translation id="5551890439174915351">100x200 mm</translation>
 <translation id="5552137475244467770">Chrome では、定期的にパスワードをオンライン上の公開リストと照合し、確認しています。その際、パスワードとユーザー名は Google を含め誰も読み取ることができないよう暗号化されます。</translation>
 <translation id="5556459405103347317">再読み込み</translation>
 <translation id="5560088892362098740">有効期限</translation>
@@ -1755,6 +1785,7 @@
 <translation id="5565871407246142825">クレジットカード</translation>
 <translation id="5570825185877910964">アカウントを保護</translation>
 <translation id="5571083550517324815">この住所での受け取りはできません。別の住所を選択してください。</translation>
+<translation id="5572434905385510939">22x28 インチ</translation>
 <translation id="557886905979275351">かみそり、シェーバー</translation>
 <translation id="5580958916614886209">有効期限の「月」を確認してもう一度お試しください</translation>
 <translation id="558420943003240152">パスワードとパスキーを管理...</translation>
@@ -1763,6 +1794,7 @@
 <translation id="5587987780934666589">プラットフォーム ユーザー</translation>
 <translation id="5593349413089863479">接続は完全には保護されていません</translation>
 <translation id="5595485650161345191">住所の編集</translation>
+<translation id="5596939519753369075">2x3.5 インチ</translation>
 <translation id="5598944008576757369">お支払い方法を選択</translation>
 <translation id="560412284261940334">管理はサポートされていません</translation>
 <translation id="5605670050355397069">Ledger</translation>
@@ -1903,6 +1935,7 @@
 <translation id="5995727681868049093">Google アカウントで情報、プライバシー、セキュリティを管理します</translation>
 <translation id="5997247540087773573">たった今使用したパスワードがデータ侵害で検出されました。Google パスワード マネージャーでは、アカウントを保護するために今すぐパスワードを変更して、保存したパスワードを確認することをおすすめします。</translation>
 <translation id="6000758707621254961">「<ph name="SEARCH_TEXT" />」に対する <ph name="RESULT_COUNT" /> 件の検索結果</translation>
+<translation id="6006365096047131769">3x5 インチ</translation>
 <translation id="6006484371116297560">クラシック</translation>
 <translation id="6008122969617370890">N~1 の順</translation>
 <translation id="6008256403891681546">JCB</translation>
@@ -1944,6 +1977,7 @@
 <translation id="6087312102907839798">他のキーワード</translation>
 <translation id="6094273045989040137">注釈を追加</translation>
 <translation id="6094290315941448991">管理者のポリシーによって、機密コンテンツが表示されているときは、画面の録画が無効になります</translation>
+<translation id="6099269767116481177">22x29.5 インチ</translation>
 <translation id="6104072995492677441">JIS B6</translation>
 <translation id="6105460996796456817">サイトを作成</translation>
 <translation id="6106989379647458772">ウェブページ(<ph name="PAGE" />)は一時的に利用できなくなっているか、新しいウェブアドレスに移動した可能性があります。</translation>
@@ -1977,6 +2011,7 @@
 <translation id="6194209731893739467">トラッキングしている商品がすべてここに表示されます</translation>
 <translation id="6195371403461054755">地質学</translation>
 <translation id="6196640612572343990">サードパーティの Cookie をブロックする</translation>
+<translation id="6197648101609735209">89x89 mm</translation>
 <translation id="6203231073485539293">インターネット接続を確認してください</translation>
 <translation id="6218753634732582820">Chromium からアドレスを削除してもよろしいですか?</translation>
 <translation id="622039917539443112">巻き折り</translation>
@@ -2062,6 +2097,7 @@
 <translation id="6428450836711225518">電話番号の確認</translation>
 <translation id="6429267199680088961">A4 Tab</translation>
 <translation id="643051589346665201">Google のパスワードを変更</translation>
+<translation id="6431119592588449664">レポートをアップロードしました</translation>
 <translation id="6433490469411711332">連絡先情報の編集</translation>
 <translation id="6433595998831338502"><ph name="HOST_NAME" /> で接続が拒否されました。</translation>
 <translation id="6433797564277305076">今後はデバイスのロック解除を使用して、カードの確認をより迅速に行います</translation>
@@ -2105,6 +2141,7 @@
 <translation id="6549443526281184652">衣装</translation>
 <translation id="6554732001434021288">最終アクセス日: <ph name="NUM_DAYS" /> 日前</translation>
 <translation id="6556866813142980365">やり直す</translation>
+<translation id="6557715786897013164">14x17 インチ</translation>
 <translation id="6569060085658103619">拡張機能のページを表示しています</translation>
 <translation id="6569366777234823130">ドラマ映画</translation>
 <translation id="6573200754375280815">2 穴パンチ(右)</translation>
@@ -2134,6 +2171,7 @@
 <translation id="6646269444027925224">{COUNT,plural, =0{なし}=1{1 件のサイト(Google アカウントへのログイン状態は維持されます)}other{# 件のサイト(Google アカウントへのログイン状態は維持されます)}}</translation>
 <translation id="6648459603387803038">管理者はブラウザの設定をリモートで変更できます。このデバイスでのアクティビティは、Chrome 以外でも管理されている可能性があります。</translation>
 <translation id="6648524591329069940">Serif フォント</translation>
+<translation id="6649510485211003056">195x270 mm</translation>
 <translation id="6651270836885078973">管理者:</translation>
 <translation id="6652101503459149953">Windows Hello を使用</translation>
 <translation id="6657585470893396449">パスワード</translation>
@@ -2202,6 +2240,7 @@
 <translation id="6828866289116430505">遺伝学</translation>
 <translation id="6831043979455480757">翻訳</translation>
 <translation id="6833752742582340615">Google アカウントにカードとお支払い情報を保存すると、すばやく安全にご購入手続きを行えます</translation>
+<translation id="6842196666980060516">184x260 mm</translation>
 <translation id="6846340164947227603">仮想カード番号を使用...</translation>
 <translation id="6852204201400771460">アプリを再読み込みしますか?</translation>
 <translation id="6857776781123259569">パスワードを管理...</translation>
@@ -2262,6 +2301,7 @@
 <translation id="6972629891077993081">HID デバイス</translation>
 <translation id="6973656660372572881">固定プロキシ サーバーと .pac スクリプト URL の両方が指定されています。</translation>
 <translation id="6973932557599545801">自動入力できません。残りの入力はご自身で行ってください。</translation>
+<translation id="6973988895180423160">3.5x5 インチ(L 判)</translation>
 <translation id="6978236010531171013">このまま共有</translation>
 <translation id="6979158407327259162">Google ドライブ</translation>
 <translation id="6979440798594660689">ミュート(デフォルト)</translation>
@@ -2412,6 +2452,7 @@
 <translation id="7378627244592794276">いいえ</translation>
 <translation id="7378810950367401542">/</translation>
 <translation id="7378877318020334501">お笑い番組</translation>
+<translation id="7380398842872229465">10x15 インチ</translation>
 <translation id="738439098860678026">幼児教育</translation>
 <translation id="7386364858855961704">対象外です</translation>
 <translation id="7388594495505979117">{0,plural, =1{デバイスは 1 分後に再起動されます}other{デバイスは # 分後に再起動されます}}</translation>
@@ -2451,6 +2492,7 @@
 <translation id="7460618730930299168">スクリーニングが選択内容と異なっています。続行しますか?</translation>
 <translation id="7461924472993315131">固定</translation>
 <translation id="7463075493919226237">オーストラリアン フットボール</translation>
+<translation id="7465963048299965912">10x13 インチ</translation>
 <translation id="7469935732330206581">安全でないフォーム</translation>
 <translation id="7473891865547856676">スキップ</translation>
 <translation id="7481312909269577407">進む</translation>
@@ -2666,6 +2708,7 @@
 <translation id="8003046808285812021">「<ph name="SEARCH_TERMS" />」</translation>
 <translation id="8004582292198964060">ブラウザ</translation>
 <translation id="8009225694047762179">パスワードを管理</translation>
+<translation id="8009843239480947060">10x11 インチ</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{このカードと請求先住所は保存され、<ph name="USER_EMAIL" /> にログインすると使用できます。}other{これらのカードと請求先住所は保存され、<ph name="USER_EMAIL" /> にログインすると使用できます。}}</translation>
 <translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" />(<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">このサイトを利用すると、悪意のあるユーザーによって、ソフトウェアのインストールや個人情報(例: パスワード、電話番号、クレジット カード番号)の入力などの危険な操作を行うよう誘導される可能性があります。</translation>
@@ -2702,6 +2745,7 @@
 <translation id="808894953321890993">パスワードの変更</translation>
 <translation id="8090403583893450254">サイズ 20</translation>
 <translation id="8091372947890762290">サーバーで有効化が保留になっています</translation>
+<translation id="8092254339843485299">6x8 インチ</translation>
 <translation id="8092774999298748321">ディープ パープル</translation>
 <translation id="8094917007353911263">ご利用のネットワークでは、<ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> へのアクセスが必要な可能性があります。</translation>
 <translation id="8098855213644561659">A3 Extra</translation>
@@ -2735,9 +2779,11 @@
 <translation id="8201077131113104583">ID「<ph name="EXTENSION_ID" />」の拡張機能に対する無効な更新 URL です。</translation>
 <translation id="8202097416529803614">ご注文概要</translation>
 <translation id="8202370299023114387">競合</translation>
+<translation id="8208363704094329105">300x400 mm</translation>
 <translation id="8210604850413485128">ウェブ ホスティング</translation>
 <translation id="8211406090763984747">この接続は保護されています</translation>
 <translation id="8213853114485953510">JIS Exec</translation>
+<translation id="8216640997712497593">14x18 インチ</translation>
 <translation id="8217240300496046857">サイトは Cookie を使用してあなたをウェブ上でトラッキングできません。一部サイトの機能が使用できなくなる可能性もあります。</translation>
 <translation id="8217748145574471584">人事</translation>
 <translation id="8218327578424803826">割り当てられた場所:</translation>
@@ -2809,6 +2855,7 @@
 <translation id="8380941800586852976">危険</translation>
 <translation id="8381674639488873545">料金の請求は 1 回限りの場合も繰り返し行われる場合もあり、課金されたかどうかわからないこともあります。<ph name="BEGIN_LINK" />理解したうえで表示する<ph name="END_LINK" /></translation>
 <translation id="8390725133630534698"><ph name="ORIGIN_NAME" /> から <ph name="VM_NAME" /> への貼り付けは管理者が設定したポリシーによってブロックされています</translation>
+<translation id="8396522675989118466"><ph name="SIDE_OF_CARD" /> の <ph name="NUMBER_OF_DIGITS" /> 桁のコードです</translation>
 <translation id="8398790343843005537">スマートフォンを検出</translation>
 <translation id="8405579342203358118">Chrome の設定で同期する情報を管理します</translation>
 <translation id="8409413588194360210">支払いハンドラ</translation>
@@ -2818,6 +2865,7 @@
 詳細:
 <ph name="DEBUG_INFO" /></translation>
 <translation id="8424582179843326029"><ph name="FIRST_LABEL" /> <ph name="SECOND_LABEL" /> <ph name="THIRD_LABEL" /></translation>
+<translation id="8427848540066057481">500x750 mm</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8428634594422941299">OK</translation>
 <translation id="8431194080598727332"><ph name="MANAGE_COOKIES_FOCUSED_FRIENDLY_MATCH_TEXT" /> です。Tab キー、Enter キーの順に押して、Chrome の設定で Cookie の設定を管理します</translation>
@@ -2829,11 +2877,13 @@
 <translation id="8443613539889492016">ラップ、ヒップホップ</translation>
 <translation id="8444543005280733648">コンピュータ ネットワーク</translation>
 <translation id="8446884382197647889">詳細</translation>
+<translation id="8449155699563577224">17x24 インチ</translation>
 <translation id="8449836157089738489">すべてを新しいタブグループで開く</translation>
 <translation id="8457125768502047971">無期限</translation>
 <translation id="8461694314515752532">同期データを同期パスフレーズで暗号化する</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 件のクレジット カード}other{# 件のクレジット カード}}</translation>
 <translation id="8468358362970107653">C3 封筒</translation>
+<translation id="8473626140772740486">300x450 mm</translation>
 <translation id="8473863474539038330">住所やその他の情報</translation>
 <translation id="8474910779563686872">デベロッパーの詳細を表示</translation>
 <translation id="8479754468255770962">ステープル(左下)</translation>
@@ -2882,9 +2932,12 @@
 <translation id="8623885649813806493">一致するパスワードがありません。保存したパスワードをすべて表示します。</translation>
 <translation id="8624354461147303341">割引情報を取得</translation>
 <translation id="8625384913736129811">このカード情報をこのデバイスに保存する</translation>
+<translation id="8634957317623797170">54x86 mm</translation>
 <translation id="8637577059508742477">お使いのプロフィールとブラウザは <ph name="DOMAIN" /> によって管理されています</translation>
 <translation id="8643409044755049933">角形 3 号封筒</translation>
+<translation id="8647287295490773273">210x330 mm</translation>
 <translation id="865032292777205197">モーション センサー</translation>
+<translation id="8654126188050905496">55x91 mm</translation>
 <translation id="8663226718884576429">ご注文の概要、<ph name="TOTAL_LABEL" />、その他の詳細</translation>
 <translation id="8666678546361132282">英語</translation>
 <translation id="867224526087042813">署名</translation>
@@ -2916,6 +2969,7 @@
 <translation id="8730621377337864115">完了</translation>
 <translation id="8731544501227493793">パスワードを管理するボタンです。Enter キーを押すと Chrome の設定でパスワードを表示、管理します</translation>
 <translation id="8734529307927223492">この <ph name="DEVICE_TYPE" /> は <ph name="MANAGER" /> によって管理されています</translation>
+<translation id="8736059027199600831">30x40 インチ</translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" /> です。Tab キー、Enter キーの順に押すと、新しいシークレット ウィンドウを開いてシークレット モードでブラウジングします</translation>
 <translation id="8737685506611670901"><ph name="REPLACED_HANDLER_TITLE" /> の代わりに「<ph name="PROTOCOL" />」リンクを開く</translation>
 <translation id="8738058698779197622">安全な接続を確立するには時計が正しく設定されている必要があります。この理由は、本物のウェブサイトであることを示すためにウェブサイトで使用される証明書には、有効期間(発効日時と失効日時)が設定されているためです。デバイスの時計が正しくないため、Chromium ではこれらの証明書を確認できません。</translation>
@@ -2953,6 +3007,7 @@
 <translation id="8834380158646307944">[シークレット ウィンドウを閉じる] ボタンです。Enter キーを押すと、現在開いているすべてのシークレット ウィンドウを閉じます</translation>
 <translation id="883848425547221593">その他のブックマーク</translation>
 <translation id="884264119367021077">配送先住所</translation>
+<translation id="8849231003559822746">130x180 mm</translation>
 <translation id="884923133447025588">取り消し機構が見つかりません。</translation>
 <translation id="8849262850971482943">セキュリティを強化するには仮想カードを使用してください</translation>
 <translation id="8852567725116633427">マイクロカー、サブコンパクトカー</translation>
@@ -3119,6 +3174,7 @@
 <translation id="969892804517981540">Official Build</translation>
 <translation id="973773823069644502">配達先住所を追加</translation>
 <translation id="975560348586398090">{COUNT,plural, =0{なし}=1{1 件のアイテム}other{# 件のアイテム}}</translation>
+<translation id="976522784004777030">5x8 インチ</translation>
 <translation id="977502174772294970">ウェディング</translation>
 <translation id="981121421437150478">オフライン</translation>
 <translation id="982885543310356857">クラシック カー</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index fa13e86..f752ad5 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -36,6 +36,7 @@
 <translation id="1058479211578257048">Карталар сақталуда...</translation>
 <translation id="1060320201901229167">Kaku 5 хатқалтасы</translation>
 <translation id="10614374240317010">Ешқашан сақталмайды</translation>
+<translation id="1064054731605354900">A3x5</translation>
 <translation id="106701514854093668">Жұмыс үстелі бетбелгілері</translation>
 <translation id="1068672505746868501"><ph name="SOURCE_LANGUAGE" /> тіліндегі беттер ешқашан аударылмасын</translation>
 <translation id="1070853536588271387">Гибрид және балама жанармай тұтынатын көліктер</translation>
@@ -51,6 +52,7 @@
 <translation id="1100782917270858593">"Шарлауды жалғастыру" түймесі. Шарлауды жалғастырып, Chrome тарихынан сәйкес сұрауларды көру үшін Enter пернесін басыңыз.</translation>
 <translation id="1101672080107056897">Қате әрекет</translation>
 <translation id="1103523840287552314">Әрқашан <ph name="LANGUAGE" /> тіліне аудару</translation>
+<translation id="1108464073729874771">A3x4</translation>
 <translation id="1110994991967754504"><ph name="PERMISSION_NAME" /> үшін рұқсатты таңдаңыз</translation>
 <translation id="1112828774174131240">Сирек және коллекциялық заттар</translation>
 <translation id="1113869188872983271">&amp;Қайта ретке келтіру әрекетін болдырмау</translation>
@@ -93,6 +95,7 @@
 <translation id="121201262018556460"><ph name="DOMAIN" /> доменіне қол жеткізуге әрекет еттіңіз, бірақ сервер кілті әлсіз сертификатты ұсынды. Қаскүнем жеке кілтті бұзып, басқа серверге кіріп жатқан болуыңыз мүмкін (қаскүнеммен байланысып жатқан болуыңыз мүмкін).</translation>
 <translation id="1219129156119358924">Жүйе қауіпсіздігі</translation>
 <translation id="1222060260947439312">Оң жақ науа</translation>
+<translation id="1224330468394120478">A3x6</translation>
 <translation id="1225570101506606926">Бильярд</translation>
 <translation id="1225607422885279949">Google сізге жеңілдіктер табады</translation>
 <translation id="1227224963052638717">Белгісіз саясат.</translation>
@@ -401,6 +404,7 @@
 <translation id="1945968466830820669">Ұйымның аккаунтына кіре алмай қалуыңыз мүмкін немесе жеке деректеріңіз ұрлануы ықтимал. Chromium құпия сөзіңізді қазір өзгертуге кеңес береді.</translation>
 <translation id="1946849748901605102">12 x 15 дюйм</translation>
 <translation id="1947454675006758438">Жоғарғы оң жағын қапсыру</translation>
+<translation id="1954847915560574887">A3x3</translation>
 <translation id="1956486093533522234">Құрылғыңызды табу, қорғау немесе тазарту</translation>
 <translation id="1958218078413065209">Ең жоғары ұпайыңыз: <ph name="SCORE" />.</translation>
 <translation id="1959001866257244765">Google-ға <ph name="BEGIN_WHITEPAPER_LINK" />кірген беттердің URL мекенжайларын, шектеулі жүйе ақпаратын және кейбір бет мазмұнын<ph name="END_WHITEPAPER_LINK" /> жіберу арқылы барлық пайдаланушы үшін интернет қауіпсіздігін жақсартуға көмектесіңіз. <ph name="BEGIN_PRIVACY_PAGE_LINK" />Құпиялылық саясаты<ph name="END_PRIVACY_PAGE_LINK" /></translation>
@@ -469,6 +473,7 @@
 <translation id="2122719317867821810">Бұл саясат ойдағыдай жұмыс істеуде, бірақ басқа жерде осы саясат бойынша қабылданбайтын қарама-қайшы мән орнатылған.</translation>
 <translation id="2126374524350484896">PDF жасаушы:</translation>
 <translation id="2130448033692577677">DnsOverHttpsMode саясаты орнатылмағандықтан, сіз көрсеткен үлгілер қолданылмауы мүмкін.</translation>
+<translation id="2130699163006053678">A3x7</translation>
 <translation id="2135799067377889518">Ерлер киімі</translation>
 <translation id="213826338245044447">Ұялы телефондағы бетбелгілер</translation>
 <translation id="214556005048008348">Төлемнен бас тарту</translation>
@@ -706,6 +711,7 @@
 <translation id="277499241957683684">Құрылғы жазбасы жоқ</translation>
 <translation id="2775884851269838147">Бірінші басып шығарылатын бет</translation>
 <translation id="2781692009645368755">Google Pay</translation>
+<translation id="2784474685437057136">B5 Extra</translation>
 <translation id="2784949926578158345">Байланыс қалпына келтірілді.</translation>
 <translation id="2791176355335562114">Келесі жолы жылдамырақ төлеңіз</translation>
 <translation id="2792012897584536778">Бұл құрылғының әкімшілері қауіпсіздік сертификаттарын орнатты, енді олар сіз кірген веб-сайттардың мазмұнын көруі мүмкін.</translation>
@@ -760,6 +766,7 @@
 <translation id="2949183777371959169">Chrome браузерінің бұлтты басқару құралында тіркелмегендіктен, құрылғы еленбеді.</translation>
 <translation id="2951588413176968965">Пошта жәшігім</translation>
 <translation id="2952820037279740115">Барлық инкогнито терезесін жабу</translation>
+<translation id="2952904171810469095">A2x5</translation>
 <translation id="295526156371527179">Ескерту: бұл саясат сөздік болмағандықтан, саясатта көрсетілгендей сөздік ретінде біріктірілмеген.</translation>
 <translation id="2955913368246107853">Іздеу жолағын жабу</translation>
 <translation id="2958544468932521864">Крикет</translation>
@@ -889,6 +896,7 @@
 <translation id="3303176609391916566">30 x 42 дюйм</translation>
 <translation id="3303855915957856445">Іздеу нәтижелері табылмады</translation>
 <translation id="3304073249511302126">Bluetooth құрылғыларын іздеу</translation>
+<translation id="3304777285002411338">A2x3</translation>
 <translation id="33073482541490531">Сіз жаңа ғана қолданған құпия сөз деректердің қолды болуы салдарынан жария етілді. Құпия сөз менеджері оны дереу өзгертуді ұсынады.</translation>
 <translation id="3308006649705061278">Ұйымдық бірлік (OU)</translation>
 <translation id="3308738399950580893">жарнамалар</translation>
@@ -903,6 +911,7 @@
 <translation id="3340978935015468852">параметрлер</translation>
 <translation id="3342366525167526994">Денені безендіру өнері</translation>
 <translation id="3345782426586609320">Көз</translation>
+<translation id="3349952286488694786">SRA2</translation>
 <translation id="3355823806454867987">Прокси параметрлерін өзгерту…</translation>
 <translation id="3359565626472459400">Неке</translation>
 <translation id="3360103848165129075">Төлем өңдегіш парағы</translation>
@@ -990,6 +999,7 @@
 <translation id="3567901620846335314">100 x 150 мм</translation>
 <translation id="3574305903863751447"><ph name="CITY" />, <ph name="STATE" /> <ph name="COUNTRY" /></translation>
 <translation id="3575121482199441727">Осы сайт үшін рұқсат ету</translation>
+<translation id="3575168918110434329">A4x7</translation>
 <translation id="3576616784287504635"><ph name="SITE" /> сайтына ендірілген беттегі сұрау</translation>
 <translation id="3577473026931028326">Бірдеңе дұрыс болмады. Қайталап көріңіз.</translation>
 <translation id="3577902790357386792">Гимнастика</translation>
@@ -1107,6 +1117,7 @@
 <translation id="3831915413245941253"><ph name="ENROLLMENT_DOMAIN" /> қосымша функцияларға кеңейтімдер орнатты. Кеңейтімдер кейбір деректерді пайдалана алады.</translation>
 <translation id="3832522519263485449">Сол жағын бірнеше рет тесу</translation>
 <translation id="3835233591525155343">Құрылғыны пайдалануыңыз</translation>
+<translation id="3844725157150297127">RA1</translation>
 <translation id="3848487483475744267"><ph name="CREATE_GOOGLE_DOC_FOCUSED_FRIENDLY_MATCH_TEXT" />, жаңа Google құжатын жылдам жасау үшін Tab, содан кейін Enter пернесін басыңыз.</translation>
 <translation id="385051799172605136">Артқа</translation>
 <translation id="3853684360927654006">Құпия сөздің күшін есептеу құралы</translation>
@@ -1193,6 +1204,7 @@
 <translation id="4114146879518089587">Сайтқа кіру</translation>
 <translation id="4116663294526079822">Бұл сайтта әрдайым рұқсат беру</translation>
 <translation id="4116701314593212016">JIS B7</translation>
+<translation id="4116798170070772848">RA2</translation>
 <translation id="4117700440116928470">Саясат аясына қолдау көрсетілмеген.</translation>
 <translation id="4121428309786185360">Аяқталу күні</translation>
 <translation id="4123572138124678573">Төменгі жағын үш рет тесу</translation>
@@ -1256,6 +1268,7 @@
 <translation id="4235360514405112390">Жарамды</translation>
 <translation id="4250431568374086873">Бұл сайтпен байланысыңыз толықтай қауіпсіз емес</translation>
 <translation id="4250680216510889253">Жоқ</translation>
+<translation id="4250716950689692560">A4x4</translation>
 <translation id="4253168017788158739">Ескертпе</translation>
 <translation id="425582637250725228">Енгізілген өзгертулер сақталмауы мүмкін.</translation>
 <translation id="425869179292622354">Қауіпсіздік виртуалдық картамен күшейтілсін бе?</translation>
@@ -1314,6 +1327,7 @@
 <translation id="4372948949327679948"><ph name="VALUE_TYPE" /> мәні қажет.</translation>
 <translation id="4377125064752653719"><ph name="DOMAIN" /> доменіне қол жеткізуге әрекет еттіңіз, бірақ сервер ұсынған сертификатты оны шығарған орган қайтарып алды. Бұл сервер ұсынған қауіпсіздік деректеріне сенуге болмайтынын білдіреді. Қаскүнеммен байланысып жатқан болуыңыз мүмкін.</translation>
 <translation id="4378154925671717803">Телефон</translation>
+<translation id="4384395682990721132">A4x3</translation>
 <translation id="4386413576162606861">Рөлдік ойындар</translation>
 <translation id="4390472908992056574">Жиек</translation>
 <translation id="4393632246160856858">Тырнақ күтіміне арналған өнімдер</translation>
@@ -1390,6 +1404,7 @@
 <translation id="4622292761762557753">Бәрібір тасымалдау</translation>
 <translation id="4627675673814409125">Бұл саясатты Chrome профилі деңгейінде орнатуға болмайды және ол еленбейді.</translation>
 <translation id="4628948037717959914">Фотосурет</translation>
+<translation id="4629370161347991046">A4x6</translation>
 <translation id="4631649115723685955">Байланыстырылған кешбэк</translation>
 <translation id="4636930964841734540">Ақпарат</translation>
 <translation id="4638670630777875591">Chromium браузеріндегі инкогнито режимі</translation>
@@ -1559,6 +1574,7 @@
 <translation id="5031870354684148875">Google Translate туралы</translation>
 <translation id="503498442187459473"><ph name="HOST" /> хосты камераңыз бен микрофоныңызды пайдаланғысы келеді</translation>
 <translation id="5035135400558156732">Бағбаншылық</translation>
+<translation id="503574301575803523">SRA3</translation>
 <translation id="5039762155821394373">Қаріп өлшемі</translation>
 <translation id="5039804452771397117">Рұқсат беру</translation>
 <translation id="5040262127954254034">Құпиялылық</translation>
@@ -1640,6 +1656,7 @@
 <translation id="5229588705416009823">Көп ойыншыға арналған ойындар</translation>
 <translation id="5230733896359313003">Жеткізу мекенжайы</translation>
 <translation id="5230815978613972521">B8</translation>
+<translation id="523149107733989821">A4 Extra</translation>
 <translation id="5234764350956374838">Жабу</translation>
 <translation id="5239623327352565343">Локацияны пайдалануға рұқсат берілді.</translation>
 <translation id="5242889659037569123">Багаж және саяхат керек-жарақтары</translation>
@@ -1700,6 +1717,7 @@
 <translation id="5363309033720083897">Әкімші рұқсат еткен тізбекті порт</translation>
 <translation id="5363713372507812442">Сеанстарды іздеу</translation>
 <translation id="5371425731340848620">Картаны жаңарту</translation>
+<translation id="5375686690914744327">SRA1</translation>
 <translation id="5377026284221673050">"Сағатыңыз артта", "Сағатыңыз алда" немесе "&lt;span class="error-code"&gt;NET::ERR_CERT_DATE_INVALID&lt;/span&gt;"</translation>
 <translation id="5379027395132364855">"Презентация жасау" түймесі, Slides-да жаңа Google презентациясын жылдам жасау үшін Enter пернесін басыңыз.</translation>
 <translation id="5385857628869214740">Әзіл</translation>
@@ -1869,6 +1887,7 @@
 <translation id="583281660410589416">Белгісіз</translation>
 <translation id="5838278095973806738">Шабуылдаушылар ұрлауы мүмкін болғандықтан, бұл сайтқа ешқандай маңызды ақпаратты (мысалы, құпия сөздер не несиелік карталар) енгізбеңіз.</translation>
 <translation id="5851548754964597211">Қойындылар тізімі</translation>
+<translation id="5852909432155870672">RA4</translation>
 <translation id="5860033963881614850">Өшірулі</translation>
 <translation id="5862579898803147654">8-жинастырушы</translation>
 <translation id="5863847714970149516">Бұл бет сізден ақшалай ақы алуға тырысуы мүмкін</translation>
@@ -1992,6 +2011,7 @@
 <translation id="6177128806592000436">Бұл сайтпен байланысыңыз қауіпсіз емес</translation>
 <translation id="6177531123306197852">C2 хатқалтасы</translation>
 <translation id="6180316780098470077">Қайталау аралығы</translation>
+<translation id="6182972682129119950">A4x5</translation>
 <translation id="61877208875190028">Әйелдер киімі</translation>
 <translation id="6194209731893739467">Бақылайтын барлық өнімді осы жерден көре аласыз.</translation>
 <translation id="6195371403461054755">Геология</translation>
@@ -2075,10 +2095,12 @@
 <translation id="6404511346730675251">Бетбелгіні өзгерту</translation>
 <translation id="6405181733356710802"><ph name="APP_NAME" /> ашылсын ба?</translation>
 <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> картасының жарамдылық мерзімін және CVC кодын енгізіңіз</translation>
+<translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">Chromium браузері Google аккаунтыңызды қорғауға және құпия сөзіңізді өзгертуге көмектеседі.</translation>
 <translation id="6425092077175753609">Материал</translation>
 <translation id="6427730057873428458">Қақпа тәрізді бүктеу</translation>
 <translation id="6428450836711225518">Телефон нөміріңізді растаңыз</translation>
+<translation id="6429267199680088961">A4 Tab</translation>
 <translation id="643051589346665201">Google құпия сөзін өзгерту</translation>
 <translation id="6431119592588449664">Есеп жүктеп салынды.</translation>
 <translation id="6433490469411711332">Байланыс ақпаратын өңдеу</translation>
@@ -2090,6 +2112,7 @@
 <translation id="6447842834002726250">Cookie файлдары</translation>
 <translation id="6450212216969386944">Chou 40 хатқалтасы</translation>
 <translation id="6451458296329894277">Нысанның қайта жіберілуін растау</translation>
+<translation id="6452889436791091116">ISO ID-1</translation>
 <translation id="6456955391422100996">Жарнама өшірілді.</translation>
 <translation id="6457206614190510200">Толқын тәрізді тігу</translation>
 <translation id="6457455098507772300">Бағаның төмендеуі туралы хабарландырулар компьютеріңізде қалқымалы хабарландыру түрінде көрсетіледі.</translation>
@@ -2186,6 +2209,7 @@
 <translation id="6716672519412350405"><ph name="URL" /> айналаңыздың 3D картасын жасағысы және камера орнын бақылағысы келеді.</translation>
 <translation id="6718612893943028815">Камера пайдаланылсын ба?</translation>
 <translation id="6721678857435001674">Security Key құрылғысының маркасы мен үлгісін көру</translation>
+<translation id="6727094998759448074">SRA4</translation>
 <translation id="6732087373923685049">камера</translation>
 <translation id="6738516213925468394">Деректеріңіз <ph name="TIME" /> күні <ph name="BEGIN_LINK" />синхрондаудың құпия фразасымен<ph name="END_LINK" /> шифрланған. Синхрондау үшін оны енгізіңіз.</translation>
 <translation id="674375294223700098">Белгісіз сервер сертификатының қатесі.</translation>
@@ -2225,6 +2249,7 @@
 <translation id="6846340164947227603">Виртуалдық карта нөмірін пайдалану...</translation>
 <translation id="6852204201400771460">Қолданба қайта жүктелсін бе?</translation>
 <translation id="6857776781123259569">Құпия сөздерді басқару...</translation>
+<translation id="6858034839887287663">A2x4</translation>
 <translation id="6864189428899665393">267 x 389 мм</translation>
 <translation id="686485648936420384">Тұтыну ресурстары</translation>
 <translation id="6865412394715372076">Бұл картаны дәл қазір растау мүмкін емес</translation>
@@ -2259,6 +2284,7 @@
 <translation id="6946722113367118030">Ойлану</translation>
 <translation id="6948051842255602737">Ойын аяқталды, ұпайыңыз: <ph name="SCORE" />.</translation>
 <translation id="6948701128805548767">Таңдау әдістері мен талаптарын көру үшін мекенжайды таңдаңыз</translation>
+<translation id="6948874830249067134">A1x3</translation>
 <translation id="6949872517221025916">Құпия сөзді қайта орнату</translation>
 <translation id="6950684638814147129">JSON мәнін талдау кезінде қате кетті: <ph name="ERROR" /></translation>
 <translation id="695140971690006676">Барлығын бастапқы күйге қайтару</translation>
@@ -2312,6 +2338,7 @@
 <translation id="7068733155164172741"><ph name="OTP_LENGTH" /> цифрлық кодты енгізіңіз</translation>
 <translation id="70705239631109039">Байланысыңыз толықтай қауіпсіз емес</translation>
 <translation id="7075452647191940183">Сұрау өлшемі өте үлкен.</translation>
+<translation id="7078665357168027058">RA3</translation>
 <translation id="7079718277001814089">Бұл сайтта зиянды бағдарлама бар</translation>
 <translation id="7081308185095828845">Бұл мүмкіндік құрылғыда жоқ.</translation>
 <translation id="7083258188081898530">9-науа</translation>
@@ -2375,6 +2402,7 @@
 <translation id="7238585580608191973">SHA-256 саусақ ізі</translation>
 <translation id="7240120331469437312">Certificate Subject Alternative Name</translation>
 <translation id="7243010569062352439"><ph name="PASSWORDS" />; <ph name="SIGNIN_DATA" /></translation>
+<translation id="7243771829620208687">RA0</translation>
 <translation id="7244465398154211886">{NUM_MATCHES,plural, =1{# сәйкестік}other{# сәйкестік}}</translation>
 <translation id="724691107663265825">Алдағы сайтта зиянды бағдарлама бар</translation>
 <translation id="724975217298816891">Карта мәліметтерін жаңарту үшін <ph name="CREDIT_CARD" /> картасының жарамдылық мерзімі мен CVC кодын енгізіңіз. Карта мәліметтері расталғаннан кейін сайтқа беріледі.</translation>
@@ -2466,6 +2494,7 @@
 <translation id="7445762425076701745">Сіз қосылған сервердің идентификациясын толық тексеру мүмкін емес. Сыртқы сертификат беру орталығы иелігін тексеру мүмкіндігіне ие емес желіде ғана жарамды атты пайдалану арқылы серверге қосылдыңыз. Кейбір сертификат беру орталықтары бұл аттарға қатыссыз сертификаттарды шығаратындықтан, қаскүнемге емес, арнайы веб-сайтқа қосылғандығыңызды тексеру мүмкін емес.</translation>
 <translation id="7451311239929941790">Бұл ақау туралы <ph name="BEGIN_LINK" />толығырақ ақпарат<ph name="END_LINK" /> қарау.</translation>
 <translation id="7455133967321480974">Ғаламдық әдепкі мәнді пайдалану (бөгеу)</translation>
+<translation id="745640750744109667">A0x3</translation>
 <translation id="7460618730930299168">Таңдағаныңыздан басқаша көрсетіледі. Жалғастырасыз ба?</translation>
 <translation id="7461924472993315131">Бекіту</translation>
 <translation id="7463075493919226237">Австралиялық футбол</translation>
@@ -2536,6 +2565,7 @@
 <translation id="7591288787774558753">Құпия мазмұн бөлісілсін бе?</translation>
 <translation id="7591636454931265313"><ph name="EMBEDDED_URL" /> сайты <ph name="TOP_LEVEL_URL" /> сайтында cookie файлдарын және сайт деректерін пайдаланға рұқсат сұрайды.</translation>
 <translation id="7592362899630581445">Сервер сертификаты атау шектеулерін бұзады.</translation>
+<translation id="7592749602347161287">A5 Extra</translation>
 <translation id="7598391785903975535"><ph name="UPPER_ESTIMATE" /> шамасынан аз</translation>
 <translation id="759889825892636187"><ph name="HOST_NAME" /> қазір бұл сұрауды өңдей алмайды.</translation>
 <translation id="7600965453749440009">Ешқашан <ph name="LANGUAGE" /> тіліне аудармау</translation>
@@ -2724,6 +2754,7 @@
 <translation id="8092254339843485299">6 x 8 дюйм</translation>
 <translation id="8092774999298748321">Қою күлгін</translation>
 <translation id="8094917007353911263">Пайдаланып жатқан желі <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> мекенжайына кіруді талап етуі мүмкін.</translation>
+<translation id="8098855213644561659">A3 Extra</translation>
 <translation id="809898108652741896">A6</translation>
 <translation id="8100588592594801589">Жарамсыз карталар өшірілді</translation>
 <translation id="8100666323495101203">Ұйымыңыз <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> сайтының компания саясатын бұзуы мүмкін екенін анықтады. <ph name="BEGIN_LEARN_MORE_LINK" />Толық ақпарат<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -2882,6 +2913,7 @@
 <translation id="8539500321752640291">2 рұқсат берілсін бе?</translation>
 <translation id="8541158209346794904">Bluetooth құрылғысы</translation>
 <translation id="8542014550340843547">Төменгі жағын үш рет қапсыру</translation>
+<translation id="8542617028204211143">SRA0</translation>
 <translation id="8543181531796978784">Сіз <ph name="BEGIN_ERROR_LINK" />анықтау мәселесі туралы хабарлай<ph name="END_ERROR_LINK" /> аласыз, қауіпсіздігіңізге төнетін қатерді түсінетін болсаңыз, <ph name="BEGIN_LINK" />қауіпті сайтқа кіріңіз<ph name="END_LINK" />.</translation>
 <translation id="854892890027593466">C6/C5 хатқалтасы</translation>
 <translation id="8553387990086529628">Туристік бағыттар</translation>
@@ -2950,6 +2982,7 @@
 <translation id="8742371904523228557"><ph name="ONE_TIME_CODE" /> – <ph name="ORIGIN" /> сайтына арналған код</translation>
 <translation id="874918643257405732">Осы қойындыға бетбелгі қойыңыз</translation>
 <translation id="8751426954251315517">Келесі жолы қайталап көріңіз.</translation>
+<translation id="8755125092386286553">A4x9</translation>
 <translation id="8757526089434340176">Google Pay ұсынысы қолжетімді</translation>
 <translation id="8758885506338294482">Сайысатын бейне ойындар</translation>
 <translation id="8759274551635299824">Картаның мерзімі біткен</translation>
@@ -3016,6 +3049,7 @@
 <translation id="893332455753468063">Ат қосу</translation>
 <translation id="8942355029279167844">Әкімші <ph name="APP_NAME" /> қолданбасына өнімді пайдалануды жақсарту үшін диагностикалық деректерді жинауға рұқсат етті. Толығырақ ақпарат алу үшін <ph name="BEGIN_LINK" />https://www.parallels.com/pcep<ph name="END_LINK" /> бетін қараңыз.</translation>
 <translation id="8943282376843390568">Сарғылт жасыл</translation>
+<translation id="8949493680961858543">A1x4</translation>
 <translation id="8951415078585015151">Заң және үкімет</translation>
 <translation id="8957210676456822347">Байланысқан портал авторизациясы</translation>
 <translation id="8962950042226115166">Күдікті сайт</translation>
diff --git a/components/strings/components_strings_km.xtb b/components/strings/components_strings_km.xtb
index fdc17ab..e6ca1dfb 100644
--- a/components/strings/components_strings_km.xtb
+++ b/components/strings/components_strings_km.xtb
@@ -138,6 +138,7 @@
 <translation id="129553762522093515">បានបិទកន្លងទៅថ្មីៗ</translation>
 <translation id="1296930489679394997">ការ​លក់</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />សាកល្បងជម្រះខុកឃីរបស់អ្នក<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Legal Extra</translation>
 <translation id="1301324364792935241">ពិនិត្យ​ការកំណត់ DNS សុវត្ថិភាពរបស់អ្នក</translation>
 <translation id="1307966114820526988">មុខងារ​ដែលបាន​បញ្ឈប់</translation>
 <translation id="1308113895091915999">មាន​ការផ្ដល់ជូន</translation>
@@ -445,6 +446,7 @@
 <translation id="205212645995975601">BBQ និង​ការអាំងសាច់</translation>
 <translation id="2053111141626950936">ទំព័រជា <ph name="LANGUAGE" /> នឹងមិនត្រូវ​បានបកប្រែទេ។</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{នៅពេលបើកការគ្រប់គ្រងនេះ ហើយស្ថានភាពកំពុងសកម្ម នោះ Chrome កំណត់ថាតើក្រុមមនុស្សមួយក្រុមធំ ឬ "ក្រុមមនុស្សដូចគ្នា" ណា ដែលសកម្មភាព​រុករក​តាមអ៊ីនធឺណិតថ្មីៗរបស់អ្នកស្រដៀងបំផុត។ អ្នកផ្សាយ​ពាណិជ្ជកម្ម​អាចជ្រើសរើស​ការផ្សាយពាណិជ្ជកម្ម​សម្រាប់ក្រុម​នោះ ហើយសកម្មភាព​រុករក​តាមអ៊ីនធឺណិតរបស់អ្នកត្រូវបានរក្សាជាលក្ខណៈឯកជននៅលើឧបករណ៍របស់អ្នក។ ក្រុមរបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាពរៀងរាល់ថ្ងៃ។}=1{នៅពេលបើកការគ្រប់គ្រងនេះ ហើយស្ថានភាពកំពុងសកម្ម នោះ Chrome កំណត់ថាតើក្រុមមនុស្សមួយក្រុមធំ ឬ "ក្រុមមនុស្សដូចគ្នា" ណា ដែលសកម្មភាព​រុករក​តាមអ៊ីនធឺណិតថ្មីៗរបស់អ្នកស្រដៀងបំផុត។ អ្នកផ្សាយ​ពាណិជ្ជកម្ម​អាចជ្រើសរើស​ការផ្សាយពាណិជ្ជកម្ម​សម្រាប់ក្រុម​នោះ ហើយសកម្មភាព​រុករក​តាមអ៊ីនធឺណិតរបស់អ្នកត្រូវបានរក្សាជាលក្ខណៈឯកជននៅលើឧបករណ៍របស់អ្នក។ ក្រុមរបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាពរៀងរាល់ថ្ងៃ។}other{នៅពេលបើកការគ្រប់គ្រងនេះ ហើយស្ថានភាពកំពុងសកម្ម នោះ Chrome កំណត់ថាតើក្រុមមនុស្សមួយក្រុមធំ ឬ "ក្រុមមនុស្សដូចគ្នា" ណា ដែលសកម្មភាព​រុករក​តាមអ៊ីនធឺណិតថ្មីៗរបស់អ្នកស្រដៀងបំផុត។ អ្នកផ្សាយ​ពាណិជ្ជកម្ម​អាចជ្រើសរើស​ការផ្សាយពាណិជ្ជកម្ម​សម្រាប់ក្រុម​នោះ ហើយសកម្មភាព​រុករក​តាមអ៊ីនធឺណិតរបស់អ្នកត្រូវបានរក្សាជាលក្ខណៈឯកជននៅលើឧបករណ៍របស់អ្នក។ ក្រុមរបស់អ្នកត្រូវបានធ្វើបច្ចុប្បន្នភាពរៀងរាល់ {NUM_DAYS} ថ្ងៃ។}}</translation>
+<translation id="2059202684901022309">22 x 34 in</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{ការផ្តល់យោបល់ 1}other{ការផ្តល់យោបល់ #}}</translation>
 <translation id="2066915425250589881">ស្នើសុំ​ឱ្យលុប</translation>
 <translation id="2068528718802935086">ទារក និង​ក្មេងតូច​ទើបចេះដើរ</translation>
@@ -534,6 +536,7 @@
 <translation id="2277753418458118549">បង្ហាញ​ព័ត៌មាន​លម្អិតអំពី​ការតភ្ជាប់</translation>
 <translation id="2283340219607151381">រក្សាទុក និង​បំពេញ​អាសយដ្ឋាន</translation>
 <translation id="2283447177162560884">បានលុប '<ph name="PAGE_TITLE" />'</translation>
+<translation id="2286383991450886080">34 x 44 in</translation>
 <translation id="2288422996159078444">អ្វី​ដែលអ្នក​វាយបញ្ចូល ទំព័រ​ទាំងឡាយ​ដែលអ្នក​មើល ឬ​សកម្មភាព​ផ្សេងទៀត​នៅលើ​បណ្ដាញ​កំពុង​ត្រូវបាន​ឃ្លាំមើល​។ ខ្លឹមសារ​នៅលើ​គេហទំព័រ​ផ្សេងៗ​អាចនឹង​ត្រូវបាន​ប្ដូរ​ដោយ​មិនឱ្យ​អ្នក​ដឹង​។</translation>
 <translation id="2289385804009217824">តម្រឹម</translation>
 <translation id="2292556288342944218">ការចូលប្រើអ៊ីនធឺណិតរបស់អ្នកត្រូវបានរារាំង</translation>
@@ -695,6 +698,7 @@
 <translation id="2709516037105925701">បំពេញស្វ័យប្រវត្តិ</translation>
 <translation id="2713444072780614174">ស</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />, ចុច "Tab" រួចចុច "Enter" ដើម្បីគ្រប់គ្រងការបង់ប្រាក់ និងព័ត៌មានបណ្ណឥណទានរបស់អ្នក​នៅក្នុងការកំណត់ Chrome</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">ចុច |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| ដើម្បីចេញពីមុខងារអេក្រង់ពេញ</translation>
 <translation id="2721148159707890343">សំណើរបានជោគជ័យ</translation>
 <translation id="2723669454293168317">ដំណើរការ​ការពិនិត្យ​សុវត្ថិភាព​នៅក្នុងការកំណត់ Chrome</translation>
@@ -702,6 +706,7 @@
 <translation id="2728127805433021124">វិញ្ញាបនប័ត្រម៉ាស៊ីនមេត្រូវបានចុះហេត្ថលេខាដោយប្រើនីតិវិធីដោះស្រាយហត្ថលេខាខ្សោយ។</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />កំពុងដំណើរការការវិភាគការតភ្ជាប់<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">តន្ត្រី​បុរាណ</translation>
+<translation id="2731382536835015353">44 x 68 in</translation>
 <translation id="2734319753272419592">អនុញ្ញាតឱ្យ Google ប្រើកន្ត្រករបស់អ្នក ដើម្បីស្វែងរក​ការបញ្ចុះតម្លៃ​ដែលមានលក្ខណៈផ្ទាល់ខ្លួន។ នៅពេលមាន ការបញ្ចុះតម្លៃ​នឹង​បង្ហាញ​នៅក្នុងកន្ត្រក​របស់អ្នក​ដោយស្វ័យប្រវត្តិ។</translation>
 <translation id="2738330467931008676">ជ្រើសរើស​អាសយដ្ឋាន​ទទួល</translation>
 <translation id="2740531572673183784">យល់ព្រម</translation>
@@ -774,6 +779,7 @@
 <translation id="2955913368246107853">បិទរបារស្វែងរក</translation>
 <translation id="2958544468932521864">គ្រីឃីត</translation>
 <translation id="2959113999220720579">ផលិតផល​ថែទាំ​ដងខ្លួន និង​ផ្ទៃមុខ</translation>
+<translation id="2962073860865348475">12 x 18 in</translation>
 <translation id="2968103128155246731">រថយន្ត​ដឹកទំនិញ និងរថយន្ត​ដឹកទំនិញធុនតូច</translation>
 <translation id="2972581237482394796">ធ្វើវិញ</translation>
 <translation id="2977665033722899841">បច្ចុប្បន្ន​បាន​ជ្រើសរើស <ph name="ROW_NAME" /> ។ <ph name="ROW_CONTENT" /></translation>
@@ -877,6 +883,7 @@
 <translation id="3249151924975132674">ហិរញ្ញវត្ថុសម្រាប់​មហាវិទ្យាល័យ និង​កម្ចីសម្រាប់​សិស្ស</translation>
 <translation id="3249845759089040423">ទាន់​សម័យ</translation>
 <translation id="3250640885957938546">ការធ្វើទីផ្សារ និង​ការផ្សាយ​ពាណិជ្ជកម្ម</translation>
+<translation id="3251133337102041130">Government Legal</translation>
 <translation id="3252266817569339921">ភាសាបារាំង</translation>
 <translation id="3254301855501243548">18 x 22 in</translation>
 <translation id="3256863843508922226">ការចូលនិវត្តន៍ និង​ប្រាក់សោធន</translation>
@@ -889,6 +896,7 @@
 <translation id="3270156322180235608">ការធ្វើដំណើរ​តាមអាកាស</translation>
 <translation id="3270847123878663523">បកក្រោយការតម្រៀបឡើងវិញ</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> ចង់ភ្ជាប់</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">ស្ថាប័នរបស់អ្នក <ph name="ENROLLMENT_DOMAIN" /> បានបញ្ជូនព័ត៌មានមួយចំនួនទៅគេហទំព័រខាងក្រោមដូចជា ការកំណត់ ឬគោលការណ៍ជាដើម។</translation>
 <translation id="3282497668470633863">បញ្ចូលឈ្មោះលើកាត</translation>
 <translation id="3286372614333682499">បញ្ឈរ​</translation>
@@ -991,6 +999,7 @@
 <translation id="3531780078352352885">សន្លឹក​កិច្ចការ</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> ចង់​ប្រើ​មីក្រូហ្វូន​របស់អ្នក</translation>
 <translation id="3533328374079021623">ប្រអប់​សំបុត្រទី 5</translation>
+<translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542768452570884558">បើកតំណនៅក្នុងផ្ទាំងថ្មី</translation>
 <translation id="3547746132308051926">20 x 24 in</translation>
 <translation id="3550112004925580947">ឧស្សាហកម្ម​ផ្នែក​បដិសណ្ឋារកិច្ច</translation>
@@ -1176,6 +1185,7 @@
 <translation id="4030383055268325496">បកក្រោយការបន្ថែម</translation>
 <translation id="4031179711345676612">បាន​អនុញ្ញាត​ឱ្យប្រើ​មីក្រូហ្វូន</translation>
 <translation id="4040350669425716613">មហាវិទ្យាល័យ និង​សកល​វិទ្យាល័យ</translation>
+<translation id="4047351652147966654">18 x 24 in</translation>
 <translation id="405399507749852140">ទទួលបានការជូនដំណឹង ប្រសិនបើមានការធ្លាក់ថ្លៃនៅលើគេហទំព័រណាមួយ</translation>
 <translation id="4056223980640387499">Sepia</translation>
 <translation id="4063063121357725926">អនុញ្ញាតឱ្យ Google ជួយ​អ្នកស្វែងរក​ការបញ្ចុះតម្លៃ​សម្រាប់​កន្ត្រករបស់អ្នក</translation>
@@ -1491,6 +1501,7 @@
 <translation id="4813512666221746211">កំហុសឆ្គងបណ្តាញ</translation>
 <translation id="4816492930507672669">សមនឹងទំព័រ</translation>
 <translation id="4819347708020428563">កែចំណារនៅក្នុងទិដ្ឋភាពលំនាំដើមឬ?</translation>
+<translation id="4823325221257637040">កំពុងចាប់ផ្ដើម</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />, ចុច Tab រួចចុច Enter ដើម្បី​បង្កើត​បញ្ជី Google ថ្មីបានរហ័ស</translation>
 <translation id="4825507807291741242">មាន​ឥទ្ធិពល​ខ្លាំង</translation>
 <translation id="483241715238664915">បើក​ការព្រមាន</translation>
@@ -1606,6 +1617,7 @@
 <translation id="5093232627742069661">បត់​ជាអក្សរ Z</translation>
 <translation id="5094747076828555589">ម៉ាស៊ីនមេនេះមិនអាចបង្ហាញថាវាជា <ph name="DOMAIN" /> ទេ វិញ្ញាបនប័ត្រសុវត្ថិភាពរបស់វាមិនអាចត្រូវបានជឿជាក់ដោយ Chromium ទេ។ នេះអាចបណ្តាលមកពីការកំណត់មិនត្រឹមត្រូវ ឬមានការស្ទាក់ការភ្ជាប់របស់អ្នកពីអ្នកវាយប្រហារ។</translation>
 <translation id="5097099694988056070">ស្ថិតិឧបករណ៍​ដូចជាការប្រើប្រាស់ CPU/RAM ជាដើម</translation>
+<translation id="5097468150760963273">27 x 39 in</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">គេហទំព័រនេះ​មិនមានសុវត្ថិភាពទេ</translation>
 <translation id="5109892411553231226">គ្រប់គ្រង​វិធីបង់ប្រាក់</translation>
@@ -1930,6 +1942,7 @@
 <translation id="5953516610448771166">មិនអាចប្រើអក្សររត់ក្នុងពេលជាក់ស្ដែងសម្រាប់មេឌៀនេះបានទេ។ ដើម្បីទទួលបានអក្សររត់ សូមទប់ស្កាត់ <ph name="CONTENT_SETTINGS" /> សម្រាប់គេហទំព័រនេះ។</translation>
 <translation id="5955063559762970069">សណ្ឋាគារ និង​កន្លែង​ស្នាក់នៅ</translation>
 <translation id="5963413905009737549">ផ្នែក</translation>
+<translation id="5967260682280773804">36 x 48 in</translation>
 <translation id="5967592137238574583">កែសម្រួល​ព័ត៌មាន​ទំនាក់ទំនង</translation>
 <translation id="5967867314010545767">ដកចេញពីប្រវត្តិ</translation>
 <translation id="5968022600320704045">គ្មាន​លទ្ធផល​ស្វែងរក​ទេ</translation>
@@ -2001,6 +2014,7 @@
 <translation id="6127379762771434464">ធាតុត្រូវបានយកចេញ</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />ស្វែងយល់បន្ថែមអំពីមុខងារឯកជននៅក្នុង Chrome<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">កន្ទុយឯកសារ​ទទេ ឬ​មាន​ទម្រង់​មិន​ត្រឹមត្រូវ។</translation>
+<translation id="6139975341602920272">17 x 22 in</translation>
 <translation id="6146055958333702838">ពិនិត្យខ្សែបណ្តាញ បិទបើករ៉ោតទ័រ ម៉ូឌែម ឬឧបករណ៍បណ្តាញផ្សេងទៀត
     ដែលអ្នកកំពុងប្រើប្រាស់។</translation>
 <translation id="614940544461990577">សាកល្បង៖</translation>
@@ -2023,6 +2037,7 @@
 <translation id="6196640612572343990">រារាំង​ខូគី​ភាគី​ទីបី</translation>
 <translation id="6197648101609735209">89 x 89 mm</translation>
 <translation id="6203231073485539293">ពិនិត្យការភ្ជាប់អ៊ីនធឺណិតរបស់អ្នក</translation>
+<translation id="6212314149070368045">US Fanfold</translation>
 <translation id="6218753634732582820">យកអាសយដ្ឋានចេញពី Chromium ឬ?</translation>
 <translation id="622039917539443112">បត់ឱ្យ​ស្របគ្នា</translation>
 <translation id="6221345481584921695">ការរុករកសុវត្ថិភាព Google <ph name="BEGIN_LINK" />បានរកឃើញមេរោគ<ph name="END_LINK" /> នៅលើ <ph name="SITE" />កន្លងទៅថ្មីៗនេះ។ គេហទំព័រដែលជាធម្មតាមានសុវត្ថិភាពអាចឆ្លងមេរោគនៅពេលខ្លះ។ មាតិកាព្យាបាទចេញមកពី <ph name="SUBRESOURCE_HOST" /> ជាអ្នកចែកចាយមេរោគដែលត្រូវបានស្គាល់។</translation>
@@ -2049,6 +2064,7 @@
 <translation id="627746635834430766">ដើម្បី​បង់ប្រាក់​លឿន​ជាងនេះ​នៅពេល​ក្រោយ សូម​រក្សា​ទុកបណ្ណ និង​អាសយដ្ឋាន​ចេញ​វិក្កយបត្រ​របស់អ្នក​ទៅក្នុង​គណនី Google របស់​អ្នក។</translation>
 <translation id="6279183038361895380">ចុច |<ph name="ACCELERATOR" />| ដើម្បីបង្ហាញទស្សន៍ទ្រនិចរបស់អ្នក</translation>
 <translation id="6280223929691119688">មិនអាចដឹកជញ្ជូនផ្ទាល់ទៅអាសយដ្ឋាននេះបានទេ។ សូមជ្រើសរើសអាសយដ្ឋានផ្សេង។</translation>
+<translation id="6284292079994426700">26 x 38 in</translation>
 <translation id="6285507000506177184">ប៊ូតុង "គ្រប់គ្រង​ការទាញយកនៅក្នុង Chrome" ចុច Enter ដើម្បីគ្រប់គ្រង​ឯកសារដែលអ្នក​បានទាញយកនៅក្នុង Chrome</translation>
 <translation id="6289939620939689042">ពណ៌​ទំព័រ</translation>
 <translation id="6290238015253830360">អត្ថបទដែលបានផ្តល់យោបល់របស់អ្នកបង្ហាញនៅទីនេះ</translation>
@@ -2102,6 +2118,7 @@
 <translation id="6410264514553301377">បញ្ចូល​កាលបរិច្ឆេទ​ផុត​កំណត់​ និង​ CVC សម្រាប់ <ph name="CREDIT_CARD" /></translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">Chromium អាច​ជួយ​អ្នក​ក្នុងការការពារ​គណនី Google និង​ផ្លាស់ប្ដូរ​ពាក្យសម្ងាត់​របស់អ្នក​។</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">សម្ភារៈ</translation>
 <translation id="6427730057873428458">បត់ជា​ផ្ទាំងៗមានសណ្ឋានជាទ្វារ</translation>
 <translation id="6428450836711225518">ផ្ទៀងផ្ទាត់​លេខ​ទូរសព្ទ​របស់​អ្នក</translation>
@@ -2115,6 +2132,7 @@
 <translation id="6443406338865242315">ថាតើ​កម្មវិធីបន្ថែម និងកម្មវិធី​ជំនួយណាខ្លះដែលអ្នកបានដំឡើង</translation>
 <translation id="6446608382365791566">បញ្ចូលព័ត៌មានបន្ថែម</translation>
 <translation id="6447842834002726250">ខុកឃី</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">ស្រោមសំបុត្រ Chou 40</translation>
 <translation id="6451458296329894277">អះអាងការដាក់ស្នើបែបបទឡើងវិញ</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2281,6 +2299,7 @@
 <translation id="6915804003454593391">អ្នកប្រើ៖</translation>
 <translation id="6916954549222464607">ការគ្រប់គ្រង និង​ការរៀបចំផែនការ​ហិរញ្ញវត្ថុ</translation>
 <translation id="6917795328362592458">ពាក្យសម្ងាត់ដែលអ្នកទើបតែប្រើត្រូវបានរកឃើញនៅក្នុងការបែកធ្លាយទិន្នន័យ។ ដើម្បីការពារសុវត្ថិភាពគណនីរបស់អ្នក កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ណែនាំឱ្យពិនិត្យមើលពាក្យសម្ងាត់ដែលអ្នកបានរក្សាទុក។</translation>
+<translation id="6925267999184670015">North American B+</translation>
 <translation id="6934672428414710184">ឈ្មោះ​នេះ​បាន​មកពី​គណនី Google របស់អ្នក</translation>
 <translation id="6936976777388162184">នេះ​គឺ​ជា​ឧបករណ៍​ជា​កញ្ចប់ និងមិន​អាច​ត្រូវ​បាន​ចុះឈ្មោះ​ដោយ​ប្រើ Kiosk និង Signage Upgrade បាន​ទេ។</translation>
 <translation id="6939469646605424232">រឿងភាគ​ទូរទស្សន៍</translation>
@@ -2330,6 +2349,7 @@
 <translation id="7030436163253143341">វិញ្ញាបនបត្រ​មិនមានសុពលភាពទេ</translation>
 <translation id="7031646650991750659">ថាតើកម្មវិធី Google Play ណាខ្លះដែលអ្នកបានដំឡើង</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, ចុច Tab រួចចុច Enter ដើម្បីគ្រប់គ្រង​ការកំណត់​ឯកជនភាព​គណនី Google របស់អ្នក</translation>
+<translation id="7048095965575426564">European Fanfold</translation>
 <translation id="7050187094878475250">អ្នកបានព្យាយាមចូលទៅ <ph name="DOMAIN" />, ប៉ុន្តែវិញ្ញាបនបត្រនៃម៉ាស៊ីនមេនេះមានសុពលភាពយូរពេកដែលមិនគួរឲ្យទុកចិត្ត។</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{មិនអាចរក្សាទុកបណ្ណនេះបានទេនៅពេលនេះ}other{មិនអាចរក្សាទុកបណ្ណទាំងនេះបានទេនៅពេលនេះ}}</translation>
 <translation id="7053983685419859001">ទប់ស្កាត់</translation>
@@ -2391,6 +2411,7 @@
 <translation id="7192203810768312527">បង្កើន​ទំហំផ្ទុក <ph name="SIZE" /> ។ ទំព័រ​មួយចំនួន​អាចផ្ទុកយឺតជាងមុន នៅពេលដែលអ្នកចូលលើកក្រោយ។</translation>
 <translation id="7193661028827781021">សេចក្ដី​យោង</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">អ្នកគ្រប់គ្រង​របស់អ្នកអាច​មើលឃើញ៖</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, ចុច "Tab" រួចចុច "Enter" ដើម្បីបើក​ផ្ទាំងឯកជនថ្មី ដើម្បីរុករកជាលក្ខណៈឯកជន</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> មិនត្រូវតាមបទដ្ឋានសុវត្ថិភាពទេ</translation>
@@ -2491,6 +2512,7 @@
 <translation id="7421067045979951561">ឧបករណ៍ដោះស្រាយ​ប្រូតូកូល</translation>
 <translation id="7426022697669111648">ប៊ូតុង "មើលប្រវត្តិ Chrome របស់អ្នក" ចុច Enter ដើម្បីមើល និងគ្រប់គ្រង​ប្រវត្តិរុករកតាមអ៊ីនធឺណិត​របស់អ្នក​នៅក្នុងការកំណត់ Chrome</translation>
 <translation id="7427366580982928791">សុវត្ថិភាព​នៃការប្រើប្រាស់​អ៊ីនធឺណិត​សម្រាប់កុមារ</translation>
+<translation id="7429429656042611765">Executive</translation>
 <translation id="7437289804838430631">បញ្ចូល​ព័ត៌មាន​ទំនាក់ទំនង</translation>
 <translation id="7437490109271760224">ហ្គេមបៀ</translation>
 <translation id="7440140511386898319">រុករកពេលគ្មាន​អ៊ីនធឺណិត</translation>
@@ -2697,6 +2719,7 @@
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ចុច Tab រួចចុច Enter ដើម្បី​ស្វែងយល់អំពី​មុខងារ Chrome</translation>
 <translation id="7950027195171824198">គ្រប់គ្រងចំណូលចិត្តខូគីរបស់អ្នកនៅក្នុងការកំណត់ Chrome</translation>
 <translation id="7951415247503192394">(32-ប៊ីត)</translation>
+<translation id="7952192831285741665">European EDP</translation>
 <translation id="7953569069500808819">ដេរគែម​ខាងលើ</translation>
 <translation id="7956713633345437162">ចំណាំទូរស័ព្ទ</translation>
 <translation id="7961015016161918242">មិនដែល</translation>
@@ -2783,6 +2806,7 @@
 <translation id="8153865548451212769">{0,plural, =1{គោលការណ៍អ្នកគ្រប់គ្រង​មិន​ណែនាំ​ឱ្យ​ទាញយក​ឯកសារ​នេះ​ទុក​ក្នុង <ph name="DESTINATION_NAME" /> ទេ}other{គោលការណ៍អ្នកគ្រប់គ្រង​មិន​ណែនាំ​ឱ្យ​ទាញយក​ឯកសារ​ទាំង​នេះ​ទុក​ក្នុង <ph name="DESTINATION_NAME" /> ទេ}}</translation>
 <translation id="8157295877370077682">ចាកចេញ​ពី​គេហទំព័រ</translation>
 <translation id="8163866351304776260">ចោះ​បួនរន្ធ​ខាងឆ្វេង</translation>
+<translation id="8175330382720204696">Government Letter</translation>
 <translation id="8175796834047840627">Chrome ផ្ដល់ជូន​ជម្រើស​រក្សាទុកបណ្ណរបស់អ្នកនៅ​ក្នុងគណនី Google របស់អ្នក ដោយសារ​អ្នកចូលគណនី។ អ្នកអាចប្ដូរសកម្មភាពនេះ​បាននៅក្នុងការកំណត់។</translation>
 <translation id="8176440868214972690">អ្នកគ្រប់គ្រងឧបករណ៍នេះបានបញ្ជូនព័ត៌មានមួយចំនួនទៅគេហទំព័រខាងក្រោមដូចជា ការកំណត់ ឬគោលការណ៍ជាដើម។</translation>
 <translation id="8184538546369750125">ប្រើលំនាំដើមជាសកល (អនុញ្ញាត)</translation>
@@ -2893,6 +2917,7 @@
 <translation id="8449155699563577224">17 x 24 in</translation>
 <translation id="8449836157089738489">បើកទាំងអស់នៅក្នុងក្រុមផ្ទាំងថ្មី</translation>
 <translation id="8457125768502047971">មិនច្បាស់</translation>
+<translation id="8458202188076138974">Letter Extra</translation>
 <translation id="8461694314515752532">អ៊ីនគ្រីប​ទិន្នន័យ​ដែលបាន​ធ្វើ​សមកាលកម្ម​ ដោយប្រើឃ្លា​សម្ងាត់​សមកាលកម្មផ្ទាល់​ខ្លួន​របស់​អ្នក</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{កាតឥណទាន 1}other{កាតឥណទាន #}}</translation>
 <translation id="8468358362970107653">ស្រោមសំបុត្រ C3</translation>
@@ -3099,6 +3124,7 @@
 <translation id="9042617223719777575">ទម្រ​ផ្ទុកធំ</translation>
 <translation id="9044359186343685026">ប្រើ Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24 x 36 in</translation>
 <translation id="9049981332609050619">អ្នកប៉ុនប៉ងទៅកាន់ <ph name="DOMAIN" /> ប៉ុន្តែម៉ាស៊ីនមេបានបង្ហាញវិញ្ញាបនប័ត្រដែលគ្មានសុពលភាព។</translation>
 <translation id="9050666287014529139">ឃ្លាសម្ងាត់</translation>
 <translation id="9056953843249698117">ហាង</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 1515d07..885bf39 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -137,6 +137,7 @@
 <translation id="129553762522093515">ປິດ​ບໍ່​ດົນ​ມາ​ນີ້</translation>
 <translation id="1296930489679394997">ຫຼຸດລາຄາ</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />ລອງລຶບລ້າງຄຸກກີ້ຂອງທ່ານ<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Legal Extra</translation>
 <translation id="1301324364792935241">ກວດເບິ່ງການຕັ້ງຄ່າ DNS ທີ່ປອດໄພຂອງທ່ານ</translation>
 <translation id="1307966114820526988">ຄຸນສົມບັດທີ່ເຊົາຮອງຮັບແລ້ວ</translation>
 <translation id="1308113895091915999">ມີຂໍ້ສະເໜີ</translation>
@@ -264,6 +265,7 @@
 <translation id="1567040042588613346">ນະໂຍບາຍນີ້ກຳລັງເຮັດວຽກຕາມທີ່ກຳນົດໄວ້ ແຕ່ມີການຕັ້ງຄ່າດຽວກັນຢູ່ບ່ອນອື່ນ ແລະ ນະໂຍບາຍນີ້ກຳລັງແທນທີ່ມັນ.</translation>
 <translation id="1569487616857761740">ປ້ອນວັນທີໝົດອາຍຸ</translation>
 <translation id="1569694109004336106">Google Chrome ກຳລັງພະຍາຍາມເປີດໃຊ້ Windows Hello ສຳລັບການຕື່ມລະຫັດຜ່ານ.</translation>
+<translation id="1572765991610098222"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ນິ້ວ</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">ມີບາງອັນຜິດພາດ ໃນຂະນະທີ່ກໍາລັງສະແດງໜ້າ​ເວັບນີ້.</translation>
 <translation id="1586541204584340881">ສ່ວນຂະຫຍາຍທີ່ທ່ານຕິດຕັ້ງ</translation>
@@ -443,6 +445,7 @@
 <translation id="205212645995975601">ບາບີຄິວ ແລະ ການປິ້ງ</translation>
 <translation id="2053111141626950936">ລະບົບຈະບໍ່ແປໜ້າເປັນ <ph name="LANGUAGE" />.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{ເມື່ອເປີດການຄວບຄຸມນີ້ ແລະ ສະຖານະເປັນແບບເປີດໃຊ້ຢູ່, Chrome ຈະກຳນົດວ່າກຸ່ມຄົນຂະໜາດໃຫຍ່ກຸ່ມໃດ ຫຼື "ກຸ່ມປະຊາກອນຕາມຮຸ່ນ" ໃດທີ່ຄ້າຍກັບການເຄື່ອນໄຫວການທ່ອງເວັບຫຼ້າສຸດຂອງທ່ານ. ຜູ້ລົງໂຄສະນາສາມາດເລືອກໂຄສະນາສຳລັບກຸ່ມໄດ້ ແລະ ການເຄື່ອນໄຫວການທ່ອງເວັບຂອງທ່ານຈະຖືກຈັດເກັບໄວ້ເປັນສ່ວນຕົວຢູ່ອຸປະກອນຂອງທ່ານ. ກຸ່ມຂອງທ່ານມີການອັບເດດທຸກມື້.}=1{ເມື່ອເປີດການຄວບຄຸມນີ້ ແລະ ສະຖານະເປັນແບບເປີດໃຊ້ຢູ່, Chrome ຈະກຳນົດວ່າກຸ່ມຄົນຂະໜາດໃຫຍ່ກຸ່ມໃດ ຫຼື "ກຸ່ມປະຊາກອນຕາມຮຸ່ນ" ໃດທີ່ຄ້າຍກັບການເຄື່ອນໄຫວການທ່ອງເວັບຫຼ້າສຸດຂອງທ່ານ. ຜູ້ລົງໂຄສະນາສາມາດເລືອກໂຄສະນາສຳລັບກຸ່ມໄດ້ ແລະ ການເຄື່ອນໄຫວການທ່ອງເວັບຂອງທ່ານຈະຖືກຈັດເກັບໄວ້ເປັນສ່ວນຕົວຢູ່ອຸປະກອນຂອງທ່ານ. ກຸ່ມຂອງທ່ານມີການອັບເດດທຸກມື້.}other{ເມື່ອເປີດການຄວບຄຸມນີ້ ແລະ ສະຖານະເປັນແບບເປີດໃຊ້ຢູ່, Chrome ຈະກຳນົດວ່າກຸ່ມຄົນຂະໜາດໃຫຍ່ກຸ່ມໃດ ຫຼື "ກຸ່ມປະຊາກອນຕາມຮຸ່ນ" ໃດທີ່ຄ້າຍກັບການເຄື່ອນໄຫວການທ່ອງເວັບຫຼ້າສຸດຂອງທ່ານ. ຜູ້ລົງໂຄສະນາສາມາດເລືອກໂຄສະນາສຳລັບກຸ່ມໄດ້ ແລະ ການເຄື່ອນໄຫວການທ່ອງເວັບຂອງທ່ານຈະຖືກຈັດເກັບໄວ້ເປັນສ່ວນຕົວຢູ່ອຸປະກອນຂອງທ່ານ. ກຸ່ມຂອງທ່ານມີການອັບເດດທຸກ {NUM_DAYS} ມື້.}}</translation>
+<translation id="2059202684901022309">22 x 34 ນິ້ວ</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 ຄຳ​ແນະນຳ}other{# ຄຳ​ແນະນຳ}}</translation>
 <translation id="2066915425250589881">ຮ້ອງຂໍໃຫ້ຖືກລຶບອອກ</translation>
 <translation id="2068528718802935086">ແອນ້ອຍ ແລະ ເດັກນ້ອຍຮຽນຍ່າງ</translation>
@@ -532,6 +535,7 @@
 <translation id="2277753418458118549">ສະແດງລາຍລະອຽດການເຊື່ອມຕໍ່</translation>
 <translation id="2283340219607151381">ບັນທຶກ ແລະ ປະກອບຂໍ້ມູນທີ່ຢູ່</translation>
 <translation id="2283447177162560884">ລຶບ '<ph name="PAGE_TITLE" />' ແລ້ວ</translation>
+<translation id="2286383991450886080">34 x 44 ນິ້ວ</translation>
 <translation id="2288422996159078444">ມີການເຝົ້າຕິດຕາມເບິ່ງທຸກຢ່າງທີ່ທ່ານພິມ, ໜ້າເວັບໃດກໍຕາມທີ່ທ່ານເບິ່ງ ຫຼື ການເຄື່ອນໄຫວອື່ນໃດໆກໍຕາມໃນເວັບ. ອາດມີການປ່ຽນແປງເນື້ອຫາໃນເວັບໄຊໂດຍບໍ່ມີການແຈ້ງໃຫ້ທ່ານຊາບ.</translation>
 <translation id="2289385804009217824">ຕັດ</translation>
 <translation id="2292556288342944218">ການເຂົ້າເຖິງອິນເຕີເນັດຂອງທ່ານຖືກບລັອກໄວ້</translation>
@@ -692,6 +696,7 @@
 <translation id="2709516037105925701">ຕື່ມອັດຕະໂນມັດ</translation>
 <translation id="2713444072780614174">ສີ​ຂາວ</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດແຖບ ຈາກນັ້ນກົດ Enter ເພື່ອຈັດການການຈ່າຍເງິນ ແລະ ຂໍ້ມູນບັດເຄຣດິດຂອງທ່ານໃນການຕັ້ງຄ່າ Chrome</translation>
+<translation id="2715808615350965923">Super-A</translation>
 <translation id="271663710482723385">ກົດ |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| ເພື່ອອອກໂໝດຈາກເຕັມຈໍ</translation>
 <translation id="2721148159707890343">ການ​ຮ້ອງ​ຂໍ​ສໍາ​ເລັດ</translation>
 <translation id="2723669454293168317">ເປີດໃຊ້ການກວດສອບຄວາມປອດໄພໃນການຕັ້ງຄ່າ Chrome</translation>
@@ -699,6 +704,7 @@
 <translation id="2728127805433021124">ໃບຢັ້ງຢືນຂອງເຊີບເວີໄດ້ຮັບການລົງລາຍເຊັນດ້ວຍການໃຊ້ຂັ້ນຕອນການລົງລາຍເຊັນອ່ອນແອ</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />ກຳລັງເປີດໃຊ້ Connectivity Diagnostics<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">ເພງຄລາດສິກ</translation>
+<translation id="2731382536835015353">44 x 68 ນິ້ວ</translation>
 <translation id="2734319753272419592">ໃຫ້ Google ໃຊ້ກະຕ່າຂອງທ່ານເພື່ອຊອກຫາສຳລັບສ່ວນຫຼຸດທີ່ປັບແຕ່ງສ່ວນຕົວແລ້ວ. ເມື່ອມີໃຫ້, ສ່ວນຫຼຸດຈະສະແດງຂຶ້ນຢູ່ກະຕ່າຂອງທ່ານໂດຍອັດຕະໂນມັດ.</translation>
 <translation id="2738330467931008676">ເລືອກທີ່ຢູ່ບ່ອນຮັບເຄື່ອງ</translation>
 <translation id="2740531572673183784">ຕົກລົງ</translation>
@@ -771,6 +777,7 @@
 <translation id="2955913368246107853">ປິດຊອກຫາແຖບ</translation>
 <translation id="2958544468932521864">ຄຣິກເກັດ</translation>
 <translation id="2959113999220720579">ການຮັກສາໜ້າ ແລະ ຮ່າງກາຍ</translation>
+<translation id="2962073860865348475">12 x 18 ນິ້ວ</translation>
 <translation id="2968103128155246731">ລົດຕູ້ ແລະ ລົດຕູ້ນ້ອຍ</translation>
 <translation id="2972581237482394796">ເຮັດຄືນ</translation>
 <translation id="2977665033722899841"><ph name="ROW_NAME" />, ເລືອກແລ້ວໃນປັດຈຸບັນ. <ph name="ROW_CONTENT" /></translation>
@@ -874,6 +881,7 @@
 <translation id="3249151924975132674">ສິນເຊື່ອນັກສຶກສາ ແລະ ການເງິນວິທະຍາໄລ</translation>
 <translation id="3249845759089040423">ກຣູຟີ</translation>
 <translation id="3250640885957938546">ການໂຄສະນາ ແລະ ການຕະຫຼາດ</translation>
+<translation id="3251133337102041130">Government Legal</translation>
 <translation id="3252266817569339921">ພາສາຝຣັ່ງ</translation>
 <translation id="3254301855501243548">18 x 22 ນິ້ວ</translation>
 <translation id="3256863843508922226">ການກະສຽນ ແລະ ເງິນເບ້ຍບຳນານ</translation>
@@ -886,6 +894,7 @@
 <translation id="3270156322180235608">ການເດີນທາງທາງອາກາດ</translation>
 <translation id="3270847123878663523">ປ່ຽນ​ກັບ​ຄືນຄໍາສັ່ງຈັດລໍາດັບຄືນ</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> ຕ້ອງການເຊື່ອມຕໍ່</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">ອົງການຂອງທ່ານ, <ph name="ENROLLMENT_DOMAIN" />, ໄດ້ສົ່ງຂໍ້ມູນຈຳນວນໜຶ່ງໄປໃຫ້ເວັບໄຊຕໍ່ໄປນີ້ແລ້ວ ເຊັ່ນ: ການຕັ້ງຄ່າ ຫຼື ນະໂຍບາຍ.</translation>
 <translation id="3282497668470633863">ເພີ່ມຊື່ໃນບັດ</translation>
 <translation id="3286372614333682499">ແນວຕັ້ງ</translation>
@@ -988,6 +997,7 @@
 <translation id="3531780078352352885">ແຜ່ນວຽກ</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> ຕ້ອງການໃຊ້ໄມໂຄຣໂຟນຂອງທ່ານ</translation>
 <translation id="3533328374079021623">ກ່ອງຈົດໝາຍ 5</translation>
+<translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542768452570884558">ເປີດລິ້ງຢູ່ໃນໜ້າຕ່າງໃຫມ່</translation>
 <translation id="3547746132308051926">20 x 24 ນິ້ວ</translation>
 <translation id="3550112004925580947">ອຸດສາຫະກໍາບໍລິການ</translation>
@@ -1098,6 +1108,7 @@
 <translation id="3787705759683870569">ໝົດອາຍຸ <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="3789155188480882154">ຂະໜາດ 16</translation>
 <translation id="3789841737615482174">​ຕິດ​ຕັ້ງ</translation>
+<translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> ນິ້ວ)</translation>
 <translation id="3793574014653384240">ຈຳນວນ ແລະ ສາເຫດຂອງການຂັດຂ້ອງທີ່ເກີດຂຶ້ນເມື່ອບໍ່ດົນມານີ້</translation>
 <translation id="3795344968043407227">ດົນຕີອິນດີ ແລະ ແອວເທີແນດທີບ</translation>
 <translation id="3799805948399000906">ຂໍຟອນແລ້ວ</translation>
@@ -1173,6 +1184,7 @@
 <translation id="4030383055268325496">ປ່ຽນ​ກັບ​ຄືນຄໍາສັ່ງເພີ່ມ</translation>
 <translation id="4031179711345676612">ອະນຸຍາດໄມໂຄຣໂຟນແລ້ວ</translation>
 <translation id="4040350669425716613">ວິທະຍາໄລ ແລະ ມະຫາວິທະຍາໄລ</translation>
+<translation id="4047351652147966654">18 x 24 ນິ້ວ</translation>
 <translation id="405399507749852140">ຮັບການແຈ້ງເຕືອນຫາກມີການຫຼຸດລາຄາຢູ່ເວັບໄຊໃດກໍຕາມ</translation>
 <translation id="4056223980640387499">ສີນໍ້າຕານດໍາ</translation>
 <translation id="4063063121357725926">ໃຫ້ Google ຊ່ວຍທ່ານຊອກຫາສ່ວນຫຼຸດສຳລັບກະຕ່າຂອງທ່ານ</translation>
@@ -1487,6 +1499,7 @@
 <translation id="4813512666221746211">ເຄືອຂ່າຍຜິດພາດ</translation>
 <translation id="4816492930507672669">ຈັດພໍດີກັບຫນ້າ</translation>
 <translation id="4819347708020428563">ແກ້ໄຂຄຳອະທິບາຍຄວາມເຫັນໃນມຸມມອງເລີ່ມຕົ້ນບໍ?</translation>
+<translation id="4823325221257637040">ກຳລັງເລີ່ມ</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດ Tab ຈາກນັ້ນກົດ Enter ເພື່ອສ້າງ Google Sheet ໃໝ່ໄດ້ຢ່າງວ່ອງໄວ</translation>
 <translation id="4825507807291741242">ຊົງພະລັງ</translation>
 <translation id="483241715238664915">ເປີດໃຊ້ຄຳເຕືອນ</translation>
@@ -1602,6 +1615,7 @@
 <translation id="5093232627742069661">ພັບແບບຕົວ Z</translation>
 <translation id="5094747076828555589">ເຊີບເວີນີ້ບໍ່ສາມາດພິສູດໄດ້ວ່າ ມັນແມ່ນ <ph name="DOMAIN" />; ໃບຢັ້ງຢືນຄວາມປອດໄພຂອງມັນບໍ່ໄດ້ຮັບການເຊື່ອໝັ້ນຈາກ Chromium. ອັນນີ້ອາດຈະເຮັດໃຫ້ເກີດມີການປັບຕັ້ງຄ່າຜິດ ຫຼືຜູ້ໂຈມຕີອາດຈະດັກເອົາການເຊື່ອມຕໍ່ຂອງທ່ານ.</translation>
 <translation id="5097099694988056070">ສະຖິຕິອຸປະກອນ ເຊັ່ນ: ການໃຊ້ CPU/RAM</translation>
+<translation id="5097468150760963273">27 x 39 ນິ້ວ</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">ເວັບໄຊບໍ່ປອດໄພ</translation>
 <translation id="5109892411553231226">ຈັດການວິທີການຈ່າຍເງິນ</translation>
@@ -1926,6 +1940,7 @@
 <translation id="5953516610448771166">ບໍ່ສາມາດໃຊ້ຄຳບັນຍາຍສົດສຳລັບມີເດຍນີ້ໄດ້. ເພື່ອຮັບຄຳບັນຍາຍ, ໃຫ້ບລັອກ <ph name="CONTENT_SETTINGS" /> ສຳລັບເວັບໄຊນີ້.</translation>
 <translation id="5955063559762970069">ໂຮງແຮມ ແລະ ບ່ອນພັກເຊົາ</translation>
 <translation id="5963413905009737549">ຕອນ</translation>
+<translation id="5967260682280773804">36 x 48 ນິ້ວ</translation>
 <translation id="5967592137238574583">ແກ້ໄຂຂໍ້ມູນຕິດຕໍ່</translation>
 <translation id="5967867314010545767">ເອົາ​ອອກຈາກ​ປະ​ຫວັດ</translation>
 <translation id="5968022600320704045">ບໍ່​ມີ​ຜົນ​​ການ​ຊອກຫາ​</translation>
@@ -1997,6 +2012,7 @@
 <translation id="6127379762771434464">ລຶບລາຍການອອກແລ້ວ</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມກ່ຽວກັບໂໝດບໍ່ເປີດເຜີຍຕົວຕົນໃນ Chrome<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">ນາມສະກຸນໄຟລ໌ຫວ່າງເປົ່າ ຫຼື ມີຮູບແບບບໍ່ຖືກຕ້ອງ.</translation>
+<translation id="6139975341602920272">17 x 22 ນິ້ວ</translation>
 <translation id="6146055958333702838">ກວດເບິ່ງສາຍໄຟ ແລະປິດເປີດເຣົາເຕີ, ໂມເດັມ, ຫຼືອຸປະກອນເຄືອຂ່າຍ
     ທີ່ທ່ານອາດກຳລັງໃຊ້ຢູ່ຄືນໃໝ່.</translation>
 <translation id="614940544461990577">ລອງ:</translation>
@@ -2019,6 +2035,7 @@
 <translation id="6196640612572343990">ບລັອກຄຸກກີ້ພາກສ່ວນທີສາມ</translation>
 <translation id="6197648101609735209">89 x 89 ມມ</translation>
 <translation id="6203231073485539293">ກວດເບິ່ງການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານ.</translation>
+<translation id="6212314149070368045">US Fanfold</translation>
 <translation id="6218753634732582820">ເອົາ​ທີ່​ຢູ່​ອອກ​​ຈາກ Chromium ບໍ?</translation>
 <translation id="622039917539443112">ພັບແບບຂະໜານ</translation>
 <translation id="6221345481584921695">ເມື່ອບໍ່ດົນມານີ້ Google Safe Browsing <ph name="BEGIN_LINK" />ໄດ້ກວດພົບມາລແວ<ph name="END_LINK" /> ຢູ່ເທິງ <ph name="SITE" />. ເວັບໄຊທ໌ທີ່ປົກກະຕິແລ້ວນັ້ນມີຄວາມປອດໄພແມ່ນບາງຄັ້ງຈະຕິດມາລແວ. ເນື້ອໃນທີ່ປອງຮ້າຍມາຈາກ <ph name="SUBRESOURCE_HOST" />, ຜູ້ຈໍາໜ່າຍມາລແວທີ່ຮູ້ຈັກ.</translation>
@@ -2045,6 +2062,7 @@
 <translation id="627746635834430766">ເພື່ອຈ່າຍໄດ້ໄວກວ່າໃນຄັ້ງຕໍ່ໄປ, ກະລຸນາບັນທຶກບັດ ແລະ ທີ່ຢູ່ຮຽກເກັບເງິນຂອງທ່ານໄວ້ໃນບັນຊີ Google ຂອງທ່ານ.</translation>
 <translation id="6279183038361895380">ກົດ |<ph name="ACCELERATOR" />| ເພື່ອສະແດງເຄີເຊີຂອງທ່ານ</translation>
 <translation id="6280223929691119688">ບໍ່ສາມາດສົ່ງຫາທີ່ຢູ່ນີ້ໄດ້. ກະລຸນາເລືອກທີ່ຢູ່ອື່ນ.</translation>
+<translation id="6284292079994426700">26 x 38 ນິ້ວ</translation>
 <translation id="6285507000506177184">ປຸ່ມຈັດການການດາວໂຫຼດໃນ Chrome, ກົດ Enter ເພື່ອຈັດການໄຟລ໌ທີ່ທ່ານດາວໂຫຼດມາແລ້ວໃນ Chrome</translation>
 <translation id="6289939620939689042">ສີໜ້າເຈ້ຍ</translation>
 <translation id="6290238015253830360">ບົດຄວາມທີ່ແນະນຳຂອງທ່ານຈະປາກົດຢູ່ບ່ອນນີ້</translation>
@@ -2098,6 +2116,7 @@
 <translation id="6410264514553301377">ປ້ອນວັນທີໝົດອາຍຸ ແລະ CVC ສຳລັບ <ph name="CREDIT_CARD" /></translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">Chromium ສາມາດຊ່ວຍທ່ານປົກປ້ອງບັນຊີ Google ຂອງທ່ານ ແລະ ປ່ຽນລະຫັດຜ່າຂອງທ່ານໄດ້.</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">ເນື້ອ​ໃນ</translation>
 <translation id="6427730057873428458">ພັບທົບ</translation>
 <translation id="6428450836711225518">ຢັ້ງຢືນເບີໂທລະສັບຂອງທ່ານ</translation>
@@ -2111,6 +2130,7 @@
 <translation id="6443406338865242315">ສ່ວນຂະຫຍາຍ ແລະ ປລັກອິນທີ່ທ່ານຕິດຕັ້ງ</translation>
 <translation id="6446608382365791566">ເພີ່ມຂໍ້ມູນເພີ່ມເຕີມ</translation>
 <translation id="6447842834002726250">ຄຸກກີ້</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">Envelope Chou 40</translation>
 <translation id="6451458296329894277">ຢືນຢັນການສົ່ງແບບຟອມຄືນໃໝ່</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2277,6 +2297,7 @@
 <translation id="6915804003454593391">ຜູ້​ໃຊ້​:</translation>
 <translation id="6916954549222464607">ການວາງແຜນ ແລະ ການຈັດການທາງການເງິນ</translation>
 <translation id="6917795328362592458">ພົບລະຫັດຜ່ານທີ່ທ່ານຫາກໍໃຊ້ນັ້ນໃນການຮົ່ວໄຫຼຂໍ້ມູນ. ເພື່ອຮັກສາຄວາມປອດໄພໃຫ້ບັນຊີຂອງທ່ານ, ຕົວຈັດການລະຫັດຜ່ານແນະນຳໃຫ້ກວດສອບລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ຂອງທ່ານ.</translation>
+<translation id="6925267999184670015">North American B+</translation>
 <translation id="6934672428414710184">ຊື່ນີ້ມາຈາກບັນຊີ Google ຂອງທ່ານ</translation>
 <translation id="6936976777388162184">ອຸປະກອນນີ້ເປັນສ່ວນໜຶ່ງຂອງຊຸດ ແລະ ບໍ່ສາມາດລົງທະບຽນກັບ Kiosk ແລະ Signage Upgrade ໄດ້.</translation>
 <translation id="6939469646605424232">ລະຄອນໂທລະທັດ</translation>
@@ -2326,6 +2347,7 @@
 <translation id="7030436163253143341">ໃບຮັບຮອງບໍ່ຖືກຕ້ອງ</translation>
 <translation id="7031646650991750659">ແອັບ Google Play ໃດທີ່ທ່ານຕິດຕັ້ງແລ້ວ</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດ Tab ຈາກນັ້ນກົດ Enter ເພື່ອຈັດການການຕັ້ງຄ່າຄວາມເປັນສ່ວນຕົວບັນຊີ Google ຂອງທ່ານ</translation>
+<translation id="7048095965575426564">European Fanfold</translation>
 <translation id="7050187094878475250">ທ່ານ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ບັນ​ລຸ <ph name="DOMAIN" />, ແຕ່​ເຊີບ​ເວີ​ໄດ້​ນຳ​ສະ​ເໜີ​ໃບ​ຢັ້ງ​ຢືນ​ທີ່​ມີ​ໄລ​ຍະ​ຄວາມ​ສາ​ມາດ​ນຳ​ໃຊ້​ໄດ້​ຍາວ​ເກີນ​ໄປ​ທີ່​ຈະ​ເຊື່ອ​ຖື​ໄດ້.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{ບໍ່ສາມາດບັນທຶກບັດນີ້ໄວ້ໄດ້ໃນຕອນນີ້}other{ບໍ່ສາມາດບັນທຶກບັດເຫຼົ່ານີ້ໄວ້ໄດ້ໃນຕອນນີ້}}</translation>
 <translation id="7053983685419859001">ບລັອກ</translation>
@@ -2387,6 +2409,7 @@
 <translation id="7192203810768312527">ຂະຫຍາຍ <ph name="SIZE" />. ບາງເວັບໄຊອາດຈະໂຫຼດຊ້າກວ່າໃນຄັ້ງຕໍ່ໄປທີ່ທ່ານເຂົ້າເບິ່ງ.</translation>
 <translation id="7193661028827781021">ການອ້າງອີງ</translation>
 <translation id="719464814642662924">ວີ​ຊາ</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">ຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານສາມາດເຫັນ:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດ Tab ຈາກນັ້ນ Enter ເພື່ອເປີດແຖບທີ່ບໍ່ເປີດເຜີຍຕົວຕົນໃໝ່ເພື່ອຊອກຫາແບບສ່ວນຕົວ</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> ບໍ່ປະຕິບັດຕາມມາດຕະຖານຄວາມປອດໄພ.</translation>
@@ -2487,12 +2510,14 @@
 <translation id="7421067045979951561">ຕົວຈັດການໂປຣໂຕຄໍ</translation>
 <translation id="7426022697669111648">ປຸ່ມເບິ່ງປະຫວັດ Chrome ຂອງທ່ານ, ກົດ Enter ເພື່ອເບິ່ງ ແລະ ຈັດການປະຫວັດການທ່ອງເວັບຂອງທ່ານໃນການຕັ້ງຄ່າ Chrome</translation>
 <translation id="7427366580982928791">ຄວາມປອດໄພທາງອິນເຕີເນັດຂອງເດັກນ້ອຍ</translation>
+<translation id="7429429656042611765">Executive</translation>
 <translation id="7437289804838430631">ເພີ່ມຂໍ້ມູນຕິດຕໍ່</translation>
 <translation id="7437490109271760224">ເກມໄພ້</translation>
 <translation id="7440140511386898319">ສຳຫຼວດໃນເວລາອອບລາຍ</translation>
 <translation id="7441627299479586546">ຫົວຂໍ້ນະະໂຍບາຍບໍ່ຖືກຕ້ອງ</translation>
 <translation id="7442725080345379071">ສີ​ສົ້ມ​ຈາງ</translation>
 <translation id="7445762425076701745">ເອກະລັກຂອງເຊີບເວີທີ່ທ່ານເຊື່ອມຕໍ່ກັບບໍ່ສາມາດຮັບຮອງໄດ້ເຕັມທີ່. ທ່ານເຊື່ອມຕໍ່ກັບເຊີບເວີໂດຍການໃຊ້ແຕ່ຊື່ທີ່ໃຊ້ໄດ້ຢູ່ພາຍໃນເຄືອຂ່າຍຂອງທ່ານເທົ່ານັ້ນ, ເຊິ່ງ​ໜ່ວຍ​ງານອອກໃບຢັ້ງຢືນທາງນອກບໍ່ມີທາງທີ່ຈະຮັບຮອງຄວາມເປັນເຈົ້າຂອງໄດ້. ເນື່ອງຈາກບາງ​ໜ່ວຍ​ງານອອກໃບຢັ້ງຢືນຈະອອກໃບຢັ້ງຢືນໃຫ້ກັບຊື່ເຫຼົ່ານີ້ ໂດຍບໍ່ຄໍານຶງຖິງວ່າ ຈະມີວິທີທາງທີ່ຈະຮັບປະກັນໃຫ້ທ່ານເຊື່ອມຕໍ່ກັບເວັບໄຊທ໌ທີ່ຕັ້ງໃຈໄວ້ ແລະບໍ່ແມ່ນຕົວໂຈມຕີໄດ້.</translation>
+<translation id="7447625772313191651"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> ມມ)</translation>
 <translation id="7451311239929941790"><ph name="BEGIN_LINK" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK" />ກ່ຽວກັບບັນຫານີ້.</translation>
 <translation id="7455133967321480974">ໃຊ້ມາດຕະຖານທົ່ວໄປ (ບລັອກ​)</translation>
 <translation id="745640750744109667">A0x3</translation>
@@ -2692,6 +2717,7 @@
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດ Tab ຈາກນັ້ນກົດ Enter ເພື່ອສຶກສາກ່ຽວກັບຄຸນສົມບັດ Chrome</translation>
 <translation id="7950027195171824198">ຈັດການການຕັ້ງຄ່າຄຸກກີ້ຂອງທ່ານໃນການຕັ້ງຄ່າ Chrome</translation>
 <translation id="7951415247503192394">(32-ບິດ)</translation>
+<translation id="7952192831285741665">European EDP</translation>
 <translation id="7953569069500808819">ຫຍິບຂອບເທິງສຸດ</translation>
 <translation id="7956713633345437162">ບຸກມາກສ໌ມື​ຖື</translation>
 <translation id="7961015016161918242">ບໍ່​ເລີຍ</translation>
@@ -2777,6 +2803,7 @@
 <translation id="8153865548451212769">{0,plural, =1{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ດາວໂຫຼດໄຟລ໌ນີ້ໃສ່ໃນ <ph name="DESTINATION_NAME" />}other{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ດາວໂຫຼດໄຟລ໌ເຫຼົ່ານີ້ໃສ່ໃນ <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">ອອກຈາກເວັບໄຊ</translation>
 <translation id="8163866351304776260">ເຈາະຮູຢູ່ເບື້ອງຍ້າຍສີ່ຮູ</translation>
+<translation id="8175330382720204696">Government Letter</translation>
 <translation id="8175796834047840627">Chrome ກຳລັງສະເໜີບັນທຶກບັດຂອງທ່ານໄວ້ໃນບັນຊີ Google ຂອງທ່ານ ເພາະວ່າທ່ານເຂົ້າສູ່ລະບົບຢູ່. ທ່ານສາມາດປ່ຽນລັກສະນະການນໍາໃຊ້ນີ້ໄດ້ໃນການຕັ້ງຄ່າ.</translation>
 <translation id="8176440868214972690">ຜູ້ເບິ່ງແຍງລະບົບຂອງອຸປະກອນນີ້ໄດ້ສົ່ງຂໍ້ມູນຈຳນວນໜຶ່ງໄປໃຫ້ເວັບໄຊຕໍ່ໄປນີ້ແລ້ວ ເຊັ່ນ: ການຕັ້ງຄ່າ ຫຼື ນະໂຍບາຍ.</translation>
 <translation id="8184538546369750125">ໃຊ້ຄ່າມາດຕະຖານທົ່ວ​ໂລກ (ອະນຸຍາດ​)</translation>
@@ -2796,6 +2823,7 @@
 <translation id="8218327578424803826">ທີ່​ຕັ້ງ​ທີ່​ກຳ​ນົດ​ໃຫ້</translation>
 <translation id="8225771182978767009">ບຸກຄົນຜູ້ທີ່ຕັ້ງຄ່າຄອມພິວເຕີນີ້ໄດ້ເລືອກບລັອກເວັບໄຊນີ້ໄວ້.</translation>
 <translation id="8228419419708659934">ມຸມມອງສອງໜ້າ</translation>
+<translation id="8229288958566709448"><ph name="WIDTH" /> x <ph name="HEIGHT" /> ມມ</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8231564988424805352">ເກມກິລາ</translation>
 <translation id="8232343881378637145">ອຸນຫະພູມຂອງແພລດຟອມ</translation>
@@ -2887,6 +2915,7 @@
 <translation id="8449155699563577224">17 x 24 ນິ້ວ</translation>
 <translation id="8449836157089738489">ເປີດທັງໝົດໃນກຸ່ມແຖບໃໝ່</translation>
 <translation id="8457125768502047971">ບໍ່ມີກຳນົດ</translation>
+<translation id="8458202188076138974">Letter Extra</translation>
 <translation id="8461694314515752532">ເຂົ້າລະຫັດຂໍ້ມູນທີ່ຊິ້ງດ້ວຍລະຫັດຜ່ານການຊິ້ງຂໍ້ມູນຂອງທ່ານເອງ</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 ບັດເຄຣດິດ}other{# ບັດເຄຣດິດ}}</translation>
 <translation id="8468358362970107653">Envelope C3</translation>
@@ -3093,6 +3122,7 @@
 <translation id="9042617223719777575">ຄວາມຈຸຫຼາຍ</translation>
 <translation id="9044359186343685026">ໃຊ້ Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24 x 36 ນິ້ວ</translation>
 <translation id="9049981332609050619">ທ່ານໄດ້ພະຍາຍາມເຂົ້າຫາ <ph name="DOMAIN" />, ແຕ່ເຊີບເວີໄດ້ນໍາສະເໜີໃບຢັ້ງຢືນທີ່ໃຊ້ບໍ່ໄດ້.</translation>
 <translation id="9050666287014529139">ວະລີຜ່ານ</translation>
 <translation id="9056953843249698117">ຮ້ານ</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 0d42ab64..ac16def3 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -1373,6 +1373,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, энэ хуудсыг Google Орчуулагчаар орчуулахын тулд эхлээд Таб дээр, дараа нь Enter дарна уу</translation>
 <translation id="4514308731478712184">Аяллуудыг унтраах</translation>
 <translation id="4515275063822566619">Карт, хаягийг Chrome болон Google Бүртгэлээсээ (<ph name="ACCOUNT_EMAIL" />) харах боломжтой. Та тэдгээрийг <ph name="BEGIN_LINK" />Тохиргоо<ph name="END_LINK" /> хэсэгт хянах боломжтой.</translation>
+<translation id="4520048001084013693">Энэ файлыг татахыг администраторын бодлогоор блоклосон</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> мм (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Хаан дугтуй</translation>
 <translation id="4521916730539354575">Зүүн талын тавиур</translation>
@@ -2363,6 +2364,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Энэ хаяг руу хүргэх боломжгүй тул өөр хаяг сонгоно уу.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Байршуулахыг блоклосон</translation>
 <translation id="7132939140423847331">Таны админ энэ өгөгдлийг хуулахыг хориглосон.</translation>
 <translation id="7135130955892390533">Төлөвийг харуулах</translation>
 <translation id="7138472120740807366">Хүргэлтийн арга</translation>
@@ -2593,6 +2595,7 @@
 <translation id="7658239707568436148">Болих</translation>
 <translation id="7659327900411729175">Каку дугтуй 8</translation>
 <translation id="7659878911471462949">Баярын нулимс</translation>
+<translation id="766014026101194726">{0,plural, =1{Энэ файлыг байршуулахыг администраторын бодлогоор блоклосон}other{# файлыг байршуулахыг администраторын бодлогоор блоклосон}}</translation>
 <translation id="7662298039739062396">Тохируулгыг өргөтгөлөөр хянадаг</translation>
 <translation id="7663736086183791259">Гэрчилгээ <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Нууцлалтай горимд зөвшөөрдөггүй</translation>
@@ -2687,6 +2690,7 @@
 <translation id="7939744324936979484">Ардын, үндэсний хөгжим</translation>
 <translation id="7941628148012649605">Чоу дугтуй 4</translation>
 <translation id="7942349550061667556">Улаан</translation>
+<translation id="7943397946612013052">Татахыг блоклосон</translation>
 <translation id="7943893128817522649">Олон файлыг автоматаар татахыг хүсэх боломжтой</translation>
 <translation id="7947285636476623132">Хүчингүй болох жилийг шалгаад дахин оролдоно уу</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome-н онцлогуудын талаар мэдэж авахын тулд эхлээд Tab, дараа нь Enter дээр дарна уу</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 0dd77310..f1a73b6 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -1373,6 +1373,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan Tab kemudian Enter untuk menterjemahkan halaman ini dengan Google Terjemah</translation>
 <translation id="4514308731478712184">Matikan Perjalanan</translation>
 <translation id="4515275063822566619">Kad dan alamat adalah daripada Chrome dan Akaun Google anda (<ph name="ACCOUNT_EMAIL" />). Anda boleh mengurus kad dan alamat ini dalam <ph name="BEGIN_LINK" />Tetapan<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Pemuatan turun fail ini disekat oleh dasar pentadbir</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Sampul Monarki</translation>
 <translation id="4521916730539354575">Dulang Kiri</translation>
@@ -2364,6 +2365,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Tidak dapat menghantar ke alamat ini. Pilih alamat lain.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Pemuatan naik disekat</translation>
 <translation id="7132939140423847331">Pentadbir anda telah melarang data ini daripada disalin.</translation>
 <translation id="7135130955892390533">Tunjukkan status</translation>
 <translation id="7138472120740807366">Kaedah penghantaran</translation>
@@ -2594,6 +2596,7 @@
 <translation id="7658239707568436148">Batal</translation>
 <translation id="7659327900411729175">Sampul Kaku 8</translation>
 <translation id="7659878911471462949">Air Mata Kegembiraan</translation>
+<translation id="766014026101194726">{0,plural, =1{Pemuatan naik fail ini disekat oleh dasar pentadbir}other{Pemuatan naik # fail disekat oleh dasar pentadbir}}</translation>
 <translation id="7662298039739062396">Tetapan dikawal oleh sambungan</translation>
 <translation id="7663736086183791259">Sijil <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Tidak dibenarkan dalam Inkognito</translation>
@@ -2688,6 +2691,7 @@
 <translation id="7939744324936979484">Muzik rakyat &amp; tradisional</translation>
 <translation id="7941628148012649605">Sampul Chou 4</translation>
 <translation id="7942349550061667556">Merah</translation>
+<translation id="7943397946612013052">Pemuatan turun disekat</translation>
 <translation id="7943893128817522649">Boleh meminta untuk memuat turun berbilang fail secara automatik</translation>
 <translation id="7947285636476623132">Semak tahun tamat tempoh anda dan cuba lagi</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan kekunci Tab kemudian Enter untuk mengetahui tentang ciri Chrome</translation>
diff --git a/components/strings/components_strings_my.xtb b/components/strings/components_strings_my.xtb
index 7833a7c..237c8f6 100644
--- a/components/strings/components_strings_my.xtb
+++ b/components/strings/components_strings_my.xtb
@@ -1373,6 +1373,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />၊ ဤစာမျက်နှာကို Google Translate ဖြင့်ဘာသာပြန်ရန် Tab နှိပ်ပြီးနောက် Enter နှိပ်ပါ</translation>
 <translation id="4514308731478712184">‘ခရီးစဉ်များ’ ပိတ်ရန်</translation>
 <translation id="4515275063822566619">ကဒ်နှင့် လိပ်စာများသည် Chrome နှင့် သင်၏ Google အကောင့် (<ph name="ACCOUNT_EMAIL" />) မှဖြစ်သည်။ ၎င်းတို့ကို <ph name="BEGIN_LINK" />ဆက်တင်များ<ph name="END_LINK" /> တွင် စီမံခန့်ခွဲနိုင်သည်။</translation>
+<translation id="4520048001084013693">ဤဖိုင် ဒေါင်းလုဒ်လုပ်ခြင်းကို စီမံခန့်ခွဲသူမူဝါဒက ပိတ်ထားသည်</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Monarch စာအိတ်</translation>
 <translation id="4521916730539354575">ဘယ်ဘက်ဗန်း</translation>
@@ -2363,6 +2364,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">ဤလိပ်စာသို့ ပို့၍မရပါ။ အခြားလိပ်စာတစ်ခုကို ရွေးပါ။</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">အပ်လုဒ်လုပ်ခြင်း ပိတ်ထားသည်</translation>
 <translation id="7132939140423847331">ဤဒေတာကူးယူခြင်းကို သင့်စီမံခန့်ခွဲသူက တားမြစ်ထားသည်။</translation>
 <translation id="7135130955892390533">အခြေအနေ ပြရန်</translation>
 <translation id="7138472120740807366">ပို့ရန် နည်းလမ်း</translation>
@@ -2594,6 +2596,7 @@
 <translation id="7658239707568436148">မလုပ်တော့</translation>
 <translation id="7659327900411729175">Kaku 8 စာအိတ်</translation>
 <translation id="7659878911471462949">ဝမ်းသာ မျက်ရည်</translation>
+<translation id="766014026101194726">{0,plural, =1{ဤဖိုင် အပ်လုဒ်လုပ်ခြင်းကို စီမံခန့်ခွဲသူမူဝါဒက ပိတ်ထားသည်}other{ဖိုင် # ဖိုင် အပ်လုဒ်လုပ်ခြင်းကို စီမံခန့်ခွဲသူမူဝါဒက ပိတ်ထားသည်}}</translation>
 <translation id="7662298039739062396">နောက်ဆက်တွဲတစ်ခုက ထိန်းချုပ်ထားသည့် ဆက်တင်</translation>
 <translation id="7663736086183791259">အသိအမှတ်ပြုလက်မှတ် <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">ရုပ်ဖျက်မုဒ်တွင် ခွင့်မပြုပါ</translation>
@@ -2688,6 +2691,7 @@
 <translation id="7939744324936979484">ကျေးလက်နှင့် ရိုးရာ တေးဂီတ</translation>
 <translation id="7941628148012649605">Chou 4 စာအိတ်</translation>
 <translation id="7942349550061667556">အနီရောင်</translation>
+<translation id="7943397946612013052">ဒေါင်းလုဒ်လုပ်ခြင်း ပိတ်ထားသည်</translation>
 <translation id="7943893128817522649">ဖိုင်အများအပြားကို အလိုအလျောက်ဒေါင်းလုဒ်လုပ်ရန် ခွင့်တောင်းနိုင်သည်</translation>
 <translation id="7947285636476623132">သင့်ကုန်ဆုံးမည့်နှစ်ကို ကြည့်ပြီး ပြန်စမ်းကြည့်ပါ</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />၊ Chrome ဝန်ဆောင်မှုများအကြောင်း လေ့လာရန် ‘တဘ်’ နှိပ်ပြီးနောက် Enter ခလုတ် နှိပ်ပါ</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index 748e1a1..32ba949 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -1369,6 +1369,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google अनुवादक प्रयोग गरी यो पृष्ठ अनुवाद गर्न Tab थिच्नुहोस् अनि Enter थिच्नुहोस्</translation>
 <translation id="4514308731478712184">Journeys अफ गर्नुहोस्</translation>
 <translation id="4515275063822566619">कार्ड र ठेगानाहरू तपाईंको Chrome र Google खाता (<ph name="ACCOUNT_EMAIL" />) बाट प्राप्त भएका हुन्। तपाईं  <ph name="BEGIN_LINK" />सेटिङहरू<ph name="END_LINK" /> मा गई तिनीहरूलाई व्यवस्थित गर्न सक्नुहुन्छ।</translation>
+<translation id="4520048001084013693">एड्मिनले तोक्नुभएको नीतिअनुसार यो फाइल डाउनलोड गर्न पाइँदैन</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> मिलिमिटर (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Envelope Monarch</translation>
 <translation id="4521916730539354575">बायाँ ट्रे</translation>
@@ -2360,6 +2361,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">यो ठेगानामा ढुवानी गर्न सकिँदैन। कुनै अर्को ठेगाना चयन गर्नुहोस्।</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">फाइल अपलोड गर्न पाइँदैन</translation>
 <translation id="7132939140423847331">तपाईंका एड्मिनले लगाएको प्रतिबन्धका कारण यो डेटा कपी गर्न मिल्दैन।</translation>
 <translation id="7135130955892390533">स्थिति देखाउनुहोस्</translation>
 <translation id="7138472120740807366">डेलिभरीको विधि</translation>
@@ -2590,6 +2592,7 @@
 <translation id="7658239707568436148">रद्द गर्नुहोस्</translation>
 <translation id="7659327900411729175">Envelope Kaku 8</translation>
 <translation id="7659878911471462949">खुसीको आँसु</translation>
+<translation id="766014026101194726">{0,plural, =1{एड्मिनले तोक्नुभएको नीतिअनुसार यो फाइल अपलोड गर्न पाइँदैन}other{एड्मिनले तोक्नुभएको नीतिअनुसार # वटा फाइल अपलोड गर्न पाइँदैन}}</translation>
 <translation id="7662298039739062396">कुनै विस्तारले नियन्त्रित गरेको सेटिङ</translation>
 <translation id="7663736086183791259">प्रमाणपत्र <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">इन्कोग्निटो मोडमा अनुमति दिइँदैन</translation>
@@ -2684,6 +2687,7 @@
 <translation id="7939744324936979484">लोक तथा परम्परागत सङ्गीत</translation>
 <translation id="7941628148012649605">Envelope Chou 4</translation>
 <translation id="7942349550061667556">रातो</translation>
+<translation id="7943397946612013052">फाइल डाउनलोड गर्न पाइँदैन</translation>
 <translation id="7943893128817522649">एकभन्दा बढी फाइल स्वतः डाउनलोड गर्ने अनुमति माग्न सक्छ</translation>
 <translation id="7947285636476623132">आफ्नो म्याद सकिने वर्षको जाँच गरी फेरि प्रयास गर्नुहोस्</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome का सुविधाहरूका बारेमा जान्न Tab थिच्नुहोस् अनि Enter थिच्नुहोस्</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index afd4f44..35ea6c8 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -1369,6 +1369,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Translate ବ୍ୟବହାର କରି ଏହି ପୃଷ୍ଠାକୁ ଅନୁବାଦ କରିବାକୁ Tab କରି Enter ଦବାନ୍ତୁ</translation>
 <translation id="4514308731478712184">ସନ୍ଧାନ ବନ୍ଦ କରନ୍ତୁ</translation>
 <translation id="4515275063822566619">କାର୍ଡ ଓ ଠିକଣାଗୁଡ଼ିକ ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟ (<ph name="ACCOUNT_EMAIL" />)ରୁ ଆସିଛି। ଆପଣ ସେଗୁଡ଼ିକୁ <ph name="BEGIN_LINK" />ସେଟିଂସ୍‍<ph name="END_LINK" />ରେ ପରିଚାଳନ କରିପାରିବେ।</translation>
+<translation id="4520048001084013693">ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ଅନୁଯାୟୀ ଏହି ଫାଇଲ ଡାଉନଲୋଡ କରିବାକୁ ବ୍ଲକ କରାଯାଇଛି</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> ମି.ମି. (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">ଏନଭେଲପ ମୋନାର୍କ</translation>
 <translation id="4521916730539354575">ବାମପଟ ଟ୍ରେ</translation>
@@ -2360,6 +2361,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">ଏହି ଠିକଣାକୁ ପଠାଯାଇପାରିବ ନାହିଁ। ଏକ ଭିନ୍ନ ଠିକଣା ଚୟନ କରନ୍ତୁ।</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">ଅପଲୋଡ କରିବା ବ୍ଲକ କରାଯାଇଛି</translation>
 <translation id="7132939140423847331">ଆପଣଙ୍କ ଆଡମିନ ଏହି ଡାଟାକୁ କପି କରିବାରୁ ପ୍ରତିବନ୍ଧିତ କରିଛନ୍ତି।</translation>
 <translation id="7135130955892390533">ସ୍ଥିତି ଦେଖାନ୍ତୁ</translation>
 <translation id="7138472120740807366">ଡେଲିଭରୀ ପଦ୍ଧତି</translation>
@@ -2590,6 +2592,7 @@
 <translation id="7658239707568436148">ବାତିଲ୍</translation>
 <translation id="7659327900411729175">ଏନଭେଲପ କାକୁ 8</translation>
 <translation id="7659878911471462949">ଆନନ୍ଦର ଅଶ୍ରୁ</translation>
+<translation id="766014026101194726">{0,plural, =1{ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ଅନୁଯାୟୀ ଏହି ଫାଇଲ ଅପଲୋଡ କରିବାକୁ ବ୍ଲକ କରାଯାଇଛି}other{ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ଅନୁଯାୟୀ #ଟି ଫାଇଲ ଅପଲୋଡ କରିବାକୁ ବ୍ଲକ କରାଯାଇଛି}}</translation>
 <translation id="7662298039739062396">ଗୋଟିଏ ଏକ୍ସଟେନ୍‍ସନ୍ ଦ୍ଵାରା ସେଟିଂକୁ ନିୟନ୍ତ୍ରଣ କରାଯାଉଛି</translation>
 <translation id="7663736086183791259">ସାର୍ଟିଫିକେଟ୍ <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">ଇନକଗ୍ନିଟୋ ମୋଡରେ ଅନୁମତି ଦିଆଯାଇନାହିଁ</translation>
@@ -2684,6 +2687,7 @@
 <translation id="7939744324936979484">ଫୋକ ଏବଂ ପାରମ୍ପରିକ ମ୍ୟୁଜିକ</translation>
 <translation id="7941628148012649605">ଏନଭେଲପ ଚାଉ 4</translation>
 <translation id="7942349550061667556">ନାଲି</translation>
+<translation id="7943397946612013052">ଡାଉନଲୋଡ କରିବା ବ୍ଲକ କରାଯାଇଛି</translation>
 <translation id="7943893128817522649">ଏକାଧିକ ଫାଇଲକୁ ସ୍ୱଚାଳିତ ଭାବେ ଡାଉନଲୋଡ୍ କରିବାକୁ ସାଇଟ୍ ପଚାରିପାରେ</translation>
 <translation id="7947285636476623132">ଆପଣଙ୍କ କ୍ରେଡିଟ୍‍ କାର୍ଡ ଅବଧି ସମାପ୍ତିର ବର୍ଷ ଦେଖନ୍ତୁ ଏବଂ ପୁଣି ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chromeର ଫିଚରଗୁଡ଼ିକ ବିଷୟରେ ଜାଣିବା ପାଇଁ Tab କରି Enter ଦବାନ୍ତୁ</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 37f7f9a7..7e05999d 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -137,6 +137,7 @@
 <translation id="129553762522093515">Fechadas recentemente</translation>
 <translation id="1296930489679394997">Vendas</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />Tente limpar os cookies<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Legal Extra</translation>
 <translation id="1301324364792935241">Verifique suas configurações de DNS seguro</translation>
 <translation id="1307966114820526988">Recursos obsoletos</translation>
 <translation id="1308113895091915999">Oferta disponível</translation>
@@ -443,6 +444,7 @@
 <translation id="205212645995975601">Churrasco e grelhados</translation>
 <translation id="2053111141626950936">Páginas em <ph name="LANGUAGE" /> não serão traduzidas.</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{Quando este controle estiver ligado e o status estiver ativo, o Chrome determinará com qual grupo grande de pessoas, ou "coorte", sua atividade de navegação se parece mais. Os anunciantes podem selecionar anúncios para o grupo e sua atividade de navegação será armazenada no dispositivo de forma particular. Seu grupo é atualizado todos os dias.}=1{Quando este controle estiver ligado e o status estiver ativo, o Chrome determinará com qual grupo grande de pessoas, ou "coorte", sua atividade de navegação se parece mais. Os anunciantes podem selecionar anúncios para o grupo e sua atividade de navegação será armazenada no dispositivo de forma particular. Seu grupo é atualizado todos os dias.}one{Quando este controle estiver ligado e o status estiver ativo, o Chrome determinará com qual grupo grande de pessoas, ou "coorte", sua atividade de navegação se parece mais. Os anunciantes podem selecionar anúncios para o grupo e sua atividade de navegação será armazenada no dispositivo de forma particular. Seu grupo é atualizado a cada {NUM_DAYS} dia.}other{Quando este controle estiver ligado e o status estiver ativo, o Chrome determinará com qual grupo grande de pessoas, ou "coorte", sua atividade de navegação se parece mais. Os anunciantes podem selecionar anúncios para o grupo e sua atividade de navegação será armazenada no dispositivo de forma particular. Seu grupo é atualizado a cada {NUM_DAYS} dias.}}</translation>
+<translation id="2059202684901022309">22 x 34 pol.</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 sugestão}one{# sugestão}other{# sugestões}}</translation>
 <translation id="2066915425250589881">pedir para que elas sejam excluídas</translation>
 <translation id="2068528718802935086">Bebês e crianças</translation>
@@ -532,6 +534,7 @@
 <translation id="2277753418458118549">Mostrar detalhes da conexão</translation>
 <translation id="2283340219607151381">Salvar e preencher endereços</translation>
 <translation id="2283447177162560884">Item "<ph name="PAGE_TITLE" />" excluído</translation>
+<translation id="2286383991450886080">34 x 44 pol.</translation>
 <translation id="2288422996159078444">Tudo o que é digitado, as páginas que são acessadas e qualquer outra atividade na Web está sendo monitorado, e o conteúdo dos sites pode mudar sem que você saiba.</translation>
 <translation id="2289385804009217824">Cortar</translation>
 <translation id="2292556288342944218">O seu acesso à Internet está bloqueado</translation>
@@ -692,6 +695,7 @@
 <translation id="2709516037105925701">Preenchimento automático</translation>
 <translation id="2713444072780614174">Branco</translation>
 <translation id="2715612312510870559"><ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione "Tab" e depois "Enter" para gerenciar suas informações de pagamento e de cartão de crédito nas configurações do Chrome</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">Pressione |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| para sair da tela cheia</translation>
 <translation id="2721148159707890343">Solicitação bem-sucedida</translation>
 <translation id="2723669454293168317">Executar uma confirmação de segurança nas configurações do Chrome</translation>
@@ -699,6 +703,7 @@
 <translation id="2728127805433021124">O certificado do servidor é assinado com um algoritmo de assinatura fraco.</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />Executar o Diagnóstico de Conectividade<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">Música clássica</translation>
+<translation id="2731382536835015353">44 x 68 pol.</translation>
 <translation id="2734319753272419592">Permita que o Google use seus carrinhos para pesquisar descontos personalizados. Quando disponíveis, os descontos vão aparecer automaticamente nos carrinhos.</translation>
 <translation id="2738330467931008676">Escolher endereço de retirada</translation>
 <translation id="2740531572673183784">Ok</translation>
@@ -771,6 +776,7 @@
 <translation id="2955913368246107853">Fechar barra de localização</translation>
 <translation id="2958544468932521864">Críquete</translation>
 <translation id="2959113999220720579">Tratamento corporal e facial</translation>
+<translation id="2962073860865348475">12 x 18 pol.</translation>
 <translation id="2968103128155246731">Vans e minivans</translation>
 <translation id="2972581237482394796">&amp;Refazer</translation>
 <translation id="2977665033722899841">Selecionado no momento: <ph name="ROW_NAME" />. <ph name="ROW_CONTENT" /></translation>
@@ -874,6 +880,7 @@
 <translation id="3249151924975132674">Empréstimos para estudantes e financiamento universitário</translation>
 <translation id="3249845759089040423">Maravilhoso</translation>
 <translation id="3250640885957938546">Publicidade e marketing</translation>
+<translation id="3251133337102041130">Ofício 2</translation>
 <translation id="3252266817569339921">Francês</translation>
 <translation id="3254301855501243548">18 x 22 pol.</translation>
 <translation id="3256863843508922226">Aposentadoria e pensões</translation>
@@ -886,6 +893,7 @@
 <translation id="3270156322180235608">Empresas aéreas</translation>
 <translation id="3270847123878663523">&amp;Desfazer reordenar</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> deseja se conectar</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">Sua organização, <ph name="ENROLLMENT_DOMAIN" />, enviou algumas informações, como configurações ou políticas, aos sites a seguir.</translation>
 <translation id="3282497668470633863">Adicionar nome (como consta no cartão)</translation>
 <translation id="3286372614333682499">retrato</translation>
@@ -988,6 +996,7 @@
 <translation id="3531780078352352885">Páginas da tarefa</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> quer usar seu microfone</translation>
 <translation id="3533328374079021623">Caixa de e-mails 5</translation>
+<translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542768452570884558">Abrir link em uma nova janela</translation>
 <translation id="3547746132308051926">20 x 24 pol.</translation>
 <translation id="3550112004925580947">Indústria da hospitalidade</translation>
@@ -1173,6 +1182,7 @@
 <translation id="4030383055268325496">&amp;Desfazer adicionar</translation>
 <translation id="4031179711345676612">Microfone permitido</translation>
 <translation id="4040350669425716613">Faculdades e universidades</translation>
+<translation id="4047351652147966654">18 x 24 pol.</translation>
 <translation id="405399507749852140">Receba alertas se houver uma redução no preço em algum site</translation>
 <translation id="4056223980640387499">Sépia</translation>
 <translation id="4063063121357725926">Deixe o Google ajudar você a encontrar descontos para seus carrinhos</translation>
@@ -1372,6 +1382,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione "Tab" e depois "Enter" para traduzir esta página com o Google Tradutor</translation>
 <translation id="4514308731478712184">Desativar as jornadas</translation>
 <translation id="4515275063822566619">Os cartões e os endereços vieram do Chrome e da sua Conta do Google (<ph name="ACCOUNT_EMAIL" />). É possível gerenciar essas opções em <ph name="BEGIN_LINK" />Configurações<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">O download desse arquivo está bloqueado pela política do administrador</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Envelope Monarch</translation>
 <translation id="4521916730539354575">Bandeja esquerda</translation>
@@ -1487,6 +1498,7 @@
 <translation id="4813512666221746211">Erro na rede</translation>
 <translation id="4816492930507672669">Ajustar à página</translation>
 <translation id="4819347708020428563">Editar anotações na visualização padrão?</translation>
+<translation id="4823325221257637040">Iniciando</translation>
 <translation id="4825496307559726072"><ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione Tab e depois Enter para criar rapidamente um novo arquivo do Planilhas Google</translation>
 <translation id="4825507807291741242">Intenso</translation>
 <translation id="483241715238664915">Ativar avisos</translation>
@@ -1602,6 +1614,7 @@
 <translation id="5093232627742069661">Dobra sanfona</translation>
 <translation id="5094747076828555589">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança não é confiável para o Chromium. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation>
 <translation id="5097099694988056070">Estatísticas do dispositivo, como uso de CPU/RAM</translation>
+<translation id="5097468150760963273">27 x 39 pol.</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">O site não é seguro</translation>
 <translation id="5109892411553231226">Gerenciar formas de pagamento</translation>
@@ -1926,6 +1939,7 @@
 <translation id="5953516610448771166">O recurso Legenda instantânea não está disponível para esse tipo de mídia. Se quiser ver legendas, bloqueie a configuração <ph name="CONTENT_SETTINGS" /> para este site.</translation>
 <translation id="5955063559762970069">Hotéis e acomodações</translation>
 <translation id="5963413905009737549">Seção</translation>
+<translation id="5967260682280773804">36 x 48 pol.</translation>
 <translation id="5967592137238574583">Edite as Informações de Contato</translation>
 <translation id="5967867314010545767">Remover do histórico</translation>
 <translation id="5968022600320704045">Nenhum resultado da pesquisa</translation>
@@ -1997,6 +2011,7 @@
 <translation id="6127379762771434464">Item removido</translation>
 <translation id="6132161237766805930"><ph name="BEGIN_LINK" />Saiba mais sobre a navegação anônima no Chrome<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">A extensão de arquivo está vazia ou incorreta.</translation>
+<translation id="6139975341602920272">17 x 22 pol.</translation>
 <translation id="6146055958333702838">Verifique todos os cabos e reinicie todos os roteadores, modens ou outros
     dispositivos de rede que você estiver usando.</translation>
 <translation id="614940544461990577">Tente:</translation>
@@ -2019,6 +2034,7 @@
 <translation id="6196640612572343990">Bloquear cookies de terceiros</translation>
 <translation id="6197648101609735209">89 x 89 mm</translation>
 <translation id="6203231073485539293">Verifique sua conexão com a Internet</translation>
+<translation id="6212314149070368045">Fanfold (EUA)</translation>
 <translation id="6218753634732582820">Remover endereço do Chromium?</translation>
 <translation id="622039917539443112">Dobra paralela</translation>
 <translation id="6221345481584921695">A Navegação segura do Google recentemente <ph name="BEGIN_LINK" />detectou malware<ph name="END_LINK" /> em <ph name="SITE" />. Websites que geralmente são seguros estão, algumas vezes, infectados com malware. O conteúdo malicioso vem de <ph name="SUBRESOURCE_HOST" />, um distribuidor de malware conhecido.</translation>
@@ -2045,6 +2061,7 @@
 <translation id="627746635834430766">Para agilizar o pagamento na próxima vez, salve o cartão e o endereço de faturamento na sua Conta do Google.</translation>
 <translation id="6279183038361895380">Pressione |<ph name="ACCELERATOR" />| para exibir seu cursor</translation>
 <translation id="6280223929691119688">Não é possível entregar nesse endereço. Selecione um endereço diferente.</translation>
+<translation id="6284292079994426700">26 x 38 pol.</translation>
 <translation id="6285507000506177184">Botão "Gerenciar downloads no Chrome". Pressione Enter para gerenciar os arquivos transferidos por download no Chrome</translation>
 <translation id="6289939620939689042">Cor da página</translation>
 <translation id="6290238015253830360">Os artigos sugeridos aparecerão aqui</translation>
@@ -2098,6 +2115,7 @@
 <translation id="6410264514553301377">Digite a data de validade e o CVC do <ph name="CREDIT_CARD" /></translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">No Chromium, você pode receber ajuda para proteger sua Conta do Google e alterar sua senha.</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">Material</translation>
 <translation id="6427730057873428458">Dobra janela</translation>
 <translation id="6428450836711225518">Verificar seu número de telefone</translation>
@@ -2111,6 +2129,7 @@
 <translation id="6443406338865242315">quais extensões e plug-ins você instalou;</translation>
 <translation id="6446608382365791566">Adicionar mais informações</translation>
 <translation id="6447842834002726250">Cookies</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">Envelope Chou 40</translation>
 <translation id="6451458296329894277">Confirmar reenvio do formulário</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2277,6 +2296,7 @@
 <translation id="6915804003454593391">Usuário:</translation>
 <translation id="6916954549222464607">Planejamento e gerenciamento financeiro</translation>
 <translation id="6917795328362592458">A senha que você usou foi encontrada em uma violação de dados. Para proteger suas contas, o Gerenciador de senhas recomenda que você revise as senhas salvas.</translation>
+<translation id="6925267999184670015">B+ (América do Norte)</translation>
 <translation id="6934672428414710184">Este nome é da sua Conta do Google</translation>
 <translation id="6936976777388162184">Este é um dispositivo com pacote e não pode ser registrado com o Upgrade de quiosque e sinalização.</translation>
 <translation id="6939469646605424232">Dramas de TV</translation>
@@ -2326,6 +2346,7 @@
 <translation id="7030436163253143341">O certificado não é válido</translation>
 <translation id="7031646650991750659">quais apps do Google Play estão instalados.</translation>
 <translation id="7038063300915481831"><ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione Tab e depois Enter para gerenciar as configurações de privacidade da sua Conta do Google</translation>
+<translation id="7048095965575426564">Fanfold (Europa)</translation>
 <translation id="7050187094878475250">Você tentou acessar <ph name="DOMAIN" />, mas o servidor apresentou um certificado cujo período de validade é extremamente longo, o que não é confiável.</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{Não é possível salvar esse cartão no momento}one{Não é possível salvar esse cartão no momento}other{Não é possível salvar esses cartões no momento}}</translation>
 <translation id="7053983685419859001">Bloquear</translation>
@@ -2363,6 +2384,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Não é possível enviar para esse endereço. Selecione um endereço diferente.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Upload bloqueado</translation>
 <translation id="7132939140423847331">O administrador bloqueou a cópia destes dados.</translation>
 <translation id="7135130955892390533">Mostrar status</translation>
 <translation id="7138472120740807366">Método de entrega</translation>
@@ -2387,6 +2409,7 @@
 <translation id="7192203810768312527">Libera <ph name="SIZE" />. O carregamento de alguns sites pode ficar mais lento no seu próximo acesso.</translation>
 <translation id="7193661028827781021">Referência</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Ofício</translation>
 <translation id="7201591969684833065">O administrador pode ver:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />: pressione "Tab" e depois "Enter" para abrir uma nova guia anônima e navegar com privacidade</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> não adere aos padrões de segurança.</translation>
@@ -2487,6 +2510,7 @@
 <translation id="7421067045979951561">gerenciadores de protocolo</translation>
 <translation id="7426022697669111648">Botão "Ver seu histórico do Chrome". Pressione Enter para ver e gerenciar seu histórico de navegação nas configurações do Chrome</translation>
 <translation id="7427366580982928791">Segurança na Internet para crianças</translation>
+<translation id="7429429656042611765">Executivo</translation>
 <translation id="7437289804838430631">Adicionar Informações de Contato</translation>
 <translation id="7437490109271760224">Jogos de cartas</translation>
 <translation id="7440140511386898319">Ver conteúdo enquanto estiver off-line</translation>
@@ -2593,6 +2617,7 @@
 <translation id="7658239707568436148">Cancelar</translation>
 <translation id="7659327900411729175">Envelope Kaku 8</translation>
 <translation id="7659878911471462949">Lágrimas de alegria</translation>
+<translation id="766014026101194726">{0,plural, =1{O upload desse arquivo está bloqueado pela política do administrador}one{O upload de # arquivo está bloqueado pela política do administrador}other{O upload de # arquivos está bloqueado pela política do administrador}}</translation>
 <translation id="7662298039739062396">Configuração controlada por uma extensão</translation>
 <translation id="7663736086183791259">Certificado <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Sem permissão na navegação anônima</translation>
@@ -2687,11 +2712,13 @@
 <translation id="7939744324936979484">Música folk e tradicional</translation>
 <translation id="7941628148012649605">Envelope Chou 4</translation>
 <translation id="7942349550061667556">Vermelho</translation>
+<translation id="7943397946612013052">Download bloqueado</translation>
 <translation id="7943893128817522649">Pode pedir para fazer o download automático de vários arquivos</translation>
 <translation id="7947285636476623132">Verifique o ano de validade e tente novamente</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione Tab e depois Enter para saber mais sobre os recursos do Chrome</translation>
 <translation id="7950027195171824198">Gerencie suas preferências de cookies nas configurações do Chrome</translation>
 <translation id="7951415247503192394">32 bits</translation>
+<translation id="7952192831285741665">EDP (Europa)</translation>
 <translation id="7953569069500808819">Costura na parte superior</translation>
 <translation id="7956713633345437162">Favoritos nos dispositivos móveis</translation>
 <translation id="7961015016161918242">Nunca</translation>
@@ -2777,6 +2804,7 @@
 <translation id="8153865548451212769">{0,plural, =1{A política do administrador não recomenda o download do arquivo para este local: <ph name="DESTINATION_NAME" />}one{A política do administrador não recomenda o download do arquivo para este local: <ph name="DESTINATION_NAME" />}other{A política do administrador não recomenda o download desses arquivos para este local: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Sair do site</translation>
 <translation id="8163866351304776260">Perfuração quádrupla no lado esquerdo</translation>
+<translation id="8175330382720204696">Government Letter</translation>
 <translation id="8175796834047840627">A opção de salvar seus cartões na Conta do Google está disponível no Chrome porque você fez login. É possível alterar esse comportamento nas configurações.</translation>
 <translation id="8176440868214972690">O administrador do dispositivo enviou algumas informações, como configurações ou políticas, aos sites a seguir.</translation>
 <translation id="8184538546369750125">Usar padrão global (Permitir)</translation>
@@ -2887,6 +2915,7 @@
 <translation id="8449155699563577224">17 x 24 pol.</translation>
 <translation id="8449836157089738489">Abrir tudo em um novo grupo de guias</translation>
 <translation id="8457125768502047971">Indefinida</translation>
+<translation id="8458202188076138974">Letter Extra</translation>
 <translation id="8461694314515752532">Criptografar dados sincronizados com sua própria senha longa de sincronização</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 cartão de crédito}one{# cartão de crédito}other{# cartões de crédito}}</translation>
 <translation id="8468358362970107653">Envelope C3</translation>
@@ -3094,6 +3123,7 @@
 <translation id="9042617223719777575">Grande capacidade</translation>
 <translation id="9044359186343685026">Usar o Touch ID</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" />: <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">24 x 36 pol.</translation>
 <translation id="9049981332609050619">Você tentou acessar <ph name="DOMAIN" />, mas o servidor apresentou um certificado inválido.</translation>
 <translation id="9050666287014529139">Senha</translation>
 <translation id="9056953843249698117">Loja</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 7272c57..a8ea60d0 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -1372,6 +1372,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, apasă pe Tab, apoi pe Enter pentru a traduce această pagină cu Google Traducere</translation>
 <translation id="4514308731478712184">Dezactivează Parcursuri</translation>
 <translation id="4515275063822566619">Cardurile și adresele sunt din Chrome și din Contul Google (<ph name="ACCOUNT_EMAIL" />). Poți să le gestionezi în <ph name="BEGIN_LINK" />Setări<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Descărcarea acestui fișier este blocată de politica implementată de administrator</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Monarh</translation>
 <translation id="4521916730539354575">Tava din stânga</translation>
@@ -2363,6 +2364,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Nu se poate expedia la această adresă. Selectează altă adresă.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Încărcarea a fost blocată</translation>
 <translation id="7132939140423847331">Administratorul a interzis copierea acestor date.</translation>
 <translation id="7135130955892390533">Arată starea</translation>
 <translation id="7138472120740807366">Metodă de livrare</translation>
@@ -2593,6 +2595,7 @@
 <translation id="7658239707568436148">Anulează</translation>
 <translation id="7659327900411729175">Plic Kaku 8</translation>
 <translation id="7659878911471462949">Lacrimi de bucurie</translation>
+<translation id="766014026101194726">{0,plural, =1{Încărcarea acestui fișier este blocată de politica implementată de administrator}few{Încărcarea a # fișiere este blocată de politica implementată de administrator}other{Încărcarea a # de fișiere este blocată de politica implementată de administrator}}</translation>
 <translation id="7662298039739062396">Setare controlată de o extensie</translation>
 <translation id="7663736086183791259">Certificat <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Nu sunt permise în modul Incognito</translation>
@@ -2687,6 +2690,7 @@
 <translation id="7939744324936979484">Muzică folk și tradițională</translation>
 <translation id="7941628148012649605">Plic Chou 4</translation>
 <translation id="7942349550061667556">Roșu</translation>
+<translation id="7943397946612013052">Descărcare blocată</translation>
 <translation id="7943893128817522649">Poate solicita permisiunea de a descărca automat mai multe fișiere</translation>
 <translation id="7947285636476623132">Verifică anul în care expiră și încearcă din nou</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, apasă pe Tab, apoi pe Enter pentru a afla despre funcțiile Chrome</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index ca06a4e9..c6f183a 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -1368,6 +1368,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, postupným stlačením klávesov Tab a Enter preložte túto stránku pomocou Prekladača Google</translation>
 <translation id="4514308731478712184">Vypnúť Journeys</translation>
 <translation id="4515275063822566619">Karty a adresy pochádzajú z Chromu a účtu Google (<ph name="ACCOUNT_EMAIL" />). Môžete ich spravovať v <ph name="BEGIN_LINK" />Nastaveniach<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Sťahovanie tohto súboru je blokované pravidlami správcu</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Obálka Monarch</translation>
 <translation id="4521916730539354575">Ľavý zásobník</translation>
@@ -2358,6 +2359,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Dodanie na túto adresu nie je možné. Vyberte inú adresu.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Blokované nahrávanie</translation>
 <translation id="7132939140423847331">Váš správca zakázal kopírovanie týchto údajov.</translation>
 <translation id="7135130955892390533">Zobraziť stav</translation>
 <translation id="7138472120740807366">Spôsob doručenia</translation>
@@ -2588,6 +2590,7 @@
 <translation id="7658239707568436148">Zrušiť</translation>
 <translation id="7659327900411729175">Obálka Kaku 8</translation>
 <translation id="7659878911471462949">Slzy šťastia</translation>
+<translation id="766014026101194726">{0,plural, =1{Nahrávanie tohto súboru je blokované pravidlami správcu}few{Nahrávanie # súborov je blokované pravidlami správcu}many{Uploading # files is blocked by administrator policy}other{Nahrávanie # súborov je blokované pravidlami správcu}}</translation>
 <translation id="7662298039739062396">Nastavenie ovládané rozšírením</translation>
 <translation id="7663736086183791259">Certifikát <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Nie je povolené v režime inkognito</translation>
@@ -2682,6 +2685,7 @@
 <translation id="7939744324936979484">Folk a tradičná hudba</translation>
 <translation id="7941628148012649605">Obálka Chou 4</translation>
 <translation id="7942349550061667556">Červená</translation>
+<translation id="7943397946612013052">Blokované sťahovanie</translation>
 <translation id="7943893128817522649">Môže žiadať o povolenie automaticky sťahovať viacero súborov</translation>
 <translation id="7947285636476623132">Skontrolujte rok vypršania platnosti a skúste to znova</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, postupným stlačením klávesov Tab a Enter zistíte viac o funkciách Chromu</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index e7ff8a3..748a9eb 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -1382,6 +1382,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, pa Enter da biste preveli ovu stranicu pomoću Google prevodioca</translation>
 <translation id="4514308731478712184">Isključi Puteve</translation>
 <translation id="4515275063822566619">Kartice i adrese su iz Chrome-a i sa vašeg Google naloga (<ph name="ACCOUNT_EMAIL" />). Njima možete da upravljate u <ph name="BEGIN_LINK" />podešavnjima<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Smernice administratora blokiraju preuzimanje ovog fajla</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" />×<ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Koverta Monarch</translation>
 <translation id="4521916730539354575">Leva fioka</translation>
@@ -2382,6 +2383,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Slanje na ovu adresu nije moguće. Izaberite drugu adresu.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Otpremanje je blokirano</translation>
 <translation id="7132939140423847331">Administrator je zabranio kopiranje ovih podataka.</translation>
 <translation id="7135130955892390533">Prikaži status</translation>
 <translation id="7138472120740807366">Način isporuke</translation>
@@ -2614,6 +2616,7 @@
 <translation id="7658239707568436148">Otkaži</translation>
 <translation id="7659327900411729175">Koverta Kaku 8</translation>
 <translation id="7659878911471462949">Suze radosnice</translation>
+<translation id="766014026101194726">{0,plural, =1{Smernice administratora blokiraju otpremanje ovog fajla}one{Smernice administratora blokiraju otpremanje # fajla}few{Smernice administratora blokiraju otpremanje # fajla}other{Smernice administratora blokiraju otpremanje # fajlova}}</translation>
 <translation id="7662298039739062396">Podešavanje kontroliše dodatak</translation>
 <translation id="7663736086183791259">Sertifikat <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Nije dozvoljeno u režimu bez arhiviranja</translation>
@@ -2708,6 +2711,7 @@
 <translation id="7939744324936979484">Folk i tradicionalna muzika</translation>
 <translation id="7941628148012649605">Koverta Chou 4</translation>
 <translation id="7942349550061667556">Crvena</translation>
+<translation id="7943397946612013052">Preuzimanje je blokirano</translation>
 <translation id="7943893128817522649">Može da traži da automatski preuzima više fajlova</translation>
 <translation id="7947285636476623132">Proverite godinu isteka i probajte ponovo</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite Tab, pa Enter da biste saznali više o Chrome funkcijama</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index e7cd311..6087381 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -1382,6 +1382,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, притисните Tab, па Enter да бисте превели ову страницу помоћу Google преводиоца</translation>
 <translation id="4514308731478712184">Искључи Путеве</translation>
 <translation id="4515275063822566619">Картице и адресе су из Chrome-а и са вашег Google налога (<ph name="ACCOUNT_EMAIL" />). Њима можете да управљате у <ph name="BEGIN_LINK" />подешавњима<ph name="END_LINK" />.</translation>
+<translation id="4520048001084013693">Смернице администратора блокирају преузимање овог фајла</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" />×<ph name="HEIGHT" /> mm (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Коверта Monarch</translation>
 <translation id="4521916730539354575">Лева фиока</translation>
@@ -2382,6 +2383,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">Слање на ову адресу није могуће. Изаберите другу адресу.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">Отпремање је блокирано</translation>
 <translation id="7132939140423847331">Администратор је забранио копирање ових података.</translation>
 <translation id="7135130955892390533">Прикажи статус</translation>
 <translation id="7138472120740807366">Начин испоруке</translation>
@@ -2614,6 +2616,7 @@
 <translation id="7658239707568436148">Откажи</translation>
 <translation id="7659327900411729175">Коверта Kaku 8</translation>
 <translation id="7659878911471462949">Сузе радоснице</translation>
+<translation id="766014026101194726">{0,plural, =1{Смернице администратора блокирају отпремање овог фајла}one{Смернице администратора блокирају отпремање # фајла}few{Смернице администратора блокирају отпремање # фајла}other{Смернице администратора блокирају отпремање # фајлова}}</translation>
 <translation id="7662298039739062396">Подешавање контролише додатак</translation>
 <translation id="7663736086183791259">Сертификат <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">Није дозвољено у режиму без архивирања</translation>
@@ -2708,6 +2711,7 @@
 <translation id="7939744324936979484">Фолк и традиционална музика</translation>
 <translation id="7941628148012649605">Коверта Chou 4</translation>
 <translation id="7942349550061667556">Црвена</translation>
+<translation id="7943397946612013052">Преузимање је блокирано</translation>
 <translation id="7943893128817522649">Може да тражи да аутоматски преузима више фајлова</translation>
 <translation id="7947285636476623132">Проверите годину истека и пробајте поново</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, притисните Tab, па Enter да бисте сазнали више о Chrome функцијама</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index b5a9172..ec88bb29 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -1368,6 +1368,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />, Google Translate மூலம் இந்தப் பக்கத்தை மொழிபெயர்க்க Tab விசையை அழுத்திய பிறகு Enter விசையை அழுத்துங்கள்</translation>
 <translation id="4514308731478712184">‘குறிப்பிட்ட தேடல் விவரங்கள்’ அம்சத்தை முடக்கு</translation>
 <translation id="4515275063822566619">கார்டுகளும் முகவரிகளும் Chromeமிலிருந்தும் <ph name="ACCOUNT_EMAIL" /> எனும் உங்கள் Google கணக்கிலிருந்தும் பெறப்பட்டவையாகும். <ph name="BEGIN_LINK" />அமைப்புகளில்<ph name="END_LINK" /> அவற்றை நிர்வகிக்கலாம்.</translation>
+<translation id="4520048001084013693">இந்த ஃபைலைப் பதிவிறக்குவது நிர்வாகக் கொள்கையின்படி தடுக்கப்பட்டுள்ளது</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> மிமீ (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">என்வெலப் மோனார்க்</translation>
 <translation id="4521916730539354575">இடதுபுற டிரே</translation>
@@ -2358,6 +2359,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">இந்த முகவரிக்கு அனுப்ப முடியாது. வேறு முகவரியைத் தேர்ந்தெடுக்கவும்.</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">பதிவேற்றம் தடுக்கப்பட்டுள்ளது</translation>
 <translation id="7132939140423847331">இந்தத் தரவை நகலெடுப்பதை உங்கள் நிர்வாகி தடுத்துள்ளார்.</translation>
 <translation id="7135130955892390533">நிலையைக் காட்டு</translation>
 <translation id="7138472120740807366">டெலிவரி முறை</translation>
@@ -2588,6 +2590,7 @@
 <translation id="7658239707568436148">ரத்து செய்</translation>
 <translation id="7659327900411729175">என்வெலப் காகு 8</translation>
 <translation id="7659878911471462949">ஆனந்தக் கண்ணீர்</translation>
+<translation id="766014026101194726">{0,plural, =1{இந்த ஃபைலைப் பதிவேற்றுவது நிர்வாகக் கொள்கையின்படி தடுக்கப்பட்டுள்ளது}other{# ஃபைல்களைப் பதிவேற்றுவது நிர்வாகக் கொள்கையின்படி தடுக்கப்பட்டுள்ளது}}</translation>
 <translation id="7662298039739062396">அமைப்பை நீட்டிப்பு கட்டுப்படுத்துகிறது</translation>
 <translation id="7663736086183791259">சான்றிதழ் (<ph name="CERTIFICATE_VALIDITY" />)</translation>
 <translation id="7666397036351755929">மறைநிலையில் அனுமதிக்கப்படாது</translation>
@@ -2682,6 +2685,7 @@
 <translation id="7939744324936979484">நாட்டுப்புற &amp; பாரம்பரிய இசை</translation>
 <translation id="7941628148012649605">என்வெலப் சூ 4</translation>
 <translation id="7942349550061667556">சிவப்பு</translation>
+<translation id="7943397946612013052">பதிவிறக்கம் தடுக்கப்பட்டுள்ளது</translation>
 <translation id="7943893128817522649">பல ஃபைல்களைத் தானாகப் பதிவிறக்க முயலும்போது அனுமதி கேட்க வேண்டும்</translation>
 <translation id="7947285636476623132">காலாவதி ஆண்டைச் சரிபார்த்து, மீண்டும் முயலவும்</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome அம்சங்கள் குறித்து அறிய Tab பட்டனை அழுத்திவிட்டு Enter பட்டனை அழுத்துங்கள்</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 2893340..c84aff8 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -1371,6 +1371,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" /> กด Tab ตามด้วย Enter เพื่อแปลหน้านี้ด้วย Google แปลภาษา</translation>
 <translation id="4514308731478712184">ปิดใช้เส้นทางการท่องเว็บ</translation>
 <translation id="4515275063822566619">ข้อมูลบัตรและที่อยู่มาจาก Chrome และบัญชี Google (<ph name="ACCOUNT_EMAIL" />) คุณสามารถจัดการข้อมูลเหล่านี้ใน<ph name="BEGIN_LINK" />การตั้งค่า<ph name="END_LINK" /></translation>
+<translation id="4520048001084013693">นโยบายของผู้ดูแลระบบบล็อกการดาวน์โหลดไฟล์นี้</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> มม. (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Envelope Monarch</translation>
 <translation id="4521916730539354575">ถาดซ้าย</translation>
@@ -2362,6 +2363,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">ไม่สามารถจัดส่งสินค้าไปยังที่อยู่นี้ โปรดเลือกที่อยู่อื่น</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /> <ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">การอัปโหลดถูกบล็อก</translation>
 <translation id="7132939140423847331">ผู้ดูแลระบบของคุณห้ามไม่ให้คัดลอกข้อมูลนี้</translation>
 <translation id="7135130955892390533">แสดงสถานะ</translation>
 <translation id="7138472120740807366">วิธีการนำส่งสินค้า</translation>
@@ -2592,6 +2594,7 @@
 <translation id="7658239707568436148">ยกเลิก</translation>
 <translation id="7659327900411729175">Envelope Kaku 8</translation>
 <translation id="7659878911471462949">น้ำตาแห่งความสุข</translation>
+<translation id="766014026101194726">{0,plural, =1{นโยบายของผู้ดูแลระบบบล็อกการอัปโหลดไฟล์นี้}other{นโยบายของผู้ดูแลระบบบล็อกการอัปโหลดไฟล์ # รายการ}}</translation>
 <translation id="7662298039739062396">การตั้งค่าควบคุมโดยส่วนขยาย</translation>
 <translation id="7663736086183791259">ใบรับรอง <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">ไม่อนุญาตในโหมดไม่ระบุตัวตน</translation>
@@ -2686,6 +2689,7 @@
 <translation id="7939744324936979484">ดนตรีโฟล์กและเพลงพื้นบ้าน</translation>
 <translation id="7941628148012649605">Envelope Chou 4</translation>
 <translation id="7942349550061667556">สีแดง</translation>
+<translation id="7943397946612013052">การดาวน์โหลดถูกบล็อก</translation>
 <translation id="7943893128817522649">สามารถขอดาวน์โหลดไฟล์หลายไฟล์โดยอัตโนมัติได้</translation>
 <translation id="7947285636476623132">ตรวจสอบปีหมดอายุแล้วลองอีกครั้ง</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" /> กด Tab ตามด้วย Enter เพื่อดูข้อมูลเกี่ยวกับฟีเจอร์ของ Chrome</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index d0e4787..8390ed9 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -703,7 +703,7 @@
 <translation id="2738330467931008676">Alınacağı Adres Seç</translation>
 <translation id="2740531572673183784">Tamam</translation>
 <translation id="2742511345840685325">Masa tenisi</translation>
-<translation id="2742870351467570537">Seçilen öğeleri kaldır</translation>
+<translation id="2742870351467570537">Seçilen öğeleri sil</translation>
 <translation id="2759825833388495838"><ph name="APP_NAME" /> adresinde şifrenizi doldurma</translation>
 <translation id="2764001903315068341">Çizgi romanlar</translation>
 <translation id="2765217105034171413">Küçük</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 4b318529..d97af9ef 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -264,6 +264,7 @@
 <translation id="1567040042588613346">Це правило працює належним чином, але в іншому місці встановлюється таке ж значення й замінюється цим правилом.</translation>
 <translation id="1569487616857761740">Введіть дату закінчення терміну дії</translation>
 <translation id="1569694109004336106">Google Chrome намагається ввімкнути Windows Hello для введення паролів.</translation>
+<translation id="1572765991610098222"><ph name="WIDTH" /> x <ph name="HEIGHT" /> дюйм.</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">Під час завантаженння цієї сторінки сталася помилка.</translation>
 <translation id="1586541204584340881">встановлені розширення;</translation>
@@ -1098,6 +1099,7 @@
 <translation id="3787705759683870569">Діє до <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="3789155188480882154">Розмір 16</translation>
 <translation id="3789841737615482174">Установити</translation>
+<translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> дюйм.)</translation>
 <translation id="3793574014653384240">Кількість і причини останніх аварійних завершень роботи</translation>
 <translation id="3795344968043407227">Інді й альтернативна музика</translation>
 <translation id="3799805948399000906">Запит на шрифт</translation>
@@ -2493,6 +2495,7 @@
 <translation id="7441627299479586546">Неправильна тема правила</translation>
 <translation id="7442725080345379071">Світло-оранжевий</translation>
 <translation id="7445762425076701745">Ідентифікацію сервера, з яким ви з'єднані, не можна повністю підтвердити. Ви з'єднані із сервером за допомогою імені, дійсного лише у вашій мережі, і зовнішній центр сертифікації не має способів підтвердити право власності на це ім'я. Хоча деякі центри сертифікації, попри все, видають сертифікати на такі імена, неможливо цілком упевнитися, що ви з'єднані з безпечним сайтом, а не зі зловмисником.</translation>
+<translation id="7447625772313191651"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> мм)</translation>
 <translation id="7451311239929941790"><ph name="BEGIN_LINK" />дізнатися більше<ph name="END_LINK" /> про цю проблему.</translation>
 <translation id="7455133967321480974">Використовувати глобальне налаштування за умовчанням (Блокувати)</translation>
 <translation id="745640750744109667">A0x3</translation>
@@ -2796,6 +2799,7 @@
 <translation id="8218327578424803826">Указане місцезнаходження:</translation>
 <translation id="8225771182978767009">Користувач, який налаштував комп’ютер, заблокував цей сайт.</translation>
 <translation id="8228419419708659934">Перегляд по дві сторінки</translation>
+<translation id="8229288958566709448"><ph name="WIDTH" /> x <ph name="HEIGHT" /> мм</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />, <ph name="TYPE_2" /></translation>
 <translation id="8231564988424805352">Спортивні ігри</translation>
 <translation id="8232343881378637145">Температура платформи</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb
index 0aa3ea98..b95fa07 100644
--- a/components/strings/components_strings_ur.xtb
+++ b/components/strings/components_strings_ur.xtb
@@ -138,6 +138,7 @@
 <translation id="129553762522093515">حال ہی میں بند کردہ</translation>
 <translation id="1296930489679394997">سیلز</translation>
 <translation id="129863573139666797"><ph name="BEGIN_LINK" />اپنی کوکیز صاف کرنے کی کوشش کریں<ph name="END_LINK" /></translation>
+<translation id="1301227606947843452">Legal Extra</translation>
 <translation id="1301324364792935241">‏اپنی محفوظ DNS ترتیبات چیک کریں</translation>
 <translation id="1307966114820526988">فرسودہ خصوصیات</translation>
 <translation id="1308113895091915999">پیشکش دستیاب ہے</translation>
@@ -444,6 +445,7 @@
 <translation id="205212645995975601">‏BBQ اور گرِلنگ</translation>
 <translation id="2053111141626950936"><ph name="LANGUAGE" /> کے صفحات کا ترجمہ نہیں کیا جائے گا۔</translation>
 <translation id="2053373601901562871">{NUM_DAYS,plural, =0{‏اس کنٹرول کے آن ہونے اور اسٹیٹس کے فعال ہونے پر، Chrome اس بات کا تعین کرتا ہے کہ لوگوں کے کون سے بڑے گروپ یا "مشترک خصوصیات کے حامل لوگوں کے گروپ" سے آپ کی حالیہ براؤزنگ کی سرگرمی سب سے زیادہ ملتی جلتی ہے۔ مشتہرین گروپ کے لیے اشتہارات کا انتخاب کر سکتے ہیں اور آپ کی براؤزنگ کی سرگرمی کو آپ کے آلے پر نجی رکھا جاتا ہے۔ آپ کا گروپ ہر روز اپ ڈیٹ کیا جاتا ہے۔}=1{‏اس کنٹرول کے آن ہونے اور اسٹیٹس کے فعال ہونے پر، Chrome اس بات کا تعین کرتا ہے کہ لوگوں کے کون سے بڑے گروپ یا "مشترک خصوصیات کے حامل لوگوں کے گروپ" سے آپ کی حالیہ براؤزنگ کی سرگرمی سب سے زیادہ ملتی جلتی ہے۔ مشتہرین گروپ کے لیے اشتہارات کا انتخاب کر سکتے ہیں اور آپ کی براؤزنگ کی سرگرمی کو آپ کے آلے پر نجی رکھا جاتا ہے۔ آپ کا گروپ ہر روز اپ ڈیٹ کیا جاتا ہے۔}other{‏اس کنٹرول کے آن ہونے اور اسٹیٹس کے فعال ہونے پر، Chrome اس بات کا تعین کرتا ہے کہ لوگوں کے کون سے بڑے گروپ یا "مشترک خصوصیات کے حامل لوگوں کے گروپ" سے آپ کی حالیہ براؤزنگ کی سرگرمی سب سے زیادہ ملتی جلتی ہے۔ مشتہرین گروپ کے لیے اشتہارات کا انتخاب کر سکتے ہیں اور آپ کی براؤزنگ کی سرگرمی کو آپ کے آلے پر نجی رکھا جاتا ہے۔ آپ کا گروپ ہر {NUM_DAYS} دن میں اپ ڈیٹ کیا جاتا ہے۔}}</translation>
+<translation id="2059202684901022309">‏‎22 x 34 انچ</translation>
 <translation id="2064691555167957331">{COUNT,plural, =1{1 تجویز}other{# تجاویز}}</translation>
 <translation id="2066915425250589881">حذف کرنے کی درخواست</translation>
 <translation id="2068528718802935086">بچے اور نونہال</translation>
@@ -533,6 +535,7 @@
 <translation id="2277753418458118549">کنکشن کی تفصیلات دکھائیں</translation>
 <translation id="2283340219607151381">پتوں کو محفوظ کریں اور بھریں</translation>
 <translation id="2283447177162560884">'<ph name="PAGE_TITLE" />' حذف کیا گيا</translation>
+<translation id="2286383991450886080">‏‎34 x 44 انچ</translation>
 <translation id="2288422996159078444">آپ جو بھی ٹائپ کرتے ہیں، جو بھی صفحات آپ دیکھتے ہیں، یا ویب پر دیکھی جانے والی کوئی بھی دوسری سرگرمی، اور سائٹس پر موجود کسی بھی مواد کو آپ کی معلومات کے بغیر تبدیل کیا جا سکتا ہے۔</translation>
 <translation id="2289385804009217824">تراشیں</translation>
 <translation id="2292556288342944218">انٹرنیٹ تک آپ کی رسائی مسدود ہے</translation>
@@ -693,6 +696,7 @@
 <translation id="2709516037105925701">آٹو فل</translation>
 <translation id="2713444072780614174">سفید</translation>
 <translation id="2715612312510870559">‏<ph name="UPDATE_CREDIT_CARD_FOCUSED_FRIENDLY_MATCH_TEXT" />، Chrome کی ترتیبات میں اپنی ادائیگیوں اور کریڈٹ کارڈ کی معلومات کا نظم کرنے کے لیے ٹیب، پھر اینٹر دبائیں</translation>
+<translation id="2715808615350965923">Super A</translation>
 <translation id="271663710482723385">پوری اسکرین سے باہر نکلنے کیلئے |<ph name="ACCELERATOR1" />| + |<ph name="ACCELERATOR2" />| کو دبائیں</translation>
 <translation id="2721148159707890343">درخواست کامیاب رہی</translation>
 <translation id="2723669454293168317">‏Chrome کی ترتیبات میں سیفٹی چیک چلائیں</translation>
@@ -700,6 +704,7 @@
 <translation id="2728127805433021124">سرور کا سرٹیفیکیٹ ایک کمزور دستخط الگورتھم استعمال کر کے دستخط کیا ہوا ہے۔</translation>
 <translation id="2730326759066348565"><ph name="BEGIN_LINK" />کنیکٹوٹی کی تشخیصات چلانے کی<ph name="END_LINK" /></translation>
 <translation id="2730600605555029057">کلاسیکل موسیقی</translation>
+<translation id="2731382536835015353">‏‎44 x 68 انچ</translation>
 <translation id="2734319753272419592">‏ذاتی رعایتیں تلاش کرنے کے لیے Google کو اپنی کارٹس استعمال کرنے دیں۔ دستیاب ہونے پر، رعایتیں خود بخود آپ کے کارٹس پر ظاہر ہوں گی۔</translation>
 <translation id="2738330467931008676">پک اپ کا پتہ منتخب کریں</translation>
 <translation id="2740531572673183784">ٹھیک ہے</translation>
@@ -772,6 +777,7 @@
 <translation id="2955913368246107853">تلاش بار بند کریں</translation>
 <translation id="2958544468932521864">کرکٹ</translation>
 <translation id="2959113999220720579">چہرے اور جسم کی نگہداشت</translation>
+<translation id="2962073860865348475">‏‎12 x 18 انچ</translation>
 <translation id="2968103128155246731">وینز اور منی وینز</translation>
 <translation id="2972581237482394796">&amp;واپس لائیں</translation>
 <translation id="2977665033722899841"><ph name="ROW_NAME" />، فی الحال منتخب کردہ۔ <ph name="ROW_CONTENT" /></translation>
@@ -876,6 +882,7 @@
 <translation id="3249151924975132674">طلبہ کے قرض اور کالج فائنانسنگ</translation>
 <translation id="3249845759089040423">دلکش</translation>
 <translation id="3250640885957938546">تشہیر اور مارکیٹنگ</translation>
+<translation id="3251133337102041130">Government Legal</translation>
 <translation id="3252266817569339921">فرانسيسی</translation>
 <translation id="3254301855501243548">‏‎18 x 22 انچ</translation>
 <translation id="3256863843508922226">سبکدوشی اور پینشن</translation>
@@ -888,6 +895,7 @@
 <translation id="3270156322180235608">ہوائی سفر</translation>
 <translation id="3270847123878663523">دوبارہ ترتیب &amp;کالعدم کریں</translation>
 <translation id="3271648667212143903"><ph name="ORIGIN" /> منسلک ہونا چاہتی ہے</translation>
+<translation id="3272091146646336650">Super B</translation>
 <translation id="3282085321714087552">آپ کی تنظیم، <ph name="ENROLLMENT_DOMAIN" />، نے کچھ معلومات، جیسے ترتیبات یا پالیسیاں درج ذیل ویب سائٹس پر بھیجی ہیں۔</translation>
 <translation id="3282497668470633863">کارڈ پر نام شامل کریں</translation>
 <translation id="3286372614333682499">پورٹریٹ</translation>
@@ -990,6 +998,7 @@
 <translation id="3531780078352352885">جاب کی شیٹس</translation>
 <translation id="3532844647053365774"><ph name="HOST" /> آپ کا مائیکروفون استعمال کرنا چاہتا ہے</translation>
 <translation id="3533328374079021623">میل باکس 5</translation>
+<translation id="3537165859691846083">Letter Plus</translation>
 <translation id="3542768452570884558">لنک کو نئی ونڈو میں کھولیں</translation>
 <translation id="3547746132308051926">‏‎20 x 24 انچ</translation>
 <translation id="3550112004925580947">مہمان نوازی کی انڈسٹری</translation>
@@ -1175,6 +1184,7 @@
 <translation id="4030383055268325496">شامل کریں کو &amp;کالعدم کریں</translation>
 <translation id="4031179711345676612">مائیکروفون اجازت یافتہ ہے</translation>
 <translation id="4040350669425716613">کالجز اور یونیورسٹیاں</translation>
+<translation id="4047351652147966654">‏‎18 x 24 انچ</translation>
 <translation id="405399507749852140">کسی بھی سائٹ پر قیمت میں گراوٹ ہونے پر الرٹس حاصل کریں</translation>
 <translation id="4056223980640387499">سیپیا</translation>
 <translation id="4063063121357725926">‏Google کو اپنی کارٹس کے لیے رعایتیں تلاش کرنے میں آپ کی مدد کرنے دیں</translation>
@@ -1490,6 +1500,7 @@
 <translation id="4813512666221746211">نیٹ ورک کی خرابی</translation>
 <translation id="4816492930507672669">صفحہ میں فٹ کریں</translation>
 <translation id="4819347708020428563">ڈیفالٹ منظر میں تشریحات میں ترمیم کریں؟</translation>
+<translation id="4823325221257637040">شروع ہو رہا ہے</translation>
 <translation id="4825496307559726072">‏<ph name="CREATE_GOOGLE_SHEET_FOCUSED_FRIENDLY_MATCH_TEXT" />، تیزی سے ایک نئی Google Sheet تخلیق کرنے کیلئے Tab، پھر Enter دبائیں</translation>
 <translation id="4825507807291741242">طاقتور</translation>
 <translation id="483241715238664915">وارننگز کو آن کریں</translation>
@@ -1605,6 +1616,7 @@
 <translation id="5093232627742069661">‏Z-فولڈ</translation>
 <translation id="5094747076828555589">‏یہ سرور یہ ثابت نہیں کر سکا کہ یہ <ph name="DOMAIN" /> ہے؛ اس کے سیکیورٹی سرٹیفکیٹ پر Chromium کو بھروسہ نہیں ہے۔ یہ غلط کنفیگرییشن یا آپ کے کنکشن کو قطع کرنے والے کسی حملہ آور کی وجہ سے ہو سکتا ہے۔</translation>
 <translation id="5097099694988056070">‏CPU/RAM کے استعمال جیسے آلے کے اعداد و شمار</translation>
+<translation id="5097468150760963273">‏‎27 x 39 انچ</translation>
 <translation id="5097501891273180634">A2</translation>
 <translation id="5108881358339761672">سائٹ محفوظ نہیں ہے</translation>
 <translation id="5109892411553231226">ادائیگی کے طریقوں کا نظم کریں</translation>
@@ -1929,6 +1941,7 @@
 <translation id="5953516610448771166">اس میڈیا کے لیے لائیو کیپشن دستیاب نہیں ہے۔ کیپشنز حاصل کرنے کے لیے، <ph name="CONTENT_SETTINGS" /> کو اس سائٹ کے لیے مسدود کریں۔</translation>
 <translation id="5955063559762970069">ہوٹلز اور اقامتیں</translation>
 <translation id="5963413905009737549">سیکشن</translation>
+<translation id="5967260682280773804">‏‎36 x 48 انچ</translation>
 <translation id="5967592137238574583">رابطے کی معلومات میں ترمیم کریں</translation>
 <translation id="5967867314010545767">سرگزشت سے ہٹا دیں</translation>
 <translation id="5968022600320704045">تلاش کا کوئی نتیجہ نہیں ہے</translation>
@@ -2000,6 +2013,7 @@
 <translation id="6127379762771434464">آئٹم ہٹا دیا گیا</translation>
 <translation id="6132161237766805930">‏<ph name="BEGIN_LINK" />Chrome میں پوشیدگی وضع کے بارے میں مزید جانیں<ph name="END_LINK" /></translation>
 <translation id="6133984428121856852">فائل ایکسٹینشن خالی یا خراب ہے۔</translation>
+<translation id="6139975341602920272">‏‎17 x 22 انچ</translation>
 <translation id="6146055958333702838">کوئی بھی کیبلز چیک کریں اور کوئی بھی
     روٹرز، موڈمز
 یا ان دیگر نیٹ ورک آلات کو ریبوٹ کریں جنہیں آپ استعمال کر سکتے ہیں۔</translation>
@@ -2023,6 +2037,7 @@
 <translation id="6196640612572343990">فریق ثالث کوکیز کو مسدود کریں</translation>
 <translation id="6197648101609735209">‏‎89 x 89 ملی میٹر</translation>
 <translation id="6203231073485539293">اپنا انٹرنیٹ کنکشن چیک کریں</translation>
+<translation id="6212314149070368045">US Fanfold</translation>
 <translation id="6218753634732582820">‏Chromium سے پتہ ہٹائیں؟</translation>
 <translation id="622039917539443112">متوازی فولڈ</translation>
 <translation id="6221345481584921695">‏Google محفوظ براؤزنگ کو حال ہی میں <ph name="SITE" /> پر <ph name="BEGIN_LINK" />میلویئر کا پتہ لگا<ph name="END_LINK" />۔ جو ویب سائٹس عام طور پر محفوظ ہوتی ہیں وہ کبھی کبھی میلویئر سے متاثر ہو جاتی ہیں۔ نقصان دہ مواد <ph name="SUBRESOURCE_HOST" /> سے آتا ہے جو ایک معلوم میلویئر تقسیم کار ہے۔</translation>
@@ -2049,6 +2064,7 @@
 <translation id="627746635834430766">‏اگلی بار زیادہ تیزی سے ادائیگی کرنے کے لیے، اپنے کارڈ اور بلنگ پتہ کو اپنے Google اکاؤنٹ میں محفوظ کریں۔</translation>
 <translation id="6279183038361895380">اپنا کرسر دکھانے کیلئے |<ph name="ACCELERATOR" />| کو دبائیں</translation>
 <translation id="6280223929691119688">اس پتے پر ڈیلیوری نہیں ہو سکتی۔ کوئی مختلف پتہ منتخب کریں۔</translation>
+<translation id="6284292079994426700">‏‎26 x 38 انچ</translation>
 <translation id="6285507000506177184">‏Chrome بٹن میں ڈاؤن لوڈز کا نظم کریں، Chrome میں ڈاؤن لوڈ کردہ اپنی فائلز کا نظم کرنے کے لیے اینٹر دبائیں</translation>
 <translation id="6289939620939689042">صفحے کا رنگ</translation>
 <translation id="6290238015253830360">آپ کے تجویز کردہ مضامین یہاں ظاہر ہوتے ہیں</translation>
@@ -2102,6 +2118,7 @@
 <translation id="6410264514553301377">‏<ph name="CREDIT_CARD" /> کی اختتامی تاریخ اور CVC درج کریں</translation>
 <translation id="6411107829285739505">A4x8</translation>
 <translation id="6415778972515849510">‏Chromium آپ کی اپنا Google اکاؤنٹ محفوظ اور پاس ورڈ تبدیل کرنے میں مدد کر سکتا ہے۔</translation>
+<translation id="6416877227920300343">EDP</translation>
 <translation id="6425092077175753609">مٹیریل</translation>
 <translation id="6427730057873428458">گیٹ فولڈ</translation>
 <translation id="6428450836711225518">اپنے فون نمبر کی توثیق کریں</translation>
@@ -2115,6 +2132,7 @@
 <translation id="6443406338865242315">آپ نے کن ایکسٹینشنز اور پلگ انز کو انسٹال کیا ہے</translation>
 <translation id="6446608382365791566">مزید معلومات شامل کریں</translation>
 <translation id="6447842834002726250">کوکیز</translation>
+<translation id="6450077999570164268">Quarto</translation>
 <translation id="6450212216969386944">‏Chou 40 لفافہ</translation>
 <translation id="6451458296329894277">فارم دوبارہ جمع کرانے کی توثیق کریں</translation>
 <translation id="6452889436791091116">ISO ID-1</translation>
@@ -2281,6 +2299,7 @@
 <translation id="6915804003454593391">صارف:</translation>
 <translation id="6916954549222464607">مالی منصوبہ بندی اور نظم و نسق</translation>
 <translation id="6917795328362592458">آپ نے ابھی جو پاس ورڈ استعمال کیا وہ ڈیٹا کی خلاف ورزی میں پایا گیا۔ اپنے اکاؤنٹس محفوظ کرنے کے لیے، پاس ورڈ مینیجر آپ کے محفوظ کردہ پاس ورڈز کو چیک کرنے کی تجویز کرتا ہے۔</translation>
+<translation id="6925267999184670015">‏شمالی امریکی B+</translation>
 <translation id="6934672428414710184">‏یہ نام آپ کے Google اکاؤنٹ سے ہے</translation>
 <translation id="6936976777388162184">‏یہ ایک بنڈل کردہ آلہ ہے اور اس کا Kiosk اور Signage Upgrade کے ساتھ اندراج نہیں کیا جا سکتا۔</translation>
 <translation id="6939469646605424232">‏TV ڈرامے</translation>
@@ -2330,6 +2349,7 @@
 <translation id="7030436163253143341">سرٹیفیکیٹ درست نہیں ہے</translation>
 <translation id="7031646650991750659">‏آپ نے کن Google Play ایپس کو انسٹال کیا ہے</translation>
 <translation id="7038063300915481831">‏<ph name="MANAGE_GOOGLE_PRIVACY_FOCUSED_FRIENDLY_MATCH_TEXT" />، اپنے Google اکاؤنٹ کی رازداری کی ترتیبات کا نظم کرنے کیلئے ٹیب پھر اینٹر دبائیں</translation>
+<translation id="7048095965575426564">European Fanfold</translation>
 <translation id="7050187094878475250">آپ نے <ph name="DOMAIN" /> تک پہنچنے کی کوشش کی، لیکن سرور نے ایک سرٹیفکیٹ پیش کیا جس کے جواز کا عرصہ اتنا طویل ہے کہ اس پر بھروسہ نہیں کیا جا سکتا۔</translation>
 <translation id="705310974202322020">{NUM_CARDS,plural, =1{اس کارڈ کو ابھی محفوظ نہیں کیا جا سکتا}other{ان کارڈز کو ابھی محفوظ نہیں کیا جا سکتا}}</translation>
 <translation id="7053983685419859001">مسدود کریں</translation>
@@ -2392,6 +2412,7 @@
 <translation id="7192203810768312527"><ph name="SIZE" /> بچاتا ہے: آپ کے اگلے ملاحظہ پر مزید آہستہ سے کچھ سائٹس لوڈ کر سکتا ہے۔</translation>
 <translation id="7193661028827781021">حوالہ</translation>
 <translation id="719464814642662924">Visa</translation>
+<translation id="7199278868241956094">Oficio</translation>
 <translation id="7201591969684833065">آپ کا منتظم یہ دیکھ سکتا ہے:</translation>
 <translation id="7202217080450895452"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />، نجی طور پر براؤز کرنے کے لیے ایک نیا پوشیدگی ٹیب کھولنے کی خاطر ٹیب، پھر اینٹر دبائیں</translation>
 <translation id="7210863904660874423"><ph name="HOST_NAME" /> سیکیورٹی کے معیارات کی پابندی نہیں کرتا ہے۔</translation>
@@ -2492,6 +2513,7 @@
 <translation id="7421067045979951561">پروٹوکول ہینڈلرز</translation>
 <translation id="7426022697669111648">‏اپنے Chrome کی سرگزشت کا بٹن دیکھیں، Chrome کی ترتیبات میں اپنی براؤزنگ کی سرگزشت دیکھنے اور اس کا نظم کرنے کے لیے اینٹر دبائیں</translation>
 <translation id="7427366580982928791">انٹرنیٹ پر بچوں کا تحفظ</translation>
+<translation id="7429429656042611765">Executive</translation>
 <translation id="7437289804838430631">رابطے کی معلومات شامل کریں</translation>
 <translation id="7437490109271760224">کارڈ گیمز</translation>
 <translation id="7440140511386898319">آف لائن رہتے ہوئے دریافت کریں</translation>
@@ -2699,6 +2721,7 @@
 <translation id="7947813448670013867">‏<ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />، Chrome کی خصوصیات کے بارے میں جاننے کیلئے Tab، پھر Enter دبائیں</translation>
 <translation id="7950027195171824198">‏Chrome ترتیبات میں اپنی کوکی کی ترجیحات کا نظم کریں</translation>
 <translation id="7951415247503192394">(32 بٹ)</translation>
+<translation id="7952192831285741665">European EDP</translation>
 <translation id="7953569069500808819">اوپر کنارے کی سلائی</translation>
 <translation id="7956713633345437162">موبائل بُک مارکس</translation>
 <translation id="7961015016161918242">کبھی نہیں</translation>
@@ -2784,6 +2807,7 @@
 <translation id="8153865548451212769">{0,plural, =1{منتظم کی پالیسی اس فائل کو <ph name="DESTINATION_NAME" /> میں ڈاؤن لوڈ کرنے کی تجویز نہیں کرتی ہے}other{منتظم کی پالیسی ان فائلز کو <ph name="DESTINATION_NAME" /> میں ڈاؤن لوڈ کرنے کی تجویز نہیں کرتی ہے}}</translation>
 <translation id="8157295877370077682">سائٹ چھوڑیں</translation>
 <translation id="8163866351304776260">بائیں طرف مستطیل سوراخ</translation>
+<translation id="8175330382720204696">گورنمنٹ لیٹر</translation>
 <translation id="8175796834047840627">‏آپ کے سائن ان ہونے کی وجہ سے Chrome آپ کے کارڈز کو آپ کے Google اکاؤنٹ میں محفوظ کرنے کی پیشکش کر رہا ہے۔ آپ اس برتاؤ کو ترتیبات میں تبدیل کر سکتے ہیں۔</translation>
 <translation id="8176440868214972690">اس آلہ کے منتظم نے کچھ معلومات جیسے ترتیبات یا پالیسیاں درج ذیل ویب سائٹ پر بھیجی ہیں۔</translation>
 <translation id="8184538546369750125">عالمی ڈیفالٹ استعمال کریں (اجازت دیں)</translation>
@@ -2894,6 +2918,7 @@
 <translation id="8449155699563577224">‏‎17 x 24 انچ</translation>
 <translation id="8449836157089738489">سبھی کو نئے ٹیب گروپ میں کھولیں</translation>
 <translation id="8457125768502047971">غیر معین</translation>
+<translation id="8458202188076138974">Letter Extra</translation>
 <translation id="8461694314515752532">اپنے ذاتی مطابقت پذیر پاس فریز کے ساتھ مطابقت پذیر کردہ ڈیٹا کی مرموزکاری کریں</translation>
 <translation id="8466379296835108687">{COUNT,plural, =1{1 کریڈٹ کارڈ}other{# کریڈٹ کارڈز}}</translation>
 <translation id="8468358362970107653">‏C3 لفافہ</translation>
@@ -3100,6 +3125,7 @@
 <translation id="9042617223719777575">بڑی گنجائش</translation>
 <translation id="9044359186343685026">‏Touch ID کا استعمال کریں</translation>
 <translation id="9045525010788763347"><ph name="RESULT_MODIFIED_DATE" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation>
+<translation id="9048662076076074925">‏‎24 x 36 انچ</translation>
 <translation id="9049981332609050619">آپ نے <ph name="DOMAIN" /> تک پہنچنے کی کوشش کی لیکن سرور نے ایک غلط سرٹیفکیٹ پیش کیا۔</translation>
 <translation id="9050666287014529139">پاس فریز</translation>
 <translation id="9056953843249698117">اسٹور</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index 96d8b1e..ee798bf 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -265,6 +265,7 @@
 <translation id="1567040042588613346">此政策運作正常,但與其他地方設定的值相同,並已取代該值。</translation>
 <translation id="1569487616857761740">輸入到期日</translation>
 <translation id="1569694109004336106">Google Chrome 正在嘗試開啟 Windows Hello,以便在填入密碼時驗證。</translation>
+<translation id="1572765991610098222"><ph name="WIDTH" /> x <ph name="HEIGHT" /> 吋</translation>
 <translation id="1581080074034554886">信用卡驗證碼 (CVC)</translation>
 <translation id="1583429793053364125">顯示此網頁時發生錯誤。</translation>
 <translation id="1586541204584340881">您已安裝的擴充程式</translation>
@@ -1106,6 +1107,7 @@
 <translation id="3787705759683870569">到期日:<ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="3789155188480882154">粗幼:16</translation>
 <translation id="3789841737615482174">安裝</translation>
+<translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> 吋)</translation>
 <translation id="3793574014653384240">最近發生的當機次數和原因</translation>
 <translation id="3795344968043407227">獨立音樂和另類音樂</translation>
 <translation id="3799805948399000906">要求的字型</translation>
@@ -1381,6 +1383,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />,㩒一下 Tab 鍵,然後㩒一下 Enter 鍵就可以透過 Google 翻譯翻譯呢個頁面</translation>
 <translation id="4514308731478712184">關閉瀏覽過程</translation>
 <translation id="4515275063822566619">信用卡和地址選項均來自 Chrome 和您的 Google 帳戶 (<ph name="ACCOUNT_EMAIL" />)。您可在「<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />」中管理這些選項。</translation>
+<translation id="4520048001084013693">根據系統管理員政策,你無法下載這個檔案</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> 毫米 (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Monarch 信封</translation>
 <translation id="4521916730539354575">左匣</translation>
@@ -2382,6 +2385,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">無法運送至此地址,請選取其他地址。</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /><ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">禁止上傳</translation>
 <translation id="7132939140423847331">管理員已禁止複製此資料。</translation>
 <translation id="7135130955892390533">顯示狀態</translation>
 <translation id="7138472120740807366">送貨方式</translation>
@@ -2514,6 +2518,7 @@
 <translation id="7441627299479586546">政策主體有誤</translation>
 <translation id="7442725080345379071">淺橙色</translation>
 <translation id="7445762425076701745">您所連線的伺服器身分無法完全驗證,該伺服器所使用的名稱只在您的網絡中有效,而外部憑證授權單位無法驗證該伺服器的擁有權。由於某些憑證授權單位可核發憑證,但系統無法確保您所連接的網站正確,因此仍可能會被攻擊。</translation>
+<translation id="7447625772313191651"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> 公釐)</translation>
 <translation id="7451311239929941790"><ph name="BEGIN_LINK" />進一步瞭解<ph name="END_LINK" />這個問題。</translation>
 <translation id="7455133967321480974">使用全域預設值 (封鎖)</translation>
 <translation id="745640750744109667">A0x3</translation>
@@ -2614,6 +2619,7 @@
 <translation id="7658239707568436148">取消</translation>
 <translation id="7659327900411729175">Kaku 8 信封</translation>
 <translation id="7659878911471462949">喜極而泣</translation>
+<translation id="766014026101194726">{0,plural, =1{根據系統管理員政策,你無法上傳這個檔案}other{根據系統管理員政策,你無法上傳這 # 個檔案}}</translation>
 <translation id="7662298039739062396">由擴充程式控制的設定</translation>
 <translation id="7663736086183791259">憑證 <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">不允許用於無痕模式</translation>
@@ -2708,6 +2714,7 @@
 <translation id="7939744324936979484">民謠和傳統音樂</translation>
 <translation id="7941628148012649605">Chou 4 信封</translation>
 <translation id="7942349550061667556">紅色</translation>
+<translation id="7943397946612013052">禁止下載</translation>
 <translation id="7943893128817522649">可要求自動下載多個檔案</translation>
 <translation id="7947285636476623132">請檢查您的到期年份,然後再試一次</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />,㩒一下 Tab 鍵,然後㩒一下 Enter 鍵就可以了解 Chrome 嘅功能</translation>
@@ -2819,6 +2826,7 @@
 <translation id="8218327578424803826">已指派的位置:</translation>
 <translation id="8225771182978767009">設定此電腦的用戶已封鎖此網站。</translation>
 <translation id="8228419419708659934">雙頁檢視</translation>
+<translation id="8229288958566709448"><ph name="WIDTH" /> x <ph name="HEIGHT" /> 公釐</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />、<ph name="TYPE_2" /></translation>
 <translation id="8231564988424805352">體育遊戲</translation>
 <translation id="8232343881378637145">平台溫度</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 2c46a1d..3b5e80f 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -265,6 +265,7 @@
 <translation id="1567040042588613346">這項政策運作正常,但與其他地方設定的值相同,並已取代該值。</translation>
 <translation id="1569487616857761740">輸入到期日</translation>
 <translation id="1569694109004336106">Google Chrome 正在嘗試開啟 Windows Hello,以便在填入密碼時進行驗證。</translation>
+<translation id="1572765991610098222"><ph name="WIDTH" /> x <ph name="HEIGHT" /> 吋</translation>
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">顯示這個網頁時發生錯誤。</translation>
 <translation id="1586541204584340881">你安裝的擴充功能</translation>
@@ -1106,6 +1107,7 @@
 <translation id="3787705759683870569">到期日:<ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="3789155188480882154">粗細:16</translation>
 <translation id="3789841737615482174">安裝</translation>
+<translation id="3792100426446126328"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> 吋)</translation>
 <translation id="3793574014653384240">最近發生當機情形的次數和原因</translation>
 <translation id="3795344968043407227">獨立與另類音樂</translation>
 <translation id="3799805948399000906">要求的字型</translation>
@@ -1381,6 +1383,7 @@
 <translation id="4509074745930862522"><ph name="TRANSLATE_FOCUSED_FRIENDLY_MATCH_TEXT" />,按下 Tab 鍵再按下 Enter 鍵即可使用 Google 翻譯來翻譯這個網頁</translation>
 <translation id="4514308731478712184">關閉瀏覽歷程</translation>
 <translation id="4515275063822566619">信用卡和地址資訊皆來自 Chrome 和你的 Google 帳戶 (<ph name="ACCOUNT_EMAIL" />)。你可以在<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />頁面管理這些資訊。</translation>
+<translation id="4520048001084013693">根據系統管理員政策,你無法下載這個檔案</translation>
 <translation id="4521157617044179198"><ph name="WIDTH" /> × <ph name="HEIGHT" /> 公釐 (<ph name="ORIENTATION" />)</translation>
 <translation id="4521280267704259211">Envelope Monarch</translation>
 <translation id="4521916730539354575">左匣</translation>
@@ -2382,6 +2385,7 @@
           <ph name="END_LIST" /></translation>
 <translation id="7129409597930077180">無法運送到這個地址,請改用其他地址。</translation>
 <translation id="7129809579943936035"><ph name="VALUE_PROP" /><ph name="DETAILS" /></translation>
+<translation id="7130775116821607281">禁止上傳</translation>
 <translation id="7132939140423847331">管理員已禁止複製這個資料。</translation>
 <translation id="7135130955892390533">顯示狀態</translation>
 <translation id="7138472120740807366">快遞方式</translation>
@@ -2514,6 +2518,7 @@
 <translation id="7441627299479586546">政策主體有誤</translation>
 <translation id="7442725080345379071">淺橘色</translation>
 <translation id="7445762425076701745">你所連線的伺服器身分無法完全驗證,該伺服器所使用的名稱僅在你的網路中有效,無法驗證外部憑證授權單位的擁有權。即使某些憑證授權單位會核發這些憑證,不過無法就此確保你所連上的網站是正確的,而不會遭到網路攻擊。</translation>
+<translation id="7447625772313191651"><ph name="NAME" /> (<ph name="WIDTH" /> x <ph name="HEIGHT" /> 公釐)</translation>
 <translation id="7451311239929941790"><ph name="BEGIN_LINK" />進一步瞭解<ph name="END_LINK" />這個問題。</translation>
 <translation id="7455133967321480974">使用全域預設值 (封鎖)</translation>
 <translation id="745640750744109667">A0 x 3</translation>
@@ -2614,6 +2619,7 @@
 <translation id="7658239707568436148">取消</translation>
 <translation id="7659327900411729175">Envelope Kaku 8</translation>
 <translation id="7659878911471462949">喜極而泣</translation>
+<translation id="766014026101194726">{0,plural, =1{根據系統管理員政策,你無法上傳這個檔案}other{根據系統管理員政策,你無法上傳這 # 個檔案}}</translation>
 <translation id="7662298039739062396">由擴充功能控制的設定</translation>
 <translation id="7663736086183791259">憑證 <ph name="CERTIFICATE_VALIDITY" /></translation>
 <translation id="7666397036351755929">禁止用於無痕模式</translation>
@@ -2708,6 +2714,7 @@
 <translation id="7939744324936979484">民謠與傳統音樂</translation>
 <translation id="7941628148012649605">Envelope Chou 4</translation>
 <translation id="7942349550061667556">紅色</translation>
+<translation id="7943397946612013052">禁止下載</translation>
 <translation id="7943893128817522649">可以要求自動下載多個檔案</translation>
 <translation id="7947285636476623132">請檢查信用卡到期年份,然後再試一次</translation>
 <translation id="7947813448670013867"><ph name="SEE_CHROME_TIPS_FOCUSED_FRIENDLY_MATCH_TEXT" />;按下 Tab 鍵再按下 Enter 鍵即可瞭解 Chrome 功能</translation>
@@ -2819,6 +2826,7 @@
 <translation id="8218327578424803826">指派的位置:</translation>
 <translation id="8225771182978767009">設定這部電腦的使用者選擇封鎖這個網站。</translation>
 <translation id="8228419419708659934">雙頁檢視</translation>
+<translation id="8229288958566709448"><ph name="WIDTH" /> x <ph name="HEIGHT" /> 公釐</translation>
 <translation id="822964464349305906"><ph name="TYPE_1" />、<ph name="TYPE_2" /></translation>
 <translation id="8231564988424805352">體育遊戲</translation>
 <translation id="8232343881378637145">平台溫度</translation>
diff --git a/components/sync/base/features.cc b/components/sync/base/features.cc
index e90396df..b34e796 100644
--- a/components/sync/base/features.cc
+++ b/components/sync/base/features.cc
@@ -119,6 +119,10 @@
              "UseSyncInvalidations",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+BASE_FEATURE(kSyncPersistInvalidations,
+             "SyncPersistInvalidations",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 BASE_FEATURE(kUseSyncInvalidationsForWalletAndOffer,
              "UseSyncInvalidationsForWalletAndOffer",
              base::FEATURE_DISABLED_BY_DEFAULT);
@@ -146,6 +150,10 @@
 // this exclusively for web signouts.
 BASE_FEATURE(kSyncPauseUponAnyPersistentAuthError,
              "SyncPauseUponAnyPersistentAuthError",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+
+BASE_FEATURE(kSyncEnforceBookmarksCountLimit,
+             "SyncEnforceBookmarksCountLimit",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
 }  // namespace syncer
diff --git a/components/sync/base/features.h b/components/sync/base/features.h
index 87c5c10b..ae89cff 100644
--- a/components/sync/base/features.h
+++ b/components/sync/base/features.h
@@ -145,6 +145,12 @@
 // SyncSendInterestedDataTypes must be enabled for this to take effect.
 BASE_DECLARE_FEATURE(kUseSyncInvalidations);
 
+// If enabled, all incoming invalidations will be stored in ModelTypeState
+// proto message.
+// TODO(crbug/1365292): Add more information about this feature after
+// upload/download invalidations support from ModelTypeState msg will be added.
+BASE_DECLARE_FEATURE(kSyncPersistInvalidations);
+
 // If enabled, types related to Wallet and Offer will be included in interested
 // data types, and the device will listen to new invalidations for those types
 // (if they are enabled).
@@ -168,6 +174,9 @@
 
 BASE_DECLARE_FEATURE(kSyncPauseUponAnyPersistentAuthError);
 
+// If enabled, issues error and disables bookmarks sync when limit is crossed.
+BASE_DECLARE_FEATURE(kSyncEnforceBookmarksCountLimit);
+
 }  // namespace syncer
 
 #endif  // COMPONENTS_SYNC_BASE_FEATURES_H_
diff --git a/components/sync/driver/sync_service.h b/components/sync/driver/sync_service.h
index 154f7ce..e28803e 100644
--- a/components/sync/driver/sync_service.h
+++ b/components/sync/driver/sync_service.h
@@ -148,8 +148,8 @@
     // Sync is inactive, e.g. due to enterprise policy, or simply because there
     // is no authenticated user.
     DISABLED,
-    // Sync is paused, e.g. because the user signed out on the web, and the
-    // engine is inactive.
+    // Sync is paused, e.g. because there is a persistent auth error (e.g. user
+    // signed out on the web on desktop), and the engine is inactive.
     PAUSED,
     // Sync's startup was deferred, so that it doesn't slow down browser
     // startup. Once the deferral time (usually 10s) expires, or something
diff --git a/components/sync/driver/sync_service_impl.cc b/components/sync/driver/sync_service_impl.cc
index dc62a33..e7c3f512 100644
--- a/components/sync/driver/sync_service_impl.cc
+++ b/components/sync/driver/sync_service_impl.cc
@@ -335,8 +335,8 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   // If the engine isn't allowed to start anymore due to the credentials change,
-  // then shut down. This happens when the user signs out on the web, i.e. we're
-  // in the "Sync paused" state.
+  // then shut down. This happens when there is a persistent auth error (e.g.
+  // the user signs out on the web), which implies the "Sync paused" state.
   if (!IsEngineAllowedToRun()) {
     // If the engine currently exists, then ResetEngine() will notify observers
     // anyway. Otherwise, notify them here. (One relevant case is when entering
diff --git a/components/sync/driver/sync_service_impl_unittest.cc b/components/sync/driver/sync_service_impl_unittest.cc
index ce6bd33..ee0bec47 100644
--- a/components/sync/driver/sync_service_impl_unittest.cc
+++ b/components/sync/driver/sync_service_impl_unittest.cc
@@ -862,8 +862,8 @@
             service()->GetAuthError().state());
   EXPECT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS,
             observer.auth_error().state());
-  // The overall state should remain ACTIVE.
-  EXPECT_EQ(SyncService::TransportState::ACTIVE,
+  // Sync should pause.
+  EXPECT_EQ(SyncService::TransportState::PAUSED,
             service()->GetTransportState());
 
   service()->RemoveObserver(&observer);
@@ -916,8 +916,8 @@
   // Check that the invalid token is returned from sync.
   ASSERT_EQ(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS,
             service()->GetAuthError().state());
-  // The overall state should remain ACTIVE.
-  ASSERT_EQ(SyncService::TransportState::ACTIVE,
+  // Sync should pause.
+  ASSERT_EQ(SyncService::TransportState::PAUSED,
             service()->GetTransportState());
 
   // Now emulate Chrome receiving a new, valid LST.
diff --git a/components/sync/engine/model_type_worker.cc b/components/sync/engine/model_type_worker.cc
index 892c56a..eaba7e5 100644
--- a/components/sync/engine/model_type_worker.cc
+++ b/components/sync/engine/model_type_worker.cc
@@ -572,6 +572,19 @@
       ++it;
     }
   }
+  if (base::FeatureList::IsEnabled(kSyncPersistInvalidations)) {
+    // Store invalidations to |model_type_state_|.
+    model_type_state_.clear_invalidations();
+    for (const auto& inv : pending_invalidations_) {
+      SyncInvalidation* invalidation = inv.pending_invalidation.get();
+      sync_pb::ModelTypeState_Invalidation* invalidation_to_store =
+          model_type_state_.add_invalidations();
+      invalidation_to_store->set_hint(invalidation->GetPayload());
+      if (!invalidation->IsUnknownVersion()) {
+        invalidation_to_store->set_version(invalidation->GetVersion());
+      }
+    }
+  }
 
   has_dropped_invalidation_ = false;
 
diff --git a/components/sync/engine/model_type_worker_unittest.cc b/components/sync/engine/model_type_worker_unittest.cc
index 16228b8..a5d21dfb 100644
--- a/components/sync/engine/model_type_worker_unittest.cc
+++ b/components/sync/engine/model_type_worker_unittest.cc
@@ -2677,6 +2677,46 @@
   }
 }
 
+// Verifies the management of pending invalidations and ModelTypeState.
+TEST_F(ModelTypeWorkerTest, ModelTypeStateAfterApplyUpdates) {
+  base::test::ScopedFeatureList feature;
+  feature.InitAndEnableFeature(kSyncPersistInvalidations);
+
+  NormalInitialize();
+
+  worker()->RecordRemoteInvalidation(BuildInvalidation(1, "bm_hint_1"));
+  worker()->RecordRemoteInvalidation(BuildInvalidation(2, "bm_hint_2"));
+  worker()->RecordRemoteInvalidation(BuildInvalidation(3, "bm_hint_3"));
+
+  sync_pb::GetUpdateTriggers gu_trigger;
+  // A GetUpdates request is started (but doesn't finish yet). This causes
+  // the existing invalidations to get marked as "processed".
+  worker()->PrepareGetUpdates(&gu_trigger);
+  ASSERT_EQ(3, gu_trigger.notification_hint_size());
+  EXPECT_EQ("bm_hint_1", gu_trigger.notification_hint(0));
+  EXPECT_EQ("bm_hint_2", gu_trigger.notification_hint(1));
+  EXPECT_EQ("bm_hint_3", gu_trigger.notification_hint(2));
+  EXPECT_FALSE(gu_trigger.client_dropped_hints());
+
+  // While the GetUpdates request is still ongoing, more invalidations come
+  // in. These are marked as "unprocessed".
+  worker()->RecordRemoteInvalidation(
+      BuildInvalidation(4, "unprocessed_hint_4"));
+  worker()->RecordRemoteInvalidation(
+      BuildInvalidation(5, "unprocessed_hint_5"));
+
+  // The GetUpdates request finishes. This should delete the processed
+  // invalidations.
+  worker()->ApplyUpdates(status_controller());
+
+  // Unprocessed invalidations after ApplyUpdates are in ModelTypeState.
+  EXPECT_EQ(2, processor()->GetNthUpdateState(0).invalidations_size());
+  EXPECT_EQ("unprocessed_hint_4",
+            processor()->GetNthUpdateState(0).invalidations(0).hint());
+  EXPECT_EQ("unprocessed_hint_5",
+            processor()->GetNthUpdateState(0).invalidations(1).hint());
+}
+
 // Test the dropping of invalidation hints.  Receives invalidations one by one.
 // Pending invalidation vector buffer size is 10.
 TEST_F(ModelTypeWorkerTest, DropHintsLocally_OneAtATime) {
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h
index de72477..8ac463b2 100644
--- a/components/sync/protocol/proto_visitors.h
+++ b/components/sync/protocol/proto_visitors.h
@@ -948,6 +948,7 @@
   VISIT(position);
   VISIT(group_guid);
   VISIT(url);
+  VISIT(title);
 }
 
 VISIT_PROTO_FIELDS(const sync_pb::SearchEngineSpecifics& proto) {
diff --git a/components/sync/protocol/saved_tab_group_specifics.proto b/components/sync/protocol/saved_tab_group_specifics.proto
index 66927835..0f4bc9a 100644
--- a/components/sync/protocol/saved_tab_group_specifics.proto
+++ b/components/sync/protocol/saved_tab_group_specifics.proto
@@ -62,6 +62,10 @@
 
   // Tab Data used for constructing the tab.
   optional string url = 3;
+
+  // The displayed title of the tab, shown on the saved tab group button's
+  // context menu.
+  optional string title = 4;
 }
 
 message SavedTabGroupSpecifics {
@@ -76,4 +80,4 @@
     SavedTabGroup group = 4;
     SavedTabGroupTab tab = 5;
   }
-}
\ No newline at end of file
+}
diff --git a/components/sync/test/mock_update_handler.h b/components/sync/test/mock_update_handler.h
index d41bfa6..75a9d29 100644
--- a/components/sync/test/mock_update_handler.h
+++ b/components/sync/test/mock_update_handler.h
@@ -6,7 +6,6 @@
 #define COMPONENTS_SYNC_TEST_MOCK_UPDATE_HANDLER_H_
 
 #include <memory>
-#include <vector>
 
 #include "base/compiler_specific.h"
 #include "components/sync/base/model_type.h"
diff --git a/components/sync/test/test_sync_service.cc b/components/sync/test/test_sync_service.cc
index 9c19da5..bd90ed2c 100644
--- a/components/sync/test/test_sync_service.cc
+++ b/components/sync/test/test_sync_service.cc
@@ -62,6 +62,9 @@
 }
 
 void TestSyncService::SetPersistentAuthErrorOtherThanWebSignout() {
+  // This mimics the behavior for the feature toggle
+  // kSyncPauseUponAnyPersistentAuthError being enabled.
+  transport_state_ = TransportState::PAUSED;
   auth_error_ = GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
       GoogleServiceAuthError::InvalidGaiaCredentialsReason::
           CREDENTIALS_REJECTED_BY_SERVER);
diff --git a/components/sync_bookmarks/bookmark_model_type_processor.cc b/components/sync_bookmarks/bookmark_model_type_processor.cc
index d834f70..09eab35 100644
--- a/components/sync_bookmarks/bookmark_model_type_processor.cc
+++ b/components/sync_bookmarks/bookmark_model_type_processor.cc
@@ -20,6 +20,7 @@
 #include "components/bookmarks/browser/bookmark_utils.h"
 #include "components/sync/base/client_tag_hash.h"
 #include "components/sync/base/data_type_histogram.h"
+#include "components/sync/base/features.h"
 #include "components/sync/base/model_type.h"
 #include "components/sync/base/time.h"
 #include "components/sync/engine/commit_queue.h"
@@ -39,6 +40,7 @@
 #include "components/sync_bookmarks/switches.h"
 #include "components/sync_bookmarks/synced_bookmark_tracker_entity.h"
 #include "components/undo/bookmark_undo_utils.h"
+#include "ui/base/models/tree_node_iterator.h"
 
 namespace sync_bookmarks {
 
@@ -101,6 +103,20 @@
   return "";
 }
 
+size_t CountSyncableBookmarksFromModel(bookmarks::BookmarkModel* model) {
+  size_t count = 0;
+  ui::TreeNodeIterator<const bookmarks::BookmarkNode> iterator(
+      model->root_node());
+  // Does not count the root node.
+  while (iterator.has_next()) {
+    const bookmarks::BookmarkNode* node = iterator.Next();
+    if (model->client()->CanSyncNode(node)) {
+      ++count;
+    }
+  }
+  return count;
+}
+
 }  // namespace
 
 BookmarkModelTypeProcessor::BookmarkModelTypeProcessor(
@@ -310,6 +326,7 @@
   error_handler_ = request.error_handler;
 
   DCHECK(!cache_guid_.empty());
+  DCHECK(error_handler_);
   ConnectIfReady();
 }
 
@@ -323,6 +340,24 @@
     return;
   }
 
+  DCHECK(error_handler_);
+
+  // Issue error and disable sync if bookmarks exceed limit.
+  // TODO(ankushkush): Think about adding two different limits: one for when
+  // sync just starts, the other (larger one) as hard limit, incl. incremental
+  // changes.
+  const size_t count = bookmark_tracker_
+                           ? bookmark_tracker_->TrackedBookmarksCount()
+                           : CountSyncableBookmarksFromModel(bookmark_model_);
+  if (count > max_bookmarks_till_sync_enabled_ &&
+      base::FeatureList::IsEnabled(syncer::kSyncEnforceBookmarksCountLimit)) {
+    StopTrackingMetadataAndResetTracker();
+    start_callback_.Reset();
+    error_handler_.Run(
+        syncer::ModelError(FROM_HERE, "Local bookmarks count exceed limit."));
+    return;
+  }
+
   DCHECK(!cache_guid_.empty());
 
   if (bookmark_tracker_ &&
@@ -393,6 +428,21 @@
 
 void BookmarkModelTypeProcessor::NudgeForCommitIfNeeded() {
   DCHECK(bookmark_tracker_);
+
+  // Issue error and disable sync if the number of local bookmarks exceed limit.
+  // If |error_handler_| is not set, the check is ignored because this gets
+  // re-evaluated in ConnectIfReady().
+  if (error_handler_ &&
+      bookmark_tracker_->TrackedBookmarksCount() >
+          max_bookmarks_till_sync_enabled_ &&
+      base::FeatureList::IsEnabled(syncer::kSyncEnforceBookmarksCountLimit)) {
+    StopTrackingMetadataAndResetTracker();
+    start_callback_.Reset();
+    error_handler_.Run(
+        syncer::ModelError(FROM_HERE, "Local bookmarks count exceed limit."));
+    return;
+  }
+
   // Don't bother sending anything if there's no one to send to.
   if (!worker_) {
     return;
@@ -587,4 +637,21 @@
   }
 }
 
+void BookmarkModelTypeProcessor::SetMaxBookmarksTillSyncEnabledForTest(
+    size_t limit) {
+  max_bookmarks_till_sync_enabled_ = limit;
+}
+
+void BookmarkModelTypeProcessor::StopTrackingMetadataAndResetTracker() {
+  if (!bookmark_tracker_) {
+    return;
+  }
+  DCHECK(bookmark_model_);
+  DCHECK(bookmark_model_observer_);
+
+  StopTrackingMetadata();
+  bookmark_tracker_.reset();
+  schedule_save_closure_.Run();
+}
+
 }  // namespace sync_bookmarks
diff --git a/components/sync_bookmarks/bookmark_model_type_processor.h b/components/sync_bookmarks/bookmark_model_type_processor.h
index 33a3826c..be14cde1 100644
--- a/components/sync_bookmarks/bookmark_model_type_processor.h
+++ b/components/sync_bookmarks/bookmark_model_type_processor.h
@@ -94,9 +94,14 @@
   const SyncedBookmarkTracker* GetTrackerForTest() const;
   bool IsConnectedForTest() const;
 
+  // Reset max bookmarks till which sync is enabled.
+  void SetMaxBookmarksTillSyncEnabledForTest(size_t limit);
+
   base::WeakPtr<syncer::ModelTypeControllerDelegate> GetWeakPtr();
 
  private:
+  static constexpr size_t kDefaultMaxBookmarksTillSyncEnabled = 100000;
+
   SEQUENCE_CHECKER(sequence_checker_);
 
   // If preconditions are met, inform sync that we are ready to connect.
@@ -120,6 +125,9 @@
   void StartTrackingMetadata();
   void StopTrackingMetadata();
 
+  // Resets bookmark tracker in addition to stopping metadata tracking.
+  void StopTrackingMetadataAndResetTracker();
+
   // Creates a DictionaryValue for local and remote debugging information about
   // |node| and appends it to |all_nodes|. It does the same for child nodes
   // recursively. |index| is the index of |node| within its parent. |index|
@@ -177,6 +185,9 @@
 
   std::unique_ptr<BookmarkModelObserverImpl> bookmark_model_observer_;
 
+  // This member variable exists only to allow tests to override the limit.
+  size_t max_bookmarks_till_sync_enabled_ = kDefaultMaxBookmarksTillSyncEnabled;
+
   // WeakPtrFactory for this processor for ModelTypeController.
   base::WeakPtrFactory<BookmarkModelTypeProcessor>
       weak_ptr_factory_for_controller_{this};
diff --git a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
index 5d97bf4..aff0718 100644
--- a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
+++ b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
@@ -23,6 +23,7 @@
 #include "components/bookmarks/test/test_bookmark_client.h"
 #include "components/favicon/core/test/mock_favicon_service.h"
 #include "components/sync/base/client_tag_hash.h"
+#include "components/sync/base/features.h"
 #include "components/sync/base/unique_position.h"
 #include "components/sync/engine/commit_queue.h"
 #include "components/sync/engine/data_type_activation_response.h"
@@ -275,6 +276,7 @@
   void SimulateOnSyncStarting() {
     syncer::DataTypeActivationRequest request;
     request.cache_guid = kCacheGuid;
+    request.error_handler = error_handler_.Get();
     processor_->OnSyncStarting(request, base::DoNothing());
   }
 
@@ -318,9 +320,16 @@
     return local_changes;
   }
 
+  base::MockRepeatingCallback<void(const syncer::ModelError&)>*
+  error_handler() {
+    return &error_handler_;
+  }
+
  private:
   base::test::TaskEnvironment task_environment_;
   NiceMock<base::MockCallback<base::RepeatingClosure>> schedule_save_closure_;
+  NiceMock<base::MockRepeatingCallback<void(const syncer::ModelError&)>>
+      error_handler_;
   BookmarkUndoService bookmark_undo_service_;
   NiceMock<favicon::MockFaviconService> favicon_service_;
   NiceMock<MockCommitQueue> mock_commit_queue_;
@@ -865,6 +874,193 @@
                   .bookmarks_hierarchy_fields_reuploaded());
 }
 
+TEST_F(BookmarkModelTypeProcessorTest,
+       ShouldReportErrorIfIncrementalLocalCreationCrossesMaxCountLimit) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(syncer::kSyncEnforceBookmarksCountLimit);
+  // Set a limit of 3 bookmarks, i.e. limit it to the 3 permanent nodes.
+  processor()->SetMaxBookmarksTillSyncEnabledForTest(3);
+
+  // Expect failure when adding new bookmark.
+  EXPECT_CALL(*error_handler(), Run);
+  EXPECT_CALL(*schedule_save_closure(), Run);
+
+  SimulateOnSyncStarting();
+  SimulateModelReadyToSyncWithInitialSyncDone();
+  SimulateConnectSync();
+
+  const std::string kNodeId = "node_id1";
+  const std::string kTitle = "title1";
+  const std::string kUrl = "http://www.url1.com";
+  const std::string kIconUrl = "http://www.url1.com/favicon";
+
+  ASSERT_TRUE(processor()->IsConnectedForTest());
+  // Add a new bookmark to exceed the limit.
+  const bookmarks::BookmarkNode* bookmark_bar_node =
+      bookmark_model()->bookmark_bar_node();
+  bookmark_model()->AddURL(
+      /*parent=*/bookmark_bar_node, /*index=*/0, base::UTF8ToUTF16(kTitle),
+      GURL(kUrl));
+
+  EXPECT_FALSE(processor()->IsConnectedForTest());
+}
+
+TEST_F(
+    BookmarkModelTypeProcessorTest,
+    ShouldReportErrorIfBookmarksCountExceedsLimitOnStartupWhenMetadataMatchesModel) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(syncer::kSyncEnforceBookmarksCountLimit);
+  // Set a limit of 3 bookmarks, i.e. limit it to the 3 permanent nodes.
+  processor()->SetMaxBookmarksTillSyncEnabledForTest(3);
+
+  // Expect error twice. First, when new bookmark is added. Next after restart.
+  EXPECT_CALL(*error_handler(), Run).Times(2);
+  EXPECT_CALL(*schedule_save_closure(), Run).Times(2);
+
+  SimulateModelReadyToSyncWithInitialSyncDone();
+  SimulateOnSyncStarting();
+  SimulateConnectSync();
+
+  const std::string kNodeId = "node_id1";
+  const std::string kTitle = "title1";
+  const std::string kUrl = "http://www.url1.com";
+  const std::string kIconUrl = "http://www.url1.com/favicon";
+
+  // Add a new bookmark to exceed the limit.
+  const bookmarks::BookmarkNode* bookmark_bar_node =
+      bookmark_model()->bookmark_bar_node();
+  const bookmarks::BookmarkNode* bookmarknode = bookmark_model()->AddURL(
+      /*parent=*/bookmark_bar_node, /*index=*/0, base::UTF8ToUTF16(kTitle),
+      GURL(kUrl));
+
+  sync_pb::BookmarkModelMetadata model_metadata =
+      CreateMetadataForPermanentNodes(bookmark_model());
+
+  // Add an entry for the bookmark node.
+  *model_metadata.add_bookmarks_metadata() =
+      CreateNodeMetadata(bookmarknode, kNodeId);
+
+  // Save metadata for init after restart.
+  std::string metadata_str;
+  model_metadata.SerializeToString(&metadata_str);
+
+  // Simulate browser restart.
+  ResetModelTypeProcessor();
+  processor()->SetMaxBookmarksTillSyncEnabledForTest(3);
+  processor()->ModelReadyToSync(metadata_str, schedule_save_closure()->Get(),
+                                bookmark_model());
+  // Metadata matches model, so tracker should be not null.
+  EXPECT_THAT(processor()->GetTrackerForTest(), NotNull());
+  // Should invoke error_handler::Run and schedule_save_closure::Run.
+  SimulateOnSyncStarting();
+
+  EXPECT_THAT(processor()->GetTrackerForTest(), IsNull());
+}
+
+TEST_F(
+    BookmarkModelTypeProcessorTest,
+    ShouldReportErrorIfBookmarksCountExceedsLimitOnStartupWhenMetadataDoesNotMatchModel) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(syncer::kSyncEnforceBookmarksCountLimit);
+  // Set a limit of 3 bookmarks, i.e. limit it to the 3 permanent nodes.
+  processor()->SetMaxBookmarksTillSyncEnabledForTest(3);
+
+  // Expect error twice. First, when new bookmark is added. Next after restart.
+  EXPECT_CALL(*error_handler(), Run).Times(2);
+  // save closure is invoked only once because bookmark tracker won't be set by
+  // ModelReadyToSync().
+  EXPECT_CALL(*schedule_save_closure(), Run);
+
+  SimulateModelReadyToSyncWithInitialSyncDone();
+  SimulateOnSyncStarting();
+  SimulateConnectSync();
+
+  const std::string kNodeId = "node_id1";
+  const std::string kTitle = "title1";
+  const std::string kUrl = "http://www.url1.com";
+  const std::string kIconUrl = "http://www.url1.com/favicon";
+
+  // Add a new bookmark to exceed the limit.
+  const bookmarks::BookmarkNode* bookmark_bar_node =
+      bookmark_model()->bookmark_bar_node();
+  bookmark_model()->AddURL(
+      /*parent=*/bookmark_bar_node, /*index=*/0, base::UTF8ToUTF16(kTitle),
+      GURL(kUrl));
+
+  // Simulate browser restart.
+  ResetModelTypeProcessor();
+  processor()->SetMaxBookmarksTillSyncEnabledForTest(3);
+  SimulateModelReadyToSyncWithoutLocalMetadata();
+  // Metadata does not match model, so tracker should be null.
+  EXPECT_THAT(processor()->GetTrackerForTest(), IsNull());
+  // Should invoke error_handler::Run and schedule_save_closure::Run.
+  SimulateOnSyncStarting();
+
+  EXPECT_THAT(processor()->GetTrackerForTest(), IsNull());
+}
+
+TEST_F(
+    BookmarkModelTypeProcessorTest,
+    BookmarkModelShouldWorkNormallyEvenAfterSyncReportedErrorDueToMaxLimitCrossed) {
+  // Ensure that bookmarks model works normally even after sync reports error
+  // when max count limit is crossed.
+
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(syncer::kSyncEnforceBookmarksCountLimit);
+  // Set a limit of 3 bookmarks, i.e. limit it to the 3 permanent nodes.
+  processor()->SetMaxBookmarksTillSyncEnabledForTest(3);
+
+  SimulateModelReadyToSyncWithInitialSyncDone();
+  SimulateOnSyncStarting();
+  SimulateConnectSync();
+
+  const std::string kNodeId1 = "node_id1";
+  const std::string kTitle1 = "title1";
+  const std::string kUrl1 = "http://www.url1.com";
+
+  // Add a new bookmark to exceed the limit.
+  const bookmarks::BookmarkNode* bookmark_bar_node =
+      bookmark_model()->bookmark_bar_node();
+  const bookmarks::BookmarkNode* bookmarknode1 = bookmark_model()->AddURL(
+      /*parent=*/bookmark_bar_node, /*index=*/0, base::UTF8ToUTF16(kTitle1),
+      GURL(kUrl1));
+
+  sync_pb::BookmarkModelMetadata model_metadata =
+      CreateMetadataForPermanentNodes(bookmark_model());
+
+  // Add an entry for the bookmark node.
+  *model_metadata.add_bookmarks_metadata() =
+      CreateNodeMetadata(bookmarknode1, kNodeId1);
+
+  // Add another bookmark.
+  const std::string kNodeId2 = "node_id2";
+  const std::string kTitle2 = "title2";
+  const std::string kUrl2 = "http://www.url2.com";
+
+  const bookmarks::BookmarkNode* bookmarknode2 = bookmark_model()->AddURL(
+      /*parent=*/bookmark_bar_node, /*index=*/0, base::UTF8ToUTF16(kTitle2),
+      GURL(kUrl2));
+
+  // Add an entry for the bookmark node.
+  *model_metadata.add_bookmarks_metadata() =
+      CreateNodeMetadata(bookmarknode2, kNodeId2);
+
+  // Save metadata for init after restart.
+  std::string metadata_str;
+  model_metadata.SerializeToString(&metadata_str);
+
+  // Simulate browser restart.
+  ResetModelTypeProcessor();
+  processor()->SetMaxBookmarksTillSyncEnabledForTest(3);
+  processor()->ModelReadyToSync(metadata_str, base::DoNothing(),
+                                bookmark_model());
+  // Should lead to error_handler::Run.
+  SimulateOnSyncStarting();
+
+  // The second bookmark should have been added anyway.
+  EXPECT_EQ(bookmark_model()->bookmark_bar_node()->children().size(), 2u);
+}
+
 }  // namespace
 
 }  // namespace sync_bookmarks
diff --git a/components/sync_bookmarks/bookmark_sync_service.cc b/components/sync_bookmarks/bookmark_sync_service.cc
index 2c90ce46..fbda293 100644
--- a/components/sync_bookmarks/bookmark_sync_service.cc
+++ b/components/sync_bookmarks/bookmark_sync_service.cc
@@ -47,4 +47,10 @@
   return bookmark_model_type_processor_->GetWeakPtr();
 }
 
+void BookmarkSyncService::SetBookmarksLimitForTesting(size_t limit) {
+  bookmark_model_type_processor_
+      ->SetMaxBookmarksTillSyncEnabledForTest(  // IN-TEST
+          limit);
+}
+
 }  // namespace sync_bookmarks
diff --git a/components/sync_bookmarks/bookmark_sync_service.h b/components/sync_bookmarks/bookmark_sync_service.h
index 2e37006..f1dd97c 100644
--- a/components/sync_bookmarks/bookmark_sync_service.h
+++ b/components/sync_bookmarks/bookmark_sync_service.h
@@ -60,6 +60,9 @@
   virtual base::WeakPtr<syncer::ModelTypeControllerDelegate>
   GetBookmarkSyncControllerDelegate(favicon::FaviconService* favicon_service);
 
+  // For integration tests.
+  void SetBookmarksLimitForTesting(size_t limit);
+
  private:
   // BookmarkModelTypeProcessor handles communications between sync engine and
   // BookmarkModel/HistoryService.
diff --git a/components/viz/test/gpu_host_impl_test_api.cc b/components/viz/test/gpu_host_impl_test_api.cc
index 3d2907f..0cf9d7e 100644
--- a/components/viz/test/gpu_host_impl_test_api.cc
+++ b/components/viz/test/gpu_host_impl_test_api.cc
@@ -10,6 +10,8 @@
 #include <string>
 #include <utility>
 
+#include "build/build_config.h"
+
 namespace viz {
 
 gpu::GPUInfo GpuHostImplTestApi::HookDelegateBase::GetGPUInfo() const {
@@ -106,7 +108,7 @@
   original_delegate_->BindInterface(interface_name, std::move(interface_pipe));
 }
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 void GpuHostImplTestApi::HookDelegateBase::TerminateGpuProcess(
     const std::string& message) {
   original_delegate_->TerminateGpuProcess(message);
diff --git a/components/viz/test/gpu_host_impl_test_api.h b/components/viz/test/gpu_host_impl_test_api.h
index 74ea15f8..5827ae8 100644
--- a/components/viz/test/gpu_host_impl_test_api.h
+++ b/components/viz/test/gpu_host_impl_test_api.h
@@ -10,6 +10,7 @@
 #include <string>
 
 #include "base/memory/raw_ptr.h"
+#include "build/build_config.h"
 #include "components/viz/host/gpu_host_impl.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/viz/privileged/mojom/gl/gpu_service.mojom.h"
@@ -71,7 +72,7 @@
         override;
     void BindInterface(const std::string& interface_name,
                        mojo::ScopedMessagePipeHandle interface_pipe) override;
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
     void TerminateGpuProcess(const std::string& message) override;
 #endif
 
diff --git a/components/web_package/BUILD.gn b/components/web_package/BUILD.gn
index d11a6c53..350fddd 100644
--- a/components/web_package/BUILD.gn
+++ b/components/web_package/BUILD.gn
@@ -22,6 +22,8 @@
     "signed_web_bundles/signed_web_bundle_integrity_block.h",
     "signed_web_bundles/signed_web_bundle_signature_stack_entry.cc",
     "signed_web_bundles/signed_web_bundle_signature_stack_entry.h",
+    "signed_web_bundles/signed_web_bundle_signature_verifier.cc",
+    "signed_web_bundles/signed_web_bundle_signature_verifier.h",
     "signed_web_bundles/signed_web_bundle_utils.cc",
     "signed_web_bundles/signed_web_bundle_utils.h",
     "web_bundle_builder.cc",
@@ -48,12 +50,14 @@
 
 source_set("unit_tests") {
   testonly = true
+  data = [ "test/data/" ]
   sources = [
     "signed_web_bundles/ed25519_public_key_unittest.cc",
     "signed_web_bundles/ed25519_signature_unittest.cc",
     "signed_web_bundles/signed_web_bundle_id_unittest.cc",
     "signed_web_bundles/signed_web_bundle_integrity_block_unittest.cc",
     "signed_web_bundles/signed_web_bundle_signature_stack_entry_unittest.cc",
+    "signed_web_bundles/signed_web_bundle_signature_verifier_unittest.cc",
     "signed_web_bundles/signed_web_bundle_utils_unittest.cc",
     "web_bundle_builder_unittest.cc",
     "web_bundle_parser_factory_unittest.cc",
diff --git a/components/web_package/DEPS b/components/web_package/DEPS
index c5d494d..682d8ff 100644
--- a/components/web_package/DEPS
+++ b/components/web_package/DEPS
@@ -10,10 +10,10 @@
   "web_bundle_parser_fuzzer\.cc": [
     "+mojo/core/embedder/embedder.h",
   ],
-  "web_bundle_signer.cc": [
+  "(web_bundle_signer|signed_web_bundle_signature_verifier).cc": [
     "+crypto",
   ],
-  "(integrity_block_parser|ed25519_public_key|ed25519_signature|web_bundle_parser_unittest|web_bundle_signer)\.cc": [
+  "(integrity_block_parser|ed25519_public_key|ed25519_signature|web_bundle_parser_unittest|web_bundle_signer|signed_web_bundle_signature_verifier)\.cc": [
     "+third_party/boringssl",
   ],
 }
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.cc b/components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.cc
similarity index 86%
rename from chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.cc
rename to components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.cc
index 37f2d0a..a0dc9e39 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.cc
+++ b/components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 
 #include <vector>
 
@@ -22,7 +22,7 @@
 #include "crypto/secure_hash.h"
 #include "third_party/boringssl/src/include/openssl/sha.h"
 
-namespace web_app {
+namespace web_package {
 
 namespace {
 
@@ -31,14 +31,12 @@
   std::vector<uint8_t> integrity_block;
   integrity_block.insert(
       integrity_block.end(),
-      std::begin(web_package::IntegrityBlockParser::kIntegrityBlockMagicBytes),
-      std::end(web_package::IntegrityBlockParser::kIntegrityBlockMagicBytes));
+      std::begin(IntegrityBlockParser::kIntegrityBlockMagicBytes),
+      std::end(IntegrityBlockParser::kIntegrityBlockMagicBytes));
   integrity_block.insert(
       integrity_block.end(),
-      std::begin(
-          web_package::IntegrityBlockParser::kIntegrityBlockVersionMagicBytes),
-      std::end(
-          web_package::IntegrityBlockParser::kIntegrityBlockVersionMagicBytes));
+      std::begin(IntegrityBlockParser::kIntegrityBlockVersionMagicBytes),
+      std::end(IntegrityBlockParser::kIntegrityBlockVersionMagicBytes));
 
   // Encode the length of the signature stack array, which is an empty array.
   integrity_block.push_back(static_cast<uint8_t>(0x80));
@@ -56,8 +54,8 @@
 }
 
 void SignedWebBundleSignatureVerifier::VerifySignatures(
-    scoped_refptr<web_package::SharedFile> file,
-    web_package::SignedWebBundleIntegrityBlock integrity_block,
+    scoped_refptr<SharedFile> file,
+    SignedWebBundleIntegrityBlock integrity_block,
     SignatureVerificationCallback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
@@ -81,7 +79,7 @@
     std::array<uint8_t, SignedWebBundleSignatureVerifier::kSHA512DigestLength>,
     std::string>
 SignedWebBundleSignatureVerifier::CalculateHashOfUnsignedWebBundle(
-    scoped_refptr<web_package::SharedFile> file,
+    scoped_refptr<SharedFile> file,
     int64_t web_bundle_chunk_size,
     int64_t integrity_block_size) {
   // No `DCHECK_CALLED_ON_VALID_SEQUENCE` annotation here since this runs on a
@@ -126,7 +124,7 @@
 }
 
 void SignedWebBundleSignatureVerifier::OnHashOfUnsignedWebBundleCalculated(
-    web_package::SignedWebBundleIntegrityBlock integrity_block,
+    SignedWebBundleIntegrityBlock integrity_block,
     SignatureVerificationCallback callback,
     base::expected<std::array<uint8_t, kSHA512DigestLength>, std::string>
         unsigned_web_bundle_hash) {
@@ -145,7 +143,7 @@
     return;
   }
 
-  const web_package::SignedWebBundleSignatureStackEntry& signature_stack_entry =
+  const SignedWebBundleSignatureStackEntry& signature_stack_entry =
       integrity_block.signature_stack()[0];
 
   // The algorithm shown in [1] is a more abstract view of the verification
@@ -157,16 +155,16 @@
   // empty integrity block, we create an empty integrity block here from
   // scratch. This is because we cannot do any CBOR parsing of untrusted input
   // (like the Signed Web Bundle) outside of the data decoder process due to the
-  // "Rule Of 2". Any CBOR parsing must occur in `web_package::WebBundleParser`.
+  // "Rule Of 2". Any CBOR parsing must occur in `WebBundleParser`.
   //
   // Similarly, magic bytes and version of the integrity block are read deep
-  // within the low-level `web_package::IntegrityBlockParser`. The code that
+  // within the low-level `IntegrityBlockParser`. The code that
   // checks that the signature stack entry attributes only contain the
   // `ed25519PublicKey` attribute also lives in that class.
   //
   // [1]
   // https://github.com/WICG/webpackage/blob/3f95ec365b87ed19d2cb5186e473ccc4d011e2af/explainers/integrity-signature.md
-  std::vector<uint8_t> payload_to_verify = web_package::CreateSignaturePayload({
+  std::vector<uint8_t> payload_to_verify = CreateSignaturePayload({
       .unsigned_web_bundle_hash = *unsigned_web_bundle_hash,
       .integrity_block_cbor = CreateIntegrityBlockCBOR(),
       .attributes_cbor = signature_stack_entry.attributes_cbor(),
@@ -182,4 +180,4 @@
   std::move(callback).Run(absl::nullopt);
 }
 
-}  // namespace web_app
+}  // namespace web_package
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h b/components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h
similarity index 80%
rename from chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h
rename to components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h
index dc0881b..13878a57 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h
+++ b/components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_WEB_APPLICATIONS_ISOLATED_WEB_APPS_SIGNED_WEB_BUNDLE_SIGNATURE_VERIFIER_H_
-#define CHROME_BROWSER_WEB_APPLICATIONS_ISOLATED_WEB_APPS_SIGNED_WEB_BUNDLE_SIGNATURE_VERIFIER_H_
+#ifndef COMPONENTS_WEB_PACKAGE_SIGNED_WEB_BUNDLES_SIGNED_WEB_BUNDLE_SIGNATURE_VERIFIER_H_
+#define COMPONENTS_WEB_PACKAGE_SIGNED_WEB_BUNDLES_SIGNED_WEB_BUNDLE_SIGNATURE_VERIFIER_H_
 
 #include <string>
 
@@ -15,11 +15,9 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace web_package {
+
 class SharedFile;
 class SignedWebBundleIntegrityBlock;
-}
-
-namespace web_app {
 
 // This class can be used to verify the signatures contained in a Signed Web
 // Bundle's integrity block. Currently, only one signature is supported, as
@@ -59,10 +57,9 @@
   // currently supported.
   //
   // TODO(crbug.com/1366303): Support more than one signature.
-  virtual void VerifySignatures(
-      scoped_refptr<web_package::SharedFile> file,
-      web_package::SignedWebBundleIntegrityBlock integrity_block,
-      SignatureVerificationCallback callback);
+  virtual void VerifySignatures(scoped_refptr<SharedFile> file,
+                                SignedWebBundleIntegrityBlock integrity_block,
+                                SignatureVerificationCallback callback);
 
  private:
   // We don't use `SHA512_DIGEST_LENGTH` here, because we don't want to include
@@ -72,12 +69,12 @@
   // Calculate the SHA512 hash of the Signed Web Bundle excluding the integrity
   // block, i.e., the unsigned Web Bundle.
   static base::expected<std::array<uint8_t, kSHA512DigestLength>, std::string>
-  CalculateHashOfUnsignedWebBundle(scoped_refptr<web_package::SharedFile> file,
+  CalculateHashOfUnsignedWebBundle(scoped_refptr<SharedFile> file,
                                    int64_t web_bundle_chunk_size,
                                    int64_t integrity_block_size);
 
   void OnHashOfUnsignedWebBundleCalculated(
-      web_package::SignedWebBundleIntegrityBlock integrity_block,
+      SignedWebBundleIntegrityBlock integrity_block,
       SignatureVerificationCallback callback,
       base::expected<std::array<uint8_t, kSHA512DigestLength>, std::string>
           unsigned_web_bundle_hash);
@@ -89,6 +86,6 @@
   base::WeakPtrFactory<SignedWebBundleSignatureVerifier> weak_factory_{this};
 };
 
-}  // namespace web_app
+}  // namespace web_package
 
-#endif  // CHROME_BROWSER_WEB_APPLICATIONS_ISOLATED_WEB_APPS_SIGNED_WEB_BUNDLE_SIGNATURE_VERIFIER_H_
+#endif  // COMPONENTS_WEB_PACKAGE_SIGNED_WEB_BUNDLES_SIGNED_WEB_BUNDLE_SIGNATURE_VERIFIER_H_
diff --git a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier_unittest.cc b/components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier_unittest.cc
similarity index 83%
rename from chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier_unittest.cc
rename to components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier_unittest.cc
index 247cb73..59c86c74 100644
--- a/chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier_unittest.cc
+++ b/components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/web_applications/isolated_web_apps/signed_web_bundle_signature_verifier.h"
+#include "components/web_package/signed_web_bundles/signed_web_bundle_signature_verifier.h"
 
 #include <limits>
 #include <memory>
@@ -29,13 +29,13 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
-namespace web_app {
+namespace web_package {
 
 namespace {
 
 // The following values have been extracted by hand from the Signed Web Bundle
 // generated with the Go tool from github.com/WICG/webpackage located at
-// chrome/browser/web_applications/test/data/simple_signed.wbn.
+// components/web_package/test/data/simple_signed.wbn.
 constexpr uint8_t kEd25519PublicKey[] = {
     0xe4, 0xd5, 0x16, 0xc9, 0x85, 0x9a, 0xf8, 0x63, 0x56, 0xa3, 0x51,
     0x66, 0x7d, 0xbd, 0x00, 0x43, 0x61, 0x10, 0x1a, 0x92, 0xd4, 0x02,
@@ -68,13 +68,13 @@
     0xbd, 0x00, 0x43, 0x61, 0x10, 0x1a, 0x92, 0xd4, 0x02, 0x72, 0xfe,
     0x2b, 0xce, 0x81, 0xbb, 0x3b, 0x71, 0x3f, 0x2d};
 
-web_package::mojom::BundleIntegrityBlockSignatureStackEntryPtr
-MakeSignatureStackEntry(base::span<const uint8_t> public_key,
-                        base::span<const uint8_t> signature,
-                        base::span<const uint8_t> complete_entry_cbor,
-                        base::span<const uint8_t> attributes_cbor) {
+mojom::BundleIntegrityBlockSignatureStackEntryPtr MakeSignatureStackEntry(
+    base::span<const uint8_t> public_key,
+    base::span<const uint8_t> signature,
+    base::span<const uint8_t> complete_entry_cbor,
+    base::span<const uint8_t> attributes_cbor) {
   auto raw_signature_stack_entry =
-      web_package::mojom::BundleIntegrityBlockSignatureStackEntry::New();
+      mojom::BundleIntegrityBlockSignatureStackEntry::New();
   raw_signature_stack_entry->public_key =
       std::vector(std::begin(public_key), std::end(public_key));
   raw_signature_stack_entry->signature =
@@ -99,8 +99,8 @@
   base::FilePath GetTestFilePath(const base::FilePath& path) {
     base::FilePath test_data_dir;
     base::PathService::Get(base::DIR_SRC_TEST_DATA_ROOT, &test_data_dir);
-    test_data_dir = test_data_dir.Append(base::FilePath(
-        FILE_PATH_LITERAL("chrome/browser/web_applications/test/data")));
+    test_data_dir = test_data_dir.Append(
+        base::FilePath(FILE_PATH_LITERAL("components/web_package/test/data")));
     return test_data_dir.Append(path);
   }
 
@@ -118,22 +118,22 @@
       absl::optional<SignedWebBundleSignatureVerifier::Error>>
       future;
 
-  std::vector<web_package::mojom::BundleIntegrityBlockSignatureStackEntryPtr>
+  std::vector<mojom::BundleIntegrityBlockSignatureStackEntryPtr>
       raw_signature_stack;
   raw_signature_stack.push_back(
       MakeSignatureStackEntry(kEd25519PublicKey, kEd25519Signature,
                               kCompleteEntryCbor, kAttributesCbor));
 
-  auto raw_integrity_block = web_package::mojom::BundleIntegrityBlock::New();
+  auto raw_integrity_block = mojom::BundleIntegrityBlock::New();
   raw_integrity_block->size = 135;
   raw_integrity_block->signature_stack = std::move(raw_signature_stack);
 
-  auto integrity_block = web_package::SignedWebBundleIntegrityBlock::Create(
-      std::move(raw_integrity_block));
+  auto integrity_block =
+      SignedWebBundleIntegrityBlock::Create(std::move(raw_integrity_block));
   ASSERT_TRUE(integrity_block.has_value()) << integrity_block.error();
 
-  auto shared_file = base::MakeRefCounted<web_package::SharedFile>(
-      std::make_unique<base::File>(
+  auto shared_file =
+      base::MakeRefCounted<SharedFile>(std::make_unique<base::File>(
           file_path, base::File::FLAG_OPEN | base::File::FLAG_READ));
   ASSERT_TRUE((*shared_file)->IsValid());
 
@@ -190,18 +190,17 @@
 
 class SignedWebBundleSignatureVerifierTest
     : public ::testing::TestWithParam<
-          std::pair<std::vector<web_package::WebBundleSigner::KeyPair>,
+          std::pair<std::vector<WebBundleSigner::KeyPair>,
                     absl::optional<SignedWebBundleSignatureVerifier::Error>>> {
  protected:
   void SetUp() override { EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); }
 
   std::tuple<std::vector<uint8_t>, cbor::Value, size_t> CreateSignedWebBundle(
-      const std::vector<web_package::WebBundleSigner::KeyPair>& key_pairs) {
-    web_package::WebBundleBuilder builder;
+      const std::vector<WebBundleSigner::KeyPair>& key_pairs) {
+    WebBundleBuilder builder;
     auto web_bundle = builder.CreateBundle();
     auto integrity_block =
-        web_package::WebBundleSigner::CreateIntegrityBlockForBundle(web_bundle,
-                                                                    key_pairs);
+        WebBundleSigner::CreateIntegrityBlockForBundle(web_bundle, key_pairs);
     auto integrity_block_cbor = *cbor::Writer::Write(integrity_block);
     std::vector<uint8_t> signed_web_bundle;
     signed_web_bundle.insert(signed_web_bundle.end(),
@@ -222,19 +221,19 @@
     return signed_web_bundle_path;
   }
 
-  scoped_refptr<web_package::SharedFile> MakeSharedFile(
+  scoped_refptr<SharedFile> MakeSharedFile(
       const base::FilePath& signed_web_bundle_path) {
     auto file = std::make_unique<base::File>(
         signed_web_bundle_path, base::File::FLAG_OPEN | base::File::FLAG_READ);
     EXPECT_TRUE(file->IsValid())
         << base::File::ErrorToString(file->error_details());
-    return base::MakeRefCounted<web_package::SharedFile>(std::move(file));
+    return base::MakeRefCounted<SharedFile>(std::move(file));
   }
 
-  web_package::SignedWebBundleIntegrityBlock CreateParsedIntegrityBlock(
+  SignedWebBundleIntegrityBlock CreateParsedIntegrityBlock(
       const cbor::Value& integrity_block,
       size_t integrity_block_size) {
-    std::vector<web_package::mojom::BundleIntegrityBlockSignatureStackEntryPtr>
+    std::vector<mojom::BundleIntegrityBlockSignatureStackEntryPtr>
         raw_signature_stack;
     for (const auto& signature_stack_entry :
          integrity_block.GetArray()[2].GetArray()) {
@@ -251,13 +250,12 @@
           public_key, signature, complete_entry_cbor, attributes_cbor));
     }
 
-    auto raw_integrity_block = web_package::mojom::BundleIntegrityBlock::New();
+    auto raw_integrity_block = mojom::BundleIntegrityBlock::New();
     raw_integrity_block->size = integrity_block_size;
     raw_integrity_block->signature_stack = std::move(raw_signature_stack);
 
     auto parsed_integrity_block =
-        web_package::SignedWebBundleIntegrityBlock::Create(
-            std::move(raw_integrity_block));
+        SignedWebBundleIntegrityBlock::Create(std::move(raw_integrity_block));
     EXPECT_TRUE(parsed_integrity_block.has_value())
         << parsed_integrity_block.error();
     return std::move(*parsed_integrity_block);
@@ -300,19 +298,18 @@
     SignedWebBundleSignatureVerifierTest,
     ::testing::Values(
         // one signature
+        std::make_pair(std::vector{WebBundleSigner::KeyPair::CreateRandom()},
+                       absl::nullopt),
         std::make_pair(
-            std::vector{web_package::WebBundleSigner::KeyPair::CreateRandom()},
-            absl::nullopt),
-        std::make_pair(
-            std::vector{web_package::WebBundleSigner::KeyPair::CreateRandom(
+            std::vector{WebBundleSigner::KeyPair::CreateRandom(
                 /*produce_invalid_signature=*/true)},
             SignedWebBundleSignatureVerifier::Error::ForInvalidSignature(
                 "The signature is invalid.")),
 
         // two signatures
         std::make_pair(
-            std::vector{web_package::WebBundleSigner::KeyPair::CreateRandom(),
-                        web_package::WebBundleSigner::KeyPair::CreateRandom()},
+            std::vector{WebBundleSigner::KeyPair::CreateRandom(),
+                        WebBundleSigner::KeyPair::CreateRandom()},
             SignedWebBundleSignatureVerifier::Error::ForInvalidSignature(
                 "Only a single signature is currently supported, got 2 "
                 "signatures."))),
@@ -323,4 +320,4 @@
           info.param.second.has_value() ? "error" : "no_error");
     });
 
-}  // namespace web_app
+}  // namespace web_package
diff --git a/chrome/browser/web_applications/test/data/generate-test-wbns.sh b/components/web_package/test/data/generate-test-wbns.sh
similarity index 100%
rename from chrome/browser/web_applications/test/data/generate-test-wbns.sh
rename to components/web_package/test/data/generate-test-wbns.sh
diff --git a/chrome/browser/web_applications/test/data/signed_web_bundle_private_key.pem b/components/web_package/test/data/signed_web_bundle_private_key.pem
similarity index 100%
rename from chrome/browser/web_applications/test/data/signed_web_bundle_private_key.pem
rename to components/web_package/test/data/signed_web_bundle_private_key.pem
diff --git a/chrome/browser/web_applications/test/data/simple_signed.wbn b/components/web_package/test/data/simple_signed.wbn
similarity index 100%
rename from chrome/browser/web_applications/test/data/simple_signed.wbn
rename to components/web_package/test/data/simple_signed.wbn
Binary files differ
diff --git a/chrome/browser/web_applications/test/data/simple_signed_tampered.wbn b/components/web_package/test/data/simple_signed_tampered.wbn
similarity index 100%
rename from chrome/browser/web_applications/test/data/simple_signed_tampered.wbn
rename to components/web_package/test/data/simple_signed_tampered.wbn
Binary files differ
diff --git a/chrome/browser/web_applications/test/data/simple_web_bundle/index.html b/components/web_package/test/data/simple_web_bundle/index.html
similarity index 100%
rename from chrome/browser/web_applications/test/data/simple_web_bundle/index.html
rename to components/web_package/test/data/simple_web_bundle/index.html
diff --git a/components/webapk/BUILD.gn b/components/webapk/BUILD.gn
index d7dad9b..8ba021c 100644
--- a/components/webapk/BUILD.gn
+++ b/components/webapk/BUILD.gn
@@ -4,6 +4,17 @@
 
 import("//third_party/protobuf/proto_library.gni")
 
+if (is_android) {
+  import("//build/config/android/rules.gni")
+}
+
 proto_library("proto") {
   sources = [ "webapk.proto" ]
 }
+
+if (is_android) {
+  proto_java_library("proto_java") {
+    proto_path = "//"
+    sources = [ "webapk.proto" ]
+  }
+}
diff --git a/components/webapk/webapk.proto b/components/webapk/webapk.proto
index e32d541..cc3c1327 100644
--- a/components/webapk/webapk.proto
+++ b/components/webapk/webapk.proto
@@ -8,6 +8,9 @@
 
 package webapk;
 
+option java_package = "org.chromium.components.webapk.proto";
+option java_outer_classname = "WebApkProto";
+
 // Response after creating or updating a WebAPK.
 message WebApkResponse {
   // Package name to install WebAPK at.
diff --git a/components/webapps/browser/banners/app_banner_settings_helper.cc b/components/webapps/browser/banners/app_banner_settings_helper.cc
index 6c7754c..76a4ae16 100644
--- a/components/webapps/browser/banners/app_banner_settings_helper.cc
+++ b/components/webapps/browser/banners/app_banner_settings_helper.cc
@@ -70,19 +70,18 @@
 unsigned int gDaysAfterDismissedToShow = kMinimumBannerBlockedToBannerShown;
 unsigned int gDaysAfterIgnoredToShow = kMinimumDaysBetweenBannerShows;
 
-std::unique_ptr<base::DictionaryValue> GetOriginAppBannerData(
-    HostContentSettingsMap* settings,
-    const GURL& origin_url) {
+base::Value::Dict GetOriginAppBannerData(HostContentSettingsMap* settings,
+                                         const GURL& origin_url) {
   if (!settings)
-    return std::make_unique<base::DictionaryValue>();
+    return base::Value::Dict();
 
-  std::unique_ptr<base::DictionaryValue> dict = base::DictionaryValue::From(
-      content_settings::ToNullableUniquePtrValue(settings->GetWebsiteSetting(
-          origin_url, origin_url, ContentSettingsType::APP_BANNER, nullptr)));
-  if (!dict)
-    return std::make_unique<base::DictionaryValue>();
+  base::Value dict = settings->GetWebsiteSetting(
+      origin_url, origin_url, ContentSettingsType::APP_BANNER, nullptr);
 
-  return dict;
+  if (!dict.is_dict())
+    return base::Value::Dict();
+
+  return std::move(dict.GetDict());
 }
 
 class AppPrefs {
@@ -99,34 +98,33 @@
     settings_ =
         permissions::PermissionsClient::Get()->GetSettingsMap(browser_context);
     origin_dict_ = GetOriginAppBannerData(settings_, origin);
-    dict_ = origin_dict_->FindKeyOfType(package_name_or_start_url,
-                                        base::Value::Type::DICTIONARY);
+    dict_ = origin_dict_.FindDict(package_name_or_start_url);
     if (!dict_) {
       // Don't allow more than kMaxAppsPerSite dictionaries.
-      if (origin_dict_->DictSize() < kMaxAppsPerSite) {
+      if (origin_dict_.size() < kMaxAppsPerSite) {
         dict_ =
-            origin_dict_->SetKey(package_name_or_start_url,
-                                 base::Value(base::Value::Type::DICTIONARY));
+            origin_dict_.Set(package_name_or_start_url, base::Value::Dict())
+                ->GetIfDict();
       }
     }
   }
 
   HostContentSettingsMap* settings() { return settings_; }
-  base::Value* dict() { return dict_; }
+  base::Value::Dict* dict() { return dict_; }
 
   void Save() {
     DCHECK(dict_);
     dict_ = nullptr;
     settings_->SetWebsiteSettingDefaultScope(
         origin_, GURL(), ContentSettingsType::APP_BANNER,
-        content_settings::FromNullableUniquePtrValue(std::move(origin_dict_)));
+        base::Value(std::move(origin_dict_)));
   }
 
  private:
   const GURL& origin_;
   raw_ptr<HostContentSettingsMap> settings_ = nullptr;
-  std::unique_ptr<base::DictionaryValue> origin_dict_;
-  raw_ptr<base::Value> dict_ = nullptr;
+  base::Value::Dict origin_dict_;
+  raw_ptr<base::Value::Dict> dict_ = nullptr;
 };
 
 // Queries variations for the number of days which dismissing and ignoring the
@@ -215,18 +213,18 @@
   if (!app_prefs.dict())
     return NextInstallTextAnimation{base::Time::Max(), base::TimeDelta::Max()};
 
-  const base::Value* next_dict =
-      app_prefs.dict()->FindKey(kNextInstallTextAnimation);
-  if (!next_dict || !next_dict->is_dict())
+  const base::Value::Dict* next_dict =
+      app_prefs.dict()->FindDict(kNextInstallTextAnimation);
+  if (!next_dict)
     return absl::nullopt;
 
   absl::optional<base::Time> last_shown =
-      base::ValueToTime(next_dict->FindKey(kLastShownKey));
+      base::ValueToTime(next_dict->Find(kLastShownKey));
   if (!last_shown)
     return absl::nullopt;
 
   absl::optional<base::TimeDelta> delay =
-      base::ValueToTimeDelta(next_dict->FindKey(kDelayKey));
+      base::ValueToTimeDelta(next_dict->Find(kDelayKey));
   if (!delay)
     return absl::nullopt;
 
@@ -239,10 +237,10 @@
   if (!app_prefs.dict())
     return;
 
-  base::Value next_dict(base::Value::Type::DICTIONARY);
-  next_dict.SetKey(kLastShownKey, base::TimeToValue(last_shown));
-  next_dict.SetKey(kDelayKey, base::TimeDeltaToValue(delay));
-  app_prefs.dict()->SetKey(kNextInstallTextAnimation, std::move(next_dict));
+  base::Value::Dict next_dict;
+  next_dict.Set(kLastShownKey, base::TimeToValue(last_shown));
+  next_dict.Set(kDelayKey, base::TimeDeltaToValue(delay));
+  app_prefs.dict()->Set(kNextInstallTextAnimation, std::move(next_dict));
   app_prefs.Save();
 }
 
@@ -303,10 +301,10 @@
 
   if (event == APP_BANNER_EVENT_COULD_SHOW) {
     // Do not overwrite a could show event, as this is used for metrics.
-    if (app_prefs.dict()->FindKeyOfType(event_key, base::Value::Type::DOUBLE))
+    if (app_prefs.dict()->contains(event_key))
       return;
   }
-  app_prefs.dict()->SetKey(
+  app_prefs.dict()->Set(
       event_key, base::Value(static_cast<double>(time.ToInternalValue())));
 
   app_prefs.Save();
@@ -369,12 +367,10 @@
   if (!app_prefs.dict())
     return absl::nullopt;
 
-  base::Value* internal_time = app_prefs.dict()->FindKeyOfType(
-      kBannerEventKeys[event], base::Value::Type::DOUBLE);
-  if (!internal_time)
-    return base::Time();
-
-  return base::Time::FromInternalValue(internal_time->GetDouble());
+  absl::optional<double> internal_time =
+      app_prefs.dict()->FindDouble(kBannerEventKeys[event]);
+  return internal_time ? base::Time::FromInternalValue(internal_time.value())
+                       : base::Time();
 }
 
 bool AppBannerSettingsHelper::HasSufficientEngagement(double total_engagement) {
@@ -405,26 +401,20 @@
     base::Time now) {
   HostContentSettingsMap* settings =
       permissions::PermissionsClient::Get()->GetSettingsMap(browser_context);
-  std::unique_ptr<base::Value> origin_dict =
-      GetOriginAppBannerData(settings, origin_url);
-
-  if (!origin_dict)
-    return false;
+  base::Value::Dict origin_dict = GetOriginAppBannerData(settings, origin_url);
 
   // Iterate over everything in the content setting, which should be a set of
   // dictionaries per app path. If we find one that has been added to
   // homescreen recently, return true.
   base::TimeDelta recent_last_launch_in_days =
       base::Days(kRecentLastLaunchInDays);
-  for (auto path_dicts : origin_dict->DictItems()) {
-    if (path_dicts.second.is_dict()) {
-      base::Value* value = &path_dicts.second;
-
+  for (auto [key, value] : origin_dict) {
+    if (value.is_dict()) {
       // TODO(https://crbug.com/1338016): Delete stored Instant App data.
-      if (path_dicts.first == kInstantAppsKey)
+      if (key == kInstantAppsKey)
         continue;
 
-      absl::optional<double> internal_time = value->FindDoubleKey(
+      absl::optional<double> internal_time = value.GetDict().FindDouble(
           kBannerEventKeys[APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN]);
       if (!internal_time)
         continue;
diff --git a/content/BUILD.gn b/content/BUILD.gn
index 4b148e1..cfc2e37 100644
--- a/content/BUILD.gn
+++ b/content/BUILD.gn
@@ -117,6 +117,7 @@
     "dev_ui_content_resources.pak",
   ]
   deps = [
+    "//components/attribution_reporting:source_registration_error_mojom_webui_js",
     "//content/browser/aggregation_service:mojo_bindings_webui_js",
     "//content/browser/attribution_reporting:internals_mojo_bindings_webui_js",
     "//content/browser/attribution_reporting:mojo_bindings_webui_js",
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index d78a9bd..c98128e2 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -72,6 +72,7 @@
     "//cc/animation",
     "//cc/mojo_embedder",
     "//cc/paint",
+    "//components/attribution_reporting:source_registration_error_mojom",
     "//components/back_forward_cache:enum",
     "//components/browsing_topics/common:common",
     "//components/cbor",
@@ -2396,8 +2397,6 @@
 
   if (is_fuchsia) {
     sources += [
-      "accessibility/accessibility_event_recorder_fuchsia.cc",
-      "accessibility/accessibility_event_recorder_fuchsia.h",
       "accessibility/accessibility_tree_formatter_fuchsia.cc",
       "accessibility/accessibility_tree_formatter_fuchsia.h",
       "accessibility/browser_accessibility_fuchsia.cc",
diff --git a/content/browser/accessibility/accessibility_event_recorder_fuchsia.cc b/content/browser/accessibility/accessibility_event_recorder_fuchsia.cc
deleted file mode 100644
index 38d241f..0000000
--- a/content/browser/accessibility/accessibility_event_recorder_fuchsia.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/accessibility/accessibility_event_recorder_fuchsia.h"
-
-#include <ostream>
-
-namespace content {
-
-// static
-AccessibilityEventRecorderFuchsia*
-    AccessibilityEventRecorderFuchsia::instance_ = nullptr;
-
-AccessibilityEventRecorderFuchsia::AccessibilityEventRecorderFuchsia(
-    base::ProcessId pid,
-    const ui::AXTreeSelector& selector) {
-  CHECK(!instance_) << "There can be only one instance of"
-                    << " AccessibilityEventRecorder at a time.";
-  instance_ = this;
-}
-
-AccessibilityEventRecorderFuchsia::~AccessibilityEventRecorderFuchsia() {
-  instance_ = nullptr;
-}
-
-}  // namespace content
diff --git a/content/browser/accessibility/accessibility_event_recorder_fuchsia.h b/content/browser/accessibility/accessibility_event_recorder_fuchsia.h
deleted file mode 100644
index f3fd432..0000000
--- a/content/browser/accessibility/accessibility_event_recorder_fuchsia.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2021 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EVENT_RECORDER_FUCHSIA_H_
-#define CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EVENT_RECORDER_FUCHSIA_H_
-
-#include "base/process/process_handle.h"
-#include "content/common/content_export.h"
-#include "ui/accessibility/platform/inspect/ax_event_recorder.h"
-#include "ui/accessibility/platform/inspect/ax_inspect.h"
-
-namespace content {
-
-class CONTENT_EXPORT AccessibilityEventRecorderFuchsia
-    : public ui::AXEventRecorder {
- public:
-  AccessibilityEventRecorderFuchsia(base::ProcessId pid,
-                                    const ui::AXTreeSelector& selector);
-
-  AccessibilityEventRecorderFuchsia(const AccessibilityEventRecorderFuchsia&) =
-      delete;
-  AccessibilityEventRecorderFuchsia& operator=(
-      const AccessibilityEventRecorderFuchsia&) = delete;
-
-  ~AccessibilityEventRecorderFuchsia() override;
-
- private:
-  static AccessibilityEventRecorderFuchsia* instance_;
-};
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_EVENT_RECORDER_FUCHSIA_H_
diff --git a/content/browser/attribution_reporting/BUILD.gn b/content/browser/attribution_reporting/BUILD.gn
index 46d49ca..a28190d 100644
--- a/content/browser/attribution_reporting/BUILD.gn
+++ b/content/browser/attribution_reporting/BUILD.gn
@@ -18,6 +18,7 @@
   sources = [ "attribution_internals.mojom" ]
   public_deps = [
     ":mojo_bindings",
+    "//components/attribution_reporting:source_registration_error_mojom",
     "//url/mojom:url_mojom_origin",
   ]
   webui_module_path = "/"
diff --git a/content/browser/attribution_reporting/attribution_aggregation_keys.cc b/content/browser/attribution_reporting/attribution_aggregation_keys.cc
index ecf80ffe..81ef19a 100644
--- a/content/browser/attribution_reporting/attribution_aggregation_keys.cc
+++ b/content/browser/attribution_reporting/attribution_aggregation_keys.cc
@@ -7,14 +7,12 @@
 #include <string>
 #include <utility>
 
-#include "base/check.h"
 #include "base/ranges/algorithm.h"
 #include "base/strings/abseil_string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/types/expected.h"
 #include "base/values.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
-#include "content/browser/attribution_reporting/attribution_reporting.pb.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/attribution_reporting/constants.h"
 
@@ -85,26 +83,6 @@
   return AttributionAggregationKeys(Keys(base::sorted_unique, std::move(keys)));
 }
 
-// static
-absl::optional<AttributionAggregationKeys>
-AttributionAggregationKeys::Deserialize(const std::string& str) {
-  proto::AttributionAggregatableSource msg;
-  if (!msg.ParseFromString(str))
-    return absl::nullopt;
-
-  Keys::container_type keys;
-  keys.reserve(msg.keys().size());
-
-  for (const auto& [id, key] : msg.keys()) {
-    if (!key.has_high_bits() || !key.has_low_bits())
-      return absl::nullopt;
-
-    keys.emplace_back(id, absl::MakeUint128(key.high_bits(), key.low_bits()));
-  }
-
-  return FromKeys(std::move(keys));
-}
-
 AttributionAggregationKeys::AttributionAggregationKeys(Keys keys)
     : keys_(std::move(keys)) {}
 
@@ -124,20 +102,4 @@
 AttributionAggregationKeys& AttributionAggregationKeys::operator=(
     AttributionAggregationKeys&&) = default;
 
-std::string AttributionAggregationKeys::Serialize() const {
-  proto::AttributionAggregatableSource msg;
-
-  for (const auto& [id, key] : keys_) {
-    proto::AttributionAggregationKey key_msg;
-    key_msg.set_high_bits(absl::Uint128High64(key));
-    key_msg.set_low_bits(absl::Uint128Low64(key));
-    (*msg.mutable_keys())[id] = std::move(key_msg);
-  }
-
-  std::string str;
-  bool success = msg.SerializeToString(&str);
-  DCHECK(success);
-  return str;
-}
-
 }  // namespace content
diff --git a/content/browser/attribution_reporting/attribution_aggregation_keys.h b/content/browser/attribution_reporting/attribution_aggregation_keys.h
index c18e86f..b963aef 100644
--- a/content/browser/attribution_reporting/attribution_aggregation_keys.h
+++ b/content/browser/attribution_reporting/attribution_aggregation_keys.h
@@ -9,7 +9,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/types/expected.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom-forward.h"
+#include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "content/common/content_export.h"
 #include "third_party/abseil-cpp/absl/numeric/int128.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -31,10 +31,6 @@
                         attribution_reporting::mojom::SourceRegistrationError>
   FromJSON(const base::Value*);
 
-  // Deserializes `str`, if valid. Returns `absl::nullopt` if not.
-  static absl::optional<AttributionAggregationKeys> Deserialize(
-      const std::string& str);
-
   AttributionAggregationKeys();
   ~AttributionAggregationKeys();
 
@@ -46,8 +42,6 @@
 
   const Keys& keys() const { return keys_; }
 
-  std::string Serialize() const;
-
  private:
   explicit AttributionAggregationKeys(Keys keys);
 
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
index c799d66..929153b 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
@@ -15,13 +15,13 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/time/time.h"
 #include "base/types/expected.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_trigger_data.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_values.h"
 #include "content/browser/attribution_reporting/attribution_aggregation_keys.h"
 #include "content/browser/attribution_reporting/attribution_filter_data.h"
 #include "content/browser/attribution_reporting/attribution_header_utils.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/common_source_info.h"
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
index 6ee543d..a21164744 100644
--- a/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl_unittest.cc
@@ -20,9 +20,9 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "base/time/time.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_aggregation_keys.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
diff --git a/content/browser/attribution_reporting/attribution_filter_data.cc b/content/browser/attribution_reporting/attribution_filter_data.cc
index b20cadf9a..603fb3e 100644
--- a/content/browser/attribution_reporting/attribution_filter_data.cc
+++ b/content/browser/attribution_reporting/attribution_filter_data.cc
@@ -4,17 +4,14 @@
 
 #include "content/browser/attribution_reporting/attribution_filter_data.h"
 
-#include <iterator>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "base/check.h"
-#include "base/check_op.h"
 #include "base/types/expected.h"
 #include "base/values.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
-#include "content/browser/attribution_reporting/attribution_reporting.pb.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "third_party/blink/public/common/attribution_reporting/constants.h"
 
 namespace content {
@@ -51,35 +48,6 @@
 }  // namespace
 
 // static
-absl::optional<AttributionFilterData> AttributionFilterData::Deserialize(
-    const std::string& string) {
-  proto::AttributionFilterData msg;
-  if (!msg.ParseFromString(string))
-    return absl::nullopt;
-
-  AttributionFilterValues::container_type filter_values;
-  filter_values.reserve(msg.filter_values().size());
-
-  for (google::protobuf::MapPair<std::string, proto::AttributionFilterValues>&
-           entry : *msg.mutable_filter_values()) {
-    // Serialized source filter data can only contain this key due to DB
-    // corruption or deliberate modification.
-    if (entry.first == kSourceTypeFilterKey)
-      continue;
-
-    google::protobuf::RepeatedPtrField<std::string>* values =
-        entry.second.mutable_values();
-
-    filter_values.emplace_back(
-        entry.first,
-        std::vector<std::string>(std::make_move_iterator(values->begin()),
-                                 std::make_move_iterator(values->end())));
-  }
-
-  return Create(std::move(filter_values));
-}
-
-// static
 absl::optional<AttributionFilterData> AttributionFilterData::Create(
     AttributionFilterValues filter_values) {
   if (!IsValidForSource(filter_values))
@@ -186,24 +154,6 @@
 AttributionFilterData& AttributionFilterData::operator=(
     AttributionFilterData&&) = default;
 
-std::string AttributionFilterData::Serialize() const {
-  proto::AttributionFilterData msg;
-
-  for (const auto& [filter, values] : filter_values_) {
-    proto::AttributionFilterValues filter_values_msg;
-    filter_values_msg.mutable_values()->Reserve(values.size());
-    for (std::string value : values) {
-      filter_values_msg.mutable_values()->Add(std::move(value));
-    }
-    (*msg.mutable_filter_values())[filter] = std::move(filter_values_msg);
-  }
-
-  std::string string;
-  bool success = msg.SerializeToString(&string);
-  DCHECK(success);
-  return string;
-}
-
 // static
 absl::optional<AttributionFilters> AttributionFilters::Create(
     AttributionFilterValues filter_values) {
diff --git a/content/browser/attribution_reporting/attribution_filter_data.h b/content/browser/attribution_reporting/attribution_filter_data.h
index 0c80d09..7737fbe9 100644
--- a/content/browser/attribution_reporting/attribution_filter_data.h
+++ b/content/browser/attribution_reporting/attribution_filter_data.h
@@ -10,7 +10,7 @@
 
 #include "base/containers/flat_map.h"
 #include "base/types/expected.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom-forward.h"
+#include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/common/content_export.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -30,8 +30,6 @@
  public:
   static constexpr char kSourceTypeFilterKey[] = "source_type";
 
-  static absl::optional<AttributionFilterData> Deserialize(const std::string&);
-
   // Filter data is not allowed to contain a `source_type` filter.
   static absl::optional<AttributionFilterData> Create(AttributionFilterValues);
 
@@ -53,8 +51,6 @@
     return filter_values_;
   }
 
-  std::string Serialize() const;
-
  private:
   explicit AttributionFilterData(AttributionFilterValues);
 
diff --git a/content/browser/attribution_reporting/attribution_filter_data_unittest.cc b/content/browser/attribution_reporting/attribution_filter_data_unittest.cc
index 43d8d2d5..74e0470f 100644
--- a/content/browser/attribution_reporting/attribution_filter_data_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_filter_data_unittest.cc
@@ -12,9 +12,7 @@
 
 #include "base/check.h"
 #include "base/strings/string_number_conversions.h"
-#include "content/browser/attribution_reporting/attribution_reporting.pb.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/public/common/attribution_reporting/constants.h"
@@ -23,26 +21,6 @@
 
 namespace {
 
-using ::testing::ElementsAre;
-using ::testing::Pair;
-
-std::string CreateSerialized(const AttributionFilterValues& filter_values) {
-  proto::AttributionFilterData msg;
-
-  for (const auto& [filter, values] : filter_values) {
-    proto::AttributionFilterValues filter_values_msg;
-    for (std::string value : values) {
-      filter_values_msg.mutable_values()->Add(std::move(value));
-    }
-    (*msg.mutable_filter_values())[filter] = std::move(filter_values_msg);
-  }
-
-  std::string string;
-  bool success = msg.SerializeToString(&string);
-  CHECK(success);
-  return string;
-}
-
 AttributionFilterValues CreateFilterValues(size_t n) {
   AttributionFilterValues filter_values;
   for (size_t i = 0; i < n; i++) {
@@ -52,30 +30,6 @@
   return filter_values;
 }
 
-// Tests that a "source_type" filter present in the serialized data is
-// removed.
-TEST(AttributionFilterDataTest, Deserialize_RemovesSourceTypeFilter) {
-  const std::string serialized =
-      CreateSerialized({{"source_type", {"abc"}}, {"x", {"y"}}});
-
-  EXPECT_THAT(AttributionFilterData::Deserialize(serialized)->filter_values(),
-              ElementsAre(Pair("x", ElementsAre("y"))));
-}
-
-// Tests that serialized data is allowed
-// `blink::kMaxAttributionFiltersPerSource` filters.
-TEST(AttributionFilterDataTest, Deserialize_AllowsOneExtraFilter) {
-  EXPECT_TRUE(AttributionFilterData::Deserialize(
-                  CreateSerialized(CreateFilterValues(
-                      blink::kMaxAttributionFiltersPerSource)))
-                  .has_value());
-
-  EXPECT_FALSE(AttributionFilterData::Deserialize(
-                   CreateSerialized(CreateFilterValues(
-                       blink::kMaxAttributionFiltersPerSource + 1)))
-                   .has_value());
-}
-
 TEST(AttributionFilterDataTest, Create_ProhibitsSourceTypeFilter) {
   EXPECT_FALSE(AttributionFilterData::Create({{"source_type", {"event"}}}));
 }
diff --git a/content/browser/attribution_reporting/attribution_header_utils.cc b/content/browser/attribution_reporting/attribution_header_utils.cc
index 6798dfe..e7a3895 100644
--- a/content/browser/attribution_reporting/attribution_header_utils.cc
+++ b/content/browser/attribution_reporting/attribution_header_utils.cc
@@ -13,8 +13,8 @@
 #include "base/time/time.h"
 #include "base/types/expected.h"
 #include "base/values.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_filter_data.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/common_source_info.h"
 #include "content/browser/attribution_reporting/storable_source.h"
diff --git a/content/browser/attribution_reporting/attribution_header_utils.h b/content/browser/attribution_reporting/attribution_header_utils.h
index 0456bf9b..affcf45 100644
--- a/content/browser/attribution_reporting/attribution_header_utils.h
+++ b/content/browser/attribution_reporting/attribution_header_utils.h
@@ -7,7 +7,7 @@
 
 #include "base/types/expected.h"
 #include "base/values.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom-forward.h"
+#include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/common/content_export.h"
 
diff --git a/content/browser/attribution_reporting/attribution_header_utils_unittest.cc b/content/browser/attribution_reporting/attribution_header_utils_unittest.cc
index a9feebbd..6fea65a 100644
--- a/content/browser/attribution_reporting/attribution_header_utils_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_header_utils_unittest.cc
@@ -15,9 +15,9 @@
 #include "base/types/expected.h"
 #include "base/types/optional_util.h"
 #include "base/values.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_aggregation_keys.h"
 #include "content/browser/attribution_reporting/attribution_filter_data.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/common_source_info.h"
diff --git a/content/browser/attribution_reporting/attribution_internals.mojom b/content/browser/attribution_reporting/attribution_internals.mojom
index a27f2be..5c602ce 100644
--- a/content/browser/attribution_reporting/attribution_internals.mojom
+++ b/content/browser/attribution_reporting/attribution_internals.mojom
@@ -4,6 +4,7 @@
 
 module attribution_internals.mojom;
 
+import "components/attribution_reporting/source_registration_error.mojom";
 import "content/browser/attribution_reporting/attribution_reporting.mojom";
 import "url/mojom/origin.mojom";
 import "url/mojom/url.mojom";
diff --git a/content/browser/attribution_reporting/attribution_internals_browsertest.cc b/content/browser/attribution_reporting/attribution_internals_browsertest.cc
index a8cf8f1..a55360bb 100644
--- a/content/browser/attribution_reporting/attribution_internals_browsertest.cc
+++ b/content/browser/attribution_reporting/attribution_internals_browsertest.cc
@@ -14,6 +14,7 @@
 #include "base/command_line.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_trigger_data.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_values.h"
 #include "content/browser/attribution_reporting/attribution_aggregation_keys.h"
@@ -21,7 +22,6 @@
 #include "content/browser/attribution_reporting/attribution_manager.h"
 #include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
diff --git a/content/browser/attribution_reporting/attribution_internals_handler_impl.cc b/content/browser/attribution_reporting/attribution_internals_handler_impl.cc
index 974b9d8b3..3eb564f 100644
--- a/content/browser/attribution_reporting/attribution_internals_handler_impl.cc
+++ b/content/browser/attribution_reporting/attribution_internals_handler_impl.cc
@@ -19,13 +19,13 @@
 #include "base/notreached.h"
 #include "base/ranges/algorithm.h"
 #include "base/time/time.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/aggregatable_attribution_utils.h"
 #include "content/browser/attribution_reporting/attribution_aggregation_keys.h"
 #include "content/browser/attribution_reporting/attribution_info.h"
 #include "content/browser/attribution_reporting/attribution_internals.mojom.h"
 #include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/attribution_utils.h"
 #include "content/browser/attribution_reporting/common_source_info.h"
diff --git a/content/browser/attribution_reporting/attribution_internals_handler_impl.h b/content/browser/attribution_reporting/attribution_internals_handler_impl.h
index a2d5efb8..1a77009 100644
--- a/content/browser/attribution_reporting/attribution_internals_handler_impl.h
+++ b/content/browser/attribution_reporting/attribution_internals_handler_impl.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "base/scoped_observation.h"
+#include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "content/browser/attribution_reporting/attribution_internals.mojom.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
 #include "content/browser/attribution_reporting/attribution_observer.h"
diff --git a/content/browser/attribution_reporting/attribution_internals_ui.cc b/content/browser/attribution_reporting/attribution_internals_ui.cc
index dfa87a8..1e2d6f8 100644
--- a/content/browser/attribution_reporting/attribution_internals_ui.cc
+++ b/content/browser/attribution_reporting/attribution_internals_ui.cc
@@ -35,6 +35,8 @@
                           IDR_ATTRIBUTION_INTERNALS_TABLE_HTML_JS);
   source->AddResourcePath("attribution_reporting.mojom-webui.js",
                           IDR_ATTRIBUTION_REPORTING_MOJOM_JS);
+  source->AddResourcePath("source_registration_error.mojom-webui.js",
+                          IDR_SOURCE_REGISTRATION_ERROR_MOJOM_JS);
   source->AddResourcePath("table_model.js",
                           IDR_ATTRIBUTION_INTERNALS_TABLE_MODEL_JS);
   source->AddResourcePath("attribution_internals.css",
diff --git a/content/browser/attribution_reporting/attribution_manager.h b/content/browser/attribution_reporting/attribution_manager.h
index 2ef403a0..521a7a0 100644
--- a/content/browser/attribution_reporting/attribution_manager.h
+++ b/content/browser/attribution_reporting/attribution_manager.h
@@ -9,8 +9,8 @@
 #include <vector>
 
 #include "base/callback_forward.h"
+#include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom-forward.h"
 #include "content/public/browser/storage_partition.h"
 
 namespace base {
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.cc b/content/browser/attribution_reporting/attribution_manager_impl.cc
index 12ef1bf..b70dba2 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl.cc
+++ b/content/browser/attribution_reporting/attribution_manager_impl.cc
@@ -24,6 +24,7 @@
 #include "base/threading/sequence_bound.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/time/time.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/aggregation_service/aggregation_service.h"
 #include "content/browser/aggregation_service/aggregation_service_impl.h"
 #include "content/browser/aggregation_service/report_scheduler_timer.h"
@@ -39,7 +40,6 @@
 #include "content/browser/attribution_reporting/attribution_report.h"
 #include "content/browser/attribution_reporting/attribution_report_network_sender.h"
 #include "content/browser/attribution_reporting/attribution_report_sender.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_storage.h"
 #include "content/browser/attribution_reporting/attribution_storage_delegate.h"
 #include "content/browser/attribution_reporting/attribution_storage_delegate_impl.h"
diff --git a/content/browser/attribution_reporting/attribution_manager_impl.h b/content/browser/attribution_reporting/attribution_manager_impl.h
index 326c27e..87f3af90 100644
--- a/content/browser/attribution_reporting/attribution_manager_impl.h
+++ b/content/browser/attribution_reporting/attribution_manager_impl.h
@@ -17,6 +17,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "base/threading/sequence_bound.h"
+#include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "content/browser/aggregation_service/aggregation_service.h"
 #include "content/browser/aggregation_service/report_scheduler_timer.h"
 #include "content/browser/attribution_reporting/attribution_manager.h"
diff --git a/content/browser/attribution_reporting/attribution_observer.h b/content/browser/attribution_reporting/attribution_observer.h
index 23d8e59..9ed501a 100644
--- a/content/browser/attribution_reporting/attribution_observer.h
+++ b/content/browser/attribution_reporting/attribution_observer.h
@@ -9,8 +9,8 @@
 
 #include "base/observer_list_types.h"
 #include "base/time/time.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/storable_source.h"
 
 namespace url {
diff --git a/content/browser/attribution_reporting/attribution_reporting.mojom b/content/browser/attribution_reporting/attribution_reporting.mojom
index d05ed42..49b89c8 100644
--- a/content/browser/attribution_reporting/attribution_reporting.mojom
+++ b/content/browser/attribution_reporting/attribution_reporting.mojom
@@ -19,27 +19,3 @@
   // A source that was not associated with a top-level navigation.
   kEvent = 1,
 };
-
-enum SourceRegistrationError {
-  kInvalidJson,
-  kRootWrongType,
-
-  kDestinationMissing,
-  kDestinationWrongType,
-  kDestinationUntrustworthy,
-
-  kFilterDataWrongType,
-  kFilterDataTooManyKeys,
-  kFilterDataHasSourceTypeKey,
-  kFilterDataKeyTooLong,
-  kFilterDataListWrongType,
-  kFilterDataListTooLong,
-  kFilterDataValueWrongType,
-  kFilterDataValueTooLong,
-
-  kAggregationKeysWrongType,
-  kAggregationKeysTooManyKeys,
-  kAggregationKeysKeyTooLong,
-  kAggregationKeysValueWrongType,
-  kAggregationKeysValueWrongFormat,
-};
diff --git a/content/browser/attribution_reporting/attribution_storage_sql.cc b/content/browser/attribution_reporting/attribution_storage_sql.cc
index 622b8b8..123900b 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql.cc
@@ -11,6 +11,7 @@
 #include <string>
 #include <tuple>
 #include <utility>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/check.h"
@@ -33,6 +34,7 @@
 #include "content/browser/attribution_reporting/attribution_info.h"
 #include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
+#include "content/browser/attribution_reporting/attribution_reporting.pb.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_storage_delegate.h"
 #include "content/browser/attribution_reporting/attribution_storage_sql_migrations.h"
@@ -256,6 +258,87 @@
   return origin;
 }
 
+std::string SerializeFilterData(const AttributionFilterData& filter_data) {
+  proto::AttributionFilterData msg;
+
+  for (const auto& [filter, values] : filter_data.filter_values()) {
+    proto::AttributionFilterValues filter_values_msg;
+    filter_values_msg.mutable_values()->Reserve(values.size());
+    for (std::string value : values) {
+      filter_values_msg.mutable_values()->Add(std::move(value));
+    }
+    (*msg.mutable_filter_values())[filter] = std::move(filter_values_msg);
+  }
+
+  std::string string;
+  bool success = msg.SerializeToString(&string);
+  DCHECK(success);
+  return string;
+}
+
+absl::optional<AttributionFilterData> DeserializeFilterData(
+    const std::string& string) {
+  proto::AttributionFilterData msg;
+  if (!msg.ParseFromString(string))
+    return absl::nullopt;
+
+  AttributionFilterValues::container_type filter_values;
+  filter_values.reserve(msg.filter_values().size());
+
+  for (google::protobuf::MapPair<std::string, proto::AttributionFilterValues>&
+           entry : *msg.mutable_filter_values()) {
+    // Serialized source filter data can only contain this key due to DB
+    // corruption or deliberate modification.
+    if (entry.first == AttributionFilterData::kSourceTypeFilterKey)
+      continue;
+
+    google::protobuf::RepeatedPtrField<std::string>* values =
+        entry.second.mutable_values();
+
+    filter_values.emplace_back(
+        entry.first,
+        std::vector<std::string>(std::make_move_iterator(values->begin()),
+                                 std::make_move_iterator(values->end())));
+  }
+
+  return AttributionFilterData::Create(std::move(filter_values));
+}
+
+std::string SerializeAggregationKeys(const AttributionAggregationKeys& keys) {
+  proto::AttributionAggregatableSource msg;
+
+  for (const auto& [id, key] : keys.keys()) {
+    proto::AttributionAggregationKey key_msg;
+    key_msg.set_high_bits(absl::Uint128High64(key));
+    key_msg.set_low_bits(absl::Uint128Low64(key));
+    (*msg.mutable_keys())[id] = std::move(key_msg);
+  }
+
+  std::string str;
+  bool success = msg.SerializeToString(&str);
+  DCHECK(success);
+  return str;
+}
+
+absl::optional<AttributionAggregationKeys> DeserializeAggregationKeys(
+    const std::string& str) {
+  proto::AttributionAggregatableSource msg;
+  if (!msg.ParseFromString(str))
+    return absl::nullopt;
+
+  AttributionAggregationKeys::Keys::container_type keys;
+  keys.reserve(msg.keys().size());
+
+  for (const auto& [id, key] : msg.keys()) {
+    if (!key.has_high_bits() || !key.has_low_bits())
+      return absl::nullopt;
+
+    keys.emplace_back(id, absl::MakeUint128(key.high_bits(), key.low_bits()));
+  }
+
+  return AttributionAggregationKeys::FromKeys(std::move(keys));
+}
+
 absl::optional<StoredSource::ActiveState> GetSourceActiveState(
     bool event_level_active,
     bool aggregatable_active) {
@@ -324,7 +407,7 @@
   int num_conversions = statement.ColumnInt(col++);
   int64_t aggregatable_budget_consumed = statement.ColumnInt64(col++);
   absl::optional<AttributionAggregationKeys> aggregation_keys =
-      AttributionAggregationKeys::Deserialize(statement.ColumnString(col++));
+      DeserializeAggregationKeys(statement.ColumnString(col++));
 
   if (source_origin.opaque() || destination_origin.opaque() ||
       reporting_origin.opaque() || !source_type.has_value() ||
@@ -334,7 +417,7 @@
   }
 
   absl::optional<AttributionFilterData> filter_data =
-      AttributionFilterData::Deserialize(statement.ColumnString(col++));
+      DeserializeFilterData(statement.ColumnString(col++));
   if (!filter_data)
     return absl::nullopt;
 
@@ -586,8 +669,9 @@
       GetSourceActiveState(event_level_active, aggregatable_active);
   DCHECK(active_state.has_value());
 
-  statement.BindBlob(15, common_info.aggregation_keys().Serialize());
-  statement.BindBlob(16, common_info.filter_data().Serialize());
+  statement.BindBlob(15,
+                     SerializeAggregationKeys(common_info.aggregation_keys()));
+  statement.BindBlob(16, SerializeFilterData(common_info.filter_data()));
 
   if (!statement.Run())
     return StoreSourceResult(StorableSource::Result::kInternalError);
diff --git a/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc b/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc
index a7f2dc9..e12973c 100644
--- a/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc
+++ b/content/browser/attribution_reporting/attribution_storage_sql_unittest.cc
@@ -9,9 +9,11 @@
 #include <functional>
 #include <limits>
 #include <memory>
+#include <string>
 
 #include "base/bind.h"
 #include "base/callback_helpers.h"
+#include "base/check.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/raw_ptr.h"
@@ -20,7 +22,9 @@
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "content/browser/attribution_reporting/aggregatable_histogram_contribution.h"
+#include "content/browser/attribution_reporting/attribution_filter_data.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
+#include "content/browser/attribution_reporting/attribution_reporting.pb.h"
 #include "content/browser/attribution_reporting/attribution_test_utils.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/storable_source.h"
@@ -40,6 +44,7 @@
 using ::testing::AllOf;
 using ::testing::ElementsAre;
 using ::testing::IsEmpty;
+using ::testing::Pair;
 using ::testing::SizeIs;
 
 struct AggregatableReportMetadataRecord {
@@ -61,6 +66,24 @@
   int64_t value;
 };
 
+std::string CreateSerializedFilterData(
+    const AttributionFilterValues& filter_values) {
+  proto::AttributionFilterData msg;
+
+  for (const auto& [filter, values] : filter_values) {
+    proto::AttributionFilterValues filter_values_msg;
+    for (std::string value : values) {
+      filter_values_msg.mutable_values()->Add(std::move(value));
+    }
+    (*msg.mutable_filter_values())[filter] = std::move(filter_values_msg);
+  }
+
+  std::string string;
+  bool success = msg.SerializeToString(&string);
+  CHECK(success);
+  return string;
+}
+
 class AttributionStorageSqlTest : public testing::Test {
  public:
   AttributionStorageSqlTest() = default;
@@ -182,8 +205,6 @@
   raw_ptr<ConfigurableStorageDelegate> delegate_ = nullptr;
 };
 
-}  // namespace
-
 TEST_F(AttributionStorageSqlTest,
        DatabaseInitialized_TablesAndIndexesLazilyInitialized) {
   base::HistogramTester histograms;
@@ -1075,4 +1096,34 @@
   ExpectImpressionRows(2);
 }
 
+// Tests that a "source_type" filter present in the serialized data is
+// removed.
+TEST_F(AttributionStorageSqlTest,
+       DeserializeFilterData_RemovesSourceTypeFilter) {
+  {
+    OpenDatabase();
+    storage()->StoreSource(SourceBuilder().Build());
+    CloseDatabase();
+  }
+
+  {
+    sql::Database raw_db;
+    ASSERT_TRUE(raw_db.Open(db_path()));
+
+    static constexpr char kUpdateSql[] = "UPDATE sources SET filter_data=?";
+    sql::Statement statement(raw_db.GetUniqueStatement(kUpdateSql));
+    statement.BindBlob(0, CreateSerializedFilterData(
+                              {{"source_type", {"abc"}}, {"x", {"y"}}}));
+    ASSERT_TRUE(statement.Run());
+  }
+
+  OpenDatabase();
+
+  std::vector<StoredSource> sources = storage()->GetActiveSources();
+  ASSERT_EQ(sources.size(), 1u);
+  ASSERT_THAT(sources.front().common_info().filter_data().filter_values(),
+              ElementsAre(Pair("x", ElementsAre("y"))));
+}
+
+}  // namespace
 }  // namespace content
diff --git a/content/browser/attribution_reporting/attribution_test_utils.cc b/content/browser/attribution_reporting/attribution_test_utils.cc
index bd134d5..414b51d7 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.cc
+++ b/content/browser/attribution_reporting/attribution_test_utils.cc
@@ -21,8 +21,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/bind.h"
 #include "base/time/time.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_observer.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/rate_limit_result.h"
 #include "content/public/browser/attribution_config.h"
diff --git a/content/browser/attribution_reporting/attribution_test_utils.h b/content/browser/attribution_reporting/attribution_test_utils.h
index 5465ca8..f00b23a 100644
--- a/content/browser/attribution_reporting/attribution_test_utils.h
+++ b/content/browser/attribution_reporting/attribution_test_utils.h
@@ -22,6 +22,7 @@
 #include "base/task/sequenced_task_runner.h"
 #include "base/thread_annotations.h"
 #include "base/time/time.h"
+#include "components/attribution_reporting/source_registration_error.mojom-forward.h"
 #include "content/browser/attribution_reporting/aggregatable_histogram_contribution.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_trigger_data.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_values.h"
@@ -34,7 +35,6 @@
 #include "content/browser/attribution_reporting/attribution_observer.h"
 #include "content/browser/attribution_reporting/attribution_observer_types.h"
 #include "content/browser/attribution_reporting/attribution_report.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom-forward.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_storage.h"
 #include "content/browser/attribution_reporting/attribution_storage_delegate.h"
diff --git a/content/browser/browser_main_loop.h b/content/browser/browser_main_loop.h
index b2660cd..d7b6bef 100644
--- a/content/browser/browser_main_loop.h
+++ b/content/browser/browser_main_loop.h
@@ -28,7 +28,7 @@
 }
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/buildflags.h"  // nogncheck
 #if BUILDFLAG(OZONE_PLATFORM_X11)
 #define USE_OZONE_PLATFORM_X11
diff --git a/content/browser/devtools/protocol/system_info_handler.cc b/content/browser/devtools/protocol/system_info_handler.cc
index c303e081..0ca93b4d3 100644
--- a/content/browser/devtools/protocol/system_info_handler.cc
+++ b/content/browser/devtools/protocol/system_info_handler.cc
@@ -50,7 +50,7 @@
 // Windows builds need more time -- see Issue 873112 and 1004472.
 // Mac builds need more time - see Issue angleproject:6182.
 #if ((BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !defined(NDEBUG)) || \
-    BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || defined(USE_OZONE)
+    BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_OZONE)
 static constexpr int kGPUInfoWatchdogTimeoutMultiplierOS = 3;
 #else
 static constexpr int kGPUInfoWatchdogTimeoutMultiplierOS = 1;
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
index d9f3741..c0a7b6b 100644
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -82,7 +82,7 @@
 #if BUILDFLAG(IS_ANDROID)
 #include "base/android/application_status_listener.h"
 #endif
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"
 #endif
 #if BUILDFLAG(IS_MAC)
@@ -104,7 +104,7 @@
 // On X11, we do not know GpuMemoryBuffer configuration support until receiving
 // the initial GPUInfo.
 bool CanUpdateGmbGpuPreferences() {
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   return !ui::OzonePlatform::GetInstance()
               ->GetPlatformProperties()
               .fetch_buffer_formats_for_gmb_on_gpu;
@@ -1377,7 +1377,7 @@
   }
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   gpu_preferences->message_pump_type = ui::OzonePlatform::GetInstance()
                                            ->GetPlatformProperties()
                                            .message_pump_type_for_gpu;
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc
index 361ef22c..aab25f0 100644
--- a/content/browser/gpu/gpu_internals_ui.cc
+++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -63,9 +63,9 @@
 #include "ui/gfx/win/physical_size.h"
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 
 namespace content {
 namespace {
diff --git a/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc b/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc
index a19d567..668fcf8 100644
--- a/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc
+++ b/content/browser/gpu/gpu_memory_buffer_manager_singleton.cc
@@ -15,7 +15,7 @@
 #include "gpu/ipc/common/gpu_memory_buffer_support.h"
 #include "ui/base/ui_base_features.h"
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"
 #elif BUILDFLAG(IS_MAC)
 #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index f04810f..0b2bd5d95 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -101,7 +101,7 @@
 #include "ui/gfx/win/rendering_window_manager.h"
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/gpu_platform_support_host.h"
 #include "ui/ozone/public/ozone_platform.h"
 #include "ui/ozone/public/ozone_switches.h"
@@ -282,7 +282,7 @@
     switches::kShowMacOverlayBorders,
     switches::kUseHighGPUThreadPriorityForPerfTests,
 #endif
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
     switches::kOzonePlatform,
     switches::kDisableExplicitDmaFences,
     switches::kOzoneDumpFile,
@@ -342,7 +342,7 @@
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   GpuDataManagerImpl::GetInstance()->AddLogMessage(logging::LOG_ERROR,
                                                    "GpuProcessHost", message);
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   ui::OzonePlatform::GetInstance()
       ->GetGpuPlatformSupportHost()
       ->OnChannelDestroyed(host_id);
@@ -680,7 +680,7 @@
       mojo::GenericPendingReceiver(interface_name, std::move(interface_pipe)));
 }
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 void GpuProcessHost::TerminateGpuProcess(const std::string& message) {
   // At the moment, this path is only used by Ozone/Wayland. Once others start
   // to use this, start to distinguish the origin of termination. By default,
@@ -688,7 +688,7 @@
   termination_origin_ = GpuTerminationOrigin::kOzoneWaylandProxy;
   process_->TerminateOnBadMessageReceived(message);
 }
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 
 // static
 GpuProcessHost* GpuProcessHost::FromID(int host_id) {
diff --git a/content/browser/gpu/gpu_process_host.h b/content/browser/gpu/gpu_process_host.h
index e7af67f..934bf01 100644
--- a/content/browser/gpu/gpu_process_host.h
+++ b/content/browser/gpu/gpu_process_host.h
@@ -189,7 +189,7 @@
   void BindInterface(const std::string& interface_name,
                      mojo::ScopedMessagePipeHandle interface_pipe) override;
   void BindHostReceiver(mojo::GenericPendingReceiver generic_receiver) override;
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   void TerminateGpuProcess(const std::string& message) override;
 #endif
 
diff --git a/content/browser/launch_as_mojo_client_browsertest.cc b/content/browser/launch_as_mojo_client_browsertest.cc
index 41dd763..af492b66 100644
--- a/content/browser/launch_as_mojo_client_browsertest.cc
+++ b/content/browser/launch_as_mojo_client_browsertest.cc
@@ -26,7 +26,7 @@
 #include "mojo/public/cpp/system/invitation.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_switches.h"
 #endif
 
@@ -68,7 +68,7 @@
         GetFilePathNextToCurrentExecutable(kShellExecutableName));
     command_line.AppendSwitchPath(switches::kContentShellDataPath,
                                   temp_dir_.GetPath());
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
     const base::CommandLine& cmdline = *base::CommandLine::ForCurrentProcess();
     const char* kSwitchesToCopy[] = {
         // Keep the kOzonePlatform switch that the Ozone must use.
diff --git a/content/browser/media/android/media_player_renderer.cc b/content/browser/media/android/media_player_renderer.cc
index fb118837..ef5a75b 100644
--- a/content/browser/media/android/media_player_renderer.cc
+++ b/content/browser/media/android/media_player_renderer.cc
@@ -206,6 +206,10 @@
   return media_player_->GetCurrentTime();
 }
 
+media::RendererType MediaPlayerRenderer::GetRendererType() {
+  return media::RendererType::kMediaPlayer;
+}
+
 media::MediaResourceGetter* MediaPlayerRenderer::GetMediaResourceGetter() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (!media_resource_getter_.get()) {
diff --git a/content/browser/media/android/media_player_renderer.h b/content/browser/media/android/media_player_renderer.h
index ae75b2b..5b8b00db 100644
--- a/content/browser/media/android/media_player_renderer.h
+++ b/content/browser/media/android/media_player_renderer.h
@@ -74,6 +74,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  media::RendererType GetRendererType() override;
 
   // media::MediaPlayerBridge::Client implementation
   media::MediaResourceGetter* GetMediaResourceGetter() override;
diff --git a/content/browser/media/capture/desktop_capture_device_unittest.cc b/content/browser/media/capture/desktop_capture_device_unittest.cc
index 904f52b9..e09dbe7 100644
--- a/content/browser/media/capture/desktop_capture_device_unittest.cc
+++ b/content/browser/media/capture/desktop_capture_device_unittest.cc
@@ -22,6 +22,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/tick_clock.h"
 #include "base/time/time.h"
+#include "build/build_config.h"
 #include "media/capture/video/mock_video_capture_device_client.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -30,9 +31,9 @@
 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/buildflags.h"
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 
 using ::testing::_;
 using ::testing::AnyNumber;
@@ -275,7 +276,7 @@
       webrtc::DesktopCapturer::CreateScreenCapturer(
           webrtc::DesktopCaptureOptions::CreateDefault()));
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #if !BUILDFLAG(OZONE_PLATFORM_X11)
   // webrtc::DesktopCapturer is only supported on Ozone X11 by default.
   // TODO(webrtc/13429): Enable for Wayland.
@@ -284,7 +285,7 @@
   if (!capturer)
     return;
 #endif  // !BUILDFLAG(OZONE_PLATFORM_X11)
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 
   CreateScreenCaptureDevice(std::move(capturer));
 
diff --git a/content/browser/media/flinging_renderer.cc b/content/browser/media/flinging_renderer.cc
index 81566a3b..1aae86a 100644
--- a/content/browser/media/flinging_renderer.cc
+++ b/content/browser/media/flinging_renderer.cc
@@ -117,6 +117,10 @@
   return controller_->GetApproximateCurrentTime();
 }
 
+media::RendererType FlingingRenderer::GetRendererType() {
+  return media::RendererType::kFlinging;
+}
+
 void FlingingRenderer::SetExpectedPlayState(PlayState state) {
   DVLOG(3) << __func__ << " : state " << static_cast<int>(state);
   DCHECK(state == PlayState::PLAYING || state == PlayState::PAUSED);
diff --git a/content/browser/media/flinging_renderer.h b/content/browser/media/flinging_renderer.h
index 2bf7ed8..08bb900e 100644
--- a/content/browser/media/flinging_renderer.h
+++ b/content/browser/media/flinging_renderer.h
@@ -57,6 +57,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  media::RendererType GetRendererType() override;
 
   // media::MediaStatusObserver implementation.
   void OnMediaStatusUpdated(const media::MediaStatus& status) override;
diff --git a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
index 8c60e1c..709c6a7 100644
--- a/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
+++ b/content/browser/renderer_host/media/media_stream_dispatcher_host.cc
@@ -349,7 +349,6 @@
         generate_salt_and_origin_callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
-  // TODO(crbug.com/1342071): Add tests for |request_all_screens| being true.
   if (request_all_screens &&
       !CheckRequestAllScreensAllowed(render_process_id, render_frame_id)) {
     return {.request_allowed = false,
@@ -460,9 +459,11 @@
 
   // TODO(crbug.com/1337580): Cover this block by a browser test.
   if (!ui_check_result.request_allowed) {
-    ReceivedBadMessage(
-        render_process_id_,
-        bad_message::MSDH_REQUEST_ALL_SCREENS_NOT_ALLOWED_FOR_ORIGIN);
+    std::move(callback).Run(
+        blink::mojom::MediaStreamRequestResult::PERMISSION_DENIED,
+        /*label=*/std::string(),
+        /*stream_devices_set=*/nullptr,
+        /*pan_tilt_zoom_allowed=*/false);
     return;
   }
 
diff --git a/content/browser/renderer_host/navigation_controller_impl.cc b/content/browser/renderer_host/navigation_controller_impl.cc
index 978ceb2..3e9f6ca4e 100644
--- a/content/browser/renderer_host/navigation_controller_impl.cc
+++ b/content/browser/renderer_host/navigation_controller_impl.cc
@@ -4144,20 +4144,7 @@
   // when it wants to draw.  See http://crbug.com/11157
   ssl_manager_.DidCommitProvisionalLoad(*details);
 
-  bool should_fire_navigation_state_changed = true;
-#if BUILDFLAG(IS_ANDROID)
-  if (details && details->should_stay_as_initial_entry) {
-    // For initial NavigationEntries, only fire NavigationStateChanged() if the
-    // embedder wants to hear about it.
-    should_fire_navigation_state_changed =
-        !GetContentClient()
-             ->browser()
-             ->ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport();
-  }
-#endif
-  if (should_fire_navigation_state_changed)
-    delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_ALL);
-
+  delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_ALL);
   delegate_->NotifyNavigationEntryCommitted(*details);
 
   // TODO(avi): Remove. http://crbug.com/170921
@@ -4317,20 +4304,7 @@
 
   if (!delegate_)
     return;
-
-  bool should_fire_navigation_state_changed = true;
-#if BUILDFLAG(IS_ANDROID)
-  if (commit_details && commit_details->should_stay_as_initial_entry) {
-    // For initial NavigationEntries, only fire NavigationStateChanged() if the
-    // embedder wants to hear about it.
-    should_fire_navigation_state_changed =
-        !GetContentClient()
-             ->browser()
-             ->ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport();
-  }
-#endif
-  if (should_fire_navigation_state_changed)
-    delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_ALL);
+  delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_ALL);
 }
 
 int NavigationControllerImpl::GetEntryIndexWithUniqueID(
diff --git a/content/browser/renderer_host/navigation_controller_impl_browsertest.cc b/content/browser/renderer_host/navigation_controller_impl_browsertest.cc
index 25a9c11..6662bec8 100644
--- a/content/browser/renderer_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/renderer_host/navigation_controller_impl_browsertest.cc
@@ -21045,155 +21045,6 @@
   }
 }
 
-#if BUILDFLAG(IS_ANDROID)
-// ContentBrowserClient that ignores NavigationStateChanged calls for initial
-// NavigationEntries.
-class IgnoreInitialEntryNavigationStateChangedContentBrowserClient
-    : public TestContentBrowserClient {
- public:
-  IgnoreInitialEntryNavigationStateChangedContentBrowserClient() = default;
-
-  IgnoreInitialEntryNavigationStateChangedContentBrowserClient(
-      const IgnoreInitialEntryNavigationStateChangedContentBrowserClient&) =
-      delete;
-  IgnoreInitialEntryNavigationStateChangedContentBrowserClient& operator=(
-      const IgnoreInitialEntryNavigationStateChangedContentBrowserClient&) =
-      delete;
-
-  bool
-  ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport()
-      override {
-    return true;
-  }
-};
-
-// Same as NavigationStateChangedForInitialNavigationEntry above, but with a
-// client that ignores initial NavigationEntry NavigationStateChangedCalls.
-IN_PROC_BROWSER_TEST_P(NavigationControllerBrowserTest,
-                       NavigationStateChangedForInitialNavigationEntry_Ignore) {
-  if (!blink::features::IsInitialNavigationEntryEnabled()) {
-    // The tests below specifically tests the "initial NavigationEntry" state,
-    // which is not used when InitialNavigationEntry is disabled.
-    return;
-  }
-
-  IgnoreInitialEntryNavigationStateChangedContentBrowserClient
-      content_browser_client;
-  ContentBrowserClient* old_client =
-      SetBrowserClientForTesting(&content_browser_client);
-
-  GURL url1 = embedded_test_server()->GetURL("/title1.html");
-  GURL url2 = embedded_test_server()->GetURL("/title2.html");
-  EXPECT_TRUE(NavigateToURL(shell(), url1));
-  FrameTreeNode* root = contents()->GetPrimaryFrameTree().root();
-  // Pop open a new window without specifying a URL.
-  ShellAddedObserver new_shell_observer;
-  EXPECT_TRUE(ExecJs(root, "var w = window.open()"));
-  Shell* new_shell = new_shell_observer.GetShell();
-  WebContentsImpl* new_contents =
-      static_cast<WebContentsImpl*>(new_shell->web_contents());
-  EXPECT_TRUE(WaitForLoadStop(new_contents));
-
-  // Observe NavigationStateChanged calls.
-  AllNavigationStateChangedDelegate all_navigation_state_changed_delegate;
-  new_contents->SetDelegate(&all_navigation_state_changed_delegate);
-  EXPECT_EQ(0, all_navigation_state_changed_delegate.call_count());
-  ASSERT_NE(new_contents, shell()->web_contents());
-  FrameTreeNode* new_root = new_contents->GetPrimaryFrameTree().root();
-
-  NavigationControllerImpl& controller = new_contents->GetController();
-  // The new window is on the initial NavigationEntry.
-  EXPECT_EQ(1, controller.GetEntryCount());
-  EXPECT_TRUE(controller.GetLastCommittedEntry()->IsInitialEntry());
-
-  {
-    // Make a new iframe in the popup.
-    LoadCommittedCapturer capturer(new_contents);
-    std::string script = JsReplace(kAddFrameWithSrcScript, url1);
-    EXPECT_TRUE(ExecJs(new_root, script));
-    capturer.Wait();
-    EXPECT_EQ(url1, new_root->child_at(0)->current_url());
-
-    // The new window is still on the initial NavigationEntry, as the previous
-    // navigation modified the existing entry.
-    EXPECT_EQ(1, controller.GetEntryCount());
-    EXPECT_TRUE(controller.GetLastCommittedEntry()->IsInitialEntry());
-
-    // No new NavigationEntry was committed as the last navigation only modifies
-    // the existing NavigationEntry, so no NavigationStateChanged calls were
-    // triggered.
-    EXPECT_EQ(0, all_navigation_state_changed_delegate.call_count());
-  }
-
-  {
-    // Navigate the iframe to another URL.
-    FrameNavigateParamsCapturer capturer(new_root->child_at(0));
-    NavigateFrameToURL(new_root->child_at(0), url2);
-    capturer.Wait();
-    EXPECT_EQ(url2, new_root->child_at(0)->current_url());
-    EXPECT_EQ(NAVIGATION_TYPE_AUTO_SUBFRAME, capturer.navigation_type());
-    // The new window is still on the initial NavigationEntry, as the previous
-    // navigation modified the existing entry.
-    EXPECT_EQ(1, controller.GetEntryCount());
-    EXPECT_TRUE(controller.GetLastCommittedEntry()->IsInitialEntry());
-
-    // No new NavigationEntry was committed as the last navigation only modifies
-    // the existing NavigationEntry, so no NavigationStateChanged calls were
-    // triggered.
-    EXPECT_EQ(0, all_navigation_state_changed_delegate.call_count());
-  }
-
-  {
-    // Navigate the popup main frame to a same-document URL.
-    FrameNavigateParamsCapturer capturer(new_root);
-    EXPECT_TRUE(ExecJs(new_root, "location.href = '#foo';"));
-    capturer.Wait();
-    EXPECT_EQ(GURL("about:blank#foo"), new_root->current_url());
-    EXPECT_EQ(NAVIGATION_TYPE_MAIN_FRAME_EXISTING_ENTRY,
-              capturer.navigation_type());
-    EXPECT_TRUE(capturer.is_same_document());
-
-    // The navigation is a same-document navigation from the initial empty
-    // document, so we committed a new initial NavigationEntry that replaced the
-    // previous initial NavigationEntry.
-    EXPECT_TRUE(capturer.did_replace_entry());
-    EXPECT_EQ(1, controller.GetEntryCount());
-    EXPECT_TRUE(controller.GetLastCommittedEntry()->IsInitialEntry());
-
-    // 0 INVALIDATE_TYPE_ALL NavigationStateChanged calls were triggered even
-    // though we committed a new NavigationEntry, because the new
-    // NavigationEntry keeps the "initial" status:
-    // Note that this is different from the non-Ignore test above, which would
-    // fire the events because the client doesn't choose to ignore the updates.
-    EXPECT_EQ(0, all_navigation_state_changed_delegate.call_count());
-  }
-
-  {
-    // Navigate the popup main frame to another URL.
-    FrameNavigateParamsCapturer capturer(new_root);
-    EXPECT_TRUE(ExecJs(new_root, JsReplace("location.href = $1;", url2)));
-    capturer.Wait();
-    EXPECT_EQ(url2, new_root->current_url());
-    EXPECT_EQ(NAVIGATION_TYPE_MAIN_FRAME_NEW_ENTRY, capturer.navigation_type());
-    EXPECT_TRUE(capturer.did_replace_entry());
-
-    // The navigation is a cross-document navigation from the initial empty
-    // document, so we committed a new non-initial NavigationEntry that
-    // replaced the initial entry.
-    EXPECT_EQ(1, controller.GetEntryCount());
-    EXPECT_FALSE(controller.GetLastCommittedEntry()->IsInitialEntry());
-
-    // 2 INVALIDATE_TYPE_ALL NavigationStateChanged calls were triggered, and
-    // they're not for the initial NavigationEntry.
-    // #1 was triggered by DiscardNonCommittedEntries().
-    // #2 is triggered by NotifyNavigationEntryCommitted().
-    EXPECT_EQ(2, all_navigation_state_changed_delegate.call_count());
-  }
-
-  SetBrowserClientForTesting(old_client);
-}
-#endif
-
 // Tests with InitialNavigationEntry enabled/disabled.
 class NavigationControllerInitialNavigationEntryBrowserTest
     : public NavigationControllerBrowserTestBase,
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 7f44fd1b..f025dc1 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -264,7 +264,7 @@
 #include "content/browser/hyphenation/hyphenation_impl.h"
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_switches.h"
 #endif
 
@@ -3427,7 +3427,7 @@
     switches::kTrySupportedChannelLayouts,
     switches::kRaiseTimerFrequency,
 #endif
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
     switches::kOzonePlatform,
 #endif
 #if defined(ENABLE_IPC_FUZZER)
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 0149c8c8..42940ab 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -261,7 +261,7 @@
   // TODO(crbug.com/1066605): Consider exposing this as a FIDL parameter.
   prefs->focus_ring_color = SK_AlphaTRANSPARENT;
 #endif
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   prefs->selection_clipboard_buffer_available =
       ui::Clipboard::IsSupportedClipboardBuffer(
           ui::ClipboardBuffer::kSelection);
diff --git a/content/browser/resources/attribution_reporting/BUILD.gn b/content/browser/resources/attribution_reporting/BUILD.gn
index c7b47b9..7760408 100644
--- a/content/browser/resources/attribution_reporting/BUILD.gn
+++ b/content/browser/resources/attribution_reporting/BUILD.gn
@@ -14,10 +14,12 @@
 # ts_library.
 copy("copy_files") {
   deps = [
+    "//components/attribution_reporting:source_registration_error_mojom_webui_js",
     "//content/browser/attribution_reporting:internals_mojo_bindings_webui_js",
     "//content/browser/attribution_reporting:mojo_bindings_webui_js",
   ]
   sources = [
+    "$root_gen_dir/mojom-webui/components/attribution_reporting/source_registration_error.mojom-webui.js",
     "$root_gen_dir/mojom-webui/content/browser/attribution_reporting/attribution_internals.mojom-webui.js",
     "$root_gen_dir/mojom-webui/content/browser/attribution_reporting/attribution_reporting.mojom-webui.js",
     "attribution_internals.ts",
@@ -38,6 +40,7 @@
     "table_model.ts",
     "attribution_internals.mojom-webui.js",
     "attribution_reporting.mojom-webui.js",
+    "source_registration_error.mojom-webui.js",
   ]
   deps = [
     "//ui/webui/resources:library",
diff --git a/content/browser/resources/attribution_reporting/attribution_internals.ts b/content/browser/resources/attribution_reporting/attribution_internals.ts
index 3a018f88c..601e1be 100644
--- a/content/browser/resources/attribution_reporting/attribution_internals.ts
+++ b/content/browser/resources/attribution_reporting/attribution_internals.ts
@@ -11,7 +11,8 @@
 
 import {ClearedDebugKey, ClearedDebugKey_Type, FailedSourceRegistration, Handler as AttributionInternalsHandler, HandlerRemote as AttributionInternalsHandlerRemote, ObserverInterface, ObserverReceiver, ReportID, WebUIReport, WebUISource, WebUISource_Attributability, WebUITrigger, WebUITrigger_Status} from './attribution_internals.mojom-webui.js';
 import {AttributionInternalsTableElement} from './attribution_internals_table.js';
-import {ReportType, SourceRegistrationError, SourceType} from './attribution_reporting.mojom-webui.js';
+import {ReportType, SourceType} from './attribution_reporting.mojom-webui.js';
+import {SourceRegistrationError} from './source_registration_error.mojom-webui.js';
 import {Column, TableModel} from './table_model.js';
 
 // If kAttributionAggregatableBudgetPerSource changes, update this value
diff --git a/content/browser/scheduler/responsiveness/jank_monitor_impl.cc b/content/browser/scheduler/responsiveness/jank_monitor_impl.cc
index 58bdf689..581bb2e 100644
--- a/content/browser/scheduler/responsiveness/jank_monitor_impl.cc
+++ b/content/browser/scheduler/responsiveness/jank_monitor_impl.cc
@@ -334,7 +334,8 @@
     // in context menus, among others). Simply ignore the mismatches for now.
     // See https://crbug.com/929813 for the details of why the mismatch
     // happens.
-#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) && defined(USE_OZONE)
+#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) && \
+    BUILDFLAG(IS_OZONE)
     task_execution_metadata_.clear();
 #endif
     return;
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 27d79e28..14250ef 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -324,6 +324,7 @@
           {"StorageAccessAPI", net::features::kStorageAccessAPI},
           {"TopicsAPI", features::kPrivacySandboxAdsAPIsOverride,
            kSetOnlyIfOverridden},
+          {"TrustedTypesFromLiteral", features::kTrustedTypesFromLiteral},
           {"WebAppTabStrip", features::kDesktopPWAsTabStrip},
           {"WebAuthenticationConditionalUI", features::kWebAuthConditionalUI},
           {"WGIGamepadTriggerRumble",
diff --git a/content/common/cursors/webcursor.cc b/content/common/cursors/webcursor.cc
index 702e04b4..c4ffd8f 100644
--- a/content/common/cursors/webcursor.cc
+++ b/content/common/cursors/webcursor.cc
@@ -57,7 +57,7 @@
 
 bool WebCursor::operator==(const WebCursor& other) const {
   return
-#if defined(USE_AURA) || defined(USE_OZONE)
+#if defined(USE_AURA) || BUILDFLAG(IS_OZONE)
       rotation_ == other.rotation_ &&
 #endif
       cursor_ == other.cursor_;
diff --git a/content/common/cursors/webcursor.h b/content/common/cursors/webcursor.h
index 3533ce3..337a1a5 100644
--- a/content/common/cursors/webcursor.h
+++ b/content/common/cursors/webcursor.h
@@ -62,13 +62,13 @@
   // The basic cursor info.
   ui::Cursor cursor_;
 
-#if defined(USE_AURA) || defined(USE_OZONE)
+#if defined(USE_AURA) || BUILDFLAG(IS_OZONE)
   // Only used for custom cursors.
   float device_scale_factor_ = 1.f;
   display::Display::Rotation rotation_ = display::Display::ROTATE_0;
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   // This matches ozone drm_util.cc's kDefaultCursorWidth/Height.
   static constexpr int kDefaultMaxSize = 64;
   gfx::Size maximum_cursor_size_ = {kDefaultMaxSize, kDefaultMaxSize};
diff --git a/content/common/cursors/webcursor_aura.cc b/content/common/cursors/webcursor_aura.cc
index aaa84330..f40ba645 100644
--- a/content/common/cursors/webcursor_aura.cc
+++ b/content/common/cursors/webcursor_aura.cc
@@ -5,6 +5,7 @@
 #include "content/common/cursors/webcursor.h"
 
 #include "base/check_op.h"
+#include "build/build_config.h"
 #include "ui/base/cursor/cursor.h"
 #include "ui/base/cursor/cursor_factory.h"
 #include "ui/base/cursor/mojom/cursor_type.mojom-shared.h"
@@ -42,7 +43,7 @@
   wm::ScaleAndRotateCursorBitmapAndHotpoint(*scale, rotation_, bitmap, hotspot);
 }
 
-#if !defined(USE_OZONE)
+#if !BUILDFLAG(IS_OZONE)
 // ozone has its own SetDisplayInfo that takes rotation into account
 void WebCursor::SetDisplayInfo(const display::Display& display) {
   if (device_scale_factor_ == display.device_scale_factor())
diff --git a/content/common/cursors/webcursor_ozone.cc b/content/common/cursors/webcursor_ozone.cc
index 55cd347..404fcc2 100644
--- a/content/common/cursors/webcursor_ozone.cc
+++ b/content/common/cursors/webcursor_ozone.cc
@@ -7,11 +7,12 @@
 #include <algorithm>
 
 #include "base/check_op.h"
+#include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 
 namespace content {
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 void WebCursor::SetDisplayInfo(const display::Display& display) {
   if (rotation_ == display.panel_rotation() &&
       device_scale_factor_ == display.device_scale_factor() &&
diff --git a/content/common/cursors/webcursor_unittest.cc b/content/common/cursors/webcursor_unittest.cc
index 341f195..fd86922 100644
--- a/content/common/cursors/webcursor_unittest.cc
+++ b/content/common/cursors/webcursor_unittest.cc
@@ -64,7 +64,7 @@
   webcursor.GetNativeCursor();
   EXPECT_TRUE(webcursor.has_custom_cursor_for_test());
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   // Test if the rotating custom cursor works correctly.
   display::Display display;
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -164,7 +164,7 @@
   display.set_device_scale_factor(kDeviceScale);
   webcursor.SetDisplayInfo(display);
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   // In Ozone, the size of the cursor is capped at 64px unless the hardware
   // advertises support for bigger cursors.
   const gfx::Size kDefaultMaxSize = gfx::Size(64, 64);
diff --git a/content/dev_ui_content_resources.grd b/content/dev_ui_content_resources.grd
index 2f01b341..061d3ec 100644
--- a/content/dev_ui_content_resources.grd
+++ b/content/dev_ui_content_resources.grd
@@ -53,6 +53,7 @@
       <include name="IDR_SERVICE_WORKER_INTERNALS_HTML" file="browser/resources/service_worker/serviceworker_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
       <include name="IDR_SERVICE_WORKER_INTERNALS_JS" file="browser/resources/service_worker/serviceworker_internals.js" type="BINDATA" />
       <include name="IDR_SERVICE_WORKER_INTERNALS_CSS" file="browser/resources/service_worker/serviceworker_internals.css" type="BINDATA" />
+      <include name="IDR_SOURCE_REGISTRATION_ERROR_MOJOM_JS" file="${root_gen_dir}/mojom-webui/components/attribution_reporting/source_registration_error.mojom-webui.js" use_base_dir="false" type="BINDATA" />
     </includes>
   </release>
 </grit>
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
index 5c3bcea..a6d0b5c9 100644
--- a/content/gpu/gpu_main.cc
+++ b/content/gpu/gpu_main.cc
@@ -260,7 +260,7 @@
     main_thread_task_executor =
         std::make_unique<base::SingleThreadTaskExecutor>(
             base::MessagePumpType::DEFAULT);
-#elif defined(USE_OZONE)
+#elif BUILDFLAG(IS_OZONE)
     // The MessagePump type required depends on the Ozone platform selected at
     // runtime.
     if (!main_thread_task_executor) {
diff --git a/content/public/browser/ax_inspect_factory_fuchsia.cc b/content/public/browser/ax_inspect_factory_fuchsia.cc
index 75063bb927..2b54e2b 100644
--- a/content/public/browser/ax_inspect_factory_fuchsia.cc
+++ b/content/public/browser/ax_inspect_factory_fuchsia.cc
@@ -4,10 +4,10 @@
 
 #include "content/public/browser/ax_inspect_factory.h"
 
-#include "content/browser/accessibility/accessibility_event_recorder_fuchsia.h"
 #include "content/browser/accessibility/accessibility_tree_formatter_blink.h"
 #include "content/browser/accessibility/accessibility_tree_formatter_fuchsia.h"
 #include "content/browser/accessibility/browser_accessibility_manager.h"
+#include "ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.h"
 
 namespace content {
 
@@ -58,7 +58,7 @@
 
   switch (type) {
     case ui::AXApiType::kFuchsia:
-      return std::make_unique<AccessibilityEventRecorderFuchsia>(pid, selector);
+      return std::make_unique<ui::AXEventRecorderFuchsia>(pid, selector);
     default:
       NOTREACHED() << "Unsupported API type " << static_cast<std::string>(type);
   }
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index 79b2081..d42a393 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -991,11 +991,6 @@
   return true;
 }
 
-bool ContentBrowserClient::
-    ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport() {
-  return false;
-}
-
 bool ContentBrowserClient::SupportsAvoidUnnecessaryBeforeUnloadCheckSync() {
   return true;
 }
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index eba9545..c50ff632 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -1797,20 +1797,6 @@
                                         ui::PageTransition transition,
                                         bool* ignore_navigation);
 
-  // Only used by Android WebView. Whether creating or modifying the initial
-  // NavigationEntry of a WebContents should notify the embedder via
-  // NavigationStateChanged() calls or not. The embedder should return true if
-  // NavigationStateChanged() calls should be skipped for the initial entry, or
-  // false otherwise (which is the default). On Android WebView, we should not
-  // fire the initial NavigationEntry creation/modification
-  // NavigationStateChanged calls to preserve legacy behavior (not firing extra
-  // onPageFinished calls), as initial NavigationEntries used to not exist.
-  // See https://crbug.com/1277414.
-  // TODO(https://crbug.com/1293332): Remove this function if the
-  // kWebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess approach works.
-  virtual bool
-  ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport();
-
   // Returns true if navigation can synchronously continue if the frame
   // being navigated (and all child frames) do not have beforeunload handlers.
   // Synchronously continuing with navigation can lead to reentrancy in
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index 22ea126..91dbf73 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -1154,6 +1154,11 @@
 #endif
 );
 
+// Enable TrustedTypes .fromLiteral support.
+BASE_FEATURE(kTrustedTypesFromLiteral,
+             "TrustedTypesFromLiteral",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // This feature is for a reverse Origin Trial, enabling SharedArrayBuffer for
 // sites as they migrate towards requiring cross-origin isolation for these
 // features.
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h
index 9322ca5..6a9574aa 100644
--- a/content/public/common/content_features.h
+++ b/content/public/common/content_features.h
@@ -244,6 +244,7 @@
 #endif
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kTouchpadAsyncPinchEvents);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kTouchpadOverscrollHistoryNavigation);
+CONTENT_EXPORT BASE_DECLARE_FEATURE(kTrustedTypesFromLiteral);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kUnrestrictedSharedArrayBuffer);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kUserActivationSameOriginVisibility);
 CONTENT_EXPORT BASE_DECLARE_FEATURE(kVerifyDidCommitParams);
diff --git a/content/renderer/media/android/flinging_renderer_client.cc b/content/renderer/media/android/flinging_renderer_client.cc
index b82184f..dca9b49 100644
--- a/content/renderer/media/android/flinging_renderer_client.cc
+++ b/content/renderer/media/android/flinging_renderer_client.cc
@@ -37,6 +37,10 @@
   MojoRendererWrapper::Initialize(media_resource, client, std::move(init_cb));
 }
 
+media::RendererType FlingingRendererClient::GetRendererType() {
+  return media::RendererType::kFlinging;
+}
+
 void FlingingRendererClient::OnRemotePlayStateChange(
     media::MediaStatus::State state) {
   DCHECK(media_task_runner_->RunsTasksInCurrentSequence());
diff --git a/content/renderer/media/android/flinging_renderer_client.h b/content/renderer/media/android/flinging_renderer_client.h
index 3ce4f2b..eb329fb 100644
--- a/content/renderer/media/android/flinging_renderer_client.h
+++ b/content/renderer/media/android/flinging_renderer_client.h
@@ -48,6 +48,7 @@
   void Initialize(media::MediaResource* media_resource,
                   media::RendererClient* client,
                   media::PipelineStatusCallback init_cb) override;
+  media::RendererType GetRendererType() override;
 
   // media::mojom::FlingingRendererClientExtension implementation
   void OnRemotePlayStateChange(media::MediaStatus::State state) override;
diff --git a/content/renderer/media/android/media_player_renderer_client.cc b/content/renderer/media/android/media_player_renderer_client.cc
index 6b84a40..43d6817a 100644
--- a/content/renderer/media/android/media_player_renderer_client.cc
+++ b/content/renderer/media/android/media_player_renderer_client.cc
@@ -67,6 +67,10 @@
           weak_factory_.GetWeakPtr(), media_resource));
 }
 
+media::RendererType MediaPlayerRendererClient::GetRendererType() {
+  return media::RendererType::kMediaPlayer;
+}
+
 void MediaPlayerRendererClient::OnStreamTextureWrapperInitialized(
     media::MediaResource* media_resource,
     bool success) {
diff --git a/content/renderer/media/android/media_player_renderer_client.h b/content/renderer/media/android/media_player_renderer_client.h
index 8d91c0e..76038c33 100644
--- a/content/renderer/media/android/media_player_renderer_client.h
+++ b/content/renderer/media/android/media_player_renderer_client.h
@@ -64,6 +64,7 @@
   void Initialize(media::MediaResource* media_resource,
                   media::RendererClient* client,
                   media::PipelineStatusCallback init_cb) override;
+  media::RendererType GetRendererType() override;
 
   // media::mojom::MediaPlayerRendererClientExtension implementation
   void OnDurationChange(base::TimeDelta duration) override;
diff --git a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
index 0502d725..e4da107e 100644
--- a/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
+++ b/content/renderer/media/gpu/gpu_video_accelerator_factories_impl.cc
@@ -431,7 +431,7 @@
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   if (CheckContextLost())
     return media::GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED;
-#if BUILDFLAG(IS_CHROMEOS_ASH) && defined(USE_OZONE)
+#if BUILDFLAG(IS_CHROMEOS_ASH) && BUILDFLAG(IS_OZONE)
   // TODO(sugoi): This configuration is currently used only for testing ChromeOS
   // on Linux and doesn't support hardware acceleration. OSMesa did not support
   // any hardware acceleration here, so this was never an issue, but SwiftShader
diff --git a/content/renderer/media/media_factory.cc b/content/renderer/media/media_factory.cc
index f60655c..3b3fedf 100644
--- a/content/renderer/media/media_factory.cc
+++ b/content/renderer/media/media_factory.cc
@@ -633,8 +633,6 @@
 #else
     // The "default" MojoRendererFactory can be wrapped by a
     // DecryptingRendererFactory without changing any behavior.
-    // TODO(tguilbert/xhwang): Add "RendererType::DECRYPTING" if ever we need to
-    // distinguish between a "pure" and "decrypting" MojoRenderer.
     factory_selector->AddBaseFactory(
         RendererType::kMojo, std::make_unique<media::DecryptingRendererFactory>(
                                  media_log, CreateMojoRendererFactory()));
diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
index 0f3ad1f..25a13b0 100644
--- a/content/renderer/render_view_browsertest.cc
+++ b/content/renderer/render_view_browsertest.cc
@@ -128,7 +128,7 @@
 #include "base/win/windows_version.h"
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/events/keycodes/keyboard_code_conversion.h"
 #endif
 
@@ -147,7 +147,7 @@
 
 static const int kProxyRoutingId = 13;
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 // Converts MockKeyboard::Modifiers to ui::EventFlags.
 int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) {
   static struct ModifierMap {
@@ -411,7 +411,7 @@
     return param;
   }
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   int SendKeyEventOzone(MockKeyboard::Layout layout,
                         int key_code,
                         MockKeyboard::Modifiers modifiers,
@@ -482,7 +482,7 @@
     SendNativeKeyEvent(keyup_event);
 
     return length;
-#elif defined(USE_OZONE)
+#elif BUILDFLAG(IS_OZONE)
     return SendKeyEventOzone(layout, key_code, modifiers, output);
 #else
     NOTIMPLEMENTED();
diff --git a/content/shell/browser/shell_platform_data_aura.cc b/content/shell/browser/shell_platform_data_aura.cc
index 7b5d7b17..1c7e5dd 100644
--- a/content/shell/browser/shell_platform_data_aura.cc
+++ b/content/shell/browser/shell_platform_data_aura.cc
@@ -28,7 +28,7 @@
 #include "ui/platform_window/fuchsia/initialize_presenter_api_view.h"
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/aura/screen_ozone.h"
 #endif
 
@@ -83,10 +83,10 @@
 ShellPlatformDataAura::ShellPlatformDataAura(const gfx::Size& initial_size) {
   CHECK(aura::Env::GetInstance());
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   // Setup global display::Screen singleton.
   screen_ = std::make_unique<aura::ScopedScreenOzone>();
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 
   ui::PlatformWindowInitProperties properties;
   properties.bounds = gfx::Rect(initial_size);
diff --git a/content/shell/browser/shell_platform_data_aura.h b/content/shell/browser/shell_platform_data_aura.h
index b1f6273..ff67f75d 100644
--- a/content/shell/browser/shell_platform_data_aura.h
+++ b/content/shell/browser/shell_platform_data_aura.h
@@ -19,7 +19,7 @@
 }  // namespace client
 }  // namespace aura
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 namespace display {
 class ScopedNativeScreen;
 }
@@ -46,7 +46,7 @@
   aura::WindowTreeHost* host() { return host_.get(); }
 
  private:
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   std::unique_ptr<display::ScopedNativeScreen> screen_;
 #endif
 
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 88305fbc..3e54149 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -508,6 +508,7 @@
     "//base/third_party/dynamic_annotations",
     "//build:chromeos_buildflags",
     "//cc:test_support",
+    "//components/attribution_reporting:source_registration_error_mojom",
     "//components/breadcrumbs/core",
     "//components/browsing_topics/common:common",
     "//components/network_session_configurator/common:common",
@@ -1578,6 +1579,7 @@
     "//base/test:test_support",
     "//build:chromecast_buildflags",
     "//build:chromeos_buildflags",
+    "//components/attribution_reporting:source_registration_error_mojom",
     "//components/discardable_memory/client",
     "//components/discardable_memory/common",
     "//components/discardable_memory/service",
@@ -2679,6 +2681,7 @@
     "//cc",
     "//cc:test_support",
     "//cc/mojom",
+    "//components/attribution_reporting:source_registration_error_mojom",
     "//components/cbor",
     "//components/network_session_configurator/browser",
     "//components/network_session_configurator/common",
diff --git a/content/test/DEPS b/content/test/DEPS
index aff2545..214a27a 100644
--- a/content/test/DEPS
+++ b/content/test/DEPS
@@ -45,6 +45,9 @@
 ]
 
 specific_include_rules = {
+  "attribution_simulator_input_parser.cc": [
+    "+components/attribution_reporting/source_registration_error.mojom.h",
+  ],
   "gpu_browsertest_helpers.cc": [
     "+services/viz/public/cpp/gpu/command_buffer_metrics.h",
     "+services/viz/public/cpp/gpu/context_provider_command_buffer.h",
diff --git a/content/test/attribution_simulator_input_parser.cc b/content/test/attribution_simulator_input_parser.cc
index 6e919e16..c86df2bf 100644
--- a/content/test/attribution_simulator_input_parser.cc
+++ b/content/test/attribution_simulator_input_parser.cc
@@ -22,12 +22,12 @@
 #include "base/time/time.h"
 #include "base/types/expected.h"
 #include "base/values.h"
+#include "components/attribution_reporting/source_registration_error.mojom.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_trigger_data.h"
 #include "content/browser/attribution_reporting/attribution_aggregatable_values.h"
 #include "content/browser/attribution_reporting/attribution_filter_data.h"
 #include "content/browser/attribution_reporting/attribution_header_utils.h"
 #include "content/browser/attribution_reporting/attribution_parser_test_utils.h"
-#include "content/browser/attribution_reporting/attribution_reporting.mojom.h"
 #include "content/browser/attribution_reporting/attribution_source_type.h"
 #include "content/browser/attribution_reporting/attribution_trigger.h"
 #include "content/browser/attribution_reporting/storable_source.h"
diff --git a/content/test/content_browser_test_test.cc b/content/test/content_browser_test_test.cc
index 83383ad60..64335ec 100644
--- a/content/test/content_browser_test_test.cc
+++ b/content/test/content_browser_test_test.cc
@@ -39,7 +39,7 @@
 #include "testing/gtest/include/gtest/gtest-spi.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_switches.h"
 #endif
 
@@ -60,7 +60,7 @@
 base::CommandLine CreateCommandLine() {
   const base::CommandLine& cmdline = *base::CommandLine::ForCurrentProcess();
   base::CommandLine command_line = base::CommandLine(cmdline.GetProgram());
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   const char* kSwitchesToCopy[] = {
       // Keep the kOzonePlatform switch that the Ozone must use.
       switches::kOzonePlatform,
diff --git a/content/web_test/renderer/accessibility_controller.cc b/content/web_test/renderer/accessibility_controller.cc
index 2686e2a2..2357e02f 100644
--- a/content/web_test/renderer/accessibility_controller.cc
+++ b/content/web_test/renderer/accessibility_controller.cc
@@ -284,6 +284,8 @@
 
 v8::Local<v8::Object> AccessibilityController::AccessibleElementById(
     const std::string& id) {
+  if (!IsInstalled())
+    return v8::Local<v8::Object>();
   ax_context_->UpdateAXForAllDocuments();
   blink::WebAXObject root_element = GetAccessibilityObjectForMainFrame();
 
diff --git a/content/web_test/renderer/accessibility_controller.h b/content/web_test/renderer/accessibility_controller.h
index be6fc99c..dada3633 100644
--- a/content/web_test/renderer/accessibility_controller.h
+++ b/content/web_test/renderer/accessibility_controller.h
@@ -61,7 +61,7 @@
   v8::Local<v8::Object> RootElement();
   v8::Local<v8::Object> AccessibleElementById(const std::string& id);
   bool CanCallAOMEventListeners() const;
-  bool IsInstalled() { return elements_ != nullptr; }
+  bool IsInstalled() { return elements_ != nullptr && ax_context_ != nullptr; }
 
   v8::Local<v8::Object> FindAccessibleElementByIdRecursive(
       const blink::WebAXObject&,
diff --git a/docs/testing/gtest_flake_tips.md b/docs/testing/gtest_flake_tips.md
index c3fb734..7c6630c 100644
--- a/docs/testing/gtest_flake_tips.md
+++ b/docs/testing/gtest_flake_tips.md
@@ -2,29 +2,9 @@
 
 ## Understanding builder results
 
-The [Flake portal](https://analysis.chromium.org/p/chromium/flake-portal/flakes)
-links to the flake occurrences of various tests on various bots. On the flake
-occurrences page for a specific test, clicking on any of the timestamps takes
-you to the bot run that flaked.
-
-![flake_portal_occurrences]
-
-You can then search the page for the flaky test name to view
-details on how it failed. The failure will either be in a unittest run or
-browsertest run. Note that the flake may either be detected as a flaky failure
-if it passed on a following run (a "cq hidden flake" on the flake portal), or it
-could have flaked multiple times causing the bot run to fail (a "cq false
-rejection" on the flake portal). The build step output provides a link to your
-test output. If your flaky test has both hidden flakes and false rejections,
-take a look at the output for both as they may provide different hints toward
-the issue.
-
-![flaky_build_step]
-
-Compare the flake output to the expected output when the test passes. Sometimes
-observing the output is enough to narrow down the issue. However, sometimes
-there’s very little output or it’s not that useful, such as when the test times
-out. In this case you can try and add more logging and reproduce the flake.
+[LUCI Analysis](https://luci-analysis.appspot.com/p/chromium/clusters) lists the
+top flake clusters of tests along with any associated bug and failure counts in
+different contexts.
 
 ## Reproducing the flaky test
 
@@ -102,6 +82,4 @@
 relevant code or this flaky test documentation.
 
 
-[flake_portal_occurrences]: images/flake_portal_occurrences.png
-[flaky_build_step]: images/flaky_build_step.png
 [bot_gn_args]: images/bot_gn_args.png
diff --git a/extensions/browser/api/automation_internal/automation_event_router.cc b/extensions/browser/api/automation_internal/automation_event_router.cc
index 62538ab..74263648 100644
--- a/extensions/browser/api/automation_internal/automation_event_router.cc
+++ b/extensions/browser/api/automation_internal/automation_event_router.cc
@@ -20,6 +20,7 @@
 #include "extensions/browser/api/automation_internal/automation_internal_api_delegate.h"
 #include "extensions/browser/api/extensions_api_client.h"
 #include "extensions/browser/event_router.h"
+#include "extensions/browser/process_manager.h"
 #include "extensions/common/api/automation_internal.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_messages.h"
@@ -78,6 +79,29 @@
     RemoveAutomationListener(host);
 }
 
+void AutomationEventRouter::UnregisterAllListenersWithDesktopPermission() {
+  for (const auto& request_pair : keepalive_request_uuid_for_worker_) {
+    const WorkerId& worker_id = request_pair.first;
+    const std::string& request_uuid = request_pair.second;
+    content::RenderProcessHost* host =
+        content::RenderProcessHost::FromID(worker_id.render_process_id);
+
+    if (rph_observers_.IsObservingSource(host))
+      rph_observers_.RemoveObservation(host);
+
+    ProcessManager* process_manager =
+        ProcessManager::Get(host->GetBrowserContext());
+    DCHECK(process_manager);
+
+    process_manager->DecrementServiceWorkerKeepaliveCount(
+        worker_id, request_uuid, extensions::Activity::ACCESSIBILITY,
+        std::string());
+  }
+  keepalive_request_uuid_for_worker_.clear();
+
+  UpdateActiveProfile();
+}
+
 void AutomationEventRouter::DispatchAccessibilityEventsInternal(
     const ExtensionMsg_AccessibilityEventBundleParams& event_bundle) {
   content::BrowserContext* active_context =
@@ -236,33 +260,55 @@
                                      ui::AXTreeID ax_tree_id,
                                      bool desktop) {
   DCHECK(desktop || ax_tree_id != ui::AXTreeIDUnknown());
+
   const auto& iter = base::ranges::find(listeners_, listener_process_id,
                                         &AutomationListener::process_id);
 
-  // Add a new entry if we don't have one with that process.
-  if (iter == listeners_.end()) {
-    auto listener = std::make_unique<AutomationListener>(web_contents);
-    listener->router = this;
-    listener->extension_id = extension_id;
-    listener->process_id = listener_process_id;
-    listener->desktop = desktop;
-    if (!desktop)
-      listener->tree_ids.insert(ax_tree_id);
-    listeners_.emplace_back(std::move(listener));
-    rph_observers_.AddObservation(
-        content::RenderProcessHost::FromID(listener_process_id));
-    UpdateActiveProfile();
-    for (AutomationEventRouterObserver& observer : observers_)
-      observer.ExtensionListenerAdded();
+  // We have an entry with that process so update the set of tree ids it wants
+  // to listen to, and update its desktop permission.
+  if (iter != listeners_.end()) {
+    if (desktop)
+      iter->get()->desktop = true;
+    else
+      iter->get()->tree_ids.insert(ax_tree_id);
     return;
   }
 
-  // We have an entry with that process so update the set of tree ids it wants
-  // to listen to, and update its desktop permission.
-  if (desktop)
-    iter->get()->desktop = true;
-  else
-    iter->get()->tree_ids.insert(ax_tree_id);
+  // Add a new entry if we don't have one with that process.
+  auto listener = std::make_unique<AutomationListener>(web_contents);
+  listener->router = this;
+  listener->extension_id = extension_id;
+  listener->process_id = listener_process_id;
+  listener->desktop = desktop;
+  if (!desktop)
+    listener->tree_ids.insert(ax_tree_id);
+  listeners_.emplace_back(std::move(listener));
+  content::RenderProcessHost* host =
+      content::RenderProcessHost::FromID(listener_process_id);
+  rph_observers_.AddObservation(host);
+  UpdateActiveProfile();
+  for (AutomationEventRouterObserver& observer : observers_)
+    observer.ExtensionListenerAdded();
+
+  if (!desktop)
+    return;
+
+  ProcessManager* process_manager =
+      ProcessManager::Get(host->GetBrowserContext());
+  DCHECK(process_manager);
+
+  std::vector<WorkerId> all_worker_ids =
+      process_manager->GetServiceWorkersForExtension(extension_id);
+  for (const WorkerId& worker_id : all_worker_ids) {
+    if (worker_id.render_process_id != listener_process_id)
+      continue;
+
+    keepalive_request_uuid_for_worker_[worker_id] =
+        process_manager->IncrementServiceWorkerKeepaliveCount(
+            worker_id,
+            content::ServiceWorkerExternalRequestTimeoutType::kDoesNotTimeout,
+            extensions::Activity::ACCESSIBILITY, std::string());
+  }
 }
 
 void AutomationEventRouter::DispatchAccessibilityEvents(
@@ -299,9 +345,17 @@
 void AutomationEventRouter::RemoveAutomationListener(
     content::RenderProcessHost* host) {
   int process_id = host->GetID();
-  base::EraseIf(listeners_, [process_id](const auto& item) {
-    return item->process_id == process_id;
-  });
+  ExtensionId extension_id;
+  for (auto listener = listeners_.begin(); listener != listeners_.end();) {
+    if ((*listener)->process_id == process_id) {
+      // Copy the extension ID, as we're about to erase the source.
+      extension_id = (*listener)->extension_id;
+      listener = listeners_.erase(listener);
+    } else {
+      listener++;
+    }
+  }
+
   if (rph_observers_.IsObservingSource(host))
     rph_observers_.RemoveObservation(host);
   UpdateActiveProfile();
@@ -310,6 +364,29 @@
     for (AutomationEventRouterObserver& observer : observers_)
       observer.AllAutomationExtensionsGone();
   }
+
+  extensions::ProcessManager* process_manager =
+      ProcessManager::Get(host->GetBrowserContext());
+  DCHECK(process_manager);
+
+  std::vector<WorkerId> all_worker_ids =
+      process_manager->GetServiceWorkersForExtension(extension_id);
+
+  for (const WorkerId& worker_id : all_worker_ids) {
+    if (worker_id.render_process_id != process_id)
+      continue;
+    const auto& request_uuid_iter =
+        keepalive_request_uuid_for_worker_.find(worker_id);
+    if (request_uuid_iter == keepalive_request_uuid_for_worker_.end())
+      continue;
+
+    const std::string& request_uuid = request_uuid_iter->second;
+    keepalive_request_uuid_for_worker_.erase(worker_id);
+
+    process_manager->DecrementServiceWorkerKeepaliveCount(
+        worker_id, request_uuid, extensions::Activity::ACCESSIBILITY,
+        std::string());
+  }
 }
 
 void AutomationEventRouter::TreeRemoved(ui::AXTreeID ax_tree_id) {
diff --git a/extensions/browser/api/automation_internal/automation_event_router.h b/extensions/browser/api/automation_internal/automation_event_router.h
index 2274b26..2b958f3e 100644
--- a/extensions/browser/api/automation_internal/automation_event_router.h
+++ b/extensions/browser/api/automation_internal/automation_event_router.h
@@ -35,6 +35,7 @@
 
 namespace extensions {
 struct AutomationListener;
+struct WorkerId;
 
 class AutomationEventRouterObserver {
  public:
@@ -66,7 +67,11 @@
       content::WebContents* web_contents);
 
   // Undoes the Register call above. May result in disabling of automation.
-  void UnregisterListenerWithDesktopPermission(int lsitener_process_id);
+  void UnregisterListenerWithDesktopPermission(int listener_process_id);
+
+  // Like the above function, but for all listeners. Definitely results in
+  // disabling of automation.
+  void UnregisterAllListenersWithDesktopPermission();
 
   // The following two methods should only be called by Lacros.
   void NotifyAllAutomationExtensionsGone();
@@ -158,6 +163,8 @@
   content::NotificationRegistrar registrar_;
   std::vector<std::unique_ptr<AutomationListener>> listeners_;
 
+  std::map<WorkerId, std::string> keepalive_request_uuid_for_worker_;
+
   raw_ptr<content::BrowserContext> active_context_;
 
   // The caller of RegisterRemoteRouter is responsible for ensuring that this
diff --git a/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc b/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
index 3e621da..7202256 100644
--- a/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
+++ b/extensions/shell/browser/api/runtime/shell_runtime_api_delegate.cc
@@ -55,7 +55,7 @@
 // We allow chrome.runtime.restart() to request a device restart on ChromeOS.
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   chromeos::PowerManagerClient::Get()->RequestRestart(
-      power_manager::REQUEST_RESTART_OTHER, "AppShell chrome.runtime API");
+      power_manager::REQUEST_RESTART_API, "AppShell chrome.runtime API");
   return true;
 #else
   *error_message = "Restart is only supported on ChromeOS.";
diff --git a/google_apis/drive/drive_api_requests.cc b/google_apis/drive/drive_api_requests.cc
index 5605918b..3a0999b8 100644
--- a/google_apis/drive/drive_api_requests.cc
+++ b/google_apis/drive/drive_api_requests.cc
@@ -30,8 +30,7 @@
 #include "net/http/http_response_headers.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
 
-namespace google_apis {
-namespace drive {
+namespace google_apis::drive {
 namespace {
 
 // Format of one request in batch uploading request.
@@ -86,10 +85,8 @@
 }
 
 // Attaches |properties| to the |request_body| if |properties| is not empty.
-// |request_body| must not be NULL.
 void AttachProperties(const Properties& properties,
-                      base::DictionaryValue* request_body) {
-  DCHECK(request_body);
+                      base::Value::Dict& request_body) {
   if (properties.empty())
     return;
 
@@ -110,7 +107,7 @@
     property_value.Set("value", property.value());
     properties_value.Append(std::move(property_value));
   }
-  request_body->SetKey("properties", base::Value(std::move(properties_value)));
+  request_body.Set("properties", base::Value(std::move(properties_value)));
 }
 
 // Creates metadata JSON string for multipart uploading.
@@ -122,29 +119,29 @@
     const base::Time& modified_date,
     const base::Time& last_viewed_by_me_date,
     const Properties& properties) {
-  base::DictionaryValue root;
+  base::Value::Dict root;
   if (!title.empty())
-    root.SetString("title", title);
+    root.Set("title", title);
 
   // Fill parent link.
   if (!parent_resource_id.empty()) {
     base::Value::List parents;
     parents.Append(base::Value::FromUniquePtrValue(
         google_apis::util::CreateParentValue(parent_resource_id)));
-    root.SetKey("parents", base::Value(std::move(parents)));
+    root.Set("parents", base::Value(std::move(parents)));
   }
 
   if (!modified_date.is_null()) {
-    root.SetString("modifiedDate",
-                   google_apis::util::FormatTimeAsString(modified_date));
+    root.Set("modifiedDate",
+             google_apis::util::FormatTimeAsString(modified_date));
   }
 
   if (!last_viewed_by_me_date.is_null()) {
-    root.SetString("lastViewedByMeDate", google_apis::util::FormatTimeAsString(
-                                             last_viewed_by_me_date));
+    root.Set("lastViewedByMeDate",
+             google_apis::util::FormatTimeAsString(last_viewed_by_me_date));
   }
 
-  AttachProperties(properties, &root);
+  AttachProperties(properties, root);
   std::string json_string;
   base::JSONWriter::Write(root, &json_string);
   return json_string;
@@ -312,7 +309,7 @@
     : DriveApiDataRequest<FileResource>(sender, std::move(callback)),
       url_generator_(url_generator) {}
 
-FilesGetRequest::~FilesGetRequest() {}
+FilesGetRequest::~FilesGetRequest() = default;
 
 GURL FilesGetRequest::GetURLInternal() const {
   return url_generator_.GetFilesGetUrl(file_id_, embed_origin_);
@@ -328,7 +325,7 @@
       url_generator_(url_generator),
       visibility_(FILE_VISIBILITY_DEFAULT) {}
 
-FilesInsertRequest::~FilesInsertRequest() {}
+FilesInsertRequest::~FilesInsertRequest() = default;
 
 std::string FilesInsertRequest::GetRequestType() const {
   return "POST";
@@ -338,33 +335,33 @@
                                         std::string* upload_content) {
   *upload_content_type = util::kContentTypeApplicationJson;
 
-  base::DictionaryValue root;
+  base::Value::Dict root;
 
   if (!last_viewed_by_me_date_.is_null()) {
-    root.SetString("lastViewedByMeDate",
-                   util::FormatTimeAsString(last_viewed_by_me_date_));
+    root.Set("lastViewedByMeDate",
+             util::FormatTimeAsString(last_viewed_by_me_date_));
   }
 
   if (!mime_type_.empty())
-    root.SetString("mimeType", mime_type_);
+    root.Set("mimeType", mime_type_);
 
   if (!modified_date_.is_null())
-    root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
+    root.Set("modifiedDate", util::FormatTimeAsString(modified_date_));
 
   if (!parents_.empty()) {
     base::Value::List parents_value;
-    for (size_t i = 0; i < parents_.size(); ++i) {
+    for (const std::string& parent_id : parents_) {
       base::Value::Dict parent;
-      parent.Set("id", parents_[i]);
+      parent.Set("id", parent_id);
       parents_value.Append(std::move(parent));
     }
-    root.SetKey("parents", base::Value(std::move(parents_value)));
+    root.Set("parents", base::Value(std::move(parents_value)));
   }
 
   if (!title_.empty())
-    root.SetString("title", title_);
+    root.Set("title", title_);
 
-  AttachProperties(properties_, &root);
+  AttachProperties(properties_, root);
   base::JSONWriter::Write(root, upload_content);
 
   DVLOG(1) << "FilesInsert data: " << *upload_content_type << ", ["
@@ -387,7 +384,7 @@
       set_modified_date_(false),
       update_viewed_date_(true) {}
 
-FilesPatchRequest::~FilesPatchRequest() {}
+FilesPatchRequest::~FilesPatchRequest() = default;
 
 std::string FilesPatchRequest::GetRequestType() const {
   return "PATCH";
@@ -412,29 +409,29 @@
 
   *upload_content_type = util::kContentTypeApplicationJson;
 
-  base::DictionaryValue root;
+  base::Value::Dict root;
   if (!title_.empty())
-    root.SetString("title", title_);
+    root.Set("title", title_);
 
   if (!modified_date_.is_null())
-    root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
+    root.Set("modifiedDate", util::FormatTimeAsString(modified_date_));
 
   if (!last_viewed_by_me_date_.is_null()) {
-    root.SetString("lastViewedByMeDate",
-                   util::FormatTimeAsString(last_viewed_by_me_date_));
+    root.Set("lastViewedByMeDate",
+             util::FormatTimeAsString(last_viewed_by_me_date_));
   }
 
   if (!parents_.empty()) {
     base::Value::List parents_value;
-    for (size_t i = 0; i < parents_.size(); ++i) {
+    for (const std::string& parent_id : parents_) {
       base::Value::Dict parent;
-      parent.Set("id", parents_[i]);
+      parent.Set("id", parent_id);
       parents_value.Append(std::move(parent));
     }
-    root.SetKey("parents", base::Value(std::move(parents_value)));
+    root.Set("parents", base::Value(std::move(parents_value)));
   }
 
-  AttachProperties(properties_, &root);
+  AttachProperties(properties_, root);
   base::JSONWriter::Write(root, upload_content);
 
   DVLOG(1) << "FilesPatch data: " << *upload_content_type << ", ["
@@ -469,23 +466,24 @@
 
   *upload_content_type = util::kContentTypeApplicationJson;
 
-  base::DictionaryValue root;
+  base::Value::Dict root;
 
   if (!modified_date_.is_null())
-    root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
+    root.Set("modifiedDate", util::FormatTimeAsString(modified_date_));
 
   if (!parents_.empty()) {
     base::Value::List parents_value;
-    for (size_t i = 0; i < parents_.size(); ++i) {
+
+    for (const std::string& parent_id : parents_) {
       base::Value::Dict parent;
-      parent.Set("id", parents_[i]);
+      parent.Set("id", parent_id);
       parents_value.Append(std::move(parent));
     }
-    root.SetKey("parents", base::Value(std::move(parents_value)));
+    root.Set("parents", base::Value(std::move(parents_value)));
   }
 
   if (!title_.empty())
-    root.SetString("title", title_);
+    root.Set("title", title_);
 
   base::JSONWriter::Write(root, upload_content);
   DVLOG(1) << "FilesCopy data: " << *upload_content_type << ", ["
@@ -503,7 +501,7 @@
       url_generator_(url_generator),
       max_results_(30) {}
 
-TeamDriveListRequest::~TeamDriveListRequest() {}
+TeamDriveListRequest::~TeamDriveListRequest() = default;
 
 GURL TeamDriveListRequest::GetURLInternal() const {
   return url_generator_.GetTeamDriveListUrl(max_results_, page_token_);
@@ -534,7 +532,7 @@
       max_results_(100),
       corpora_(FilesListCorpora::DEFAULT) {}
 
-FilesListRequest::~FilesListRequest() {}
+FilesListRequest::~FilesListRequest() = default;
 
 GURL FilesListRequest::GetURLInternal() const {
   return url_generator_.GetFilesListUrl(max_results_, page_token_, corpora_,
@@ -562,7 +560,7 @@
     : EntryActionRequest(sender, std::move(callback)),
       url_generator_(url_generator) {}
 
-FilesDeleteRequest::~FilesDeleteRequest() {}
+FilesDeleteRequest::~FilesDeleteRequest() = default;
 
 std::string FilesDeleteRequest::GetRequestType() const {
   return "DELETE";
@@ -587,7 +585,7 @@
     : DriveApiDataRequest<FileResource>(sender, std::move(callback)),
       url_generator_(url_generator) {}
 
-FilesTrashRequest::~FilesTrashRequest() {}
+FilesTrashRequest::~FilesTrashRequest() = default;
 
 std::string FilesTrashRequest::GetRequestType() const {
   return "POST";
@@ -605,7 +603,7 @@
     : DriveApiDataRequest<AboutResource>(sender, std::move(callback)),
       url_generator_(url_generator) {}
 
-AboutGetRequest::~AboutGetRequest() {}
+AboutGetRequest::~AboutGetRequest() = default;
 
 GURL AboutGetRequest::GetURLInternal() const {
   return url_generator_.GetAboutGetUrl();
@@ -623,7 +621,7 @@
       max_results_(100),
       start_change_id_(0) {}
 
-ChangesListRequest::~ChangesListRequest() {}
+ChangesListRequest::~ChangesListRequest() = default;
 
 GURL ChangesListRequest::GetURLInternal() const {
   return url_generator_.GetChangesListUrl(include_deleted_, max_results_,
@@ -653,7 +651,7 @@
     : EntryActionRequest(sender, std::move(callback)),
       url_generator_(url_generator) {}
 
-ChildrenInsertRequest::~ChildrenInsertRequest() {}
+ChildrenInsertRequest::~ChildrenInsertRequest() = default;
 
 std::string ChildrenInsertRequest::GetRequestType() const {
   return "POST";
@@ -667,8 +665,8 @@
                                            std::string* upload_content) {
   *upload_content_type = util::kContentTypeApplicationJson;
 
-  base::DictionaryValue root;
-  root.SetString("id", id_);
+  base::Value::Dict root;
+  root.Set("id", id_);
 
   base::JSONWriter::Write(root, upload_content);
   DVLOG(1) << "InsertResource data: " << *upload_content_type << ", ["
@@ -685,7 +683,7 @@
     : EntryActionRequest(sender, std::move(callback)),
       url_generator_(url_generator) {}
 
-ChildrenDeleteRequest::~ChildrenDeleteRequest() {}
+ChildrenDeleteRequest::~ChildrenDeleteRequest() = default;
 
 std::string ChildrenDeleteRequest::GetRequestType() const {
   return "DELETE";
@@ -713,7 +711,7 @@
       parent_resource_id_(parent_resource_id),
       title_(title) {}
 
-InitiateUploadNewFileRequest::~InitiateUploadNewFileRequest() {}
+InitiateUploadNewFileRequest::~InitiateUploadNewFileRequest() = default;
 
 GURL InitiateUploadNewFileRequest::GetURL() const {
   return url_generator_.GetInitiateUploadNewFileUrl(!modified_date_.is_null());
@@ -728,24 +726,24 @@
     std::string* upload_content) {
   *upload_content_type = util::kContentTypeApplicationJson;
 
-  base::DictionaryValue root;
-  root.SetString("title", title_);
+  base::Value::Dict root;
+  root.Set("title", title_);
 
   // Fill parent link.
   base::Value::List parents;
   parents.Append(base::Value::FromUniquePtrValue(
       util::CreateParentValue(parent_resource_id_)));
-  root.SetKey("parents", base::Value(std::move(parents)));
+  root.Set("parents", base::Value(std::move(parents)));
 
   if (!modified_date_.is_null())
-    root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
+    root.Set("modifiedDate", util::FormatTimeAsString(modified_date_));
 
   if (!last_viewed_by_me_date_.is_null()) {
-    root.SetString("lastViewedByMeDate",
-                   util::FormatTimeAsString(last_viewed_by_me_date_));
+    root.Set("lastViewedByMeDate",
+             util::FormatTimeAsString(last_viewed_by_me_date_));
   }
 
-  AttachProperties(properties_, &root);
+  AttachProperties(properties_, root);
   base::JSONWriter::Write(root, upload_content);
 
   DVLOG(1) << "InitiateUploadNewFile data: " << *upload_content_type << ", ["
@@ -771,7 +769,8 @@
       resource_id_(resource_id),
       etag_(etag) {}
 
-InitiateUploadExistingFileRequest::~InitiateUploadExistingFileRequest() {}
+InitiateUploadExistingFileRequest::~InitiateUploadExistingFileRequest() =
+    default;
 
 GURL InitiateUploadExistingFileRequest::GetURL() const {
   return url_generator_.GetInitiateUploadExistingFileUrl(
@@ -793,27 +792,27 @@
 bool InitiateUploadExistingFileRequest::GetContentData(
     std::string* upload_content_type,
     std::string* upload_content) {
-  base::DictionaryValue root;
+  base::Value::Dict root;
   if (!parent_resource_id_.empty()) {
     base::Value::List parents;
     parents.Append(base::Value::FromUniquePtrValue(
         util::CreateParentValue(parent_resource_id_)));
-    root.SetKey("parents", base::Value(std::move(parents)));
+    root.Set("parents", base::Value(std::move(parents)));
   }
 
   if (!title_.empty())
-    root.SetString("title", title_);
+    root.Set("title", title_);
 
   if (!modified_date_.is_null())
-    root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
+    root.Set("modifiedDate", util::FormatTimeAsString(modified_date_));
 
   if (!last_viewed_by_me_date_.is_null()) {
-    root.SetString("lastViewedByMeDate",
-                   util::FormatTimeAsString(last_viewed_by_me_date_));
+    root.Set("lastViewedByMeDate",
+             util::FormatTimeAsString(last_viewed_by_me_date_));
   }
 
-  AttachProperties(properties_, &root);
-  if (root.DictEmpty())
+  AttachProperties(properties_, root);
+  if (root.empty())
     return false;
 
   *upload_content_type = util::kContentTypeApplicationJson;
@@ -846,7 +845,7 @@
   DCHECK(!callback_.is_null());
 }
 
-ResumeUploadRequest::~ResumeUploadRequest() {}
+ResumeUploadRequest::~ResumeUploadRequest() = default;
 
 void ResumeUploadRequest::OnRangeRequestComplete(
     const UploadRangeResponse& response,
@@ -867,7 +866,7 @@
   DCHECK(!callback_.is_null());
 }
 
-GetUploadStatusRequest::~GetUploadStatusRequest() {}
+GetUploadStatusRequest::~GetUploadStatusRequest() = default;
 
 void GetUploadStatusRequest::OnRangeRequestComplete(
     const UploadRangeResponse& response,
@@ -1016,41 +1015,41 @@
                                               std::string* upload_content) {
   *upload_content_type = util::kContentTypeApplicationJson;
 
-  base::DictionaryValue root;
+  base::Value::Dict root;
   switch (type_) {
     case PERMISSION_TYPE_ANYONE:
-      root.SetStringKey("type", "anyone");
+      root.Set("type", "anyone");
       break;
     case PERMISSION_TYPE_DOMAIN:
-      root.SetStringKey("type", "domain");
+      root.Set("type", "domain");
       break;
     case PERMISSION_TYPE_GROUP:
-      root.SetStringKey("type", "group");
+      root.Set("type", "group");
       break;
     case PERMISSION_TYPE_USER:
-      root.SetStringKey("type", "user");
+      root.Set("type", "user");
       break;
   }
   switch (role_) {
     case PERMISSION_ROLE_OWNER:
-      root.SetStringKey("role", "owner");
+      root.Set("role", "owner");
       break;
     case PERMISSION_ROLE_READER:
-      root.SetStringKey("role", "reader");
+      root.Set("role", "reader");
       break;
     case PERMISSION_ROLE_WRITER:
-      root.SetStringKey("role", "writer");
+      root.Set("role", "writer");
       break;
     case PERMISSION_ROLE_COMMENTER:
-      root.SetStringKey("role", "reader");
+      root.Set("role", "reader");
       {
         base::Value list(base::Value::Type::LIST);
         list.Append("commenter");
-        root.SetKey("additionalRoles", std::move(list));
+        root.Set("additionalRoles", std::move(list));
       }
       break;
   }
-  root.SetStringKey("value", value_);
+  root.Set("value", value_);
   base::JSONWriter::Write(root, upload_content);
   return true;
 }
@@ -1330,5 +1329,4 @@
   }
   last_progress_value_ = current;
 }
-}  // namespace drive
-}  // namespace google_apis
+}  // namespace google_apis::drive
diff --git a/headless/lib/browser/headless_clipboard.cc b/headless/lib/browser/headless_clipboard.cc
index 0bdd048..98e6bc3 100644
--- a/headless/lib/browser/headless_clipboard.cc
+++ b/headless/lib/browser/headless_clipboard.cc
@@ -8,6 +8,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/numerics/safe_conversions.h"
 #include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
 #include "ui/base/clipboard/clipboard.h"
 #include "ui/base/clipboard/clipboard_constants.h"
 #include "ui/base/data_transfer_policy/data_transfer_endpoint.h"
@@ -189,11 +190,11 @@
     *result = it->second;
 }
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 bool HeadlessClipboard::IsSelectionBufferAvailable() const {
   return false;
 }
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 
 // |data_src| is not used. It's only passed to be consistent with other
 // platforms.
diff --git a/headless/lib/browser/headless_clipboard.h b/headless/lib/browser/headless_clipboard.h
index 0c1e285a..35aecf2c 100644
--- a/headless/lib/browser/headless_clipboard.h
+++ b/headless/lib/browser/headless_clipboard.h
@@ -10,6 +10,7 @@
 
 #include <map>
 
+#include "build/build_config.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/base/clipboard/clipboard.h"
 #include "ui/base/data_transfer_policy/data_transfer_endpoint.h"
@@ -76,9 +77,9 @@
   void ReadData(const ui::ClipboardFormatType& format,
                 const ui::DataTransferEndpoint* data_dst,
                 std::string* result) const override;
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   bool IsSelectionBufferAvailable() const override;
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
   void WritePortableAndPlatformRepresentations(
       ui::ClipboardBuffer buffer,
       const ObjectMap& objects,
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index 3a698f67..f93bcac5 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -192,7 +192,7 @@
   if (!options()->enable_resource_scheduler)
     command_line->AppendSwitch(::switches::kDisableResourceScheduler);
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   // The headless backend is automatically chosen for a headless build, but also
   // adding it here allows us to run in a non-headless build too.
   command_line->AppendSwitchASCII(::switches::kOzonePlatform, "headless");
diff --git "a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/properties.json" "b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/properties.json"
index 54041d7..acdae74 100644
--- "a/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/properties.json"
+++ "b/infra/config/generated/builders/ci/Dawn Mac x64 DEPS Release \050AMD\051/properties.json"
@@ -66,12 +66,6 @@
           "builder": "Dawn Mac x64 DEPS Release (AMD)",
           "project": "chromium"
         }
-      ],
-      "mirroring_builder_group_and_names": [
-        {
-          "builder": "dawn-mac-x64-deps-rel",
-          "group": "tryserver.chromium.dawn"
-        }
       ]
     }
   },
diff --git a/infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json b/infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json
index 27b568f9..37b8df2 100644
--- a/infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json
+++ b/infra/config/generated/builders/ci/linux-ash-chromium-builder-fyi-rel/properties.json
@@ -31,11 +31,6 @@
       }
     ]
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-trusted",
     "jobs": 250,
diff --git a/infra/config/generated/builders/ci/linux-blink-animation-use-time-delta/properties.json b/infra/config/generated/builders/ci/linux-blink-animation-use-time-delta/properties.json
index d456d40..b232002 100644
--- a/infra/config/generated/builders/ci/linux-blink-animation-use-time-delta/properties.json
+++ b/infra/config/generated/builders/ci/linux-blink-animation-use-time-delta/properties.json
@@ -1,9 +1,4 @@
 {
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-trusted",
     "jobs": 250,
diff --git a/infra/config/generated/builders/ci/linux-code-coverage/properties.json b/infra/config/generated/builders/ci/linux-code-coverage/properties.json
index 67942c5..3d86a409 100644
--- a/infra/config/generated/builders/ci/linux-code-coverage/properties.json
+++ b/infra/config/generated/builders/ci/linux-code-coverage/properties.json
@@ -7,11 +7,6 @@
     "export_coverage_to_zoss": true,
     "use_clang_coverage": true
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-trusted",
     "jobs": 250,
diff --git a/infra/config/generated/builders/ci/mac-updater-builder-arm64-dbg/properties.json b/infra/config/generated/builders/ci/mac-updater-builder-arm64-dbg/properties.json
index 66654e6f..444876b 100644
--- a/infra/config/generated/builders/ci/mac-updater-builder-arm64-dbg/properties.json
+++ b/infra/config/generated/builders/ci/mac-updater-builder-arm64-dbg/properties.json
@@ -72,9 +72,10 @@
       ]
     }
   },
-  "$build/goma": {
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/builders/ci/mac-updater-builder-arm64-rel/properties.json b/infra/config/generated/builders/ci/mac-updater-builder-arm64-rel/properties.json
index 0d228be..ec1becc 100644
--- a/infra/config/generated/builders/ci/mac-updater-builder-arm64-rel/properties.json
+++ b/infra/config/generated/builders/ci/mac-updater-builder-arm64-rel/properties.json
@@ -72,9 +72,10 @@
       ]
     }
   },
-  "$build/goma": {
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
+  "$build/reclient": {
+    "instance": "rbe-chromium-trusted",
+    "jobs": 250,
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/properties.json b/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/properties.json
index 865bac1..a5568e7c 100644
--- a/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/properties.json
+++ b/infra/config/generated/builders/try/dawn-mac-x64-deps-rel/properties.json
@@ -31,36 +31,6 @@
           {
             "builder_id": {
               "bucket": "ci",
-              "builder": "Dawn Mac x64 DEPS Release (AMD)",
-              "project": "chromium"
-            },
-            "builder_spec": {
-              "build_gs_bucket": "chromium-dawn-archive",
-              "builder_group": "chromium.dawn",
-              "execution_mode": "TEST",
-              "legacy_chromium_config": {
-                "apply_configs": [
-                  "mb"
-                ],
-                "build_config": "Release",
-                "config": "chromium",
-                "target_bits": 64,
-                "target_platform": "mac"
-              },
-              "legacy_gclient_config": {
-                "config": "chromium"
-              },
-              "parent": {
-                "bucket": "ci",
-                "builder": "Dawn Mac x64 DEPS Builder",
-                "project": "chromium"
-              },
-              "run_tests_serially": true
-            }
-          },
-          {
-            "builder_id": {
-              "bucket": "ci",
               "builder": "Dawn Mac x64 DEPS Release (Intel)",
               "project": "chromium"
             },
@@ -100,11 +70,6 @@
       "builder_ids_in_scope_for_testing": [
         {
           "bucket": "ci",
-          "builder": "Dawn Mac x64 DEPS Release (AMD)",
-          "project": "chromium"
-        },
-        {
-          "bucket": "ci",
           "builder": "Dawn Mac x64 DEPS Release (Intel)",
           "project": "chromium"
         }
diff --git a/infra/config/generated/builders/try/linux-blink-heap-verification-try/properties.json b/infra/config/generated/builders/try/linux-blink-heap-verification-try/properties.json
index 4c00daf..1011d0f 100644
--- a/infra/config/generated/builders/try/linux-blink-heap-verification-try/properties.json
+++ b/infra/config/generated/builders/try/linux-blink-heap-verification-try/properties.json
@@ -1,9 +1,4 @@
 {
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-untrusted",
     "metrics_project": "chromium-reclient-metrics"
diff --git a/infra/config/generated/builders/try/linux-blink-web-tests-force-accessibility-rel/properties.json b/infra/config/generated/builders/try/linux-blink-web-tests-force-accessibility-rel/properties.json
index fd17958f..679308c30 100644
--- a/infra/config/generated/builders/try/linux-blink-web-tests-force-accessibility-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-blink-web-tests-force-accessibility-rel/properties.json
@@ -36,10 +36,10 @@
       ]
     }
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
+  "$build/reclient": {
+    "instance": "rbe-chromium-untrusted",
+    "jobs": 150,
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/builders/try/linux-cfm-rel/properties.json b/infra/config/generated/builders/try/linux-cfm-rel/properties.json
index 151e1ff..90e5097 100644
--- a/infra/config/generated/builders/try/linux-cfm-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-cfm-rel/properties.json
@@ -41,10 +41,9 @@
       ]
     }
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
+  "$build/reclient": {
+    "instance": "rbe-chromium-untrusted",
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/builders/try/linux-extended-tracing-rel/properties.json b/infra/config/generated/builders/try/linux-extended-tracing-rel/properties.json
index a6c71dd6..fb2ec16 100644
--- a/infra/config/generated/builders/try/linux-extended-tracing-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-extended-tracing-rel/properties.json
@@ -37,11 +37,6 @@
       ]
     }
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-untrusted",
     "metrics_project": "chromium-reclient-metrics"
diff --git a/infra/config/generated/builders/try/linux-headless-shell-rel/properties.json b/infra/config/generated/builders/try/linux-headless-shell-rel/properties.json
index 4c00daf..1011d0f 100644
--- a/infra/config/generated/builders/try/linux-headless-shell-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-headless-shell-rel/properties.json
@@ -1,9 +1,4 @@
 {
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-untrusted",
     "metrics_project": "chromium-reclient-metrics"
diff --git a/infra/config/generated/builders/try/linux-mbi-mode-per-render-process-host-rel/properties.json b/infra/config/generated/builders/try/linux-mbi-mode-per-render-process-host-rel/properties.json
index a0a0962b..4033d747 100644
--- a/infra/config/generated/builders/try/linux-mbi-mode-per-render-process-host-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-mbi-mode-per-render-process-host-rel/properties.json
@@ -145,11 +145,6 @@
       ]
     }
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-untrusted",
     "metrics_project": "chromium-reclient-metrics"
diff --git a/infra/config/generated/builders/try/linux-official/properties.json b/infra/config/generated/builders/try/linux-official/properties.json
index 356db50..1f7f5420 100644
--- a/infra/config/generated/builders/try/linux-official/properties.json
+++ b/infra/config/generated/builders/try/linux-official/properties.json
@@ -38,10 +38,9 @@
       ]
     }
   },
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
+  "$build/reclient": {
+    "instance": "rbe-chromium-untrusted",
+    "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
diff --git a/infra/config/generated/builders/try/linux-perfetto-rel/properties.json b/infra/config/generated/builders/try/linux-perfetto-rel/properties.json
index 4c00daf..1011d0f 100644
--- a/infra/config/generated/builders/try/linux-perfetto-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-perfetto-rel/properties.json
@@ -1,9 +1,4 @@
 {
-  "$build/goma": {
-    "enable_ats": true,
-    "rpc_extra_params": "?prod",
-    "server_host": "goma.chromium.org"
-  },
   "$build/reclient": {
     "instance": "rbe-chromium-untrusted",
     "metrics_project": "chromium-reclient-metrics"
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index 9ab4e4289..849d2914 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -40397,7 +40397,7 @@
       }
       experiments {
         key: "luci.buildbucket.omit_python2"
-        value: 0
+        value: 100
       }
       experiments {
         key: "luci.recipes.use_python3"
@@ -76298,12 +76298,6 @@
       }
       properties:
         '{'
-        '  "$build/goma": {'
-        '    "enable_ats": true,'
-        '    "jobs": 150,'
-        '    "rpc_extra_params": "?prod",'
-        '    "server_host": "goma.chromium.org"'
-        '  },'
         '  "$build/reclient": {'
         '    "instance": "rbe-chromium-untrusted",'
         '    "jobs": 150,'
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star
index 5f9209ad..e2e3d12 100644
--- a/infra/config/lib/builders.star
+++ b/infra/config/lib/builders.star
@@ -224,6 +224,7 @@
 
 def _code_coverage_property(
         *,
+        coverage_gs_bucket,
         use_clang_coverage,
         use_java_coverage,
         use_javascript_coverage,
@@ -232,6 +233,13 @@
         export_coverage_to_zoss):
     code_coverage = {}
 
+    coverage_gs_bucket = defaults.get_value(
+        "coverage_gs_bucket",
+        coverage_gs_bucket,
+    )
+    if coverage_gs_bucket:
+        code_coverage["coverage_gs_bucket"] = coverage_gs_bucket
+
     use_clang_coverage = defaults.get_value(
         "use_clang_coverage",
         use_clang_coverage,
@@ -362,6 +370,7 @@
     sheriff_rotations = None,
     xcode = None,
     ssd = args.COMPUTE,
+    coverage_gs_bucket = None,
     use_clang_coverage = False,
     use_java_coverage = False,
     use_javascript_coverage = False,
@@ -425,6 +434,7 @@
         goma_debug = args.DEFAULT,
         goma_enable_ats = args.DEFAULT,
         goma_jobs = args.DEFAULT,
+        coverage_gs_bucket = args.DEFAULT,
         use_clang_coverage = args.DEFAULT,
         use_java_coverage = args.DEFAULT,
         use_javascript_coverage = args.DEFAULT,
@@ -563,6 +573,9 @@
             jobs to be used by the builder. Sets the 'jobs' field of the
             '$build/goma' property will be set according to the enum member. By
             default, the 'jobs' considered None.
+        coverage_gs_bucket: a string specifying the GS bucket to upload
+            coverage data to. Will be copied to '$build/code_coverage' property.
+            By default, considered None.
         use_clang_coverage: a boolean indicating whether clang coverage should
             be used. If True, the 'use_clang_coverage" field will be set in the
             '$build/code_coverage' property. By default, considered False.
@@ -646,8 +659,9 @@
              "use goma_backend, goma_dbug, goma_enable_ats and goma_jobs instead")
     if "$build/code_coverage" in properties:
         fail('Setting "$build/code_coverage" property is not supported: ' +
-             "use use_clang_coverage, use_java_coverage, use_javascript_coverage " +
-             " coverage_exclude_sources, coverage_test_types instead")
+             "use coverage_gs_bucket, use_clang_coverage, use_java_coverage, " +
+             "use_javascript_coverage, coverage_exclude_sources, " +
+             "coverage_test_types instead")
     if "$build/reclient" in properties:
         fail('Setting "$build/reclient" property is not supported: ' +
              "use reclient_instance and reclient_rewrapper_env instead")
@@ -745,6 +759,7 @@
         properties["$build/goma"] = gp
 
     code_coverage = _code_coverage_property(
+        coverage_gs_bucket = coverage_gs_bucket,
         use_clang_coverage = use_clang_coverage,
         use_java_coverage = use_java_coverage,
         use_javascript_coverage = use_javascript_coverage,
diff --git a/infra/config/subprojects/chromium/ci/checks.star b/infra/config/subprojects/chromium/ci/checks.star
index 75c2695..2d04a561 100644
--- a/infra/config/subprojects/chromium/ci/checks.star
+++ b/infra/config/subprojects/chromium/ci/checks.star
@@ -35,7 +35,4 @@
         },
         "repo_name": "chromium",
     },
-
-    # TODO(crbug.com/1370463): remove this.
-    omit_python2 = False,
 )
diff --git a/infra/config/subprojects/chromium/ci/chromium.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fyi.star
index 8b0eaaf..aee0fbe6 100644
--- a/infra/config/subprojects/chromium/ci/chromium.fyi.star
+++ b/infra/config/subprojects/chromium/ci/chromium.fyi.star
@@ -384,7 +384,6 @@
             ],
         },
     },
-    goma_backend = goma.backend.RBE_PROD,
 )
 
 ci.builder(
@@ -455,7 +454,6 @@
         short_name = "TD",
     ),
     os = os.LINUX_DEFAULT,
-    goma_backend = goma.backend.RBE_PROD,
 )
 
 ci.builder(
@@ -1792,7 +1790,6 @@
     coverage_test_types = ["overall", "unit"],
     export_coverage_to_zoss = True,
     triggered_by = [],
-    goma_backend = goma.backend.RBE_PROD,
 )
 
 fyi_coverage_builder(
diff --git a/infra/config/subprojects/chromium/ci/chromium.mac.star b/infra/config/subprojects/chromium/ci/chromium.mac.star
index 26381e1..974cb55 100644
--- a/infra/config/subprojects/chromium/ci/chromium.mac.star
+++ b/infra/config/subprojects/chromium/ci/chromium.mac.star
@@ -6,7 +6,7 @@
 load("//lib/args.star", "args")
 load("//lib/branches.star", "branches")
 load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "cpu", "goma", "os", "reclient", "sheriff_rotations", "xcode")
+load("//lib/builders.star", "cpu", "os", "reclient", "sheriff_rotations", "xcode")
 load("//lib/ci.star", "ci")
 load("//lib/consoles.star", "consoles")
 
@@ -14,10 +14,11 @@
     builder_group = "chromium.mac",
     executable = ci.DEFAULT_EXECUTABLE,
     execution_timeout = ci.DEFAULT_EXECUTION_TIMEOUT,
-    goma_backend = goma.backend.RBE_PROD,
     main_console_view = "main",
     os = os.MAC_DEFAULT,
     pool = ci.DEFAULT_POOL,
+    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+    reclient_jobs = reclient.jobs.DEFAULT,
     service_account = ci.DEFAULT_SERVICE_ACCOUNT,
     sheriff_rotations = sheriff_rotations.CHROMIUM,
     thin_tester_cores = 8,
@@ -107,9 +108,6 @@
     ),
     cq_mirrors_console_view = "mirrors",
     os = os.MAC_ANY,
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
 )
 
 ci.builder(
@@ -138,9 +136,6 @@
     ),
     cpu = cpu.ARM64,
     os = os.MAC_DEFAULT,
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
 )
 
 ci.builder(
@@ -166,9 +161,6 @@
         short_name = "bld",
     ),
     os = os.MAC_DEFAULT,
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
 )
 
 ci.thin_tester(
@@ -424,9 +416,6 @@
             short_name = "ctl",
         ),
     ],
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
 )
 
 ios_builder(
@@ -459,11 +448,6 @@
             short_name = "dev",
         ),
     ],
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
-    # We don't have necessary capacity to run this configuration in CQ, but it
-    # is part of the main waterfall
 )
 
 ios_builder(
@@ -501,9 +485,6 @@
         ),
     ],
     cq_mirrors_console_view = "mirrors",
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
 )
 
 ios_builder(
@@ -541,9 +522,6 @@
         ),
     ],
     cq_mirrors_console_view = "mirrors",
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
 )
 
 ios_builder(
@@ -579,7 +557,4 @@
     # We don't have necessary capacity to run this configuration in CQ, but it
     # is part of the main waterfall
     xcode = xcode.x14main,
-    goma_backend = None,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
-    reclient_jobs = reclient.jobs.DEFAULT,
 )
diff --git a/infra/config/subprojects/chromium/ci/chromium.updater.star b/infra/config/subprojects/chromium/ci/chromium.updater.star
index b546166..8e4877381 100644
--- a/infra/config/subprojects/chromium/ci/chromium.updater.star
+++ b/infra/config/subprojects/chromium/ci/chromium.updater.star
@@ -5,7 +5,7 @@
 
 load("//lib/branches.star", "branches")
 load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "builders", "cpu", "goma", "os", "reclient")
+load("//lib/builders.star", "builders", "cpu", "os", "reclient")
 load("//lib/ci.star", "ci")
 load("//lib/consoles.star", "consoles")
 
@@ -14,9 +14,10 @@
     cores = 8,
     executable = ci.DEFAULT_EXECUTABLE,
     execution_timeout = ci.DEFAULT_EXECUTION_TIMEOUT,
-    goma_backend = goma.backend.RBE_PROD,
     os = os.LINUX_DEFAULT,
     pool = ci.DEFAULT_POOL,
+    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
+    reclient_jobs = reclient.jobs.DEFAULT,
     service_account = ci.DEFAULT_SERVICE_ACCOUNT,
 )
 
@@ -61,9 +62,6 @@
     ),
     cores = None,
     os = os.MAC_ANY,
-    goma_backend = None,
-    reclient_jobs = reclient.jobs.DEFAULT,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
 )
 
 ci.builder(
@@ -89,9 +87,6 @@
     ),
     cores = None,
     os = os.MAC_ANY,
-    goma_backend = None,
-    reclient_jobs = reclient.jobs.DEFAULT,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
 )
 
 ci.builder(
@@ -408,9 +403,7 @@
         short_name = "bld",
     ),
     os = os.WINDOWS_DEFAULT,
-    goma_backend = None,
     reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
 )
 
 ci.builder(
@@ -436,9 +429,7 @@
     ),
     execution_timeout = ci.DEFAULT_EXECUTION_TIMEOUT * 2,
     os = os.WINDOWS_DEFAULT,
-    goma_backend = None,
     reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
     free_space = builders.free_space.high,
 )
 
@@ -464,9 +455,7 @@
         short_name = "bld",
     ),
     os = os.WINDOWS_DEFAULT,
-    goma_backend = None,
     reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
 )
 
 ci.builder(
@@ -491,9 +480,7 @@
         short_name = "bld",
     ),
     os = os.WINDOWS_DEFAULT,
-    goma_backend = None,
     reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CI,
-    reclient_instance = reclient.instance.DEFAULT_TRUSTED,
 )
 
 ci.thin_tester(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.accessibility.star b/infra/config/subprojects/chromium/try/tryserver.chromium.accessibility.star
index c2092ef6..e273777 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.accessibility.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.accessibility.star
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 """Definitions of builders in the tryserver.chromium.accessibility builder group."""
 
-load("//lib/builders.star", "goma", "os")
+load("//lib/builders.star", "os", "reclient")
 load("//lib/try.star", "try_")
 load("//lib/consoles.star", "consoles")
 
@@ -13,10 +13,10 @@
     compilator_cores = 16,
     executable = try_.DEFAULT_EXECUTABLE,
     execution_timeout = try_.DEFAULT_EXECUTION_TIMEOUT,
-    goma_backend = goma.backend.RBE_PROD,
-    compilator_goma_jobs = goma.jobs.J150,
     os = os.LINUX_DEFAULT,
     pool = try_.DEFAULT_POOL,
+    reclient_instance = reclient.instance.DEFAULT_UNTRUSTED,
+    reclient_jobs = 150,
     service_account = try_.DEFAULT_SERVICE_ACCOUNT,
 )
 
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
index 73649d9e..b15151c 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -661,30 +661,30 @@
     main_list_view = "try",
     tryjob = try_.job(
         location_filters = [
-            "cc/.+",
-            "chrome/browser/vr/.+",
-            "content/browser/xr/.+",
-            "components/viz/.+",
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "media/audio/.+",
-            "media/base/.+",
-            "media/capture/.+",
-            "media/filters/.+",
-            "media/gpu/.+",
-            "media/mojo/.+",
-            "media/renderers/.+",
-            "media/video/.+",
-            "services/viz/.+",
-            "testing/buildbot/tryserver.chromium.android.json",
-            "testing/trigger_scripts/.+",
-            "third_party/blink/renderer/modules/mediastream/.+",
-            "third_party/blink/renderer/modules/webcodecs/.+",
-            "third_party/blink/renderer/modules/webgl/.+",
-            "third_party/blink/renderer/platform/graphics/gpu/.+",
-            "tools/clang/scripts/update.py",
-            "tools/mb/mb_config_expectations/tryserver.chromium.android.json",
-            "ui/gl/.+",
+            cq.location_filter(path_regexp = "cc/.+"),
+            cq.location_filter(path_regexp = "chrome/browser/vr/.+"),
+            cq.location_filter(path_regexp = "content/browser/xr/.+"),
+            cq.location_filter(path_regexp = "components/viz/.+"),
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "media/audio/.+"),
+            cq.location_filter(path_regexp = "media/base/.+"),
+            cq.location_filter(path_regexp = "media/capture/.+"),
+            cq.location_filter(path_regexp = "media/filters/.+"),
+            cq.location_filter(path_regexp = "media/gpu/.+"),
+            cq.location_filter(path_regexp = "media/mojo/.+"),
+            cq.location_filter(path_regexp = "media/renderers/.+"),
+            cq.location_filter(path_regexp = "media/video/.+"),
+            cq.location_filter(path_regexp = "services/viz/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/tryserver.chromium.android.json"),
+            cq.location_filter(path_regexp = "testing/trigger_scripts/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/mediastream/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webcodecs/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgl/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/platform/graphics/gpu/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "tools/mb/mb_config_expectations/tryserver.chromium.android.json"),
+            cq.location_filter(path_regexp = "ui/gl/.+"),
         ],
     ),
 )
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
index 7fe38c330..bacb7e5 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.chromiumos.star
@@ -5,7 +5,7 @@
 
 load("//lib/branches.star", "branches")
 load("//lib/builder_config.star", "builder_config")
-load("//lib/builders.star", "goma", "os")
+load("//lib/builders.star", "goma", "os", "reclient")
 load("//lib/try.star", "try_")
 load("//lib/consoles.star", "consoles")
 load("//project.star", "settings")
@@ -336,6 +336,8 @@
             "chrome/test/data/webui/chromeos/chromebox_for_meetings/.+",
         ],
     ),
+    goma_backend = None,
+    reclient_instance = reclient.instance.DEFAULT_UNTRUSTED,
 )
 
 # RTS builders
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star b/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star
index cb281b8e..2e96504 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.dawn.star
@@ -33,17 +33,17 @@
     main_list_view = "try",
     tryjob = try_.job(
         location_filters = [
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "testing/buildbot/chromium.dawn.json",
-            "third_party/blink/renderer/modules/webgpu/.+",
-            "third_party/blink/web_tests/external/wpt/webgpu/.+",
-            "third_party/blink/web_tests/wpt_internal/webgpu/.+",
-            "third_party/blink/web_tests/WebGPUExpectations",
-            "third_party/dawn/.+",
-            "third_party/webgpu-cts/.+",
-            "tools/clang/scripts/update.py",
-            "ui/gl/features.gni",
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/chromium.dawn.json"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/external/wpt/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/wpt_internal/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/WebGPUExpectations"),
+            cq.location_filter(path_regexp = "third_party/dawn/.+"),
+            cq.location_filter(path_regexp = "third_party/webgpu-cts/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "ui/gl/features.gni"),
         ],
     ),
     test_presentation = resultdb.test_presentation(
@@ -62,17 +62,17 @@
     main_list_view = "try",
     tryjob = try_.job(
         location_filters = [
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "testing/buildbot/chromium.dawn.json",
-            "third_party/blink/renderer/modules/webgpu/.+",
-            "third_party/blink/web_tests/external/wpt/webgpu/.+",
-            "third_party/blink/web_tests/wpt_internal/webgpu/.+",
-            "third_party/blink/web_tests/WebGPUExpectations",
-            "third_party/dawn/.+",
-            "third_party/webgpu-cts/.+",
-            "tools/clang/scripts/update.py",
-            "ui/gl/features.gni",
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/chromium.dawn.json"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/external/wpt/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/wpt_internal/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/WebGPUExpectations"),
+            cq.location_filter(path_regexp = "third_party/dawn/.+"),
+            cq.location_filter(path_regexp = "third_party/webgpu-cts/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "ui/gl/features.gni"),
         ],
     ),
     test_presentation = resultdb.test_presentation(
@@ -85,24 +85,25 @@
     branch_selector = branches.DESKTOP_EXTENDED_STABLE_MILESTONE,
     mirrors = [
         "ci/Dawn Mac x64 DEPS Builder",
-        "ci/Dawn Mac x64 DEPS Release (AMD)",
+        # Not enough capacity on Mac AMD https://crbug.com/1380184.
+        # "ci/Dawn Mac x64 DEPS Release (AMD)",
         "ci/Dawn Mac x64 DEPS Release (Intel)",
     ],
     main_list_view = "try",
     os = os.MAC_ANY,
     tryjob = try_.job(
         location_filters = [
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "testing/buildbot/chromium.dawn.json",
-            "third_party/blink/renderer/modules/webgpu/.+",
-            "third_party/blink/web_tests/external/wpt/webgpu/.+",
-            "third_party/blink/web_tests/wpt_internal/webgpu/.+",
-            "third_party/blink/web_tests/WebGPUExpectations",
-            "third_party/dawn/.+",
-            "third_party/webgpu-cts/.+",
-            "tools/clang/scripts/update.py",
-            "ui/gl/features.gni",
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/chromium.dawn.json"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/external/wpt/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/wpt_internal/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/WebGPUExpectations"),
+            cq.location_filter(path_regexp = "third_party/dawn/.+"),
+            cq.location_filter(path_regexp = "third_party/webgpu-cts/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "ui/gl/features.gni"),
         ],
     ),
     test_presentation = resultdb.test_presentation(
@@ -122,17 +123,17 @@
     os = os.WINDOWS_ANY,
     tryjob = try_.job(
         location_filters = [
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "testing/buildbot/chromium.dawn.json",
-            "third_party/blink/renderer/modules/webgpu/.+",
-            "third_party/blink/web_tests/external/wpt/webgpu/.+",
-            "third_party/blink/web_tests/wpt_internal/webgpu/.+",
-            "third_party/blink/web_tests/WebGPUExpectations",
-            "third_party/dawn/.+",
-            "third_party/webgpu-cts/.+",
-            "tools/clang/scripts/update.py",
-            "ui/gl/features.gni",
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/chromium.dawn.json"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/external/wpt/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/wpt_internal/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/WebGPUExpectations"),
+            cq.location_filter(path_regexp = "third_party/dawn/.+"),
+            cq.location_filter(path_regexp = "third_party/webgpu-cts/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "ui/gl/features.gni"),
         ],
     ),
     test_presentation = resultdb.test_presentation(
@@ -152,17 +153,17 @@
     os = os.WINDOWS_ANY,
     tryjob = try_.job(
         location_filters = [
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "testing/buildbot/chromium.dawn.json",
-            "third_party/blink/renderer/modules/webgpu/.+",
-            "third_party/blink/web_tests/external/wpt/webgpu/.+",
-            "third_party/blink/web_tests/wpt_internal/webgpu/.+",
-            "third_party/blink/web_tests/WebGPUExpectations",
-            "third_party/dawn/.+",
-            "third_party/webgpu-cts/.+",
-            "tools/clang/scripts/update.py",
-            "ui/gl/features.gni",
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/chromium.dawn.json"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/external/wpt/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/wpt_internal/webgpu/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/web_tests/WebGPUExpectations"),
+            cq.location_filter(path_regexp = "third_party/dawn/.+"),
+            cq.location_filter(path_regexp = "third_party/webgpu-cts/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "ui/gl/features.gni"),
         ],
     ),
     test_presentation = resultdb.test_presentation(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
index 4f2e8e8..d827453 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
@@ -99,6 +99,7 @@
 
 try_.builder(
     name = "linux-blink-heap-verification-try",
+    goma_backend = None,
 )
 
 try_.builder(
@@ -120,6 +121,7 @@
     mirrors = [
         "ci/linux-extended-tracing-rel",
     ],
+    goma_backend = None,
 )
 
 try_.builder(
@@ -133,6 +135,7 @@
 
 try_.builder(
     name = "linux-headless-shell-rel",
+    goma_backend = None,
 )
 
 try_.builder(
@@ -147,6 +150,7 @@
 try_.builder(
     name = "linux-mbi-mode-per-render-process-host-rel",
     mirrors = builder_config.copy_from("linux-rel"),
+    goma_backend = None,
 )
 
 try_.builder(
@@ -186,6 +190,7 @@
             "services/tracing/.+",
         ],
     ),
+    goma_backend = None,
 )
 
 try_.orchestrator_builder(
@@ -657,27 +662,27 @@
     main_list_view = "try",
     tryjob = try_.job(
         location_filters = [
-            "chrome/browser/vr/.+",
-            "content/browser/xr/.+",
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "media/audio/.+",
-            "media/base/.+",
-            "media/capture/.+",
-            "media/filters/.+",
-            "media/gpu/.+",
-            "media/mojo/.+",
-            "media/renderers/.+",
-            "media/video/.+",
-            "testing/buildbot/tryserver.chromium.linux.json",
-            "testing/trigger_scripts/.+",
-            "third_party/blink/renderer/modules/mediastream/.+",
-            "third_party/blink/renderer/modules/webcodecs/.+",
-            "third_party/blink/renderer/modules/webgl/.+",
-            "third_party/blink/renderer/platform/graphics/gpu/.+",
-            "tools/clang/scripts/update.py",
-            "tools/mb/mb_config_expectations/tryserver.chromium.linux.json",
-            "ui/gl/.+",
+            cq.location_filter(path_regexp = "chrome/browser/vr/.+"),
+            cq.location_filter(path_regexp = "content/browser/xr/.+"),
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "media/audio/.+"),
+            cq.location_filter(path_regexp = "media/base/.+"),
+            cq.location_filter(path_regexp = "media/capture/.+"),
+            cq.location_filter(path_regexp = "media/filters/.+"),
+            cq.location_filter(path_regexp = "media/gpu/.+"),
+            cq.location_filter(path_regexp = "media/mojo/.+"),
+            cq.location_filter(path_regexp = "media/renderers/.+"),
+            cq.location_filter(path_regexp = "media/video/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/tryserver.chromium.linux.json"),
+            cq.location_filter(path_regexp = "testing/trigger_scripts/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/mediastream/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webcodecs/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgl/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/platform/graphics/gpu/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "tools/mb/mb_config_expectations/tryserver.chromium.linux.json"),
+            cq.location_filter(path_regexp = "ui/gl/.+"),
         ],
     ),
 )
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star b/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star
index 286a862..4ad8c2b7 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.mac.star
@@ -470,28 +470,28 @@
     ssd = None,
     tryjob = try_.job(
         location_filters = [
-            "chrome/browser/vr/.+",
-            "content/browser/xr/.+",
-            "content/test/gpu/.+",
-            "gpu/.+",
-            "media/audio/.+",
-            "media/base/.+",
-            "media/capture/.+",
-            "media/filters/.+",
-            "media/gpu/.+",
-            "media/mojo/.+",
-            "media/renderers/.+",
-            "media/video/.+",
-            "services/shape_detection/.+",
-            "testing/buildbot/tryserver.chromium.mac.json",
-            "testing/trigger_scripts/.+",
-            "third_party/blink/renderer/modules/mediastream/.+",
-            "third_party/blink/renderer/modules/webcodecs/.+",
-            "third_party/blink/renderer/modules/webgl/.+",
-            "third_party/blink/renderer/platform/graphics/gpu/.+",
-            "tools/clang/scripts/update.py",
-            "tools/mb/mb_config_expectations/tryserver.chromium.mac.json",
-            "ui/gl/.+",
+            cq.location_filter(path_regexp = "chrome/browser/vr/.+"),
+            cq.location_filter(path_regexp = "content/browser/xr/.+"),
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "media/audio/.+"),
+            cq.location_filter(path_regexp = "media/base/.+"),
+            cq.location_filter(path_regexp = "media/capture/.+"),
+            cq.location_filter(path_regexp = "media/filters/.+"),
+            cq.location_filter(path_regexp = "media/gpu/.+"),
+            cq.location_filter(path_regexp = "media/mojo/.+"),
+            cq.location_filter(path_regexp = "media/renderers/.+"),
+            cq.location_filter(path_regexp = "media/video/.+"),
+            cq.location_filter(path_regexp = "services/shape_detection/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/tryserver.chromium.mac.json"),
+            cq.location_filter(path_regexp = "testing/trigger_scripts/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/mediastream/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webcodecs/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgl/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/platform/graphics/gpu/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "tools/mb/mb_config_expectations/tryserver.chromium.mac.json"),
+            cq.location_filter(path_regexp = "ui/gl/.+"),
         ],
     ),
 )
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.star b/infra/config/subprojects/chromium/try/tryserver.chromium.star
index 7c5953b0..b77bdc8 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.star
@@ -4,7 +4,7 @@
 """Definitions of builders in the tryserver.chromium builder group."""
 
 load("//lib/branches.star", "branches")
-load("//lib/builders.star", "goma", "os")
+load("//lib/builders.star", "goma", "os", "reclient")
 load("//lib/try.star", "try_")
 load("//lib/consoles.star", "consoles")
 
@@ -50,6 +50,8 @@
     mirrors = [
         "ci/linux-official",
     ],
+    goma_backend = None,
+    reclient_instance = reclient.instance.DEFAULT_UNTRUSTED,
 )
 
 try_.builder(
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.tricium.star b/infra/config/subprojects/chromium/try/tryserver.chromium.tricium.star
index cc09b2b..071f9f6 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.tricium.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.tricium.star
@@ -80,6 +80,7 @@
 try_.builder(
     name = "linux-clang-tidy-dbg",
     executable = "recipe:tricium_clang_tidy_wrapper",
+    goma_backend = None,
     os = os.LINUX_DEFAULT,
 )
 
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.win.star b/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
index 448eb4d..2a0ad3a 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.win.star
@@ -334,30 +334,30 @@
     os = os.WINDOWS_DEFAULT,
     tryjob = try_.job(
         location_filters = [
-            "chrome/browser/vr/.+",
-            "content/browser/xr/.+",
-            "content/test/gpu/.+",
-            "device/vr/.+",
-            "gpu/.+",
-            "media/audio/.+",
-            "media/base/.+",
-            "media/capture/.+",
-            "media/filters/.+",
-            "media/gpu/.+",
-            "media/mojo/.+",
-            "media/renderers/.+",
-            "media/video/.+",
-            "testing/buildbot/tryserver.chromium.win.json",
-            "testing/trigger_scripts/.+",
-            "third_party/blink/renderer/modules/vr/.+",
-            "third_party/blink/renderer/modules/mediastream/.+",
-            "third_party/blink/renderer/modules/webcodecs/.+",
-            "third_party/blink/renderer/modules/webgl/.+",
-            "third_party/blink/renderer/modules/xr/.+",
-            "third_party/blink/renderer/platform/graphics/gpu/.+",
-            "tools/clang/scripts/update.py",
-            "tools/mb/mb_config_expectations/tryserver.chromium.win.json",
-            "ui/gl/.+",
+            cq.location_filter(path_regexp = "chrome/browser/vr/.+"),
+            cq.location_filter(path_regexp = "content/browser/xr/.+"),
+            cq.location_filter(path_regexp = "content/test/gpu/.+"),
+            cq.location_filter(path_regexp = "device/vr/.+"),
+            cq.location_filter(path_regexp = "gpu/.+"),
+            cq.location_filter(path_regexp = "media/audio/.+"),
+            cq.location_filter(path_regexp = "media/base/.+"),
+            cq.location_filter(path_regexp = "media/capture/.+"),
+            cq.location_filter(path_regexp = "media/filters/.+"),
+            cq.location_filter(path_regexp = "media/gpu/.+"),
+            cq.location_filter(path_regexp = "media/mojo/.+"),
+            cq.location_filter(path_regexp = "media/renderers/.+"),
+            cq.location_filter(path_regexp = "media/video/.+"),
+            cq.location_filter(path_regexp = "testing/buildbot/tryserver.chromium.win.json"),
+            cq.location_filter(path_regexp = "testing/trigger_scripts/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/vr/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/mediastream/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webcodecs/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/webgl/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/modules/xr/.+"),
+            cq.location_filter(path_regexp = "third_party/blink/renderer/platform/graphics/gpu/.+"),
+            cq.location_filter(path_regexp = "tools/clang/scripts/update.py"),
+            cq.location_filter(path_regexp = "tools/mb/mb_config_expectations/tryserver.chromium.win.json"),
+            cq.location_filter(path_regexp = "ui/gl/.+"),
         ],
     ),
 )
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index e17a7e9..620ab47e 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1300,6 +1300,9 @@
       <message name="IDS_IOS_KEYBOARD_NEXT_TAB" desc="Title of the keyboard shortcut to switch to the next tab in the tab strip." meaning="Used as a command title in the iPad command menu.">
         Go to Next Tab
       </message>
+      <message name="IDS_IOS_KEYBOARD_NEW_INCOGNITO_WINDOW" desc="The title of the keyboard shortcut to open a new Incognito window." meaning="Used as a command title in the iPad command menu.">
+        New Incognito Window
+      </message>
       <message name="IDS_IOS_KEYBOARD_NEW_WINDOW" desc="The title of the keyboard shortcut to open a new window." meaning="Used as a command title in the iPad command menu.">
         New Window
       </message>
@@ -2765,20 +2768,20 @@
       <message name="IDS_IOS_SHARE_MENU_PRINT_ACTION" desc="The text label of the Print action in the extension menu that starts the printing process. [Length: 13em] [iOS only]">
         Print
       </message>
-      <message name="IDS_IOS_SHARE_MENU_GENERATE_QR_CODE_ACTION" desc="The text label of the action in the extension menu that generates and shows a QR code for the current page. [iOS only]">
+      <message name="IDS_IOS_SHARE_MENU_GENERATE_QR_CODE_ACTION" desc="The text label of the action in the extension menu that generates and shows a QR code for the current page. This is Title Case. [iOS only]" meaning="Action from the displayed menu after the user tap on the share button. In Title Case.">
         Create a QR Code
       </message>
-      <message name="IDS_IOS_SHARE_MENU_READING_LIST_ACTION" desc="The text label of the Add To Reading List action in the extension menu that adds the current page to the reading list. [Length: 25em] [iOS only]">
+      <message name="IDS_IOS_SHARE_MENU_READING_LIST_ACTION" desc="The text label of the Add To Reading List action in the extension menu that adds the current page to the reading list. [Length: 25em] This is Title Case. [iOS only]" meaning="Action from the displayed menu after the user tap on the share button. In Title Case.">
         Add to Reading List
       </message>
-      <message name="IDS_IOS_SHARE_MENU_REQUEST_DESKTOP_SITE" desc="Text label to the Request Desktop Site action in the extension menu that request the desktop version of the current page. [iOS only]">
+      <message name="IDS_IOS_SHARE_MENU_REQUEST_DESKTOP_SITE" desc="Text label to the Request Desktop Site action in the extension menu that request the desktop version of the current page. This is Title Case. [iOS only]" meaning="Action from the displayed menu after the user tap on the share button. In Title Case.">
         Request Desktop Site
       </message>
-      <message name="IDS_IOS_SHARE_MENU_REQUEST_MOBILE_SITE" desc="Text label to the Request Mobile Site action in the extension menu that request the mobile version of the current page. [iOS only]">
+      <message name="IDS_IOS_SHARE_MENU_REQUEST_MOBILE_SITE" desc="Text label to the Request Mobile Site action in the extension menu that request the mobile version of the current page. This is Title Case. [iOS only]" meaning="Action from the displayed menu after the user tap on the share button. In Title Case.">
         Request Mobile Site
       </message>
-      <message name="IDS_IOS_SHARE_MENU_SEND_TAB_TO_SELF_ACTION" desc="Text label to the Send Tab To Self action in the extension menu that sends the current tab to the user's other devices. [iOS only]">
-        Send To Your Devices
+      <message name="IDS_IOS_SHARE_MENU_SEND_TAB_TO_SELF_ACTION" desc="Text label to the Send Tab To Self action in the extension menu that sends the current tab to the user's other devices. This is Title Case. [iOS only]" meaning="Action from the displayed menu after the user tap on the share button. In Title Case.">
+        Send to Your Devices
       </message>
       <message name="IDS_SEND_TAB_TO_SELF_SIGN_IN_PROMO_LABEL" desc = "Text when a signed out user attempts to use send-tab-to-self, then sees a sign-in promo.">
         To send this tab to another device, sign in to Chrome on both devices.
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_NEW_INCOGNITO_WINDOW.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_NEW_INCOGNITO_WINDOW.png.sha1
new file mode 100644
index 0000000..fa27f8c9
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_KEYBOARD_NEW_INCOGNITO_WINDOW.png.sha1
@@ -0,0 +1 @@
+1b35619f206a120949d7ca41991630f348a2a79a
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_GENERATE_QR_CODE_ACTION.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_GENERATE_QR_CODE_ACTION.png.sha1
new file mode 100644
index 0000000..f9856cb
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_GENERATE_QR_CODE_ACTION.png.sha1
@@ -0,0 +1 @@
+89f379e292e20a57bd89ac601847d58fc4acc33e
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_REQUEST_DESKTOP_SITE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_REQUEST_DESKTOP_SITE.png.sha1
new file mode 100644
index 0000000..f9856cb
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_REQUEST_DESKTOP_SITE.png.sha1
@@ -0,0 +1 @@
+89f379e292e20a57bd89ac601847d58fc4acc33e
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_REQUEST_MOBILE_SITE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_REQUEST_MOBILE_SITE.png.sha1
new file mode 100644
index 0000000..f9856cb
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_REQUEST_MOBILE_SITE.png.sha1
@@ -0,0 +1 @@
+89f379e292e20a57bd89ac601847d58fc4acc33e
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_SEND_TAB_TO_SELF_ACTION.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_SEND_TAB_TO_SELF_ACTION.png.sha1
new file mode 100644
index 0000000..f9856cb
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SHARE_MENU_SEND_TAB_TO_SELF_ACTION.png.sha1
@@ -0,0 +1 @@
+89f379e292e20a57bd89ac601847d58fc4acc33e
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
index 80ed6dd..5dc5536 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -17,6 +17,7 @@
 <translation id="1617663976202781617">Chromium 同期のデータ</translation>
 <translation id="1722370509450468186">パスワードはアカウント(<ph name="EMAIL" />)に保存されます。</translation>
 <translation id="1736662517232558588">Chromium データを削除しました</translation>
+<translation id="177102542580335555">この Chromium プロフィールは標準のセキュリティで保護されます</translation>
 <translation id="1838412507805038478">このウェブサイトの証明書が <ph name="ISSUER" /> 発行のものであることが Chromium で確認されました。</translation>
 <translation id="1843424232666537147">Chromium には、インターネットのデータやウェブページの読み込み速度を管理できる機能があります。
 <ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
@@ -54,6 +55,7 @@
 <translation id="4432744876818348753">Chromium を最大限に活用するにはログインしてください。</translation>
 <translation id="4555020257205549924">この機能を有効にすると、外国語のページを開いたときに翻訳ツールが表示されます。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="4585809515399340748">メッセージ、ドキュメント、他のアプリでタップしたリンクが常に Chromium で開かれるようになります。</translation>
+<translation id="4633738821577273991">この Chromium プロフィールもセーフ ブラウジング保護強化機能で保護されます</translation>
 <translation id="4654936625574199632">アプリを改善するため、Chromium では使用状況とクラッシュに関するデータが Google に送信されます。<ph name="BEGIN_LINK" />管理<ph name="END_LINK" /></translation>
 <translation id="4681781466797808448">Chromium のスキャナをオンにしてください</translation>
 <translation id="4736424910885271643">アカウントは <ph name="HOSTED_DOMAIN" /> で管理されているため、Chromium データはこのデバイスから削除されます</translation>
@@ -116,6 +118,7 @@
 <translation id="8073677936375100957">Chromium データをこのデバイスから削除しますか?</translation>
 <translation id="8240981428553046115">Chromium でアップデートを確認できませんでした。しばらくしてからもう一度お試しください。</translation>
 <translation id="8308172444429103994">Chromium のヒント。キーボードの上部で保存したパスワードを選択すると、すばやくログインできます。</translation>
+<translation id="8409374867500149834">Chromium の最高強度のセキュリティで有害なウェブサイトから保護します</translation>
 <translation id="858114650497379505">他のアプリや iPhone でパスワード マネージャに保存したパスワードを使用できます。</translation>
 <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. All rights reserved.</translation>
 <translation id="865600487977764604">ログイン時に、Chromium を安全に利用できるようにするほか、他の Google アプリのセキュリティ強化に使用されることがあります。</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
index 7eac5a9..0e4e10fc 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
@@ -8,6 +8,7 @@
 <translation id="1493827051843127077">Chrome を既定に設定すると、タブ、パスワード、お支払い情報をすべてのデバイスで同期できるようになります</translation>
 <translation id="1504372625950710826">Chrome でアップデートを確認できませんでした。インターネット接続を確認してみてください。</translation>
 <translation id="1511320244449497906">ログインしてデータを同期している、<ph name="DOMAIN" /> 管理のアカウントに対して、管理者が専用のユーザー ポリシーを設定して Chrome の動作を変更できるようになりました。</translation>
+<translation id="1554731936187952550">Chrome の最高強度のセキュリティで有害なウェブサイトから保護します</translation>
 <translation id="1682483655351012182">Chrome のデータを同期する</translation>
 <translation id="1759842336958782510">Chrome</translation>
 <translation id="1917964099031477364">このアカウントと保存されていないデータは、Chrome やこのデバイスの他の Google アプリから削除されます。</translation>
@@ -39,6 +40,7 @@
 <translation id="3196546062792660320">Chrome ではアカウントがウェブで管理されるので、さまざまな手間を省くことができます。[設定] でアカウントの追加と削除を行うことができます。</translation>
 <translation id="3282568296779691940">Chrome にログイン</translation>
 <translation id="3345341804167540816">Chromeをどこでも使用</translation>
+<translation id="3503014945441706099">この Chrome プロフィールもセーフ ブラウジング保護強化機能で保護されます</translation>
 <translation id="3522659714780527202">どのデバイスからでも Chrome で自分のタブにアクセスするには、同期をオンにしてください</translation>
 <translation id="3533694711092285624">保存されているパスワードがありません。パスワードを保存すると Chrome で確認できるようになります。</translation>
 <translation id="3641179212828090796">Chrome に保存したパスワードを使用して、よりすばやくログインできます</translation>
@@ -137,6 +139,7 @@
   • Chrome がクラッシュした場合、クラッシュに関する情報として、一部の個人情報が送信される場合があります。
 
   • 同期をオンにした場合、アクセスした URL に関する情報も送信される場合があります。<ph name="END_INDENT" /></translation>
+<translation id="9103442491611662960">この Chrome プロフィールは標準のセキュリティで保護されます</translation>
 <translation id="9112744793181547300">Chrome を既定に設定しますか?</translation>
 <translation id="9122931302567044771">Chrome は毎回 PC 版サイトをリクエストします。</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_strings_af.xtb b/ios/chrome/app/strings/resources/ios_strings_af.xtb
index 25a207b..59b9a28a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_af.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_af.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">Soek ${searchPhrase} in Chrome</translation>
 <translation id="1242044645101871359">Meld weer aan</translation>
 <translation id="1254117744268754948">Kies vouer</translation>
+<translation id="1254424942107648268">Vind vorige</translation>
 <translation id="1258491128795710625">Wat's nuut</translation>
 <translation id="1265739287306757398">Vind uit hoe</translation>
 <translation id="1272079795634619415">Stop</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">Jy het reeds 'n wagwoord gestoor vir <ph name="WEBSITE" /></translation>
 <translation id="2476359652512522418">Nie gekies nie</translation>
 <translation id="2482878487686419369">Kennisgewings</translation>
+<translation id="2496626742194544812">Gaan na eerste oortjie</translation>
 <translation id="2500374554657206846">Opsies om wagwoord te stoor</translation>
 <translation id="2523363575747517183">Hierdie webwerf probeer herhaaldelik 'n ander program oopmaak.</translation>
 <translation id="2529021024822217800">Maak almal oop</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">Webkoekies in gebruik</translation>
 <translation id="2648803196158606475">Vee uit wat gelees is</translation>
 <translation id="2653659639078652383">Dien in</translation>
+<translation id="2664621323652615289">Stop</translation>
 <translation id="2671426118752779020">Jy kan die wagwoorde wat jy in Google Wagwoordbestuurder gestoor het in ander programme op jou iPhone gebruik.</translation>
 <translation id="2690858294534178585">Kamera word tans gebruik</translation>
 <translation id="2691653761409724435">Nie vanlyn beskikbaar nie</translation>
@@ -360,6 +363,7 @@
 <translation id="380329542618494757">Naam</translation>
 <translation id="3803696231112616155">Bied aan om hierdie werf te vertaal</translation>
 <translation id="3810973564298564668">Bestuur</translation>
+<translation id="3818293389945649617">Vind volgende</translation>
 <translation id="3819183753496523827">Jy is vanlyn. Gaan jou internetverbinding na en probeer weer.</translation>
 <translation id="3835964409414434850">Gaan na volgende oortjie</translation>
 <translation id="385051799172605136">Terug</translation>
@@ -391,6 +395,7 @@
 <translation id="4049507953662678203">Maak seker jy het 'n netwerkverbinding en probeer weer.</translation>
 <translation id="4063300985191096908">Gaan na Stroom toe</translation>
 <translation id="408404951701638773">Soekbalk kan nou makliker bereik word</translation>
+<translation id="4092655288299341041">Wys hulp</translation>
 <translation id="4108998448622696017">Bespeur en waarsku jou oor gevaarlike gevalle wanneer hulle plaasvind.</translation>
 <translation id="411254640334432676">Kon nie aflaai nie.</translation>
 <translation id="4112644173421521737">Soek</translation>
@@ -783,6 +788,7 @@
 <translation id="6859944681507688231">Aktiveer die kamera in die instellings om 'n QR-kode of kredietkaart te skandeer.</translation>
 <translation id="6867369562105931222">wagwoord</translation>
 <translation id="6869389390665537774">Jy kan die bladsye sien wat jy besoek het of hulle van jou geskiedenis af uitvee</translation>
+<translation id="687135068089457384">Wys instellings</translation>
 <translation id="6873263987691478642">Deelaansig</translation>
 <translation id="6882836635272038266">Standaardbeskerming teen webwerwe, aflaaie en uitbreidings wat bekend is daarvoor dat hulle gevaarlik is.</translation>
 <translation id="6888009575607455378">Is jy seker jy wil jou veranderinge weggooi?</translation>
@@ -889,11 +895,13 @@
 <translation id="7807060072011926525">Verskaf deur Google</translation>
 <translation id="7839985698273989086">Vanlyn bladsy</translation>
 <translation id="7840771868269352570">Die items wat jy gekies het, sal verwyder word.</translation>
+<translation id="7845466610722898">Wys leeslys</translation>
 <translation id="784551991304901159">Kies Skakel Aan op die kieslys om inhoud te sien</translation>
 <translation id="7853202427316060426">Aktiwiteit</translation>
 <translation id="7856733331829174190">Kon nie aflaai nie</translation>
 <translation id="785938070103630874">Maak Wagwoorde, Betaalmetodes of Adres en meer oop</translation>
 <translation id="7859704718976024901">Blaaigeskiedenis</translation>
+<translation id="7879275349003161544">Wys aflaaie</translation>
 <translation id="7884694604461143138">Soekgeskiedenis (<ph name="COUNT" /> gevind)</translation>
 <translation id="7887198238286927132">Om jou privaatheid te beskerm, sal Chrome nie hierdie veld outomaties invul nie.</translation>
 <translation id="7911190106180361398">Jou organisasie laat jou nie toe om alles te sinkroniseer nie.</translation>
@@ -1006,6 +1014,7 @@
 <translation id="8741995161408053644">Jou Google-rekening kan dalk ander vorme van blaaigeskiedenis hê by <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
 <translation id="8750037785291841318">Jy sal jou oortjies hier kry</translation>
 <translation id="8756969031206844760">Dateer wagwoord op?</translation>
+<translation id="8763613688786959833">Gaan na laaste oortjie</translation>
 <translation id="8764015330924122850">Ontvolg <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">Ongeldige URL</translation>
 <translation id="8787968206789828143">Soek op web</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
index d81e07b..c59d833b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">Pretražite ${searchPhrase} u Chromeu</translation>
 <translation id="1242044645101871359">Prijavite se ponovo</translation>
 <translation id="1254117744268754948">Odaberite folder</translation>
+<translation id="1254424942107648268">Traži prethodno</translation>
 <translation id="1258491128795710625">Šta je novo</translation>
 <translation id="1265739287306757398">Saznajte kako</translation>
 <translation id="1272079795634619415">Zaustavi</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">Već ste sačuvali lozinku za <ph name="WEBSITE" /></translation>
 <translation id="2476359652512522418">Nije odabrano</translation>
 <translation id="2482878487686419369">Obavještenja</translation>
+<translation id="2496626742194544812">Idi na prvu karticu</translation>
 <translation id="2500374554657206846">Opcije čuvanja lozinki</translation>
 <translation id="2523363575747517183">Ova web lokacija neprestano pokušava otvoriti drugu aplikaciju.</translation>
 <translation id="2529021024822217800">Otvori sve</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">Upotreba kolačića</translation>
 <translation id="2648803196158606475">Izbriši pročitano</translation>
 <translation id="2653659639078652383">Pošalji</translation>
+<translation id="2664621323652615289">Zaustavi</translation>
 <translation id="2671426118752779020">Možete koristiti lozinke koje ste sačuvali u Googleovom Upravitelju lozinki u drugim aplikacijama na iPhoneu.</translation>
 <translation id="2690858294534178585">Kamera se koristi</translation>
 <translation id="2691653761409724435">Nije dostupno van mreže</translation>
@@ -226,6 +229,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Nije moguće kreirati link</translation>
 <translation id="2786701870377699570">Pretražite kartice na svim sinhroniziranim uređajima</translation>
+<translation id="2797029671965852011">Prikaži povijest</translation>
 <translation id="2800683595868705743">Napuštanje prebacivača kartica</translation>
 <translation id="2815198996063984598">2. Dodirnite Zadana aplikacija preglednika</translation>
 <translation id="2820289420301699633">Vaš administrator ima kontrolu nad Chromeom i može pristupati njegovim podacima</translation>
@@ -328,7 +332,9 @@
 <translation id="3530206579861815432">Brzo pronađite otvorene i nedavno zatvorene kartice na svim svojim sinhroniziranim uređajima.</translation>
 <translation id="3533202363250687977">Zatvori sve anonimne kartice</translation>
 <translation id="3533436815740441613">Nova kartica</translation>
+<translation id="3540141921715814660">Dodaj u Oznake</translation>
 <translation id="3551320343578183772">Zatvori karticu</translation>
+<translation id="3565207542107370586">Brisanje podataka o pregledavanju…</translation>
 <translation id="3575234738189584619">Pretraživanje pomoću Objektiva</translation>
 <translation id="3581564640715911333">Ponudi prevođenje stranica na drugim jezicima</translation>
 <translation id="3588820906588687999">Otvori sliku na novoj kartici</translation>
@@ -347,6 +353,7 @@
 <translation id="37207012422556617">Popularna pretraživanja</translation>
 <translation id="3740397331642243698">Otvara unesene URL-ove u Google Chromeu u anonimnom načinu rada.</translation>
 <translation id="3762232513783804601">Napravljeno za vaš iPad</translation>
+<translation id="3768725474733206671">Ponovno otvori posljednju zatvorenu karticu</translation>
 <translation id="3771033907050503522">Anonimne kartice</translation>
 <translation id="3775743491439407556">Sinhronizacija ne funkcionira</translation>
 <translation id="3779810277399252432">Nema internetske veze.</translation>
@@ -356,10 +363,13 @@
 <translation id="380329542618494757">Ime</translation>
 <translation id="3803696231112616155">Ponudi prijevod ove web lokacije</translation>
 <translation id="3810973564298564668">Upravljaj</translation>
+<translation id="3818293389945649617">Traži sljedeće</translation>
 <translation id="3819183753496523827">Offline ste. Provjerite internetsku vezu i pokušajte ponovo.</translation>
+<translation id="3835964409414434850">Prelazak na sljedeću karticu</translation>
 <translation id="385051799172605136">Nazad</translation>
 <translation id="3858860766373142691">Naziv</translation>
 <translation id="3861486700625780712">Prestani pratiti</translation>
+<translation id="387280738075653372">Ovdje preuzmite Chrome.</translation>
 <translation id="3892144330757387737">Svoju historiju ćete pronaći ovdje</translation>
 <translation id="3897092660631435901">Meni</translation>
 <translation id="3904829425754749514">Vaša organizacija je isključila sinhronizaciju. I dalje ćete moći pregledati svoje oznake, historiju, lozinke i druge postavke na ovom uređaju. Ako nešto promijenite, te promjene se neće sinhronizirati s vašim računom.</translation>
@@ -385,6 +395,7 @@
 <translation id="4049507953662678203">Provjerite imate li mrežnu vezu i pokušajte ponovo.</translation>
 <translation id="4063300985191096908">Idi u sažetak sadržaja</translation>
 <translation id="408404951701638773">Sada je lakše prići traci za pretraživanje</translation>
+<translation id="4092655288299341041">Prikaži pomoć</translation>
 <translation id="4108998448622696017">Otkriva opasne događaje i upozorava vas na njih kada nastupe.</translation>
 <translation id="411254640334432676">Preuzimanje nije uspjelo.</translation>
 <translation id="4112644173421521737">Pretraži</translation>
@@ -545,6 +556,7 @@
 <translation id="5300589172476337783">Prikaži</translation>
 <translation id="5317780077021120954">Sačuvaj</translation>
 <translation id="5339316356165661760">Uključi sinhronizaciju</translation>
+<translation id="536067926684072644">Prikaži oznake</translation>
 <translation id="5360976571138293719">Više postavki koje se odnose na privatnost, sigurnost i prikupljanje podataka možete pronaći u <ph name="BEGIN_LINK" />Googleovim uslugama<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Web lokacije koje pratite ćete pronaći ovdje</translation>
 <translation id="5388358297987318779">Otvori sliku</translation>
@@ -577,6 +589,7 @@
 <translation id="5631164295104953411">Dodajte način plaćanja</translation>
 <translation id="5636282538000367086">Saznajte šta je novo na Chromeu</translation>
 <translation id="5652623411397330904">Ovdje će se prikazivati proizvodi koje pratite.</translation>
+<translation id="5657859710142657190">Idite na rešetku kartica</translation>
 <translation id="5659593005791499971">E-pošta</translation>
 <translation id="5669335982068190158">Bili ste odjavljeni tokom vraćanja iPhonea na zadano. Dodirnite Nastavi u nastavku da se prijavite.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +606,7 @@
 <translation id="5737974891429562743">Detalji o prijavi za račun su zastarjeli. Ažurirajte da pokrenete sinhronizaciju.</translation>
 <translation id="5738385766833540397">Upravljajte načinom na koji primate obavještenja o padu cijene za proizvode koje pratite</translation>
 <translation id="5738887413654608789">Ovako možete otkriti relevantne web lokacije na osnovu vašeg okruženja.</translation>
+<translation id="5745916533876677730">Povratak na prethodnu karticu</translation>
 <translation id="5758631781033351321">Listu za čitanje ćete pronaći ovdje</translation>
 <translation id="5765456154762864099">Meni → Postavke → Zadani preglednik</translation>
 <translation id="5782227691023083829">Prevođenje...</translation>
@@ -609,6 +623,7 @@
 <translation id="5857090052475505287">Novi folder</translation>
 <translation id="5857675236236529683">Kada budete spremni, ovdje možete pronaći listu za čitanje</translation>
 <translation id="5857770089550859117">Potreban je pristupni izraz za pokretanje sinhronizacije.</translation>
+<translation id="5859715514067755465">Unaprijed</translation>
 <translation id="5860033963881614850">Isklj.</translation>
 <translation id="5869029295770560994">Uredu, razumijem</translation>
 <translation id="5871497086027727873">Premještena je jedna stavka</translation>
@@ -653,6 +668,7 @@
 <translation id="6152406514676263192">Sinhronizirajte da dobijete najrelevantniji sadržaj zasnovan na vašim interesovanjima.</translation>
 <translation id="6159839020698489198">nije obavezno</translation>
 <translation id="6165508094623778733">Saznajte više</translation>
+<translation id="6170450281939467187">Prijevod nije uspio</translation>
 <translation id="6177442314419606057">Pretražite u Chromeu</translation>
 <translation id="6184086493125982861">Prikaz kartica</translation>
 <translation id="6187302354554850004">Posljednji put sinhronizirano: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +704,7 @@
 <translation id="6374469231428023295">Pokušaj ponovo</translation>
 <translation id="6377118281273296434">Sigurnost web lokacije</translation>
 <translation id="6380866119319257197">Ako zaboravite pristupni izraz ili želite promijeniti ovu postavku, <ph name="BEGIN_LINK" />poništite sinhronizaciju<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Otvori lokaciju…</translation>
 <translation id="6387994324662817823">Lozinke se pohranjuju u Google Upravitelju lozinki samo na ovom uređaju.</translation>
 <translation id="6389470377220713856">Ime i prezime na kartici</translation>
 <translation id="6403371459378431832">Sinhronizirajte podatke na svim uređajima</translation>
@@ -699,6 +716,7 @@
 Vaši podaci su šifrirani sinhroniziranim pristupnim izrazom <ph name="TIME" />. Unesite izraz da započnete sinhronizaciju.</translation>
 <translation id="6418346271604475326">Pripremanje PDF-a</translation>
 <translation id="6434591244308415567">Došlo je do greške. Pokušajte ponovo kasnije.</translation>
+<translation id="6435236283694032571">Dodaj na popis za čitanje</translation>
 <translation id="6439338047467462846">Dozvoli sve</translation>
 <translation id="6445051938772793705">Zemlja</translation>
 <translation id="6445981559479772097">Poruka je poslana.</translation>
@@ -770,6 +788,7 @@
 <translation id="6859944681507688231">Omogućite kameru u postavkama da skenirate QR kôd ili kreditnu karticu.</translation>
 <translation id="6867369562105931222">lozinka</translation>
 <translation id="6869389390665537774">Možete vidjeti stranice koje ste posjetili ili ih obrisati iz historije</translation>
+<translation id="687135068089457384">Prikaži postavke</translation>
 <translation id="6873263987691478642">Podijeljeni prikaz</translation>
 <translation id="6882836635272038266">Standardna zaštita od web lokacija, preuzimanja i ekstenzija za koje se zna da su opasne.</translation>
 <translation id="6888009575607455378">Jeste li sigurni da želite odbaciti promjene?</translation>
@@ -863,6 +882,7 @@
 <translation id="7701040980221191251">Nema</translation>
 <translation id="7720410380936703141">POKUŠAJTE PONOVO</translation>
 <translation id="7726702057919861819">Meni → Historija → Obriši podatke pregledanja</translation>
+<translation id="7738120385185846461">Prijavite problem…</translation>
 <translation id="7741325291586284254">Nova stranica anonimne kartice</translation>
 <translation id="7756478488453921771">Meni → Postavke → Načini plaćanja</translation>
 <translation id="7765158879357617694">Pomjeri</translation>
@@ -875,11 +895,13 @@
 <translation id="7807060072011926525">Pruža Google</translation>
 <translation id="7839985698273989086">Offline stranica</translation>
 <translation id="7840771868269352570">Stavke koje ste odabrali će biti uklonjene.</translation>
+<translation id="7845466610722898">Prikaži popis za čitanje</translation>
 <translation id="784551991304901159">Da prikažete sadržaj, u meniju odaberite Uključi</translation>
 <translation id="7853202427316060426">Aktivnost</translation>
 <translation id="7856733331829174190">Preuzimanje nije uspjelo</translation>
 <translation id="785938070103630874">Otvorite lozinke, načine plaćanja ili adresu i još mnogo toga</translation>
 <translation id="7859704718976024901">Historija pregledanja</translation>
+<translation id="7879275349003161544">Prikaži preuzimanja</translation>
 <translation id="7884694604461143138">Pretražite historiju (broj rezultata je <ph name="COUNT" />)</translation>
 <translation id="7887198238286927132">Chrome neće automatski popuniti ovu rubriku radi zaštite vaše privatnosti.</translation>
 <translation id="7911190106180361398">Vaša organizacija vam ne dozvoljava da sve sinhronizirate.</translation>
@@ -957,6 +979,7 @@
 <translation id="8459333855531264009">Nije sigurno</translation>
 <translation id="8487667956631253959">Uključeno</translation>
 <translation id="8487700953926739672">Dostupno van mreže</translation>
+<translation id="8488923644885757471">Novi prozor</translation>
 <translation id="8490978609246021741">Sačuvaj izmjene</translation>
 <translation id="8503813439785031346">Korisničko ime</translation>
 <translation id="850600235656508448">Otvori u anonimnom načinu</translation>
@@ -991,6 +1014,7 @@
 <translation id="8741995161408053644">Vaš Google račun može imati druge oblike historije pregledanja na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
 <translation id="8750037785291841318">Kartice ćete pronaći ovdje</translation>
 <translation id="8756969031206844760">Ažurirati lozinku?</translation>
+<translation id="8763613688786959833">Idi na zadnju karticu</translation>
 <translation id="8764015330924122850">Prestanite pratiti kanal <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">Nevažeći URL</translation>
 <translation id="8787968206789828143">Pretražite na webu</translation>
@@ -1009,6 +1033,7 @@
 <translation id="8881801611828450202">Pretraži <ph name="SEARCH_ENGINE" /> za ovu sliku</translation>
 <translation id="8891935667620843985">Možete automatski otvarati linkove u Chromeu ako ga postavite kao zadanu aplikaciju preglednika.</translation>
 <translation id="8898822736010347272">Šalje Googleu URL-ove nekih stranica koje posjetite, ograničene informacije sistema i sadržaj nekih stranica radi lakšeg otkrivanja novih prijetnji te zaštite svakoga na webu.</translation>
+<translation id="890565330728586731">Natrag</translation>
 <translation id="8909135823018751308">Dijeljenje…</translation>
 <translation id="8911759861431145525">Dodirnite Dodaj, a zatim unesite informacije</translation>
 <translation id="891658175948553296">Istaknite tekst na web lokaciji</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
index d1cf0f7..20a9c4c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Methu â Chreu Dolen</translation>
 <translation id="2786701870377699570">Chwilio Tabiau ar draws Dyfeisiau sydd wedi'u Cysoni</translation>
+<translation id="2797029671965852011">Dangos Hanes</translation>
 <translation id="2800683595868705743">Gadael y Newidiwr Tabiau</translation>
 <translation id="2815198996063984598">2. Tapiwch Ap Pori Diofyn</translation>
 <translation id="2820289420301699633">Mae gan eich gweinyddwr reolaeth dros Chrome a gall gael mynediad at ei ddata</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">Dod o hyd i dabiau sydd ar agor a'r rhai sydd wedi'u cau yn ddiweddar yn gyflym ar draws eich dyfeisiau sydd wedi'u cysoni.</translation>
 <translation id="3533202363250687977">Cau Pob Tab Anhysbys</translation>
 <translation id="3533436815740441613">Tab Newydd</translation>
+<translation id="3540141921715814660">Ychwanegu at Nodau Tudalen</translation>
 <translation id="3551320343578183772">Cau'r Tab</translation>
+<translation id="3565207542107370586">Clirio Data Pori…</translation>
 <translation id="3575234738189584619">Chwilio gyda Lens</translation>
 <translation id="3581564640715911333">Cynnig cyfieithu tudalennau mewn ieithoedd eraill</translation>
 <translation id="3588820906588687999">Agor y Llun Mewn Tab Newydd</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">Chwiliadau Poblogaidd</translation>
 <translation id="3740397331642243698">Yn agor y cyfeiriadau URL a fewnbynnwyd yn Google Chrome yn y Modd Anhysbys.</translation>
 <translation id="3762232513783804601">Wedi'i Ddatblygu ar gyfer Eich iPad</translation>
+<translation id="3768725474733206671">Ailagor y Tab a Gaewyd Ddiwethaf</translation>
 <translation id="3771033907050503522">Tabiau Anhysbys</translation>
 <translation id="3775743491439407556">Nid yw'r Cysoni'n Gweithio</translation>
 <translation id="3779810277399252432">Dim cysylltiad rhyngrwyd.</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">Cynnig cyfieithu'r wefan hon</translation>
 <translation id="3810973564298564668">Rheoli</translation>
 <translation id="3819183753496523827">Rydych chi all-lein. Gwiriwch eich cysylltiad rhyngrwyd a rhowch gynnig arall arni.</translation>
+<translation id="3835964409414434850">Mynd i'r Tab Nesaf</translation>
 <translation id="385051799172605136">Nôl</translation>
 <translation id="3858860766373142691">Enw</translation>
 <translation id="3861486700625780712">Peidio â dilyn</translation>
+<translation id="387280738075653372">Lawrlwythwch Chrome yma.</translation>
 <translation id="3892144330757387737">Byddwch yn gweld eich hanes yma</translation>
 <translation id="3897092660631435901">Dewislen</translation>
 <translation id="3904829425754749514">Mae eich sefydliad wedi diffodd cysoni. Gallwch weld eich nodau tudalen, eich hanes, eich cyfrineiriau a'ch gosodiadau eraill ar y ddyfais hon o hyd. Os byddwch yn gwneud newidiadau, ni fyddant yn cysoni i'ch cyfrif.</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">Arddangos</translation>
 <translation id="5317780077021120954">Cadw</translation>
 <translation id="5339316356165661760">Troi Cysoni Ymlaen</translation>
+<translation id="536067926684072644">Dangos Nodau Tudalen</translation>
 <translation id="5360976571138293719">Am ragor o osodiadau sy'n ymwneud â phreifatrwydd, diogelwch a chasglu data, ewch i <ph name="BEGIN_LINK" />Gwasanaethau Google<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Byddwch yn gweld eich gwefannau a ddilynir yma</translation>
 <translation id="5388358297987318779">Agor Llun</translation>
@@ -577,6 +584,7 @@
 <translation id="5631164295104953411">Ychwanegu Dull Talu</translation>
 <translation id="5636282538000367086">Darganfod beth sy'n newydd yn Chrome</translation>
 <translation id="5652623411397330904">Bydd y cynhyrchion rydych yn eu holrhain yn ymddangos yma.</translation>
+<translation id="5657859710142657190">Mynd i'r Grid Tabiau</translation>
 <translation id="5659593005791499971">E-bost</translation>
 <translation id="5669335982068190158">Cawsoch eich allgofnodi fel rhan o'ch ailosodiad iPhone. Tapiwch parhau isod i fewngofnodi.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +601,7 @@
 <translation id="5737974891429562743">Mae manylion mewngofnodi'r cyfrif yn hen. Diweddarwch i ddechrau cysoni.</translation>
 <translation id="5738385766833540397">Rheoli sut rydych yn derbyn rhybuddion gostyngiadau prisiau ar gyfer cynhyrchion rydych yn eu holrhain</translation>
 <translation id="5738887413654608789">Mae hyn yn caniatáu i chi ddarganfod tudalennau gwe perthnasol yn seiliedig ar eich amgylchedd.</translation>
+<translation id="5745916533876677730">Mynd i'r Tab Blaenorol</translation>
 <translation id="5758631781033351321">Byddwch yn gweld eich rhestr ddarllen yma</translation>
 <translation id="5765456154762864099">Dewislen → Gosodiadau → Porwr Diofyn</translation>
 <translation id="5782227691023083829">Wrthi'n cyfieithu...</translation>
@@ -609,6 +618,7 @@
 <translation id="5857090052475505287">Ffolder Newydd</translation>
 <translation id="5857675236236529683">Pan fyddwch yn barod, dewch o hyd i'ch rhestr ddarllen yma</translation>
 <translation id="5857770089550859117">Mae angen cyfrinymadrodd i ddechrau cysoni.</translation>
+<translation id="5859715514067755465">Ymlaen</translation>
 <translation id="5860033963881614850">Diffodd</translation>
 <translation id="5869029295770560994">Iawn, Rwy'n Deall</translation>
 <translation id="5871497086027727873">Cafodd 1 eitem ei symud</translation>
@@ -653,6 +663,7 @@
 <translation id="6152406514676263192">Cysonwch i gael y cynnwys mwyaf perthnasol yn seiliedig ar eich diddordebau.</translation>
 <translation id="6159839020698489198">dewisol</translation>
 <translation id="6165508094623778733">Dysgu rhagor</translation>
+<translation id="6170450281939467187">Cyfieithu Wedi Methu</translation>
 <translation id="6177442314419606057">Chwilio yn Chrome</translation>
 <translation id="6184086493125982861">Dangos Tabiau</translation>
 <translation id="6187302354554850004">Cysonwyd ddiwethaf: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +699,7 @@
 <translation id="6374469231428023295">Rhoi cynnig arall arni</translation>
 <translation id="6377118281273296434">Diogelwch Gwefan</translation>
 <translation id="6380866119319257197">Os byddwch yn anghofio'ch cyfrinymadrodd neu eisiau newid y gosodiad hwn, bydd angen i chi <ph name="BEGIN_LINK" />ailosod cysoni<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Agor Lleoliad…</translation>
 <translation id="6387994324662817823">Mae cyfrineiriau'n cael eu cadw i Rheolwr Cyfrineiriau Google ar y ddyfais hon yn unig.</translation>
 <translation id="6389470377220713856">Enw ar y Cerdyn</translation>
 <translation id="6403371459378431832">Cysoni eich data ar bob dyfais</translation>
@@ -699,6 +711,7 @@
 Amgryptiwyd eich data â'ch cyfrinair cysoni <ph name="TIME" />. Rhowch eich cyfrinymadrodd i ddechrau cysoni.</translation>
 <translation id="6418346271604475326">Wrthi'n paratoi PDF</translation>
 <translation id="6434591244308415567">Bu gwall. Rhowch gynnig arall arni'n nes ymlaen.</translation>
+<translation id="6435236283694032571">Ychwanegu at y Rhestr Ddarllen</translation>
 <translation id="6439338047467462846">Caniatáu Pob Un</translation>
 <translation id="6445051938772793705">Gwlad</translation>
 <translation id="6445981559479772097">Anfonwyd y neges.</translation>
@@ -863,6 +876,7 @@
 <translation id="7701040980221191251">Dim</translation>
 <translation id="7720410380936703141">RHOI CYNNIG ARALL ARNI</translation>
 <translation id="7726702057919861819">Dewislen → Hanes → Clirio Data Pori</translation>
+<translation id="7738120385185846461">Adrodd am broblem…</translation>
 <translation id="7741325291586284254">Tudalen Tab Anhysbys Newydd</translation>
 <translation id="7756478488453921771">Dewislen → Gosodiadau → Dulliau Talu</translation>
 <translation id="7765158879357617694">Symud</translation>
@@ -957,6 +971,7 @@
 <translation id="8459333855531264009">Ddim yn Ddiogel</translation>
 <translation id="8487667956631253959">Ymlaen</translation>
 <translation id="8487700953926739672">Ar gael all-lein</translation>
+<translation id="8488923644885757471">Ffenestr Newydd</translation>
 <translation id="8490978609246021741">Cadw'r newidiadau</translation>
 <translation id="8503813439785031346">Enw defnyddiwr</translation>
 <translation id="850600235656508448">Agor yn y Modd Anhysbys</translation>
@@ -1009,6 +1024,7 @@
 <translation id="8881801611828450202">Chwilio <ph name="SEARCH_ENGINE" /> ar gyfer y Llun Hwn</translation>
 <translation id="8891935667620843985">Gallwch agor dolenni yn Chrome yn awtomatig drwy ei osod fel eich Ap Porwr Diofyn.</translation>
 <translation id="8898822736010347272">Yn anfon cyfeiriadau URL o rai tudalennau rydych yn ymweld â nhw, gwybodaeth system gyfyngedig, a rhywfaint o gynnwys tudalen at Google, i helpu i ddarganfod bygythiadau newydd ac i amddiffyn pawb ar y we.</translation>
+<translation id="890565330728586731">Nôl</translation>
 <translation id="8909135823018751308">Rhannu…</translation>
 <translation id="8911759861431145525">Tapiwch Ychwanegu yna Rhowch Eich Gwybodaeth</translation>
 <translation id="891658175948553296">Amlygu Testun ar Wefan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index af1aaa0..9554f652 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">Αναζήτηση για ${searchPhrase} στο Chrome</translation>
 <translation id="1242044645101871359">Συνδεθείτε ξανά</translation>
 <translation id="1254117744268754948">Επιλογή φακέλου</translation>
+<translation id="1254424942107648268">Εύρεση προηγούμενου</translation>
 <translation id="1258491128795710625">Τι νέο υπάρχει</translation>
 <translation id="1265739287306757398">Μάθετε με ποιον τρόπο</translation>
 <translation id="1272079795634619415">Διακοπή</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">Έχετε ήδη αποθηκεύσει έναν κωδικό πρόσβασης για τον ιστότοπο <ph name="WEBSITE" /></translation>
 <translation id="2476359652512522418">Δεν έχει επιλεγεί</translation>
 <translation id="2482878487686419369">Ειδοποιήσεις</translation>
+<translation id="2496626742194544812">Μετάβαση στην πρώτη καρτέλα</translation>
 <translation id="2500374554657206846">Επιλογές για την αποθήκευση κωδικού πρόσβασης</translation>
 <translation id="2523363575747517183">Αυτός ο ιστότοπος προσπαθεί επανειλημμένως να ανοίξει κάποια άλλη εφαρμογή.</translation>
 <translation id="2529021024822217800">Άνοιγμα όλων</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">Χρησιμοποιούνται cookie</translation>
 <translation id="2648803196158606475">Διαγραφή αναγνωσμένων</translation>
 <translation id="2653659639078652383">Υποβολή</translation>
+<translation id="2664621323652615289">Διακοπή</translation>
 <translation id="2671426118752779020">Μπορείτε να χρησιμοποιείτε τους κωδικούς πρόσβασης που αποθηκεύσατε στον Διαχειριστή κωδικών πρόσβασης Google σε άλλες εφαρμογές στο iPhone.</translation>
 <translation id="2690858294534178585">Η κάμερα χρησιμοποιείται</translation>
 <translation id="2691653761409724435">Μη διαθέσιμο εκτός σύνδεσης</translation>
@@ -356,6 +359,7 @@
 <translation id="380329542618494757">Όνομα</translation>
 <translation id="3803696231112616155">Πρόταση για μετάφραση αυτού του ιστοτόπου</translation>
 <translation id="3810973564298564668">Διαχείριση</translation>
+<translation id="3818293389945649617">Εύρεση επόμενου</translation>
 <translation id="3819183753496523827">Είστε εκτός σύνδεσης. Ελέγξτε τη σύνδεσή σας στο διαδίκτυο και δοκιμάστε ξανά.</translation>
 <translation id="385051799172605136">Πίσω</translation>
 <translation id="3858860766373142691">Όνομα</translation>
@@ -385,6 +389,7 @@
 <translation id="4049507953662678203">Βεβαιωθείτε ότι έχετε μια σύνδεση δικτύου και δοκιμάστε ξανά.</translation>
 <translation id="4063300985191096908">Μετάβαση στη Ροή</translation>
 <translation id="408404951701638773">Η πρόσβαση στη γραμμή αναζήτησης είναι πλέον πιο εύκολη</translation>
+<translation id="4092655288299341041">Εμφάνιση βοήθειας</translation>
 <translation id="4108998448622696017">Εντοπίζει και σας προειδοποιεί για επικίνδυνα συμβάντα, όταν αυτά εμφανίζονται.</translation>
 <translation id="411254640334432676">Αποτυχία λήψης.</translation>
 <translation id="4112644173421521737">Αναζήτηση</translation>
@@ -771,6 +776,7 @@
 <translation id="6859944681507688231">Για να σαρώσετε έναν κώδικα QR, ή μια πιστωτική κάρτα, ενεργοποιήστε την κάμερα από τις ρυθμίσεις.</translation>
 <translation id="6867369562105931222">κωδικός πρόσβασης</translation>
 <translation id="6869389390665537774">Μπορείτε να δείτε τις σελίδες που έχετε επισκεφτεί ή να τις διαγράψετε από το ιστορικό σας.</translation>
+<translation id="687135068089457384">Προβολή ρυθμίσεων</translation>
 <translation id="6873263987691478642">Προβολή διαχωρισμού οθόνης</translation>
 <translation id="6882836635272038266">Βασική προστασία από ιστοτόπους, λήψεις και επεκτάσεις που είναι γνωστό ότι είναι επικίνδυνα.</translation>
 <translation id="6888009575607455378">Είστε βέβαιοι ότι θέλετε να απορρίψετε τις αλλαγές σας;</translation>
@@ -876,11 +882,13 @@
 <translation id="7807060072011926525">Παρέχεται από την Google</translation>
 <translation id="7839985698273989086">Σελίδα εκτός σύνδεσης</translation>
 <translation id="7840771868269352570">Τα στοιχεία που επιλέξατε θα καταργηθούν.</translation>
+<translation id="7845466610722898">Εμφάνιση λίστας ανάγνωσης</translation>
 <translation id="784551991304901159">Για εμφάνιση περιεχομένου, από το μενού, επιλέξτε Ενεργοποίηση</translation>
 <translation id="7853202427316060426">Δραστηριότητα</translation>
 <translation id="7856733331829174190">Δεν ήταν δυνατή η λήψη</translation>
 <translation id="785938070103630874">Ανοίξτε τους κωδικούς πρόσβασης, τους τρόπους πληρωμής, τη διεύθυνση και άλλα</translation>
 <translation id="7859704718976024901">Ιστορικό περιήγησης</translation>
+<translation id="7879275349003161544">Εμφάνιση λήψεων</translation>
 <translation id="7884694604461143138">Ιστορικό αναζήτησης (Βρέθηκαν <ph name="COUNT" />)</translation>
 <translation id="7887198238286927132">Προκειμένου να προστατεύσει το απόρρητό σας, το Chrome δεν θα συμπληρώνει αυτόματα αυτό το πεδίο.</translation>
 <translation id="7911190106180361398">Ο οργανισμός σας δεν σας επιτρέπει τον συγχρονισμό όλων των δεδομένων.</translation>
@@ -992,6 +1000,7 @@
 <translation id="8741995161408053644">Ο Λογαριασμός σας Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
 <translation id="8750037785291841318">Εδώ θα βρείτε τις καρτέλες σας</translation>
 <translation id="8756969031206844760">Ενημέρωση κωδικού πρόσβασης;</translation>
+<translation id="8763613688786959833">Μετάβαση στην τελευταία καρτέλα</translation>
 <translation id="8764015330924122850">Κατάργηση παρακολούθησης <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">Μη έγκυρη διεύθ. URL</translation>
 <translation id="8787968206789828143">Αναζήτηση στον ιστό</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 8d60dcce..74a6035 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">پیوند ایجاد نمی‌شود</translation>
 <translation id="2786701870377699570">جستجوی برگه‌ها از همه دستگاه‌های همگام‌سازی‌شده</translation>
+<translation id="2797029671965852011">نمایش سابقه</translation>
 <translation id="2800683595868705743">از تعویض‌کننده برگه خارج شوید</translation>
 <translation id="2815198996063984598">۲. روی برنامه مرور پیش‌فرض ضربه بزنید</translation>
 <translation id="2820289420301699633">‏سرپرستتان Chrome را کنترل می‌کند و می‌تواند به داده‌های آن دسترسی داشته باشد</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">برگه‌های باز و اخیراً بسته‌شده را سریع در دستگاه‌های همگام‌سازی‌شده پیدا کنید.</translation>
 <translation id="3533202363250687977">بستن همه برگه‌های حالت ناشناس</translation>
 <translation id="3533436815740441613">برگه جدید</translation>
+<translation id="3540141921715814660">افزودن به نشانک‌ها</translation>
 <translation id="3551320343578183772">بستن برگه</translation>
+<translation id="3565207542107370586">پاک کردن داده‌های مرور…</translation>
 <translation id="3575234738189584619">جستجو با «لنز»</translation>
 <translation id="3581564640715911333">پیشنهاد ترجمه صفحات نوشته‌شده به زبان‌های دیگر</translation>
 <translation id="3588820906588687999">باز کردن تصویر در برگه جدید</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">جستجوهای پرطرفدار</translation>
 <translation id="3740397331642243698">‏نشانی‌های واردشده را در Google Chrome در حالت «ناشناس» باز می‌کند.</translation>
 <translation id="3762232513783804601">‏ساخته‌شده برای iPad شما</translation>
+<translation id="3768725474733206671">باز کردن مجدد آخرین برگه بسته‌شده</translation>
 <translation id="3771033907050503522">برگه‌های ناشناس</translation>
 <translation id="3775743491439407556">همگام‌سازی کار نمی‌کند</translation>
 <translation id="3779810277399252432">اتصال اینترنتی ندارید</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">پیشنهاد ترجمه این سایت</translation>
 <translation id="3810973564298564668">مدیریت</translation>
 <translation id="3819183753496523827">آفلاین هستید. اتصال اینترنت را بررسی کنید و دوباره امتحان کنید.</translation>
+<translation id="3835964409414434850">رفتن به برگه بعدی</translation>
 <translation id="385051799172605136">بازگشت</translation>
 <translation id="3858860766373142691">نام</translation>
 <translation id="3861486700625780712">لغو دنبال کردن</translation>
+<translation id="387280738075653372">‏در اینجا Chrome را بارگیری کنید.</translation>
 <translation id="3892144330757387737">سابقه را اینجا خواهید دید</translation>
 <translation id="3897092660631435901">منو</translation>
 <translation id="3904829425754749514">سازمانتان همگام‌سازی را خاموش کرده است. همچنان می‌توانید نشانک‌ها، سابقه، گذرواژه‌ها، و دیگر تنظیماتتان را در این دستگاه ببینید. اگر تغییری ایجاد کنید، با حسابتان همگام‌سازی نمی‌شود.</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">نمایش</translation>
 <translation id="5317780077021120954">ذخیره</translation>
 <translation id="5339316356165661760">روشن کردن همگام‌سازی</translation>
+<translation id="536067926684072644">نمایش نشانک‌ها</translation>
 <translation id="5360976571138293719">‏برای تنظیمات بیشتر مرتبط با حریم خصوصی، امنیت، و جمع‌آوری داده، <ph name="BEGIN_LINK" />سرویس‌های Google<ph name="END_LINK" /> را ببینید.</translation>
 <translation id="5386314158584363703">سایت‌هایی را که دنبال کرده‌اید اینجا خواهید دید</translation>
 <translation id="5388358297987318779">بازکردن تصویر</translation>
@@ -577,6 +584,7 @@
 <translation id="5631164295104953411">افزودن روش پرداخت</translation>
 <translation id="5636282538000367086">‏با تازه‌های Chrome آشنا شوید</translation>
 <translation id="5652623411397330904">محصولاتی که پیگیری می‌کنید اینجا نمایش داده می‌شوند.</translation>
+<translation id="5657859710142657190">رفتن به شبکه برگه</translation>
 <translation id="5659593005791499971">ایمیل</translation>
 <translation id="5669335982068190158">‏به‌عنوان بخشی از بازنشانی iPhone، از سیستم خارج شده‌اید. برای ورود به سیستم، روی Continue (ادامه) در زیر ضربه بزنید.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +601,7 @@
 <translation id="5737974891429562743">جزئیات ورود به سیستم قدیمی است. برای شروع همگام‌سازی، به‌روزرسانی کنید.</translation>
 <translation id="5738385766833540397">مدیریت نحوه دریافت هشدارهای کاهش قیمت برای محصولاتی که ردیابی می‌کنید</translation>
 <translation id="5738887413654608789">با این کار می‌توانید صفحه‌های وب مرتبط را براساس محیط اطرافتان کاوش کنید.</translation>
+<translation id="5745916533876677730">رفتن به برگه قبلی</translation>
 <translation id="5758631781033351321">فهرست مطالعه را اینجا خواهید دید</translation>
 <translation id="5765456154762864099">منو ← تنظیمات ← مرورگر پیش‌فرض</translation>
 <translation id="5782227691023083829">در حال ترجمه...</translation>
@@ -609,6 +618,7 @@
 <translation id="5857090052475505287">پوشهٔ جدید</translation>
 <translation id="5857675236236529683">هروقت آماده بودید، فهرست خواندنتان را اینجا پیدا کنید</translation>
 <translation id="5857770089550859117">برای شروع همگام‌سازی به گذرعبارت نیاز است.</translation>
+<translation id="5859715514067755465">بازارسال</translation>
 <translation id="5860033963881614850">خاموش</translation>
 <translation id="5869029295770560994">بله متوجه شدم</translation>
 <translation id="5871497086027727873">۱ مورد منتقل شد</translation>
@@ -653,6 +663,7 @@
 <translation id="6152406514676263192">برای دریافت مرتبط‌ترین محتوا براساس علایقتان، همگام‌سازی کنید.</translation>
 <translation id="6159839020698489198">اختیاری</translation>
 <translation id="6165508094623778733">بیشتر بدانید</translation>
+<translation id="6170450281939467187">ترجمه نشد</translation>
 <translation id="6177442314419606057">‏جستجو در Chrome</translation>
 <translation id="6184086493125982861">نمایش برگه‌ها</translation>
 <translation id="6187302354554850004">آخرین همگام‌سازی: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +699,7 @@
 <translation id="6374469231428023295">دوباره امتحان کنید</translation>
 <translation id="6377118281273296434">امنیت سایت</translation>
 <translation id="6380866119319257197">اگر گذرعبارت را فراموش کردید یا می‌خواهید این تنظیم را تغییر دهید، <ph name="BEGIN_LINK" />همگام‌سازی را بازنشانی کنید<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">باز کردن مکان…</translation>
 <translation id="6387994324662817823">‏گذرواژه‌ها فقط در «مدیر گذرواژه Google» در این دستگاه ذخیره می‌شوند.</translation>
 <translation id="6389470377220713856">نام روی کارت</translation>
 <translation id="6403371459378431832">داده‌هایتان را در همه دستگاه‌ها همگام‌سازی کنید</translation>
@@ -699,6 +711,7 @@
 داده‌های شما در تاریخ <ph name="TIME" /> با گذرعبارت همگام‌سازی‌تان رمزگذاری شد. برای شروع همگام‌سازی آن را وارد کنید.</translation>
 <translation id="6418346271604475326">‏آماده‌سازی PDF</translation>
 <translation id="6434591244308415567">خطایی روی داد. بعداً دوباره امتحان کنید.</translation>
+<translation id="6435236283694032571">افزودن به فهرست خواندن</translation>
 <translation id="6439338047467462846">همه مجاز</translation>
 <translation id="6445051938772793705">کشور</translation>
 <translation id="6445981559479772097">پیام ارسال شد.</translation>
@@ -863,6 +876,7 @@
 <translation id="7701040980221191251">هیچ‌کدام</translation>
 <translation id="7720410380936703141">امتحان مجدد</translation>
 <translation id="7726702057919861819">منو ← سابقه ← پاک کردن داده‌های مرور</translation>
+<translation id="7738120385185846461">گزارش مشکل…</translation>
 <translation id="7741325291586284254">صفحه برگه ناشناس جدید</translation>
 <translation id="7756478488453921771">منو ← تنظیمات ← روش‌های پرداخت</translation>
 <translation id="7765158879357617694">انتقال</translation>
@@ -957,6 +971,7 @@
 <translation id="8459333855531264009">امن نیست</translation>
 <translation id="8487667956631253959">فعال</translation>
 <translation id="8487700953926739672">امکان دسترسی به صورت آفلاین</translation>
+<translation id="8488923644885757471">پنجره جدید</translation>
 <translation id="8490978609246021741">ذخیره تغییرات</translation>
 <translation id="8503813439785031346">نام کاربری</translation>
 <translation id="850600235656508448">باز کردن در حالت ناشناس</translation>
@@ -1009,6 +1024,7 @@
 <translation id="8881801611828450202">جستجوی <ph name="SEARCH_ENGINE" /> برای این تصویر</translation>
 <translation id="8891935667620843985">‏با تنظیم Chrome به‌عنوان «برنامه مرورگر پیش‌فرض» می‌توانید پیوندها را به‌طور خودکار در آن باز کنید.</translation>
 <translation id="8898822736010347272">‏نشانی‌های وب بعضی از صفحه‌هایی که بازدید می‌کنید، اطلاعات محدودی از سیستم، و برخی از محتوای صفحه را به Google ارسال می‌کند تا به کشف تهدیدهای جدید و محافظت از همه افراد در وب کمک کند.</translation>
+<translation id="890565330728586731">برگشت</translation>
 <translation id="8909135823018751308">اشتراک‌گذاری‌...</translation>
 <translation id="8911759861431145525">روی «افزودن» و سپس «وارد کردن اطلاعاتتان» ضربه بزنید</translation>
 <translation id="891658175948553296">نوشتار سایت‌ها برجسته کنید</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
index cf416490c..a12525c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr-CA.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">Rechercher ${searchPhrase} dans Chrome</translation>
 <translation id="1242044645101871359">Reconnectez-vous</translation>
 <translation id="1254117744268754948">Sélectionner un dossier</translation>
+<translation id="1254424942107648268">Trouver le précédent</translation>
 <translation id="1258491128795710625">Nouveautés</translation>
 <translation id="1265739287306757398">Découvrir comment</translation>
 <translation id="1272079795634619415">Arrêter</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">Vous avez déjà enregistré un mot de passe pour le site <ph name="WEBSITE" /></translation>
 <translation id="2476359652512522418">Non sélectionné</translation>
 <translation id="2482878487686419369">Notifications</translation>
+<translation id="2496626742194544812">Aller au premier onglet</translation>
 <translation id="2500374554657206846">Options d'enregistrement des mots de passe</translation>
 <translation id="2523363575747517183">Ce site Web a tenté plusieurs fois d'ouvrir une autre application.</translation>
 <translation id="2529021024822217800">Tout ouvrir</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">Témoins en cours d'utilisation</translation>
 <translation id="2648803196158606475">Supprimer les éléments lus</translation>
 <translation id="2653659639078652383">Envoyer</translation>
+<translation id="2664621323652615289">Arrêter</translation>
 <translation id="2671426118752779020">Vous pouvez utiliser les mots de passe que vous avez enregistrés dans le gestionnaire de mots de passe Google pour d'autres applications sur votre iPhone.</translation>
 <translation id="2690858294534178585">La caméra est en cours d'utilisation</translation>
 <translation id="2691653761409724435">Indisponible hors ligne</translation>
@@ -356,6 +359,7 @@
 <translation id="380329542618494757">Nom</translation>
 <translation id="3803696231112616155">Offrir de traduire ce site</translation>
 <translation id="3810973564298564668">Gérer</translation>
+<translation id="3818293389945649617">Rechercher le suivant</translation>
 <translation id="3819183753496523827">Vous êtes hors ligne. Vérifiez votre connexion Internet et réessayez.</translation>
 <translation id="385051799172605136">Retour</translation>
 <translation id="3858860766373142691">Nom</translation>
@@ -385,6 +389,7 @@
 <translation id="4049507953662678203">Assurez-vous d'avoir une connexion réseau et réessayez.</translation>
 <translation id="4063300985191096908">Accéder au flux</translation>
 <translation id="408404951701638773">La barre de recherche est désormais plus facile à atteindre</translation>
+<translation id="4092655288299341041">Afficher l'aide</translation>
 <translation id="4108998448622696017">Il détecte les événements dangereux et vous en informe lorsqu'ils surviennent.</translation>
 <translation id="411254640334432676">Échec du téléchargement.</translation>
 <translation id="4112644173421521737">Rechercher</translation>
@@ -770,6 +775,7 @@
 <translation id="6859944681507688231">Pour numériser un code QR ou une carte de crédit, activez l'appareil photo dans les paramètres.</translation>
 <translation id="6867369562105931222">mot de passe</translation>
 <translation id="6869389390665537774">Vous pouvez voir les pages que vous avez visitées ou les effacer de votre historique</translation>
+<translation id="687135068089457384">Afficher les paramètres</translation>
 <translation id="6873263987691478642">Vue partagée</translation>
 <translation id="6882836635272038266">Protection standard contre les sites Web, les téléchargements et les extensions qui sont réputés être dangereux.</translation>
 <translation id="6888009575607455378">Voulez-vous vraiment supprimer les modifications?</translation>
@@ -875,11 +881,13 @@
 <translation id="7807060072011926525">Fourni par Google</translation>
 <translation id="7839985698273989086">Page hors ligne</translation>
 <translation id="7840771868269352570">Les éléments sélectionnés seront supprimés.</translation>
+<translation id="7845466610722898">Afficher la liste de lecture</translation>
 <translation id="784551991304901159">Pour afficher du contenu, sélectionnez Activer dans le menu</translation>
 <translation id="7853202427316060426">Activité</translation>
 <translation id="7856733331829174190">Échec du téléchargement</translation>
 <translation id="785938070103630874">Ouvrir les mots de passe, les modes de paiement, l'adresse et plus</translation>
 <translation id="7859704718976024901">Historique de navigation</translation>
+<translation id="7879275349003161544">Afficher les téléchargements</translation>
 <translation id="7884694604461143138">Historique de recherche (<ph name="COUNT" /> éléments trouvés)</translation>
 <translation id="7887198238286927132">Afin de protéger votre confidentialité, Chrome ne remplira pas automatiquement ce champ.</translation>
 <translation id="7911190106180361398">Votre organisation ne vous autorise pas à tout synchroniser.</translation>
@@ -991,6 +999,7 @@
 <translation id="8741995161408053644">D'autres formes d'historique de navigation peuvent exister sur votre compte Google : <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
 <translation id="8750037785291841318">Vous trouverez vos onglets ici</translation>
 <translation id="8756969031206844760">Mettre à jour le mot de passe?</translation>
+<translation id="8763613688786959833">Aller au dernier onglet</translation>
 <translation id="8764015330924122850">Se désabonner de <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">URL non valide</translation>
 <translation id="8787968206789828143">Recherchez sur le Web</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 6182f57..9d243605 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">Pretraži ${searchPhrase} u Chromeu</translation>
 <translation id="1242044645101871359">Prijavite se ponovo</translation>
 <translation id="1254117744268754948">Odabir mape</translation>
+<translation id="1254424942107648268">Traži prethodno</translation>
 <translation id="1258491128795710625">Što je novo</translation>
 <translation id="1265739287306757398">Saznajte kako</translation>
 <translation id="1272079795634619415">Zaustavi</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">Već ste spremili zaporku za web-lokaciju <ph name="WEBSITE" /></translation>
 <translation id="2476359652512522418">Nije odabrano</translation>
 <translation id="2482878487686419369">Obavijesti</translation>
+<translation id="2496626742194544812">Idi na prvu karticu</translation>
 <translation id="2500374554657206846">Opcije za spremanje zaporki</translation>
 <translation id="2523363575747517183">Ova web-lokacija opetovano pokušava otvoriti neku drugu aplikaciju.</translation>
 <translation id="2529021024822217800">Otvori sve</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">Upotreba kolačića</translation>
 <translation id="2648803196158606475">Izbriši pročitano</translation>
 <translation id="2653659639078652383">Pošalji</translation>
+<translation id="2664621323652615289">Zaustavi</translation>
 <translation id="2671426118752779020">Zaporke koje ste spremili u Google upravitelj zaporki možete koristiti u drugim aplikacijama na iPhoneu.</translation>
 <translation id="2690858294534178585">Fotoaparat je aktivan</translation>
 <translation id="2691653761409724435">Nije dostupno offline</translation>
@@ -226,6 +229,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Izrada veze nije uspjela</translation>
 <translation id="2786701870377699570">Pretražujte kartice na sinkroniziranim uređajima</translation>
+<translation id="2797029671965852011">Prikaži povijest</translation>
 <translation id="2800683595868705743">Zatvori prekidač za prebacivanje između kartica</translation>
 <translation id="2815198996063984598">2. Dodirnite opciju Zadana aplikacija preglednika</translation>
 <translation id="2820289420301699633">Vaš administrator ima kontrolu nad Chromeom i može pristupiti njegovim podacima</translation>
@@ -328,7 +332,9 @@
 <translation id="3530206579861815432">Brzo pronađite otvorene i nedavno zatvorene kartice na svim sinkroniziranim uređajima.</translation>
 <translation id="3533202363250687977">Zatvori sve anonimne kartice</translation>
 <translation id="3533436815740441613">Nova kartica</translation>
+<translation id="3540141921715814660">Dodaj u Oznake</translation>
 <translation id="3551320343578183772">Zatvori karticu</translation>
+<translation id="3565207542107370586">Brisanje podataka o pregledavanju…</translation>
 <translation id="3575234738189584619">Pretraživanje pomoću Objektiva</translation>
 <translation id="3581564640715911333">Ponudi prevođenje stranica na druge jezike</translation>
 <translation id="3588820906588687999">Otvori sliku u novoj kartici</translation>
@@ -347,6 +353,7 @@
 <translation id="37207012422556617">Pretraživanje u trendu</translation>
 <translation id="3740397331642243698">Unesene URL-ove otvara u Google Chromeu u anonimnom načinu.</translation>
 <translation id="3762232513783804601">Razvijeno za vaš iPad</translation>
+<translation id="3768725474733206671">Ponovno otvori posljednju zatvorenu karticu</translation>
 <translation id="3771033907050503522">Anonimne kartice</translation>
 <translation id="3775743491439407556">Sinkronizacija ne funkcionira</translation>
 <translation id="3779810277399252432">Nema internetske veze.</translation>
@@ -356,10 +363,13 @@
 <translation id="380329542618494757">Ime</translation>
 <translation id="3803696231112616155">Ponudi prevođenje ove web-lokacije</translation>
 <translation id="3810973564298564668">Upravljanje</translation>
+<translation id="3818293389945649617">Traži sljedeće</translation>
 <translation id="3819183753496523827">Niste povezani s internetom. Provjerite internetsku vezu i pokušajte ponovo.</translation>
+<translation id="3835964409414434850">Prelazak na sljedeću karticu</translation>
 <translation id="385051799172605136">Natrag</translation>
 <translation id="3858860766373142691">Naziv</translation>
 <translation id="3861486700625780712">Prestani pratiti</translation>
+<translation id="387280738075653372">Ovdje preuzmite Chrome.</translation>
 <translation id="3892144330757387737">Ovdje ćete pronaći svoju povijest</translation>
 <translation id="3897092660631435901">Izbornik</translation>
 <translation id="3904829425754749514">Vaša je organizacija isključila sinkronizaciju. Vaše oznake, povijest, zaporke i druge postavke i dalje su vam vidljive na ovom uređaju. Ako nešto promijenite, te se promjene neće sinkronizirati s vašim računom.</translation>
@@ -385,6 +395,7 @@
 <translation id="4049507953662678203">Provjerite mrežnu vezu i pokušajte ponovo.</translation>
 <translation id="4063300985191096908">Otvori feed</translation>
 <translation id="408404951701638773">Traku za pretraživanje sada je lakše dohvatiti</translation>
+<translation id="4092655288299341041">Prikaži pomoć</translation>
 <translation id="4108998448622696017">Otkriva opasne događaje i upozorava vas na njih kada se dogode.</translation>
 <translation id="411254640334432676">Preuzimanje nije uspjelo.</translation>
 <translation id="4112644173421521737">Pretraži</translation>
@@ -545,6 +556,7 @@
 <translation id="5300589172476337783">Prikaži</translation>
 <translation id="5317780077021120954">Spremi</translation>
 <translation id="5339316356165661760">Uključi sinkronizaciju</translation>
+<translation id="536067926684072644">Prikaži oznake</translation>
 <translation id="5360976571138293719">Više postavki koje se odnose na privatnost, sigurnost i prikupljanje podataka dostupno je u odjeljku <ph name="BEGIN_LINK" />Googleove usluge<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Ovdje ćete pronaći praćene web-lokacije</translation>
 <translation id="5388358297987318779">Otvori sliku</translation>
@@ -577,6 +589,7 @@
 <translation id="5631164295104953411">Dodajte način plaćanja</translation>
 <translation id="5636282538000367086">Saznajte što je novo u Chromeu</translation>
 <translation id="5652623411397330904">Ovdje će se prikazivati proizvodi koje pratite.</translation>
+<translation id="5657859710142657190">Idite na rešetku kartica</translation>
 <translation id="5659593005791499971">e-pošta</translation>
 <translation id="5669335982068190158">Odjavljeni ste pri vraćanju iPhonea na zadano. U nastavku dodirnite Nastavi da biste se prijavili.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +606,7 @@
 <translation id="5737974891429562743">Pojedinosti prijave na račun su zastarjele. Ažurirajte ih da biste pokrenuli sinkronizaciju.</translation>
 <translation id="5738385766833540397">Upravljajte načinom na koji primate upozorenja o sniženju cijena za proizvode koje pratite</translation>
 <translation id="5738887413654608789">To vam omogućuje da otkrijete relevantne web-stranice na temelju svojeg okruženja.</translation>
+<translation id="5745916533876677730">Povratak na prethodnu karticu</translation>
 <translation id="5758631781033351321">Ovdje ćete pronaći svoj popis za čitanje</translation>
 <translation id="5765456154762864099">Izbornik → Postavke → Zadani preglednik</translation>
 <translation id="5782227691023083829">Prijevod u tijeku...</translation>
@@ -609,6 +623,7 @@
 <translation id="5857090052475505287">Nova mapa</translation>
 <translation id="5857675236236529683">Kad budete spremni, ovdje pronađite popis za čitanje</translation>
 <translation id="5857770089550859117">Za pokretanje sinkronizacije potrebna je zaporka.</translation>
+<translation id="5859715514067755465">Unaprijed</translation>
 <translation id="5860033963881614850">Isključeno</translation>
 <translation id="5869029295770560994">U redu, shvaćam</translation>
 <translation id="5871497086027727873">Premještena je 1 stavka</translation>
@@ -653,6 +668,7 @@
 <translation id="6152406514676263192">Omogućite sinkronizaciju da biste dobivali najrelevantniji sadržaj na temelju svojih interesa.</translation>
 <translation id="6159839020698489198">nije obavezno</translation>
 <translation id="6165508094623778733">Saznajte više</translation>
+<translation id="6170450281939467187">Prijevod nije uspio</translation>
 <translation id="6177442314419606057">Pretraživanje u Chromeu</translation>
 <translation id="6184086493125982861">Prikaz kartica</translation>
 <translation id="6187302354554850004">Posljednja sinkr.: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +704,7 @@
 <translation id="6374469231428023295">Pokušaj ponovo</translation>
 <translation id="6377118281273296434">Sigurnost web-lokacije</translation>
 <translation id="6380866119319257197">Ako zaboravite šifru ili želite promijeniti tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Otvori lokaciju…</translation>
 <translation id="6387994324662817823">Zaporke se spremaju u Google upravitelj zaporki samo na ovom uređaju.</translation>
 <translation id="6389470377220713856">Ime na kartici</translation>
 <translation id="6403371459378431832">Sinkronizirajte svoje podatke na svim uređajima</translation>
@@ -699,6 +716,7 @@
 Vaši su podaci šifrirani vašom šifrom za sinkronizaciju <ph name="TIME" />. Unesite je da biste pokrenuli sinkronizaciju.</translation>
 <translation id="6418346271604475326">Priprema PDF-a</translation>
 <translation id="6434591244308415567">Došlo je do pogreške. Pokušajte ponovo kasnije.</translation>
+<translation id="6435236283694032571">Dodaj na popis za čitanje</translation>
 <translation id="6439338047467462846">Dopusti sve</translation>
 <translation id="6445051938772793705">Država</translation>
 <translation id="6445981559479772097">Poruka je poslana.</translation>
@@ -770,6 +788,7 @@
 <translation id="6859944681507688231">Da biste skenirali QR kôd ili kreditnu karticu, omogućite kameru u postavkama.</translation>
 <translation id="6867369562105931222">zaporka</translation>
 <translation id="6869389390665537774">Možete pogledati stranice koje ste posjetili ili ih izbrisati iz povijesti</translation>
+<translation id="687135068089457384">Prikaži postavke</translation>
 <translation id="6873263987691478642">Podijeljeni prikaz</translation>
 <translation id="6882836635272038266">Standardna zaštita od web-lokacija, preuzimanja i proširenja za koje je poznato da su opasna.</translation>
 <translation id="6888009575607455378">Jeste li sigurni da želite odbaciti promjene?</translation>
@@ -863,6 +882,7 @@
 <translation id="7701040980221191251">Nema ih</translation>
 <translation id="7720410380936703141">PONOVI</translation>
 <translation id="7726702057919861819">Izbornik → Povijest → Brisanje podataka o pregledavanju</translation>
+<translation id="7738120385185846461">Prijavite problem…</translation>
 <translation id="7741325291586284254">Stranica nove anonimne kartice</translation>
 <translation id="7756478488453921771">Izbornik → Postavke → Načini plaćanja</translation>
 <translation id="7765158879357617694">Pomakni</translation>
@@ -875,11 +895,13 @@
 <translation id="7807060072011926525">Omogućuje Google</translation>
 <translation id="7839985698273989086">Izvanmrežna stranica</translation>
 <translation id="7840771868269352570">Odabrane će se stavke ukloniti.</translation>
+<translation id="7845466610722898">Prikaži popis za čitanje</translation>
 <translation id="784551991304901159">Za pregled podataka na izborniku odaberite Uključi</translation>
 <translation id="7853202427316060426">Aktivnost</translation>
 <translation id="7856733331829174190">Preuzimanje nije moguće</translation>
 <translation id="785938070103630874">Otvorite zaporke, načine plaćanja ili adresu i drugo</translation>
 <translation id="7859704718976024901">Povijest pregledavanja</translation>
+<translation id="7879275349003161544">Prikaži preuzimanja</translation>
 <translation id="7884694604461143138">Povijest pretraživanja (pronađeno: <ph name="COUNT" />)</translation>
 <translation id="7887198238286927132">Da bi zaštitio vašu privatnost, Chrome neće automatski popuniti ovo polje.</translation>
 <translation id="7911190106180361398">Vaša organizacija ne dopušta da sinkronizirate sve.</translation>
@@ -957,6 +979,7 @@
 <translation id="8459333855531264009">Nije sigurno</translation>
 <translation id="8487667956631253959">Uključeno</translation>
 <translation id="8487700953926739672">Dostupno izvanmrežno</translation>
+<translation id="8488923644885757471">Novi prozor</translation>
 <translation id="8490978609246021741">Spremi promjene</translation>
 <translation id="8503813439785031346">Korisničko ime</translation>
 <translation id="850600235656508448">Otvori u anonimnom načinu</translation>
@@ -991,6 +1014,7 @@
 <translation id="8741995161408053644">Na Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
 <translation id="8750037785291841318">Ovdje ćete pronaći svoje kartice</translation>
 <translation id="8756969031206844760">Želite li ažurirati zaporku?</translation>
+<translation id="8763613688786959833">Idi na zadnju karticu</translation>
 <translation id="8764015330924122850">Prestani pratiti <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">Nevažeći URL</translation>
 <translation id="8787968206789828143">Pretraživanje na webu</translation>
@@ -1009,6 +1033,7 @@
 <translation id="8881801611828450202">Potraži sliku na usluzi <ph name="SEARCH_ENGINE" /></translation>
 <translation id="8891935667620843985">Veze u Chromeu možete otvoriti automatski tako da ga postavite kao zadanu aplikaciju preglednika.</translation>
 <translation id="8898822736010347272">Šalje URL-ove određenih stranica koje posjećujete, ograničene podatke o sustavu i sadržaj određenih stranica Googleu kako bi se pomoglo pri otkrivanju novih prijetnji i kako bi se zaštitili svi korisnici na webu.</translation>
+<translation id="890565330728586731">Natrag</translation>
 <translation id="8909135823018751308">Dijeljenje…</translation>
 <translation id="8911759861431145525">Dodirnite Dodaj, a zatim Unesite podatke</translation>
 <translation id="891658175948553296">Istaknite tekst na web-lokaciji</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index a475eb0c..110428e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -116,6 +116,7 @@
 <translation id="1832848789136765277">同期データに常にアクセスできるようにするには、本人確認を行ってください</translation>
 <translation id="1870148520156231997">パスワードを表示します</translation>
 <translation id="1872096359983322073">照明</translation>
+<translation id="1891796056033961979">保存したブックマーク、パスワード、設定などにこの画面からアクセスできます。</translation>
 <translation id="1911619930368729126">ドライブにアップロード</translation>
 <translation id="1923342640370224680">1 時間以内</translation>
 <translation id="1930989359703290198">組織が特定のアカウントでのログインしか許可していません。許可されていないアカウントは非表示になっています。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
@@ -319,6 +320,7 @@
 <translation id="3533202363250687977">すべてのシークレット タブを閉じる</translation>
 <translation id="3533436815740441613">新しいタブ</translation>
 <translation id="3551320343578183772">タブを閉じる</translation>
+<translation id="3575234738189584619">レンズで検索</translation>
 <translation id="3581564640715911333">他の言語のページで翻訳するかどうかを尋ねる</translation>
 <translation id="3588820906588687999">新しいタブで画像を開く</translation>
 <translation id="3603009562372709545">リンクのURLをコピー</translation>
@@ -482,6 +484,7 @@
 <translation id="4904877109095351937">既読にする</translation>
 <translation id="4908869848243824489">Discover by Google</translation>
 <translation id="4916679969857390442">レンズ</translation>
+<translation id="4922154083994158612">セキュリティを強化しますか?</translation>
 <translation id="4930714375720679147">ON にする</translation>
 <translation id="4941089862236492464">アイテムの共有中に問題が発生しました。</translation>
 <translation id="4944543191714094452">ページ内を検索…</translation>
@@ -805,6 +808,7 @@
 <translation id="7435356471928173109">管理者によってオフにされています</translation>
 <translation id="7438481509621345350">新しいタブを開くと、<ph name="CHANNEL_NAME" /> のストーリーが表示されるようになります。</translation>
 <translation id="7454057999980797137">州/都道府県</translation>
+<translation id="7459628154744868585">保護強化機能がオンになっています</translation>
 <translation id="7464701184726199289">すべてのデバイスから同期データを削除します。保存済みのサイト設定は削除されず、普段の閲覧行動を反映した設定などが残る場合があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
 <translation id="746684838091935575">3.[Chrome] を選択する</translation>
 <translation id="7472734401283673885">会社名</translation>
@@ -984,6 +988,7 @@
 <translation id="9037965129289936994">原文のページを表示</translation>
 <translation id="9039373489628511875">帯域幅</translation>
 <translation id="9055772144595778347">ログインできない</translation>
+<translation id="9055960261314198756">保護強化機能がオフになっています</translation>
 <translation id="9057972802061533987">フォローできません。エラーが発生しました。</translation>
 <translation id="9065203028668620118">編集</translation>
 <translation id="9068336935206019333">シークレット モードの Chrome で開く</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_km.xtb b/ios/chrome/app/strings/resources/ios_strings_km.xtb
index aab9707..0bc1b64 100644
--- a/ios/chrome/app/strings/resources/ios_strings_km.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_km.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">ស្វែងរក ${searchPhrase} នៅក្នុង Chrome</translation>
 <translation id="1242044645101871359">ចូលគណនីម្តងទៀត</translation>
 <translation id="1254117744268754948">ជ្រើសរើសថតឯកសារ</translation>
+<translation id="1254424942107648268">ស្វែងរកលទ្ធផលមុន</translation>
 <translation id="1258491128795710625">អ្វីដែលថ្មី</translation>
 <translation id="1265739287306757398">ស្វែងយល់​អំពី​របៀប</translation>
 <translation id="1272079795634619415">ឈប់</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">អ្នកបាន​រក្សាទុក​ពាក្យសម្ងាត់​សម្រាប់ <ph name="WEBSITE" /> រួចហើយ</translation>
 <translation id="2476359652512522418">មិនបាន​ជ្រើសរើសទេ</translation>
 <translation id="2482878487686419369">ការជូនដំណឹង</translation>
+<translation id="2496626742194544812">ចូលទៅ​ផ្ទាំង​ដំបូង</translation>
 <translation id="2500374554657206846">ជម្រើស​សម្រាប់​រក្សាទុក​ពាក្យសម្ងាត់</translation>
 <translation id="2523363575747517183">គេហទំព័រ​នេះកំពុង​ព្យាយាម​បើកកម្មវិធី​ផ្សេងទៀត​ម្តង​ហើយ​ម្តងទៀត។</translation>
 <translation id="2529021024822217800">បើកទាំងអស់</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">ខូគីកំពុងត្រូវបានប្រើ</translation>
 <translation id="2648803196158606475">លុបធាតុដែលបានអាន</translation>
 <translation id="2653659639078652383">ដាក់ស្នើ</translation>
+<translation id="2664621323652615289">បញ្ឈប់</translation>
 <translation id="2671426118752779020">អ្នកអាចប្រើពាក្យសម្ងាត់ ដែលអ្នកបានរក្សាទុកទៅក្នុងកម្មវិធីគ្រប់គ្រង​ពាក្យសម្ងាត់ Google នៅក្នុងកម្មវិធីផ្សេងទៀតនៅលើ iPhone របស់អ្នក។</translation>
 <translation id="2690858294534178585">កាមេរ៉ាកំពុងត្រូវបានប្រើ</translation>
 <translation id="2691653761409724435">មិន​អាច​ប្រើ​បាន​ពេល​គ្មាន​អ៊ីនធឺណិត</translation>
@@ -356,6 +359,7 @@
 <translation id="380329542618494757">ឈ្មោះ</translation>
 <translation id="3803696231112616155">ផ្ដល់ការបកប្រែ​គេហទំព័រនេះ</translation>
 <translation id="3810973564298564668">គ្រប់គ្រង</translation>
+<translation id="3818293389945649617">ស្វែងរកបន្ទាប់</translation>
 <translation id="3819183753496523827">អ្នក​គ្មាន​អ៊ីនធឺណិត​ទេ។ សូមពិនិត្យមើល​ការតភ្ជាប់អ៊ីនធឺណិត​របស់អ្នក រួចព្យាយាម​ម្ដងទៀត។</translation>
 <translation id="385051799172605136">ថយក្រោយ</translation>
 <translation id="3858860766373142691">ឈ្មោះ</translation>
@@ -385,6 +389,7 @@
 <translation id="4049507953662678203">សូមប្រាកដថាអ្នកមានការតភ្ជាប់បណ្តាញ ហើយសូមព្យាយាមម្តងទៀត។</translation>
 <translation id="4063300985191096908">ចូលទៅកាន់​ព័ត៌មាន</translation>
 <translation id="408404951701638773">ឥឡូវនេះ របារស្វែងរកផ្ដល់ភាពងាយស្រួលក្នុងការចូល​ប្រើជាងមុន</translation>
+<translation id="4092655288299341041">បង្ហាញ​ជំនួយ</translation>
 <translation id="4108998448622696017">រកមើល និងព្រមានអ្នកអំពី​ព្រឹត្តិការណ៍គ្រោះថ្នាក់ នៅពេលព្រឹត្តិការណ៍ទាំងនោះកើតឡើង។</translation>
 <translation id="411254640334432676">ការ​ទាញ​យក​បាន​បរាជ័យ​។</translation>
 <translation id="4112644173421521737">ស្វែងរក</translation>
@@ -770,6 +775,7 @@
 <translation id="6859944681507688231">ដើម្បីស្កេនកូដ QR ឬបណ្ណឥណទាន សូមបើកកាមេរ៉ានៅក្នុងការកំណត់។</translation>
 <translation id="6867369562105931222">ពាក្យសម្ងាត់</translation>
 <translation id="6869389390665537774">អ្នក​អាច​មើលឃើញ​ទំព័រ​ដែលអ្នក​បានចូលមើល ឬ​សម្អាត​ទំព័រទាំងនោះ​ចេញពី​ប្រវត្តិ​របស់អ្នក</translation>
+<translation id="687135068089457384">បង្ហាញ​ការកំណត់</translation>
 <translation id="6873263987691478642">ទិដ្ឋភាពបំបែក</translation>
 <translation id="6882836635272038266">ការការពារស្តង់ដារពីគេហទំព័រ ការទាញយក និងកម្មវិធី​បន្ថែមដែលដឹងថាមានគ្រោះថ្នាក់។</translation>
 <translation id="6888009575607455378">តើអ្នក​ប្រាកដថា​ចង់​លុបចោល​ការផ្លាស់ប្ដូរ​របស់អ្នក​មែនឬ?</translation>
@@ -875,11 +881,13 @@
 <translation id="7807060072011926525">បានផ្ដល់ដោយ Google</translation>
 <translation id="7839985698273989086">ទំព័រ​គ្មានអ៊ីនធឺណិត</translation>
 <translation id="7840771868269352570">ធាតុ​ដែលអ្នក​បាន​ជ្រើសរើស​នឹង​ត្រូវ​បាន​លុបចេញ។</translation>
+<translation id="7845466610722898">បង្ហាញ​បញ្ជីអាន</translation>
 <translation id="784551991304901159">ដើម្បីមើលឃើញខ្លឹមសារ សូមជ្រើសរើស "បើក" ពីម៉ឺនុយ</translation>
 <translation id="7853202427316060426">សកម្មភាព</translation>
 <translation id="7856733331829174190">មិន​អាច​ទាញ​យកបាន​ទេ</translation>
 <translation id="785938070103630874">បើក​ពាក្យសម្ងាត់ វិធីបង់ប្រាក់ ឬអាសយដ្ឋាន និងអ្វីៗជាច្រើនទៀត</translation>
 <translation id="7859704718976024901">ប្រវត្តិរុករក</translation>
+<translation id="7879275349003161544">បង្ហាញការទាញយក​</translation>
 <translation id="7884694604461143138">ប្រវត្តិ​ស្វែងរក (បានរកឃើញ <ph name="COUNT" />)</translation>
 <translation id="7887198238286927132">ដើម្បី​ការពារ​ឯកជនភាព​របស់អ្នក Chrome នឹងមិន​បំពេញ​កន្លែងបញ្ចូល​នេះដោយស្វ័យ​ប្រវត្តិទេ។</translation>
 <translation id="7911190106180361398">ស្ថាប័នរបស់អ្នក​មិនអនុញ្ញាតឱ្យអ្នកធ្វើ​សម​កាល​កម្មអ្វីៗគ្រប់យ៉ាងទេ។</translation>
@@ -991,6 +999,7 @@
 <translation id="8741995161408053644">គណនី Google របស់អ្នកអាចនឹងមានទម្រង់ប្រវត្តិរុករកផ្សេងទៀតនៅ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /></translation>
 <translation id="8750037785291841318">អ្នក​នឹងឃើញ​ផ្ទាំង​របស់អ្នក​នៅទីនេះ</translation>
 <translation id="8756969031206844760">ធ្វើ​បច្ចុប្បន្នភាព​ពាក្យសម្ងាត់?</translation>
+<translation id="8763613688786959833">ចូលទៅ​ផ្ទាំង​ចុងក្រោយ</translation>
 <translation id="8764015330924122850">ឈប់​តាមដាន <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">URL មិនត្រឹមត្រូវ</translation>
 <translation id="8787968206789828143">ស្វែងរកលើអ៊ីនធឺណិត</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
index 9cc777b..fc3dd196 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">ຊອກຫາ ${searchPhrase} ໃນ Chrome</translation>
 <translation id="1242044645101871359">ເຂົ້າສູ່ລະບົບອີກເທື່ອໜຶ່ງ</translation>
 <translation id="1254117744268754948">ເລືອກ​ໂຟລເດີ</translation>
+<translation id="1254424942107648268">ຊອກຫາກ່ອນໜ້ານີ້</translation>
 <translation id="1258491128795710625">ມີຫຍັງໃໝ່</translation>
 <translation id="1265739287306757398">ສຶກສາວິທີການ</translation>
 <translation id="1272079795634619415">ຢຸດ</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">ທ່ານມີລະຫັດຜ່ານທີ່ບັນທຶກໄວ້ສຳລັບ <ph name="WEBSITE" /> ຢູ່ກ່ອນແລ້ວ</translation>
 <translation id="2476359652512522418">ບໍ່ໄດ້ເລືອກ</translation>
 <translation id="2482878487686419369">ການແຈ້ງເຕືອນ</translation>
+<translation id="2496626742194544812">ເຂົ້າໄປແຖບທຳອິດ</translation>
 <translation id="2500374554657206846">ຕົວເລືອກເພື່ອບັນທຶກລະຫັດຜ່ານ</translation>
 <translation id="2523363575747517183">ເວັບໄຊກຳລັງພະຍາຍາມເປີດແອັບພລິເຄຊັນອື່ນຊໍ້າໄປມາຫຼາຍເທື່ອ.</translation>
 <translation id="2529021024822217800">ເປີດທັງຫມົດ</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">ຄຸກກີ້ທີ່ໃຊ້ຢູ່</translation>
 <translation id="2648803196158606475">ລຶບລາຍການທີ່ອ່ານແລ້ວ</translation>
 <translation id="2653659639078652383">ສົ່ງ</translation>
+<translation id="2664621323652615289">ຢຸດ</translation>
 <translation id="2671426118752779020">ທ່ານສາມາດໃຊ້ລະຫັດຜ່ານທີ່ທ່ານບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ໃນແອັບອື່ນຢູ່ iPhone ຂອງທ່ານໄດ້.</translation>
 <translation id="2690858294534178585">ກ້ອງຖ່າຍຮູບຖືກໃຊ້ຢູ່</translation>
 <translation id="2691653761409724435">ບໍ່ສາມາດໃຊ້ໄດ້ແບບອອບລາຍ</translation>
@@ -356,6 +359,7 @@
 <translation id="380329542618494757">ຊື່</translation>
 <translation id="3803696231112616155">ສະເໜີແປເວັບໄຊນີ້</translation>
 <translation id="3810973564298564668">ຈັດການ</translation>
+<translation id="3818293389945649617">ຊອກຫາຕໍ່ໄປ</translation>
 <translation id="3819183753496523827">ທ່ານອອບລາຍຢູ່. ກະລຸນາກວດສອບການເຊື່ອມຕໍ່ອິນເຕີເນັດຂອງທ່ານແລ້ວລອງໃໝ່.</translation>
 <translation id="385051799172605136">ກັບ​ຄືນ​</translation>
 <translation id="3858860766373142691">ຊື່</translation>
@@ -385,6 +389,7 @@
 <translation id="4049507953662678203">ກະລຸນາກວດສອບວ່າທ່ານມີການເຊື່ອມຕໍ່ເຄືອຂ່າຍ ແລ້ວລອງອີກຄັ້ງ.</translation>
 <translation id="4063300985191096908">ໄປຫາຟີດ</translation>
 <translation id="408404951701638773">ດຽວນີ້ເຂົ້າຫາແຖບຊອກຫາໄດ້ງ່າຍກວ່າ</translation>
+<translation id="4092655288299341041">ສະແດງຂໍ້ມູນຊ່ວຍເຫຼືອ</translation>
 <translation id="4108998448622696017">ກວດຫາ ແລະ ເຕືອນທ່ານກ່ຽວກັບເຫດການອັນຕະລາຍເມື່ອພວກມັນເກີດຂຶ້ນ.</translation>
 <translation id="411254640334432676">ດາວ​ໂຫລດ​ບໍ່​ສໍາ​ເລັດ​.</translation>
 <translation id="4112644173421521737">ຊອກຫາ</translation>
@@ -770,6 +775,7 @@
 <translation id="6859944681507688231">ເພື່ອສະແກນລະຫັດ QR ຫຼື ບັດເຄຣດິດ, ກະລຸນາເປີດນຳໃຊ້ກ້ອງຖ່າຍຮູບຈາກການຕັ້ງຄ່າ.</translation>
 <translation id="6867369562105931222">ລະຫັດຜ່ານ</translation>
 <translation id="6869389390665537774">ທ່ານສາມາດເຫັນໜ້າທີ່ທ່ານເຂົ້າເບິ່ງ ຫຼື ລຶບລ້າງພວກມັນຈາກປະຫວັດຂອງທ່ານໄດ້</translation>
+<translation id="687135068089457384">ສະແດງການຕັ້ງຄ່າ</translation>
 <translation id="6873263987691478642">ມຸມມອງແຍກກັນ</translation>
 <translation id="6882836635272038266">ການປົກປ້ອງມາດຕະຖານຕໍ່ກັບເວັບໄຊ, ການດາວໂຫຼດ ແລະ ສ່ວນຂະຫຍາຍທີ່ຮູ້ຈັກວ່າເປັນອັນຕະລາຍ.</translation>
 <translation id="6888009575607455378">ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການຍົກເລີກການປ່ຽນແປງຂອງທ່ານ?</translation>
@@ -875,11 +881,13 @@
 <translation id="7807060072011926525">ສະໜອງໃຫ້ໂດຍ Google</translation>
 <translation id="7839985698273989086">ໜ້າອອບລາຍ</translation>
 <translation id="7840771868269352570">ລາຍການທີ່ທ່ານເລືອກຈະຖືກລຶບອອກ.</translation>
+<translation id="7845466610722898">ສະແດງລາຍຊື່ການອ່ານ</translation>
 <translation id="784551991304901159">ເພື່ອເບິ່ງເນື້ອຫາ, ໃຫ້ເລືອກເປີດໃຊ້ຈາກເມນູ</translation>
 <translation id="7853202427316060426">ການເຄື່ອນໄຫວ</translation>
 <translation id="7856733331829174190">ບໍ່ສາມາດດາວໂຫລດໄດ້</translation>
 <translation id="785938070103630874">ເປີດລະຫັດຜ່ານ, ວິທີການຈ່າຍເງິນ ຫຼື ທີ່ຢູ່ ແລະ ືອື່ນ</translation>
 <translation id="7859704718976024901">ປະຫວັດການທ່ອງເວັບ</translation>
+<translation id="7879275349003161544">ສະແດງການດາວໂຫຼດ</translation>
 <translation id="7884694604461143138">ປະ​ຫວັດ​ການ​ຊອກຫາ (ພົບ <ph name="COUNT" /> ລາຍການ)</translation>
 <translation id="7887198238286927132">ເພື່ອປົກປ້ອງຄວາມເປັນສ່ວນຕົວຂອງທ່ານ, Chrome ຈະບໍ່ຕື່ມຂໍ້ມູນໃສ່ຊ່ອງຂໍ້ມູນນີ້ໂດຍອັດຕະໂນມັດ.</translation>
 <translation id="7911190106180361398">ອົງການຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ທ່ານຊິ້ງຂໍ້ມູນທຸກຢ່າງ.</translation>
@@ -991,6 +999,7 @@
 <translation id="8741995161408053644">ບັນຊີ Google ຂອງທ່ານອາດຈະມີຮູບແບບອື່ນຂອງປະຫວັດການທ່ອງເວັບຢູ່ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
 <translation id="8750037785291841318">ທ່ານຈະເຫັນແຖບຂອງທ່ານຢູ່ບ່ອນນີ້</translation>
 <translation id="8756969031206844760">ອັບເດດລະຫັດຜ່ານບໍ?</translation>
+<translation id="8763613688786959833">ເຂົ້າໄປແຖບສຸດທ້າຍ</translation>
 <translation id="8764015330924122850">ເຊົາຕິດຕາມ <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">URL ໃຊ້ບໍ່ໄດ້</translation>
 <translation id="8787968206789828143">ຊອກຫາຢູ່ເວັບ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mn.xtb b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
index 05dbcb1..a1ccb9c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mn.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Холбоос үүсгэх боломжгүй</translation>
 <translation id="2786701870377699570">Синк хийсэн төхөөрөмжүүд дээрх табуудаас хайх</translation>
+<translation id="2797029671965852011">Түүх харуулах</translation>
 <translation id="2800683595868705743">Цонх шилжигчээс гарах</translation>
 <translation id="2815198996063984598">2. Өгөгдмөл хөтчийн аппыг товшино уу</translation>
 <translation id="2820289420301699633">Танай администратор Chrome-г хянах бөгөөд өгөгдөлд нь хандах боломжтой</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">Синк хийсэн төхөөрөмжүүд дээрээ нээлттэй бөгөөд саяхан хаасан табуудыг шуурхай олоорой.</translation>
 <translation id="3533202363250687977">Нууцлалын бүх чихтэй хуудсыг хаах</translation>
 <translation id="3533436815740441613">Шинэ таб</translation>
+<translation id="3540141921715814660">Хавчуургaд нэмэх</translation>
 <translation id="3551320343578183772">Цонхыг хаах</translation>
+<translation id="3565207542107370586">Интернэтээр үзсэн өгөгдлийг арилгах…</translation>
 <translation id="3575234738189584619">Lens-р хайх</translation>
 <translation id="3581564640715911333">Хуудсыг бусад хэлээр орчуулахыг санал болгох</translation>
 <translation id="3588820906588687999">Зургийг шинэ цонхонд нээ</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">Тренд болж буй хайлт</translation>
 <translation id="3740397331642243698">Оруулсан URL-г Google Chrome дээр нууцлалтайгаар нээдэг.</translation>
 <translation id="3762232513783804601">Таны iPad-д зориулан бүтээсэн</translation>
+<translation id="3768725474733206671">Хамгийн сүүлд хаасан табыг дахин нээх</translation>
 <translation id="3771033907050503522">Мэдээний нууцлалтай цонх</translation>
 <translation id="3775743491439407556">Синк ажиллахгүй байна</translation>
 <translation id="3779810277399252432">Интернэт холболт алга.</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">Энэ сайтыг орчуулахыг санал болгох</translation>
 <translation id="3810973564298564668">удирдах</translation>
 <translation id="3819183753496523827">Та офлайн байна. Интернэт холболтоо шалгаад, дахин оролдоно уу.</translation>
+<translation id="3835964409414434850">Дараагийн таб руу очих</translation>
 <translation id="385051799172605136">Буцах</translation>
 <translation id="3858860766373142691">Нэр</translation>
 <translation id="3861486700625780712">Дагахаа болих</translation>
+<translation id="387280738075653372">Эндээс Chrome-г татна уу.</translation>
 <translation id="3892144330757387737">Та түүхээ эндээс олох болно</translation>
 <translation id="3897092660631435901">Цэс</translation>
 <translation id="3904829425754749514">Танай байгууллага синк хийхийг унтраасан. Та энэ төхөөрөмж дээрх хавчуурганууд, түүх, нууц үгнүүд болон бусад тохиргоог харах боломжтой хэвээр байна. Хэрэв та өөрчлөлтүүд хийвэл тэдгээрийг таны бүртгэлд синк хийхгүй.</translation>
@@ -544,6 +550,7 @@
 <translation id="5300589172476337783">Харуулах</translation>
 <translation id="5317780077021120954">Хадгалах</translation>
 <translation id="5339316356165661760">Синк хийхийг асаах</translation>
+<translation id="536067926684072644">Хавчуурга харуулах</translation>
 <translation id="5360976571138293719">Нууцлал, аюулгүй байдал болон өгөгдлийн цуглуулгатай холбоотой бусад тохиргоог <ph name="BEGIN_LINK" />Google-н үйлчилгээнүүдээс<ph name="END_LINK" /> харна уу.</translation>
 <translation id="5386314158584363703">Та дагадаг сайтуудаа эндээс олно</translation>
 <translation id="5388358297987318779">Зургийг нээх</translation>
@@ -576,6 +583,7 @@
 <translation id="5631164295104953411">Төлбөрийн хэрэгсэл нэмэх</translation>
 <translation id="5636282538000367086">Chrome-д шинээр юу байгааг олж мэдээрэй</translation>
 <translation id="5652623411397330904">Таны хянаж буй бүтээгдэхүүнүүдийг энд харуулна.</translation>
+<translation id="5657859710142657190">Табын хүснэгт рүү очих</translation>
 <translation id="5659593005791499971">И-мэйл хаяг</translation>
 <translation id="5669335982068190158">Таны iPhone-г шинэчлэх явцад таныг гаргасан. Нэвтрэхийн тулд доорх үргэлжлүүлэх дээр товшино уу.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -592,6 +600,7 @@
 <translation id="5737974891429562743">Бүртгэлийн нэвтрэх мэдээлэл хуучирсан байна. Синкийг эхлүүлэхийн тулд шинэчилнэ үү.</translation>
 <translation id="5738385766833540397">Та хянаж буй бүтээгдэхүүнүүдийнхээ үнэ хямдарсан талаарх сэрэмжлүүлгийг хэрхэн хүлээн авахаа удирдана уу</translation>
 <translation id="5738887413654608789">Та үүгээр ойролцоох хамааралтай веб хуудсыг олох боломжтой.</translation>
+<translation id="5745916533876677730">Өмнөх таб руу очих</translation>
 <translation id="5758631781033351321">Та унших жагсаалтаа эндээс олох болно</translation>
 <translation id="5765456154762864099">Цэс → Тохиргоо → Өгөгдмөл хөтөч</translation>
 <translation id="5782227691023083829">Орчуулж байна...</translation>
@@ -608,6 +617,7 @@
 <translation id="5857090052475505287">Шинэ хавтас</translation>
 <translation id="5857675236236529683">Та бэлэн үедээ унших жагсаалтаа эндээс олно уу</translation>
 <translation id="5857770089550859117">Синкийг эхлүүлэхийн тулд нэвтрэх үг оруулах шаардлагатай.</translation>
+<translation id="5859715514067755465">Урагшлуулах</translation>
 <translation id="5860033963881614850">Идэвхгүй байна</translation>
 <translation id="5869029295770560994">OK, ойлголоо.</translation>
 <translation id="5871497086027727873">1 зүйлийг зөөсөн байна</translation>
@@ -652,6 +662,7 @@
 <translation id="6152406514676263192">Таны сонирхолд тулгуурласан хамгийн хамааралтай контент харахын тулд синк хийнэ үү.</translation>
 <translation id="6159839020698489198">заавал биш</translation>
 <translation id="6165508094623778733">Нэмэлт мэдээлэл авах</translation>
+<translation id="6170450281939467187">Орчуулж чадсангүй</translation>
 <translation id="6177442314419606057">Chrome-с хайх</translation>
 <translation id="6184086493125982861">Цонхнуудыг харуул</translation>
 <translation id="6187302354554850004">Хамгийн сүүлд синк хийсэн: <ph name="LAST_USED_TIME" /></translation>
@@ -687,6 +698,7 @@
 <translation id="6374469231428023295">Дахин оролдоно уу</translation>
 <translation id="6377118281273296434">Сайтын аюулгүй байдал</translation>
 <translation id="6380866119319257197">Хэрэв та нэвтрэх үгээ мартсан, эсвэл тохиргоог нь өөрчлөхийг хүсвэл <ph name="BEGIN_LINK" />синкийг дахин тохируулна уу<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Байршлыг нээх…</translation>
 <translation id="6387994324662817823">Зөвхөн энэ төхөөрөмж дээр нууц үгийг Google-н Нууц үгний менежерт хадгалдаг.</translation>
 <translation id="6389470377220713856">Картан дээрх нэр</translation>
 <translation id="6403371459378431832">Өгөгдлөө бүх төхөөрөмж дээр синк хийгээрэй</translation>
@@ -698,6 +710,7 @@
 Таны өгөгдлийг таны синк хийх нэвтрэх үгтэй <ph name="TIME" />-д шифрлэсэн байна. Синкийг эхлүүлэхийн тулд үүнийг оруулна уу.</translation>
 <translation id="6418346271604475326">PDF форматыг бэлдэж байна</translation>
 <translation id="6434591244308415567">Алдаа гарлаа. Дараа дахин оролдоно уу.</translation>
+<translation id="6435236283694032571">Унших жагсаалтад нэмэх</translation>
 <translation id="6439338047467462846">Бүгдийг зөвшөөрөх</translation>
 <translation id="6445051938772793705">Улс</translation>
 <translation id="6445981559479772097">Мессеж илгээгдсэн.</translation>
@@ -862,6 +875,7 @@
 <translation id="7701040980221191251">Тодорхойгүй</translation>
 <translation id="7720410380936703141">ДАХИН ОРОЛДОХ</translation>
 <translation id="7726702057919861819">Цэс → Түүх → Интернэтээр үзсэн өгөгдлийг арилгах</translation>
+<translation id="7738120385185846461">Асуудал мэдээлэх…</translation>
 <translation id="7741325291586284254">Шинэ Нууцлалтай таб хуудас</translation>
 <translation id="7756478488453921771">Цэс → Тохиргоо → Төлбөрийн хэрэгсэл</translation>
 <translation id="7765158879357617694">Зөөх</translation>
@@ -956,6 +970,7 @@
 <translation id="8459333855531264009">Аюултай</translation>
 <translation id="8487667956631253959">Асаах</translation>
 <translation id="8487700953926739672">Сүлжээнд холбогдоогүй байна</translation>
+<translation id="8488923644885757471">Шинэ цонх</translation>
 <translation id="8490978609246021741">Өөрчлөлтийг хадгалах</translation>
 <translation id="8503813439785031346">Хэрэглэгчийн нэр</translation>
 <translation id="850600235656508448">Нууцлалын горимд нээх</translation>
@@ -1008,6 +1023,7 @@
 <translation id="8881801611828450202">Энэ зургийг <ph name="SEARCH_ENGINE" />-с хайх</translation>
 <translation id="8891935667620843985">Та Chrome-г өгөгдмөл хөтчийн програм болгосноор холбоосуудыг автоматаар нээх боломжтой.</translation>
 <translation id="8898822736010347272">Шинэ аюул заналыг олж илрүүлэх болон веб дээрх бүх хүнийг хамгаалахад туслахын тулд таны зочилдог зарим хуудасны URL, системийн хязгаарлагдмал мэдээлэл болон хуудасны зарим контентыг Google рүү илгээдэг.</translation>
+<translation id="890565330728586731">Буцах</translation>
 <translation id="8909135823018751308">Мэдээллийг хуваалцах ...</translation>
 <translation id="8911759861431145525">Нэмэх дээр товшоод, дараа нь мэдээллээ оруулна уу</translation>
 <translation id="891658175948553296">Сайт дээрх текстийг тодруулна уу</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index a0a4b8d..c8b6159 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Tidak Dapat Membuat Pautan</translation>
 <translation id="2786701870377699570">Cari Tab Pada Semua Peranti Disegerakkan</translation>
+<translation id="2797029671965852011">Tunjukkan Sejarah</translation>
 <translation id="2800683595868705743">Tinggalkan Penukar Tab</translation>
 <translation id="2815198996063984598">2. Ketik Apl Penyemak Imbas Lalai</translation>
 <translation id="2820289420301699633">Pentadbir anda boleh mengawal Chrome dan dapat mengakses data penyemak imbas itu</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">Cari tab terbuka dan baru ditutup dengan pantas di seluruh peranti anda yang disegerakkan.</translation>
 <translation id="3533202363250687977">Tutup Semua Tab Inkognito</translation>
 <translation id="3533436815740441613">Tab Baharu</translation>
+<translation id="3540141921715814660">Tambahkan pada Penanda Halaman</translation>
 <translation id="3551320343578183772">Tutup Tab</translation>
+<translation id="3565207542107370586">Kosongkan Data Semakan Imbas…</translation>
 <translation id="3575234738189584619">Cari dengan Lens</translation>
 <translation id="3581564640715911333">Tawaran untuk menterjemah halaman dalam bahasa lain</translation>
 <translation id="3588820906588687999">Buka Imej dalam Tab Baharu</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">Carian Sohor Kini</translation>
 <translation id="3740397331642243698">Buka URL yang dimasukkan di Google Chrome dalam Inkognito.</translation>
 <translation id="3762232513783804601">Dibina untuk iPad Anda</translation>
+<translation id="3768725474733206671">Buka Semula Tab Terakhir Ditutup</translation>
 <translation id="3771033907050503522">Tab Inkognito</translation>
 <translation id="3775743491439407556">Penyegerakan Tidak Berfungsi</translation>
 <translation id="3779810277399252432">Tiada sambungan Internet.</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">Tawarkan untuk menterjemahkan tapak ini</translation>
 <translation id="3810973564298564668">Urus</translation>
 <translation id="3819183753496523827">Anda di luar talian. Periksa sambungan Internet anda dan cuba lagi.</translation>
+<translation id="3835964409414434850">Pergi ke Tab Seterusnya</translation>
 <translation id="385051799172605136">Kembali</translation>
 <translation id="3858860766373142691">Nama</translation>
 <translation id="3861486700625780712">Nyahikut</translation>
+<translation id="387280738075653372">Muat turun Chrome di sini.</translation>
 <translation id="3892144330757387737">Anda dapat menemukan sejarah anda di sini</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Organisasi anda mematikan penyegerakan. Anda masih boleh melihat penanda halaman, sejarah, kata laluan dan tetapan anda yang lain pada peranti ini. Jika perubahan dibuat, perubahan itu tidak akan disegerakkan ke akaun anda.</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">Paparkan</translation>
 <translation id="5317780077021120954">Simpan</translation>
 <translation id="5339316356165661760">Hidupkan Penyegerakan</translation>
+<translation id="536067926684072644">Tunjukkan Penanda Halaman</translation>
 <translation id="5360976571138293719">Untuk mendapatkan pelbagai lagi tetapan yang berkaitan dengan privasi, keselamatan dan pengumpulan data, lihat <ph name="BEGIN_LINK" />Perkhidmatan Google<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Anda akan menemukan laman yang anda ikuti di sini</translation>
 <translation id="5388358297987318779">Buka Imej</translation>
@@ -577,6 +584,7 @@
 <translation id="5631164295104953411">Tambahkan Kaedah Pembayaran</translation>
 <translation id="5636282538000367086">Ketahui perkara baharu dalam Chrome</translation>
 <translation id="5652623411397330904">Produk yang anda jejaki akan dipaparkan di sini.</translation>
+<translation id="5657859710142657190">Pergi ke Grid Tab</translation>
 <translation id="5659593005791499971">E-mel</translation>
 <translation id="5669335982068190158">Anda telah dilog keluar sebagai sebahagian daripada tetapan semula iPhone anda. Ketik teruskan di bawah untuk log masuk.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +601,7 @@
 <translation id="5737974891429562743">Butiran log masuk akaun sudah lapuk. Sila kemas kini untuk memulakan penyegerakan.</translation>
 <translation id="5738385766833540397">Urus cara anda menerima makluman penurunan harga untuk produk yang anda jejaki</translation>
 <translation id="5738887413654608789">Langkah ini membolehkan anda menemui halaman web yang berkaitan berdasarkan persekitaran anda.</translation>
+<translation id="5745916533876677730">Pergi ke Tab Sebelumnya</translation>
 <translation id="5758631781033351321">Anda dapat menemukan senarai bacaan anda di sini</translation>
 <translation id="5765456154762864099">Menu → Tetapan → Penyemak Imbas Lalai</translation>
 <translation id="5782227691023083829">Menterjemahkan…</translation>
@@ -609,6 +618,7 @@
 <translation id="5857090052475505287">Folder Baharu</translation>
 <translation id="5857675236236529683">Apabila anda sudah bersedia, cari senarai bacaan anda di sini</translation>
 <translation id="5857770089550859117">Ungkapan laluan diperlukan untuk memulakan penyegerakan.</translation>
+<translation id="5859715514067755465">Mundar</translation>
 <translation id="5860033963881614850">Dimatikan</translation>
 <translation id="5869029295770560994">OK, Faham</translation>
 <translation id="5871497086027727873">1 item dialihkan</translation>
@@ -653,6 +663,7 @@
 <translation id="6152406514676263192">Segerakkan kandungan yang paling berkaitan berdasarkan minat anda.</translation>
 <translation id="6159839020698489198">pilihan</translation>
 <translation id="6165508094623778733">Ketahui lebih lanjut</translation>
+<translation id="6170450281939467187">Penterjemahan Gagal</translation>
 <translation id="6177442314419606057">Cari dalam Chrome</translation>
 <translation id="6184086493125982861">Paparkan Tab</translation>
 <translation id="6187302354554850004">Terakhir disgrkkan: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +699,7 @@
 <translation id="6374469231428023295">Cuba Lagi</translation>
 <translation id="6377118281273296434">Keselamatan Tapak</translation>
 <translation id="6380866119319257197">Jika anda terlupa ungkapan laluan atau ingin menukar tetapan ini, <ph name="BEGIN_LINK" />tetapkan semula penyegerakan<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Buka Lokasi…</translation>
 <translation id="6387994324662817823">Kata laluan disimpan pada Pengurus Kata Laluan Google pada peranti ini sahaja.</translation>
 <translation id="6389470377220713856">Nama pada Kad</translation>
 <translation id="6403371459378431832">Segerakkan data anda pada semua peranti</translation>
@@ -699,6 +711,7 @@
 Data anda disulitkan dengan ungkapan laluan segerak anda pada <ph name="TIME" />. Masukkannya untuk memulakan penyegerakan.</translation>
 <translation id="6418346271604475326">Menyediakan PDF</translation>
 <translation id="6434591244308415567">Ralat telah berlaku. Cuba sebentar lagi.</translation>
+<translation id="6435236283694032571">Tambahkan pada Senarai Bacaan</translation>
 <translation id="6439338047467462846">Benarkan Semua</translation>
 <translation id="6445051938772793705">Negara</translation>
 <translation id="6445981559479772097">Mesej dihantar.</translation>
@@ -863,6 +876,7 @@
 <translation id="7701040980221191251">Tiada</translation>
 <translation id="7720410380936703141">CUBA LAGI</translation>
 <translation id="7726702057919861819">Menu → Sejarah → Kosongkan Data Semakan Imbas</translation>
+<translation id="7738120385185846461">Laporkan Isu…</translation>
 <translation id="7741325291586284254">Halaman Tab Inkognito Baharu</translation>
 <translation id="7756478488453921771">Menu → Tetapan → Kaedah Pembayaran</translation>
 <translation id="7765158879357617694">Alih</translation>
@@ -957,6 +971,7 @@
 <translation id="8459333855531264009">Tidak Selamat</translation>
 <translation id="8487667956631253959">Hidup</translation>
 <translation id="8487700953926739672">Tersedia di luar talian</translation>
+<translation id="8488923644885757471">Tetingkap Baharu</translation>
 <translation id="8490978609246021741">Simpan Perubahan</translation>
 <translation id="8503813439785031346">Nama pengguna</translation>
 <translation id="850600235656508448">Buka dalam Inkognito</translation>
@@ -1009,6 +1024,7 @@
 <translation id="8881801611828450202">Cari Imej Ini di <ph name="SEARCH_ENGINE" /></translation>
 <translation id="8891935667620843985">Anda boleh membuka pautan dalam Chrome secara automatik dengan menjadikan Chrome sebagai Apl Penyemak Imbas Lalai anda.</translation>
 <translation id="8898822736010347272">Menghantar URL sesetengah halaman yang anda lawati, maklumat sistem yang terhad dan sebahagian kandungan halaman kepada Google untuk menemukan ancaman baharu dan melindungi semua pengguna web.</translation>
+<translation id="890565330728586731">Kembali</translation>
 <translation id="8909135823018751308">Kongsi…</translation>
 <translation id="8911759861431145525">Ketik Tambah kemudian Masukkan Maklumat Anda</translation>
 <translation id="891658175948553296">Serlahkan Teks pada Laman</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index 7a9337855..dd16692 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">လင့်ခ်ကို ပြုလုပ်၍မရပါ</translation>
 <translation id="2786701870377699570">စင့်ခ်လုပ်ထားသော စက်များတွင် တဘ်ရှာဖွေခြင်း</translation>
+<translation id="2797029671965852011">မှတ်တမ်း ပြပါ</translation>
 <translation id="2800683595868705743">တဘ် ခလုတ်ကို ထားရစ်ခဲ့ရန်</translation>
 <translation id="2815198996063984598">၂။ 'မူရင်း ဘရောင်ဇာအက်ပ်' ကို တို့ပါ</translation>
 <translation id="2820289420301699633">သင့်စီမံခန့်ခွဲသူက Chrome ကို ထိန်းချုပ်ခွင့်ရှိပြီး ၎င်း၏ဒေတာများကို ဝင်ကြည့်နိုင်သည်</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">သင်၏ စင့်ခ်လုပ်ထားသောစက်များတွင် ဖွင့်ထားသော တဘ်နှင့် မကြာသေးမီက ပိတ်ထားသော တဘ်များကို အမြန်ရှာနိုင်သည်။</translation>
 <translation id="3533202363250687977">ရုပ်ဖျက်တဘ်များအားလုံး ပိတ်ရန်</translation>
 <translation id="3533436815740441613">တဘ်အသစ်</translation>
+<translation id="3540141921715814660">လိပ်စာများသို့ ထည့်ရန်</translation>
 <translation id="3551320343578183772">တဘ် ပိတ်ရန်</translation>
+<translation id="3565207542107370586">ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာကို ရှင်းထုတ်ရန်…</translation>
 <translation id="3575234738189584619">Lens ဖြင့် ရှာဖွေရန်</translation>
 <translation id="3581564640715911333">စာမျက်နှာများကို အခြားဘာသာစကားများဖြင့် ပြန်ဆိုရန် ကမ်းလှမ်းသည်</translation>
 <translation id="3588820906588687999">ရုပ်ပုံကို တက်ဘ်အသစ်တွင်ဖွင့်ရန်</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">ခေတ်စားနေသည့် ရှာဖွေမှုများ</translation>
 <translation id="3740397331642243698">ထည့်သွင်းထားသော URL များကို Google Chrome ရုပ်ဖျက်မုဒ်တွင် ဖွင့်သည်။</translation>
 <translation id="3762232513783804601">သင့် iPad အတွက် ပြုလုပ်ထားသည်</translation>
+<translation id="3768725474733206671">နောက်ဆုံး ပိတ်လိုက်သည့်တဘ် ပြန်ဖွင့်ရန်</translation>
 <translation id="3771033907050503522">ကိုယ်ပျောက် တဲဘ်များ</translation>
 <translation id="3775743491439407556">စင့်ခ်လုပ်၍ မရပါ</translation>
 <translation id="3779810277399252432">အင်တာနက် ချိတ်ဆက်မှု မရှိပါ။</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">ဤဝဘ်ဆိုက်ကို ဘာသာပြန်ရန် ကမ်းလှမ်းချက်</translation>
 <translation id="3810973564298564668">စီမံရန်</translation>
 <translation id="3819183753496523827">သင် အော့ဖ်လိုင်းဖြစ်နေသည်။ အင်တာနက်ချိတ်ဆက်မှုကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။</translation>
+<translation id="3835964409414434850">လာမည့်တဘ်သို့ သွားရန်</translation>
 <translation id="385051799172605136">နောက်သို့</translation>
 <translation id="3858860766373142691">အမည်</translation>
 <translation id="3861486700625780712">လိုက်မကြည့်တော့ရန်</translation>
+<translation id="387280738075653372">ဤနေရာတွင် Chrome ဒေါင်းလုဒ်လုပ်နိုင်သည်။</translation>
 <translation id="3892144330757387737">သင့်မှတ်တမ်းကို ဤနေရာတွင် ပြပါမည်</translation>
 <translation id="3897092660631435901">မီနျူး</translation>
 <translation id="3904829425754749514">သင့်အဖွဲ့အစည်းက စင့်ခ်လုပ်ခြင်း ပိတ်ထားသည်။ ဤစက်ပေါ်တွင် သင့်လိပ်စာ၊ မှတ်တမ်း၊ စကားဝှက်နှင့် အခြားဆက်တင်များကို ကြည့်နိုင်ပါသေးသည်။ အပြောင်းအလဲများ ပြုလုပ်ပါက ၎င်းတို့ကို သင်၏အကောင့်နှင့် စင့်ခ်လုပ်မည်မဟုတ်ပါ။</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">ပြရန်</translation>
 <translation id="5317780077021120954">သိမ်းရန်</translation>
 <translation id="5339316356165661760">စင့်ခ်လုပ်ခြင်းကို ဖွင့်ရန်</translation>
+<translation id="536067926684072644">လိပ်စာများ ပြပါ</translation>
 <translation id="5360976571138293719">ပုဂ္ဂိုလ်ရေးဆိုင်ရာ၊ လုံခြုံရေး၊ ဒေတာစုဆောင်းမှုတို့နှင့် ဆက်စပ်နေသည့် နောက်ထပ်ဆက်တင်များအတွက် <ph name="BEGIN_LINK" />Google ဝန်ဆောင်မှုများ<ph name="END_LINK" /> ကို ကြည့်ပါ။</translation>
 <translation id="5386314158584363703">သင်လိုက်ကြည့်ထားသည့် ဝဘ်ဆိုက်များကို ဤတွင်ရှာဖွေနိုင်သည်</translation>
 <translation id="5388358297987318779">ရုပ်ပုံဖွင့်မည်</translation>
@@ -576,6 +583,7 @@
 <translation id="5631164295104953411">ငွေပေးချေနည်းလမ်း ထည့်ရန်</translation>
 <translation id="5636282538000367086">Chrome တွင် အသစ်ပါဝင်မှုများကို ကြည့်လိုက်ပါ</translation>
 <translation id="5652623411397330904">သင်စောင့်ကြည့်သည့်ထုတ်ကုန်ကို ဤတွင်ပြမည်။</translation>
+<translation id="5657859710142657190">‘တဘ်ဇယားကွက်’ သို့ သွားရန်</translation>
 <translation id="5659593005791499971">အီးမေးလ်</translation>
 <translation id="5669335982068190158">သင့် iPhone ပြင်ဆင်သတ်မှတ်မှု၏ လုပ်ဆောင်ချက်တစ်ခုအနေဖြင့် သင်ထွက်သွားသည်။ လက်မှတ်ထိုးဝင်ရန် အောက်ရှိရှေ့ဆက်ရန်ကို တို့ပါ။</translation>
 <translation id="5669528293118408608">www</translation>
@@ -592,6 +600,7 @@
 <translation id="5737974891429562743">အကောင့် လက်မှတ်ထိုးဝင်ခြင်း အသေးစိတ်အချက်အလက်များသည် ဟောင်းနေပါပြီ။ စတင်၍ စင့်ခ်ပြုလုပ်နိုင်ရန် အပ်ဒိတ်လုပ်ပါ။</translation>
 <translation id="5738385766833540397">သင်စောင့်ကြည့်နေသည့် ထုတ်ကုန်များအတွက် ဈေးကျသည့် သတိပေးချက်များ ရယူပုံကို စီမံနိုင်သည်</translation>
 <translation id="5738887413654608789">ဤနည်းဖြင့် သင့်ပတ်ဝန်းကျင်ကိုလိုက်၍ သက်ဆိုင်ရာအင်တာနက်စာမျက်နှာများကို ရှာဖွေနိုင်ပါသည်။</translation>
+<translation id="5745916533876677730">ယခင်တဘ်သို့ သွားရန်</translation>
 <translation id="5758631781033351321">သင့်ဖတ်ရန်စာရင်းကို ဤနေရာတွင် ပြပါမည်</translation>
 <translation id="5765456154762864099">မီနူး → ဆက်တင်များ → မူရင်းဘရောင်ဇာ</translation>
 <translation id="5782227691023083829">ဘာသာပြန်နေသည်...</translation>
@@ -608,6 +617,7 @@
 <translation id="5857090052475505287">အကန့်အသစ်</translation>
 <translation id="5857675236236529683">အသင့်ဖြစ်သောအခါ သင်၏ဖတ်ရန်စာရင်းကို ဤနေရာတွင် ကြည့်ပါ</translation>
 <translation id="5857770089550859117">စတင်၍ စင့်ခ်ပြုလုပ်ရန် စကားဝှက်လိုအပ်ပါသည်။</translation>
+<translation id="5859715514067755465">ရှေ့သို့</translation>
 <translation id="5860033963881614850">ပိတ်ထား</translation>
 <translation id="5869029295770560994">OK</translation>
 <translation id="5871497086027727873">အကြောင်းအရာ 1 ခုပြောင်းရွှေ့ပြီးပါပြီ</translation>
@@ -652,6 +662,7 @@
 <translation id="6152406514676263192">သင့်စိတ်ဝင်စားမှုများအပေါ် အခြေခံသည့် အသက်ဆိုင်ဆုံး အကြောင်းအရာများအတွက် စင့်ခ်လုပ်နိုင်သည်။</translation>
 <translation id="6159839020698489198">ချန်လှပ်ထားနိုင်သည်</translation>
 <translation id="6165508094623778733">ပိုမိုလေ့လာရန်</translation>
+<translation id="6170450281939467187">ဘာသာပြန်၍ မရပါ</translation>
 <translation id="6177442314419606057">Chrome တွင် ရှာဖွေရန်</translation>
 <translation id="6184086493125982861">တဲဘ်များ ပြမည်</translation>
 <translation id="6187302354554850004">နောက်ဆုံး ထပ်တူပြုခြင်း: <ph name="LAST_USED_TIME" /></translation>
@@ -687,6 +698,7 @@
 <translation id="6374469231428023295">ထပ်စမ်းကြည့်ပါ</translation>
 <translation id="6377118281273296434">ဝဘ်ဆိုက်လုံခြုံရေး</translation>
 <translation id="6380866119319257197">သင့်စကားဝှက်ကို မေ့သွားလျှင် သို့မဟုတ် ဤဆက်တင်ကို ပြောင်းလဲလိုလျှင်၊ <ph name="BEGIN_LINK" />စင့်ခ်ပြုလုပ်ခြင်းကို ပြန်လည်သတ်မှတ်ပါ<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">တည်နေရာ ဖွင့်ရန်…</translation>
 <translation id="6387994324662817823">စကားဝှက်များကို ဤစက်တွင်သာရှိသော ‘Google စကားဝှက်မန်နေဂျာ’ သို့ သိမ်းထားသည်။</translation>
 <translation id="6389470377220713856">ကဒ်ပေါ်ရှိ အမည်</translation>
 <translation id="6403371459378431832">စက်အားလုံးတွင် သင့်ဒေတာကို စင့်ခ်လုပ်ပါ</translation>
@@ -698,6 +710,7 @@
 သင့်ဒေတာများကို <ph name="TIME" /> ပေါ်တွင်သင်စင့်ခ်ပြုလုပ်ထားသည့် စကားဝှက်ဖြင့် အသွင်ဝှက်ထားပါသည်။ စင့်ခ်ပြုလုပ်ခြင်းစတင်ရန် ၎င်းကိုထည့်ပါ။</translation>
 <translation id="6418346271604475326">PDF ပြင်ဆင်နေသည်</translation>
 <translation id="6434591244308415567">အမှားအယွင်း ရှိနေသည်။ နောက်မှ ထပ်လုပ်ကြည့်ပါ။</translation>
+<translation id="6435236283694032571">‘ဖတ်ရန်စာရင်း’ တွင် ထည့်ရန်</translation>
 <translation id="6439338047467462846">အားလုံးကို ခွင့်ပြုရန်</translation>
 <translation id="6445051938772793705">နိုင်ငံ</translation>
 <translation id="6445981559479772097">စာတို ပေးပို့ပြီးပါပြီ။</translation>
@@ -862,6 +875,7 @@
 <translation id="7701040980221191251">မရှိ</translation>
 <translation id="7720410380936703141">ထပ်စမ်းကြည့်ရန်</translation>
 <translation id="7726702057919861819">မီနူး → မှတ်တမ်း → ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာ ဖယ်ရှားရန်</translation>
+<translation id="7738120385185846461">ပြဿနာကို အကြောင်းကြားရန်…</translation>
 <translation id="7741325291586284254">ရုပ်ဖျက်တဘ် စာမျက်နှာသစ်</translation>
 <translation id="7756478488453921771">မီနူး → ဆက်တင်များ → ငွေပေးချေနည်းလမ်းများ</translation>
 <translation id="7765158879357617694">ရွှေ့ရန်</translation>
@@ -956,6 +970,7 @@
 <translation id="8459333855531264009">လုံခြုံမှုမရှိပါ</translation>
 <translation id="8487667956631253959">ဖွင့်ရန်</translation>
 <translation id="8487700953926739672">Offline ရနိုင်</translation>
+<translation id="8488923644885757471">ဝင်ဒိုးအသစ်</translation>
 <translation id="8490978609246021741">အပြောင်းအလဲများကို သိမ်းရန်</translation>
 <translation id="8503813439785031346">အသုံးပြုသူအမည်</translation>
 <translation id="850600235656508448">ရုပ်ဖျက်မုဒ်သုံး၍ ဖွင့်ရန်</translation>
@@ -1008,6 +1023,7 @@
 <translation id="8881801611828450202">ဤရုပ်ပုံကို <ph name="SEARCH_ENGINE" /> တွင်ရှာရန်</translation>
 <translation id="8891935667620843985">Chrome ကို ‘မူရင်းဘရောင်ဇာအက်ပ်’ အဖြစ် သတ်မှတ်ပြီး ၎င်းဖြင့် လင့်ခ်များကို အလိုအလျောက် ဖွင့်နိုင်သည်။</translation>
 <translation id="8898822736010347272">အန္တရာယ်အသစ်များ ရှာဖွေရာ၌ အထောက်အကူဖြစ်စေရန်နှင့် ဝဘ်ပေါ်ရှိလူတိုင်းကို ကာကွယ်ရန် သင်ဝင်ကြည့်သည့် အချို့ဝဘ်ဆိုက်များ၏ URL များ၊ ကန့်သတ်ထားသည့် စနစ်အချက်အလက်များနှင့် အချို့သော ဝဘ်ဆိုက်ပါအကြောင်းအရာတို့ကို Google သို့ ပို့သည်။</translation>
+<translation id="890565330728586731">နောက်သို့</translation>
 <translation id="8909135823018751308">ၐေမျှရန်...</translation>
 <translation id="8911759861431145525">ထည့်သွင်းရန်ကို တို့ပြီး သင့်အချက်အလက်ထည့်ပါ</translation>
 <translation id="891658175948553296">ဝဘ်ဆိုက်ရှိ စာသားကို မြင်သာထင်သာဖြစ်အောင်လုပ်ပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
index 098786f4..4baabb0 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">लिंक सिर्जना गर्न सकिएन</translation>
 <translation id="2786701870377699570">सिंक गरिएका डिभाइसमा ट्याबहरू खोज्नुहोस्</translation>
+<translation id="2797029671965852011">इतिहास देखाइयोस्</translation>
 <translation id="2800683595868705743">ट्याब स्विचर छोड्नुहोस्</translation>
 <translation id="2815198996063984598">२. डिफल्ट ब्राउजर एपमा ट्याप गर्नुहोस्</translation>
 <translation id="2820289420301699633">तपाईंका एड्मिन Chrome नियन्त्रण गर्छन् र उनी त्यसमा भएका डेटा हेर्न तथा प्रयोग गर्न सक्छन्</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">आफ्ना सिंक गरिएका डिभाइसमा खोलिएका र हालसालै बन्द गरिएका ट्याबहरू तुरुन्तै भेट्टाउनुहोस्।</translation>
 <translation id="3533202363250687977">सबै इन्कोग्निटो ट्याबहरू बन्द गर्नुहोस्</translation>
 <translation id="3533436815740441613">नयाँ ट्याब</translation>
+<translation id="3540141921715814660">"बुकमार्कहरू" मा हाल्नुहोस्</translation>
 <translation id="3551320343578183772">ट्याब बन्द गर्नुहोस्</translation>
+<translation id="3565207542107370586">ब्राउजिङ डेटा मेटाउनुहोस्…</translation>
 <translation id="3575234738189584619">Google लेन्समार्फत खोज्नुहोस्</translation>
 <translation id="3581564640715911333">पृष्ठहरू अन्य भाषामा अनुवाद गर्ने प्रस्ताव गर्नुहोस्</translation>
 <translation id="3588820906588687999">छविलाई नयाँ ट्याबमा खोल्नुहोस्</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">ट्रेन्डिङमा रहेका खोज</translation>
 <translation id="3740397331642243698">प्रविष्टि गरिएका URL हरू Google Chrome को इन्कोग्निटो मोडमा खोलिन्छ।</translation>
 <translation id="3762232513783804601">तपाईंको iPad का लागि बनाइएको</translation>
+<translation id="3768725474733206671">अन्तिममा बन्द गरिएको ट्याब फेरि खोल्नुहोस्</translation>
 <translation id="3771033907050503522">इन्कग्निटो ट्याबहरू</translation>
 <translation id="3775743491439407556">सिंक गर्ने सुविधाले काम गरिरहेको छैन</translation>
 <translation id="3779810277399252432">इन्टरनेट छैन</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">यो साइट अनुवाद गर्ने प्रस्ताव गर्नुहोस्</translation>
 <translation id="3810973564298564668">व्यवस्थित गर्नुहोस्</translation>
 <translation id="3819183753496523827">तपाईं अफलाइन हुनुहुन्छ। आफ्नो इन्टरनेट कनेक्सनको जाँच गरी फेरि प्रयास गर्नुहोस्।</translation>
+<translation id="3835964409414434850">अर्को ट्याबमा जानुहोस्</translation>
 <translation id="385051799172605136">पछाडि जानुहोस्</translation>
 <translation id="3858860766373142691">नाम</translation>
 <translation id="3861486700625780712">अनफलो गर्नुहोस्</translation>
+<translation id="387280738075653372">यहाँ गई Chrome डाउनलोड गर्नुहोस्।</translation>
 <translation id="3892144330757387737">तपाईंले गर्नुभएका क्रियाकलापको इतिहास यहाँ देखिने छ</translation>
 <translation id="3897092660631435901">मेनु</translation>
 <translation id="3904829425754749514">तपाईंको सङ्गठनले सिंक गर्ने सुविधा अफ गरेको छ। तपाईं यो डिभाइसमा आफ्ना बुकमार्क, हिस्ट्री, पासवर्ड र अन्य सेटिङ देखिरहनु हुने छ। तपाईंले यी कुरा परिवर्तन गर्नुभयो भने ती परिवर्तन तपाईंको खातामा सिंक हुने छैनन्।</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">देखाउनुहोस्</translation>
 <translation id="5317780077021120954">बचत गर्नुहोस्</translation>
 <translation id="5339316356165661760">सिंक गर्ने सुविधा अन गर्नुहोस्</translation>
+<translation id="536067926684072644">बुकमार्कहरू देखाइयोस्</translation>
 <translation id="5360976571138293719">गोपनीयता, सुरक्षा र डेटाको सङ्कलनसँग सम्बन्धित थप सेटिङका लागि <ph name="BEGIN_LINK" />Google का सेवाहरू<ph name="END_LINK" /> नामक खण्ड हेर्नुहोस्।</translation>
 <translation id="5386314158584363703">तपाईं यहाँ गई आफूले फलो गरेका साइटहरू भेट्टाउन सक्नुहुन्छ</translation>
 <translation id="5388358297987318779">छवि खोल्नुहोस्</translation>
@@ -577,6 +584,7 @@
 <translation id="5631164295104953411">भुक्तानी विधि थप्नुहोस्‌</translation>
 <translation id="5636282538000367086">Chrome मा नयाँ के छ थाहा पाउनुहोस्</translation>
 <translation id="5652623411397330904">तपाईंले ट्र्याक गर्ने उत्पादनहरू यहाँ देखाइने छन्।</translation>
+<translation id="5657859710142657190">ट्याब ग्रिडमा जानुहोस्</translation>
 <translation id="5659593005791499971">इमेल</translation>
 <translation id="5669335982068190158">तपाईंको iPhone रिसेट गरिएका कारण तपाईंलाई साइन आउट गरिएको थियो। साइन इन गर्न तल दिइएको "जारी राख्नुहोस्" मा ट्याप गर्नुहोस्।</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +601,7 @@
 <translation id="5737974891429562743">खातामा साइन-इन गर्ने सम्बन्धी विवरणहरूको म्याद सकिएको छ। सिंक सुरु गर्न अपडेट गर्नुहोस्।</translation>
 <translation id="5738385766833540397">तपाईं आफूले ट्र्याक गरेका उत्पादनको मूल्य घट्दा पठाइने अलर्टहरू कुन माध्यमबाट प्राप्त गर्न चाहनुहुन्छ भन्ने कुरा व्यवस्थापन गर्नुहोस्</translation>
 <translation id="5738887413654608789">यसले तपाईं वरिपरिको परिवेशमा आधारित सान्दर्भिक वेब पृष्ठहरू पत्ता लगाउन अनुमति दिन्छ।</translation>
+<translation id="5745916533876677730">अघिल्लो ट्याबमा जानुहोस्</translation>
 <translation id="5758631781033351321">तपाईंको अध्ययन सूची यहाँ देखिने छ</translation>
 <translation id="5765456154762864099">मेनु → सेटिङहरू → डिफल्ट ब्राउजर</translation>
 <translation id="5782227691023083829">अनुवाद गर्दै...</translation>
@@ -609,6 +618,7 @@
 <translation id="5857090052475505287">नयाँ फोल्डर</translation>
 <translation id="5857675236236529683">तपाईं तयार भएपछि तपाईंले पछि पढ्न सुरक्षित गर्नुभएका वेबपेजको सूची यहाँ देखिने छ</translation>
 <translation id="5857770089550859117">सिंक सुरु गर्न पासफ्रेज आवश्यक छ।</translation>
+<translation id="5859715514067755465">फर्वार्ड गर्नुहोस्</translation>
 <translation id="5860033963881614850">बन्द</translation>
 <translation id="5869029295770560994">ठिक छ, बुझेँ</translation>
 <translation id="5871497086027727873">1 वस्तु सारियो</translation>
@@ -653,6 +663,7 @@
 <translation id="6152406514676263192">आफ्नो रुचिअनुसारका सबैभन्दा सान्दर्भिक सामग्री हेर्न सिंक गर्नुहोस्।</translation>
 <translation id="6159839020698489198">ऐच्छिक</translation>
 <translation id="6165508094623778733">थप जान्नुहोस्</translation>
+<translation id="6170450281939467187">अनुवाद गर्न सकिएन</translation>
 <translation id="6177442314419606057">Chrome मा खोज्नुहोस्</translation>
 <translation id="6184086493125982861">ट्याबहरू देखाउनुहोस्</translation>
 <translation id="6187302354554850004">पछिल्लोपटक सिंक भएको: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +699,7 @@
 <translation id="6374469231428023295">फेरि प्रयास गर्नुहोस्</translation>
 <translation id="6377118281273296434">साइटको सुरक्षा</translation>
 <translation id="6380866119319257197">यदि तपाईँले आफ्नो पासफ्रेज बिर्सनुभयो वा यस सेटिङलाई परिवर्तन गर्न चाहनुहुन्छ भने <ph name="BEGIN_LINK" />सिंकलाई रिसेट गर्नुहोस्<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">लोकेसन खोल्नुहोस्…</translation>
 <translation id="6387994324662817823">पासवर्डहरू यो डिभाइसको Google पासवर्ड म्यानेजरमा मात्र सेभ गरिन्छन्।</translation>
 <translation id="6389470377220713856">कार्डमा रहेको नाम</translation>
 <translation id="6403371459378431832">सबै डिभाइसहरूमा आफ्नो डेटा सिंक गर्नुहोस्</translation>
@@ -699,6 +711,7 @@
 तपाईँको डेटालाई <ph name="TIME" /> मा तपाईँको सिंक पासफ्रेजमार्फत इन्क्रिप्ट गरिएको थियो। सिंक सुरु गर्न त्यो पासफ्रेज प्रविष्टि गर्नुहोस्।</translation>
 <translation id="6418346271604475326">PDF तयार गर्दै</translation>
 <translation id="6434591244308415567">कुनै त्रुटि भयो। पछि फेरि प्रयास गर्नुहोस्।</translation>
+<translation id="6435236283694032571">पछि पढ्न सेभ गरिएका वेबपेजको सूचीमा हाल्नुहोस्</translation>
 <translation id="6439338047467462846">सबैलाई अनुमति दिनुहोस्</translation>
 <translation id="6445051938772793705">देश</translation>
 <translation id="6445981559479772097">सन्देश पठाइयो।</translation>
@@ -863,6 +876,7 @@
 <translation id="7701040980221191251">कुनै पनि होइन</translation>
 <translation id="7720410380936703141">फेरि प्रयास गर्नुहोस्</translation>
 <translation id="7726702057919861819">मेनु → इतिहास → ब्राउजिङ डेटा मेटाउनुहोस्</translation>
+<translation id="7738120385185846461">समस्याका बारेमा रिपोर्ट गर्नुहोस्…</translation>
 <translation id="7741325291586284254">इन्कोग्निटो ट्याबसम्बन्धी नयाँ पेज</translation>
 <translation id="7756478488453921771">मेनु → सेटिङ → भुक्तानी विधि</translation>
 <translation id="7765158879357617694">सार्नुहोस्</translation>
@@ -957,6 +971,7 @@
 <translation id="8459333855531264009">सुरक्षित छैन</translation>
 <translation id="8487667956631253959">सक्रिय</translation>
 <translation id="8487700953926739672">अफलाईन उपलब्ध</translation>
+<translation id="8488923644885757471">नयाँ विन्डो</translation>
 <translation id="8490978609246021741">परिवर्तनहरू सेभ गर्नुहोस्</translation>
 <translation id="8503813439785031346">एक-पटके टेक्स्ट म्यासेज</translation>
 <translation id="850600235656508448">इन्कोग्निटोमा खोल्नुहोस्</translation>
@@ -1009,6 +1024,7 @@
 <translation id="8881801611828450202"><ph name="SEARCH_ENGINE" /> मा यो छवि खोज्नुहोस्</translation>
 <translation id="8891935667620843985">तपाईं Chrome लाई आफ्नो डिफल्ट ब्राउजर एप बनाएर लिंकहरू स्वतः Chrome मा खोल्न सक्नुहुन्छ।</translation>
 <translation id="8898822736010347272">नयाँ खतराहरू पत्ता लगाउन र वेब प्रयोग गर्ने सम्पूर्ण प्रयोगकर्ताहरूलाई सुरक्षित राख्न Google लाई तपाईंले हेर्ने केही पृष्ठका URL, प्रणालीसम्बन्धी निश्चित जानकारी र पृष्ठका केही सामग्रीहरू पठाउँछ।</translation>
+<translation id="890565330728586731">पछाडि</translation>
 <translation id="8909135823018751308">साझा गर्नुहोस्...</translation>
 <translation id="8911759861431145525">"हाल्नुहोस्" मा ट्याप गर्नुहोस् अनि आफ्नो जानकारी हाल्नुहोस्</translation>
 <translation id="891658175948553296">कुनै साइटमा देखाइएको टेक्स्ट हाइलाइट गर्नुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb
index 59bc5de5..a8db463 100644
--- a/ios/chrome/app/strings/resources/ios_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">ଲିଙ୍କ ତିଆରି କରିବାରେ ଅସମର୍ଥ</translation>
 <translation id="2786701870377699570">ସିଙ୍କ କରାଯାଇଥିବା ସମସ୍ତ ଡିଭାଇସରେ ଟାବଗୁଡ଼ିକୁ ସର୍ଚ୍ଚ କରନ୍ତୁ</translation>
+<translation id="2797029671965852011">ଇତିହାସ ଦେଖାନ୍ତୁ</translation>
 <translation id="2800683595868705743">ଟାବ୍ ସ୍ଵିଚର୍ ଛାଡ଼ି ଦିଅନ୍ତୁ</translation>
 <translation id="2815198996063984598">2. ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍ ଆପକୁ ଟାପ୍ କରନ୍ତୁ</translation>
 <translation id="2820289420301699633">ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ପାଖରେ Chromeର ନିୟନ୍ତ୍ରଣ ଅଛି ଏବଂ ସେ ଏହାର ଡାଟାକୁ ଆକ୍ସେସ୍ କରିପାରିବେ</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">ଆପଣଙ୍କ ସମସ୍ତ ସିଙ୍କ ହୋଇଥିବା ଡିଭାଇସରେ ଖୋଲା ଥିବା ଏବଂ ବର୍ତ୍ତମାନ ବନ୍ଦ ହୋଇଥିବା ଟାବଗୁଡ଼ିକୁ ଶୀଘ୍ର ଖୋଜନ୍ତୁ।</translation>
 <translation id="3533202363250687977">ସମସ୍ତ ଇନ୍‌କଗ୍‌ନିଟୋ ଟାବ୍‍ଗୁଡ଼ିକୁ ବନ୍ଦ କରନ୍ତୁ</translation>
 <translation id="3533436815740441613">ନୂତନ ଟାବ୍‌</translation>
+<translation id="3540141921715814660">ବୁକମାର୍କଗୁଡ଼ିକରେ ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="3551320343578183772">ଟାବ୍‌ ବନ୍ଦ କରନ୍ତୁ</translation>
+<translation id="3565207542107370586">ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରନ୍ତୁ…</translation>
 <translation id="3575234738189584619">Lens ମାଧ୍ୟମରେ ସର୍ଚ୍ଚ କରନ୍ତୁ</translation>
 <translation id="3581564640715911333">ଅନ୍ୟ ଭାଷାରେ ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଅନୁବାଦ କରିବାକୁ ଅଫର୍ ଦିଅନ୍ତୁ</translation>
 <translation id="3588820906588687999">ନୂଆ ଟାବ୍‍‍‍ରେ ଛବି ଖୋଲନ୍ତୁ</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">ଟ୍ରେଣ୍ଡିଂ ସନ୍ଧାନଗୁଡ଼ିକ</translation>
 <translation id="3740397331642243698">ଇନପୁଟ୍ କରାଯାଇଥିବା URLଗୁଡ଼ିକୁ Google Chromeରେ ଇନକଗ୍ନିଟୋ ମୋଡରେ ଖୋଲା ଯାଇଥାଏ।</translation>
 <translation id="3762232513783804601">ଆପଣଙ୍କ iPad ପାଇଁ ତିଆରି କରାଯାଇଛି</translation>
+<translation id="3768725474733206671">ଶେଷରେ ବନ୍ଦ କରାଯାଇଥିବା ଟାବକୁ ପୁଣି ଖୋଲନ୍ତୁ</translation>
 <translation id="3771033907050503522">ଇନ୍‍କଗ୍ନିଟୋ ଟାବ୍‍</translation>
 <translation id="3775743491439407556">ସିଙ୍କ୍ କାର୍ଯ୍ୟ କରୁନାହିଁ</translation>
 <translation id="3779810277399252432">କୌଣସି ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ନାହିଁ।</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">ଏହି ସାଇଟ୍ ଅନୁବାଦ କରିବାକୁ ଅଫର୍ କରନ୍ତୁ</translation>
 <translation id="3810973564298564668">ପରିଚାଳନା</translation>
 <translation id="3819183753496523827">ଆପଣ ଅଫଲାଇନ୍ ଅଛନ୍ତି। ଆପଣଙ୍କ ଇଣ୍ଟରନେଟ୍ ସଂଯୋଗକୁ ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
+<translation id="3835964409414434850">ପରବର୍ତ୍ତୀ ଟାବକୁ ଯାଆନ୍ତୁ</translation>
 <translation id="385051799172605136">ପଛକୁ</translation>
 <translation id="3858860766373142691">ନାମ</translation>
 <translation id="3861486700625780712">ଅନୁସରଣ କରିବା ବନ୍ଦ କରନ୍ତୁ</translation>
+<translation id="387280738075653372">ଏଠାରେ Chrome ଡାଉନଲୋଡ କରନ୍ତୁ।</translation>
 <translation id="3892144330757387737">ଆପଣ ଏଠାରେ ଆପଣଙ୍କ ଇତିହାସ ପାଇବେ</translation>
 <translation id="3897092660631435901">ମେନୁ</translation>
 <translation id="3904829425754749514">ଆପଣଙ୍କ ସଂସ୍ଥା ସିଙ୍କ ବନ୍ଦ କରିଦେଇଛି। ଆପଣ ଏବେ ବି ଏହି ଡିଭାଇସରେ ଆପଣଙ୍କର ବୁକମାର୍କ, ଇତିହାସ, ପାସୱାର୍ଡ ଏବଂ ଅନ୍ୟ ସେଟିଂସ ଦେଖିପାରିବେ। ଯଦି ଆପଣ ପରିବର୍ତ୍ତନ କରନ୍ତି, ତେବେ ସେଗୁଡ଼ିକୁ ଆପଣଙ୍କ ଆକାଉଣ୍ଟ ସହିତ ସିଙ୍କ କରାଯିବ ନାହିଁ।</translation>
@@ -543,6 +549,7 @@
 <translation id="5300589172476337783">ପ୍ରଦର୍ଶନ କରନ୍ତୁ</translation>
 <translation id="5317780077021120954">ସଞ୍ଚୟ</translation>
 <translation id="5339316356165661760">ସିଙ୍କ୍ ଚାଲୁ କରନ୍ତୁ</translation>
+<translation id="536067926684072644">ବୁକମାର୍କଗୁଡ଼ିକୁ ଦେଖାନ୍ତୁ</translation>
 <translation id="5360976571138293719">ଗୋପନୀୟତା, ସୁରକ୍ଷା ଏବଂ ଡାଟା ସଂଗ୍ରହ ସମ୍ବନ୍ଧିତ ଅଧିକ ସେଟିଂସ୍ ପାଇଁ <ph name="BEGIN_LINK" />Google ସେବାଗୁଡ଼ିକୁ<ph name="END_LINK" /> ଦେଖନ୍ତୁ।</translation>
 <translation id="5386314158584363703">ଆପଣ ଅନୁସରଣ କରୁଥିବା ସାଇଟଗୁଡ଼ିକୁ ଏଠାରେ ପାଇବେ</translation>
 <translation id="5388358297987318779">ଛବି ଖୋଲନ୍ତୁ</translation>
@@ -575,6 +582,7 @@
 <translation id="5631164295104953411">ପେମେଣ୍ଟ ପଦ୍ଧତି ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="5636282538000367086">Chromeରେ କଣ ନୂଆ ଅଛି ତାହା ଜାଣନ୍ତୁ</translation>
 <translation id="5652623411397330904">ଆପଣ ଟ୍ରାକ କରୁଥିବା ପ୍ରଡକ୍ଟଗୁଡ଼ିକ ଏଠାରେ ଦେଖାଯିବ।</translation>
+<translation id="5657859710142657190">ଟାବ ଗ୍ରିଡକୁ ଯାଆନ୍ତୁ</translation>
 <translation id="5659593005791499971">ଇମେଲ୍</translation>
 <translation id="5669335982068190158">ଆପଣଙ୍କ iPhone ରିସେଟର ଅଂଶ ଭାବରେ ଆପଣଙ୍କୁ ସାଇନ ଆଉଟ କରାଯାଇଛି। ସାଇନ ଇନ କରିବାକୁ ନିମ୍ନରେ "ଜାରି ରଖନ୍ତୁ"ରେ ଟାପ କରନ୍ତୁ।</translation>
 <translation id="5669528293118408608">www</translation>
@@ -591,6 +599,7 @@
 <translation id="5737974891429562743">ଆକାଉଣ୍ଟ ସାଇନ୍-ଇନ୍ ବିବରଣୀର ସମୟସୀମା ଶେଷ ହୋଇଛି। ସିଙ୍କ ଆରମ୍ଭ କରିବା ପାଇଁ ଅପ୍‌ଡେଟ୍‌ କରନ୍ତୁ।</translation>
 <translation id="5738385766833540397">ଆପଣ ଟ୍ରାକ କରୁଥିବା ପ୍ରଡକ୍ଟଗୁଡ଼ିକ ପାଇଁ କିପରି ମୂଲ୍ୟ ହ୍ରାସ ଆଲର୍ଟ ପାଇବେ ତାହା ପରିଚାଳନା କରନ୍ତୁ</translation>
 <translation id="5738887413654608789">ଏହା ଆପଣଙ୍କ ପରିବେଶ ଉପରେ ଆଧାର କରି ପ୍ରାସଙ୍ଗିକ ୱେବ୍‍ପୃଷ୍ଠା ଆବିଷ୍କାର କରିବାକୁ ଦିଏ।</translation>
+<translation id="5745916533876677730">ପୂର୍ବବର୍ତ୍ତୀ ଟାବକୁ ଯାଆନ୍ତୁ</translation>
 <translation id="5758631781033351321">ଆପଣ ଏଠାରେ ଆପଣଙ୍କ ପଢ଼ିବା ତାଲିକା ପାଇବେ</translation>
 <translation id="5765456154762864099">ମେନୁ → ସେଟିଂସ → ଡିଫଲ୍ଟ ବ୍ରାଉଜର</translation>
 <translation id="5782227691023083829">ଅନୁବାଦ ହେଉଛି...</translation>
@@ -607,6 +616,7 @@
 <translation id="5857090052475505287">ନୂତନ ଫୋଲ୍ଡର୍</translation>
 <translation id="5857675236236529683">ଆପଣ ପ୍ରସ୍ତୁତ ହେଲେ, ଆପଣଙ୍କ ପଢ଼ିବା ତାଲିକାଟି ଏଠାରେ ପାଆନ୍ତୁ</translation>
 <translation id="5857770089550859117">ସିଙ୍କ୍‌ କରିବାକୁ ପାସ୍‌ଫ୍ରେଜ୍ ଆବଶ୍ୟକ।</translation>
+<translation id="5859715514067755465">ଫରୱାର୍ଡ କରନ୍ତୁ</translation>
 <translation id="5860033963881614850">ବନ୍ଦ ଅଛି</translation>
 <translation id="5869029295770560994">ଠିକ୍ ଅଛି, ବୁଝିଗଲି</translation>
 <translation id="5871497086027727873">1ଟି ଆଇଟମ୍‌ ଘୁଞ୍ଚାଇ ଦିଆଗଲା</translation>
@@ -651,6 +661,7 @@
 <translation id="6152406514676263192">ଆପଣଙ୍କ ରୁଚି ଆଧାରରେ ସବୁଠାରୁ ଅଧିକ ପ୍ରାସଙ୍ଗିକ ବିଷୟବସ୍ତୁ ପାଇଁ ସିଙ୍କ କରନ୍ତୁ।</translation>
 <translation id="6159839020698489198">ଇଚ୍ଛାଧୀନ</translation>
 <translation id="6165508094623778733">ଅଧିକ ଜାଣନ୍ତୁ</translation>
+<translation id="6170450281939467187">ଅନୁବାଦ ବିଫଳ ହୋଇଛି</translation>
 <translation id="6177442314419606057">Chromeରେ ଖୋଜନ୍ତୁ</translation>
 <translation id="6184086493125982861">ଟାବ୍‌ ଦେଖାନ୍ତୁ</translation>
 <translation id="6187302354554850004">ଗତଥର ସିଙ୍କ୍ ହୋଇଛି: <ph name="LAST_USED_TIME" /></translation>
@@ -686,6 +697,7 @@
 <translation id="6374469231428023295">ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ</translation>
 <translation id="6377118281273296434">ସାଇଟ୍ ସୁରକ୍ଷା</translation>
 <translation id="6380866119319257197">ଯଦି ଆପଣ ନିଜର ପାସ୍‌ଫ୍ରେଜ୍ ଭୁଲିଯାଇଛନ୍ତି କିମ୍ବା ଏହି ସେଟିଂ ବଦଳାବାକୁ ଚାହୁଁଛନ୍ତି, ତେବେ <ph name="BEGIN_LINK" />ସିଙ୍କ୍ ରିସେଟ୍ କରନ୍ତୁ<ph name="END_LINK" />।</translation>
+<translation id="6383719166112032471">ଲୋକେସନ ଖୋଲନ୍ତୁ…</translation>
 <translation id="6387994324662817823">ଏହି ଡିଭାଇସରେ ପାସୱାର୍ଡଗୁଡ଼ିକ କେବଳ Google ପାସୱାର୍ଡ ମ୍ୟାନେଜରରେ ସେଭ କରାଯାଏ।</translation>
 <translation id="6389470377220713856">କାର୍ଡରେ ଥିବା ନାମ</translation>
 <translation id="6403371459378431832">ସମସ୍ତ ଡିଭାଇସରେ ଆପଣଙ୍କ ଡାଟା ସିଙ୍କ କରନ୍ତୁ</translation>
@@ -697,6 +709,7 @@
 <ph name="TIME" /> ବେଳେ ଆପଣଙ୍କ ସିଙ୍କ୍ ପାସ୍‌ଫ୍ରେଜ୍ ସହିତ ଆପଣଙ୍କର ଡାଟାକୁ ଏନକ୍ରିପ୍ଟ କରାଗଲା। ସିଙ୍କ୍ କରିବା ପାଇଁ ତାହା ଲେଖନ୍ତୁ।</translation>
 <translation id="6418346271604475326">PDF ପ୍ରସ୍ତୁତ କରୁଛି</translation>
 <translation id="6434591244308415567">ଏକ ତ୍ରୁଟି ଦେଖାଦେଲା। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
+<translation id="6435236283694032571">ପଢ଼ିବା ତାଲିକାରେ ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="6439338047467462846">ସବୁକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation>
 <translation id="6445051938772793705">ଦେଶ</translation>
 <translation id="6445981559479772097">ମେସେଜ୍ ପଠାଗଲା।</translation>
@@ -861,6 +874,7 @@
 <translation id="7701040980221191251">କିଛି ନାହିଁ</translation>
 <translation id="7720410380936703141">ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ</translation>
 <translation id="7726702057919861819">ମେନୁ → ଇତିହାସ → ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରନ୍ତୁ</translation>
+<translation id="7738120385185846461">ଏକ ସମସ୍ୟାର ରିପୋର୍ଟ କରନ୍ତୁ…</translation>
 <translation id="7741325291586284254">ନୂଆ ଇନକଗ୍ନିଟୋ ଟାବ୍ ପୃଷ୍ଠା</translation>
 <translation id="7756478488453921771">ମେନୁ → ସେଟିଂସ → ପେମେଣ୍ଟ ପଦ୍ଧତିଗୁଡ଼ିକ</translation>
 <translation id="7765158879357617694">ନିଅନ୍ତୁ</translation>
@@ -955,6 +969,7 @@
 <translation id="8459333855531264009">ସୁରକ୍ଷିତ ନୁହେଁ</translation>
 <translation id="8487667956631253959">ଚାଲୁ କରନ୍ତୁ</translation>
 <translation id="8487700953926739672">ଅଫ୍‍ଲାଇନ୍‌ରେ ଉପଲବ୍ଧ</translation>
+<translation id="8488923644885757471">ନୂଆ ୱିଣ୍ଡୋ</translation>
 <translation id="8490978609246021741">ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ସେଭ୍ କରନ୍ତୁ</translation>
 <translation id="8503813439785031346">ଉପଯୋଗକର୍ତ୍ତାନାମ</translation>
 <translation id="850600235656508448">ଇନ୍‌କଗ୍ନିଟୋରେ ଖୋଲନ୍ତୁ</translation>
@@ -1007,6 +1022,7 @@
 <translation id="8881801611828450202">ଏହି ଛବି ପାଇଁ <ph name="SEARCH_ENGINE" /> ସର୍ଚ୍ଚ କରନ୍ତୁ</translation>
 <translation id="8891935667620843985">ଆପଣ Chromeକୁ ଆପଣଙ୍କ ଡିଫଲ୍ଟ ବ୍ରାଉଜର ଆପ ଭାବେ ସେଟ କରି ଲିଙ୍କଗୁଡ଼ିକୁ ଏଥିରେ ସ୍ୱଚାଳିତ ଭାବେ ଖୋଲିପାରିବେ।</translation>
 <translation id="8898822736010347272">ନୂଆ ବିପଦଗୁଡ଼ିକୁ ଖୋଜି ପାଇବାରେ ଏବଂ ୱେବରେ ସମସ୍ତଙ୍କୁ ସୁରକ୍ଷା ଦେବାରେ ସାହାଯ୍ୟ କରିବାକୁ, ଆପଣ ଭିଜିଟ୍ କରୁଥିବା କିଛି ୱେବପୃଷ୍ଠାର URLଗୁଡ଼ିକ, ସୀମିତ ସିଷ୍ଟମ୍ ସୂଚନା ଏବଂ କିଛି ୱେବପୃଷ୍ଠାର ବିଷୟବସ୍ତୁ Googleକୁ ପଠାଏ।</translation>
+<translation id="890565330728586731">ପଛକୁ ଫେରନ୍ତୁ</translation>
 <translation id="8909135823018751308">ସେୟାର୍ କରନ୍ତୁ…</translation>
 <translation id="8911759861431145525">"ଯୋଗ କରନ୍ତୁ"ରେ ଟାପ କରନ୍ତୁ ତା'ପରେ ଆପଣଙ୍କ ସୂଚନା ଲେଖନ୍ତୁ</translation>
 <translation id="891658175948553296">ଏକ ସାଇଟରେ ଟେକ୍ସଟକୁ ହାଇଲାଇଟ କରନ୍ତୁ</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 f62f6de8..a9b5fdc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">Pesquisar "${searchPhrase}" no Chrome</translation>
 <translation id="1242044645101871359">Fazer login novamente</translation>
 <translation id="1254117744268754948">Escolher pasta</translation>
+<translation id="1254424942107648268">Localizar anterior</translation>
 <translation id="1258491128795710625">O que há de novo</translation>
 <translation id="1265739287306757398">Saiba como</translation>
 <translation id="1272079795634619415">Parar</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">Você já salvou uma senha em <ph name="WEBSITE" /></translation>
 <translation id="2476359652512522418">Não selecionada</translation>
 <translation id="2482878487686419369">Notificações</translation>
+<translation id="2496626742194544812">Ir para a primeira guia</translation>
 <translation id="2500374554657206846">Opções para salvar senha</translation>
 <translation id="2523363575747517183">Este site está tentando repetidamente abrir outro aplicativo.</translation>
 <translation id="2529021024822217800">Abrir todos</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">Cookies em uso</translation>
 <translation id="2648803196158606475">Excluir lidas</translation>
 <translation id="2653659639078652383">Enviar</translation>
+<translation id="2664621323652615289">Parar</translation>
 <translation id="2671426118752779020">Você pode usar as senhas armazenadas no Gerenciador de senhas do Google em outros apps do iPhone.</translation>
 <translation id="2690858294534178585">A câmera está sendo usada</translation>
 <translation id="2691653761409724435">Não está disponível off-line</translation>
@@ -226,6 +229,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Não foi possível criar o link</translation>
 <translation id="2786701870377699570">Pesquisar guias em dispositivos sincronizados</translation>
+<translation id="2797029671965852011">Mostrar histórico</translation>
 <translation id="2800683595868705743">Sair do seletor guias</translation>
 <translation id="2815198996063984598">2. Toque em "App do navegador padrão"</translation>
 <translation id="2820289420301699633">Seu administrador pode controlar o Chrome e acessar os dados desse navegador</translation>
@@ -328,7 +332,9 @@
 <translation id="3530206579861815432">Encontre com rapidez as guias abertas e fechadas recentemente nos seus dispositivos sincronizados.</translation>
 <translation id="3533202363250687977">Fechar todas as guias anônimas</translation>
 <translation id="3533436815740441613">Nova guia</translation>
+<translation id="3540141921715814660">Adicionar aos favoritos</translation>
 <translation id="3551320343578183772">Fechar guia</translation>
+<translation id="3565207542107370586">Limpar dados de navegação…</translation>
 <translation id="3575234738189584619">Pesquisar com o Lens</translation>
 <translation id="3581564640715911333">Oferecer para traduzir páginas em outros idiomas</translation>
 <translation id="3588820906588687999">Abrir imagem em "Nova guia"</translation>
@@ -347,6 +353,7 @@
 <translation id="37207012422556617">Pesquisas em alta</translation>
 <translation id="3740397331642243698">Abre os URLs inseridos na navegação anônima do Google Chrome.</translation>
 <translation id="3762232513783804601">Criado para o iPad</translation>
+<translation id="3768725474733206671">Reabrir a última guia fechada</translation>
 <translation id="3771033907050503522">Guias anônimas</translation>
 <translation id="3775743491439407556">A sincronização não está funcionando</translation>
 <translation id="3779810277399252432">Sem conexão com a Internet.</translation>
@@ -356,10 +363,13 @@
 <translation id="380329542618494757">Nome</translation>
 <translation id="3803696231112616155">Oferecer a opção de traduzir esse site</translation>
 <translation id="3810973564298564668">Gerenciar</translation>
+<translation id="3818293389945649617">Localizar próximo</translation>
 <translation id="3819183753496523827">Você está off-line. Verifique sua conexão de Internet e tente novamente.</translation>
+<translation id="3835964409414434850">Ir para a próxima guia</translation>
 <translation id="385051799172605136">Voltar</translation>
 <translation id="3858860766373142691">Nome</translation>
 <translation id="3861486700625780712">Parar de seguir</translation>
+<translation id="387280738075653372">Faça o download do Chrome aqui.</translation>
 <translation id="3892144330757387737">Você verá seu histórico aqui</translation>
 <translation id="3897092660631435901">Menu</translation>
 <translation id="3904829425754749514">Sua organização desativou a sincronização. Ainda é possível ver seus favoritos, seu histórico, suas senhas e outras configurações neste dispositivo. Se você fizer mudanças, elas não serão sincronizadas com sua conta.</translation>
@@ -385,6 +395,7 @@
 <translation id="4049507953662678203">Verifique se você tem uma conexão de rede e tente novamente.</translation>
 <translation id="4063300985191096908">Acessar o feed</translation>
 <translation id="408404951701638773">Ficou mais fácil acessar a barra de pesquisa</translation>
+<translation id="4092655288299341041">Mostrar "Ajuda"</translation>
 <translation id="4108998448622696017">Detecta e avisa você sobre eventos perigosos quando eles acontecerem.</translation>
 <translation id="411254640334432676">Falha no download.</translation>
 <translation id="4112644173421521737">Pesquisar</translation>
@@ -545,6 +556,7 @@
 <translation id="5300589172476337783">Mostrar</translation>
 <translation id="5317780077021120954">Salvar</translation>
 <translation id="5339316356165661760">Ativar a sincronização</translation>
+<translation id="536067926684072644">Mostrar favoritos</translation>
 <translation id="5360976571138293719">Para ver mais configurações relacionadas à privacidade, segurança e coleta de dados, acesse <ph name="BEGIN_LINK" />Serviços do Google<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Os sites que você segue vão aparecer aqui</translation>
 <translation id="5388358297987318779">Abrir imagem</translation>
@@ -577,6 +589,7 @@
 <translation id="5631164295104953411">Adicionar forma de pagamento.</translation>
 <translation id="5636282538000367086">Confira as novidades do Chrome</translation>
 <translation id="5652623411397330904">Os produtos que você acompanha vão aparecer aqui.</translation>
+<translation id="5657859710142657190">Acessar a grade de guias</translation>
 <translation id="5659593005791499971">E-mail</translation>
 <translation id="5669335982068190158">A conta foi desconectada como parte da redefinição do iPhone. Toque em "Continuar" abaixo para fazer login.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +606,7 @@
 <translation id="5737974891429562743">Os detalhes de login da conta estão desatualizados. Atualize-os para iniciar a sincronização.</translation>
 <translation id="5738385766833540397">Gerencie como você recebe alertas de redução no preço de produtos monitorados.</translation>
 <translation id="5738887413654608789">Isso permite que você descubra páginas da Web relevantes com base nos seus arredores.</translation>
+<translation id="5745916533876677730">Ir para a guia anterior</translation>
 <translation id="5758631781033351321">Você encontrará sua lista de leituras aqui</translation>
 <translation id="5765456154762864099">Menu → Configurações → Navegador padrão</translation>
 <translation id="5782227691023083829">Traduzindo...</translation>
@@ -609,6 +623,7 @@
 <translation id="5857090052475505287">Nova pasta</translation>
 <translation id="5857675236236529683">Quando estiver tudo pronto, consulte sua lista de leitura aqui</translation>
 <translation id="5857770089550859117">É necessário ter uma senha longa para iniciar a sincronização.</translation>
+<translation id="5859715514067755465">Avançar</translation>
 <translation id="5860033963881614850">Desativado</translation>
 <translation id="5869029295770560994">Ok, entendi</translation>
 <translation id="5871497086027727873">1 item movido</translation>
@@ -653,6 +668,7 @@
 <translation id="6152406514676263192">Sincronize para receber conteúdo mais relevante com base nos seus interesses.</translation>
 <translation id="6159839020698489198">opcional</translation>
 <translation id="6165508094623778733">Saiba mais</translation>
+<translation id="6170450281939467187">Falha na tradução</translation>
 <translation id="6177442314419606057">Pesquisar no Chrome</translation>
 <translation id="6184086493125982861">Mostrar guias</translation>
 <translation id="6187302354554850004">Última sincronização: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +704,7 @@
 <translation id="6374469231428023295">Repetir</translation>
 <translation id="6377118281273296434">Segurança do site</translation>
 <translation id="6380866119319257197">Se você esquecer a senha longa ou quiser alterar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Abrir local…</translation>
 <translation id="6387994324662817823">As senhas são salvas no Gerenciador de senhas do Google somente neste dispositivo.</translation>
 <translation id="6389470377220713856">Nome no cartão</translation>
 <translation id="6403371459378431832">Sincronize seus dados em todos os dispositivos</translation>
@@ -699,6 +716,7 @@
 Seus dados foram criptografados com sua senha longa de sincronização no dia <ph name="TIME" />. Informe-a para começar a sincronização.</translation>
 <translation id="6418346271604475326">Preparando PDF</translation>
 <translation id="6434591244308415567">Ocorreu um erro. Tente novamente mais tarde.</translation>
+<translation id="6435236283694032571">Adicionar à Lista de leitura</translation>
 <translation id="6439338047467462846">Permitir todos</translation>
 <translation id="6445051938772793705">País</translation>
 <translation id="6445981559479772097">Mensagem enviada.</translation>
@@ -770,6 +788,7 @@
 <translation id="6859944681507688231">Para ler um código QR ou cartão de crédito, ative a câmera nas configurações.</translation>
 <translation id="6867369562105931222">senha</translation>
 <translation id="6869389390665537774">Você pode ver as páginas visitadas ou apagá-las do histórico</translation>
+<translation id="687135068089457384">Mostrar configurações</translation>
 <translation id="6873263987691478642">Visualização dividida</translation>
 <translation id="6882836635272038266">Proteção padrão contra sites, downloads e extensões perigosos.</translation>
 <translation id="6888009575607455378">Tem certeza de que quer descartar suas alterações?</translation>
@@ -863,6 +882,7 @@
 <translation id="7701040980221191251">Nenhuma</translation>
 <translation id="7720410380936703141">TENTAR NOVAMENTE</translation>
 <translation id="7726702057919861819">Menu → Histórico → Remover dados de navegação</translation>
+<translation id="7738120385185846461">Informar um problema…</translation>
 <translation id="7741325291586284254">Nova página de guia anônima</translation>
 <translation id="7756478488453921771">Menu → Configurações → Formas de pagamento</translation>
 <translation id="7765158879357617694">Mover</translation>
@@ -875,11 +895,13 @@
 <translation id="7807060072011926525">Fornecido pelo Google</translation>
 <translation id="7839985698273989086">Página offline</translation>
 <translation id="7840771868269352570">Os itens selec. serão removidos.</translation>
+<translation id="7845466610722898">Mostrar "Lista de leitura"</translation>
 <translation id="784551991304901159">Para ver o conteúdo, selecione "Ativar" no menu</translation>
 <translation id="7853202427316060426">Atividade</translation>
 <translation id="7856733331829174190">Falha no download</translation>
 <translation id="785938070103630874">Abrir senhas, formas de pagamento, endereço e mais</translation>
 <translation id="7859704718976024901">Histórico de navegação</translation>
+<translation id="7879275349003161544">Mostrar downloads</translation>
 <translation id="7884694604461143138">Histórico de pesquisa (<ph name="COUNT" /> encontrados)</translation>
 <translation id="7887198238286927132">Para proteger sua privacidade, o Chrome não preencherá esse campo automaticamente.</translation>
 <translation id="7911190106180361398">Sua organização não permite que você sincronize tudo.</translation>
@@ -957,6 +979,7 @@
 <translation id="8459333855531264009">Não seguro</translation>
 <translation id="8487667956631253959">Ativada</translation>
 <translation id="8487700953926739672">Disponível off-line</translation>
+<translation id="8488923644885757471">Nova janela</translation>
 <translation id="8490978609246021741">Salvar alterações</translation>
 <translation id="8503813439785031346">Nome de usuário</translation>
 <translation id="850600235656508448">Abrir em modo de navegação anônima</translation>
@@ -991,6 +1014,7 @@
 <translation id="8741995161408053644">Sua Conta do Google pode ter outras formas de histórico de navegação em <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
 <translation id="8750037785291841318">Você verá suas guias aqui</translation>
 <translation id="8756969031206844760">Atualizar senha?</translation>
+<translation id="8763613688786959833">Ir para a última guia</translation>
 <translation id="8764015330924122850">Parar de seguir <ph name="DOMAIN_NAME" /></translation>
 <translation id="8775144690796719618">URL inválido</translation>
 <translation id="8787968206789828143">Pesquisar na Web</translation>
@@ -1009,6 +1033,7 @@
 <translation id="8881801611828450202">Pesquisar esta imagem no <ph name="SEARCH_ENGINE" /></translation>
 <translation id="8891935667620843985">Defina o Chrome como seu navegador padrão para abrir links nele automaticamente.</translation>
 <translation id="8898822736010347272">Envia ao Google URLs de algumas páginas que você visita, informações do sistema limitadas e parte do conteúdo das páginas para ajudar a descobrir novas ameaças e proteger todos os usuários na Web.</translation>
+<translation id="890565330728586731">Voltar</translation>
 <translation id="8909135823018751308">Compartilhar...</translation>
 <translation id="8911759861431145525">Toque em "Adicionar" e depois insira suas informações</translation>
 <translation id="891658175948553296">Destacar texto em um site</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index cdfdcf5..331e548 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Nu s-a putut crea linkul</translation>
 <translation id="2786701870377699570">Caută în filele de pe toate dispozitivele sincronizate</translation>
+<translation id="2797029671965852011">Afișează istoricul</translation>
 <translation id="2800683595868705743">Părăsește comutatorul de file</translation>
 <translation id="2815198996063984598">2. atinge Aplicația browser prestabilită;</translation>
 <translation id="2820289420301699633">Administratorul deține controlul asupra browserului Chrome și poate accesa datele asociate</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">Găsește rapid filele deschise și închise recent de pe toate dispozitivele sincronizate.</translation>
 <translation id="3533202363250687977">Închide toate filele incognito</translation>
 <translation id="3533436815740441613">Filă nouă</translation>
+<translation id="3540141921715814660">Adaugă în Marcaje</translation>
 <translation id="3551320343578183772">Închide fila</translation>
+<translation id="3565207542107370586">Șterge datele de navigare…</translation>
 <translation id="3575234738189584619">Caută cu Lens</translation>
 <translation id="3581564640715911333">Oferă traducerea paginilor în alte limbi</translation>
 <translation id="3588820906588687999">Deschide imaginea într-o filă nouă</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">Căutări populare</translation>
 <translation id="3740397331642243698">Deschide adresele URL introduse în Google Chrome în modul incognito.</translation>
 <translation id="3762232513783804601">Creat pentru iPad</translation>
+<translation id="3768725474733206671">Redeschide ultima filă închisă</translation>
 <translation id="3771033907050503522">File incognito</translation>
 <translation id="3775743491439407556">Sincronizarea nu funcționează</translation>
 <translation id="3779810277399252432">Nicio conexiune la internet.</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">Oferă traducerea acestui site</translation>
 <translation id="3810973564298564668">Gestionează</translation>
 <translation id="3819183753496523827">Ești offline. Verifică starea conexiunii la internet și încearcă din nou.</translation>
+<translation id="3835964409414434850">Accesează fila următoare</translation>
 <translation id="385051799172605136">Înapoi</translation>
 <translation id="3858860766373142691">Nume</translation>
 <translation id="3861486700625780712">Anulează urmărirea</translation>
+<translation id="387280738075653372">Descarcă Chrome de aici.</translation>
 <translation id="3892144330757387737">Aici vei vedea istoricul</translation>
 <translation id="3897092660631435901">Meniu</translation>
 <translation id="3904829425754749514">Organizația ta a dezactivat sincronizarea. Poți vedea în continuare marcajele, istoricul, parolele și alte setări pe acest dispozitiv. Dacă faci modificări, ele nu se vor sincroniza cu contul.</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">Afișează</translation>
 <translation id="5317780077021120954">Salvează</translation>
 <translation id="5339316356165661760">Activează sincronizarea</translation>
+<translation id="536067926684072644">Afișează marcajele</translation>
 <translation id="5360976571138293719">Pentru mai multe setări privind confidențialitatea, securitatea și colectarea datelor, consultă <ph name="BEGIN_LINK" />Serviciile Google<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Vei găsi site-urile urmărite aici</translation>
 <translation id="5388358297987318779">Deschide imaginea</translation>
@@ -577,6 +584,7 @@
 <translation id="5631164295104953411">Adaugă o metodă de plată</translation>
 <translation id="5636282538000367086">Află noutățile din Chrome</translation>
 <translation id="5652623411397330904">Produsele pe care le urmărești vor apărea aici.</translation>
+<translation id="5657859710142657190">Accesează Grila de file</translation>
 <translation id="5659593005791499971">Adresă de e-mail</translation>
 <translation id="5669335982068190158">Te-ai deconectat în cadrul resetării dispozitivului iPhone. Atinge Continuă pentru a te conecta.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +601,7 @@
 <translation id="5737974891429562743">Datele de conectare la cont sunt învechite. Actualizează pentru a începe sincronizarea.</translation>
 <translation id="5738385766833540397">Gestionează modul în care primești alertele de scădere de preț pentru produsele pe care le urmărești</translation>
 <translation id="5738887413654608789">Astfel, poți descoperi pagini web relevante în funcție de lucrurile din jurul tău.</translation>
+<translation id="5745916533876677730">Accesează fila anterioară</translation>
 <translation id="5758631781033351321">Aici vei vedea lista de lectură</translation>
 <translation id="5765456154762864099">Meniu → Setări → Browser prestabilit</translation>
 <translation id="5782227691023083829">Se traduce...</translation>
@@ -609,6 +618,7 @@
 <translation id="5857090052475505287">Dosar nou</translation>
 <translation id="5857675236236529683">Când ești gata, vei găsi lista de lecturi aici</translation>
 <translation id="5857770089550859117">Pentru a începe sincronizarea este necesară expresia de acces.</translation>
+<translation id="5859715514067755465">Înainte</translation>
 <translation id="5860033963881614850">Dezactivat</translation>
 <translation id="5869029295770560994">OK, am înțeles</translation>
 <translation id="5871497086027727873">Un element mutat</translation>
@@ -653,6 +663,7 @@
 <translation id="6152406514676263192">Sincronizează pentru conținutul cel mai relevant în funcție de interesele tale.</translation>
 <translation id="6159839020698489198">opțional</translation>
 <translation id="6165508094623778733">Află mai multe</translation>
+<translation id="6170450281939467187">Traducere nereușită</translation>
 <translation id="6177442314419606057">Caută în Chrome</translation>
 <translation id="6184086493125982861">Afișează butonul File</translation>
 <translation id="6187302354554850004">Ultima sincronizare: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +699,7 @@
 <translation id="6374469231428023295">Încearcă din nou</translation>
 <translation id="6377118281273296434">Securitatea site-ului</translation>
 <translation id="6380866119319257197">Dacă uiți expresia de acces sau dorești să modifici această setare, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Deschide locația…</translation>
 <translation id="6387994324662817823">Parolele sunt salvate în Managerul de parole Google numai pe acest dispozitiv.</translation>
 <translation id="6389470377220713856">Nume de pe card</translation>
 <translation id="6403371459378431832">Sincronizează-ți datele pe toate dispozitivele</translation>
@@ -699,6 +711,7 @@
 Datele au fost criptate cu expresia de acces pentru sincronizare la <ph name="TIME" />. Introdu-o pentru a începe sincronizarea.</translation>
 <translation id="6418346271604475326">Se pregătește fișierul PDF</translation>
 <translation id="6434591244308415567">A apărut o eroare, încearcă mai târziu.</translation>
+<translation id="6435236283694032571">Adaugă în Lista de lecturi</translation>
 <translation id="6439338047467462846">Permite-le pe toate</translation>
 <translation id="6445051938772793705">Țară</translation>
 <translation id="6445981559479772097">Mesaj trimis.</translation>
@@ -863,6 +876,7 @@
 <translation id="7701040980221191251">Niciuna</translation>
 <translation id="7720410380936703141">ÎNCEARCĂ DIN NOU</translation>
 <translation id="7726702057919861819">Meniu → Istoric → Șterge datele de navigare</translation>
+<translation id="7738120385185846461">Semnalează o problemă…</translation>
 <translation id="7741325291586284254">Pagina Filă incognito nouă</translation>
 <translation id="7756478488453921771">Meniu → Setări → Metode de plată</translation>
 <translation id="7765158879357617694">Mută</translation>
@@ -957,6 +971,7 @@
 <translation id="8459333855531264009">Nesecurizat</translation>
 <translation id="8487667956631253959">Aprinsă</translation>
 <translation id="8487700953926739672">Disponibil offline</translation>
+<translation id="8488923644885757471">Fereastră nouă</translation>
 <translation id="8490978609246021741">Salvează modificările</translation>
 <translation id="8503813439785031346">Nume de utilizator</translation>
 <translation id="850600235656508448">Deschide în modul incognito</translation>
@@ -1009,6 +1024,7 @@
 <translation id="8881801611828450202">Caută această imagine cu <ph name="SEARCH_ENGINE" /></translation>
 <translation id="8891935667620843985">Poți deschide automat linkuri în Chrome, setând-o ca aplicație browser prestabilită.</translation>
 <translation id="8898822736010347272">Trimite la Google adrese URL ale unor pagini pe care le accesezi, informații despre sistem limitate și o parte din conținutul paginii pentru a identifica amenințările noi și a proteja toți utilizatorii de pe web.</translation>
+<translation id="890565330728586731">Înapoi</translation>
 <translation id="8909135823018751308">Trimite…</translation>
 <translation id="8911759861431145525">Atinge Adaugă, apoi introdu informațiile tale</translation>
 <translation id="891658175948553296">Evidențiază textul pe un site</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 39e319b..b2bc5b8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Odkaz sa nepodarilo vytvoriť</translation>
 <translation id="2786701870377699570">Vyhľadávanie kariet v synchronizovaných zariadeniach</translation>
+<translation id="2797029671965852011">Zobraziť históriu</translation>
 <translation id="2800683595868705743">Zavrieť Prepínač kariet</translation>
 <translation id="2815198996063984598">2. Klepnite na položku Predvolená aplikácia prehliadača</translation>
 <translation id="2820289420301699633">Chrome ovláda váš správca a má aj prístup k jeho údajom</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">Rýchlo nájdite otvorené a nedávno zavreté karty vo svojich synchronizovaných zariadeniach.</translation>
 <translation id="3533202363250687977">Zavrieť všetky karty inkognito</translation>
 <translation id="3533436815740441613">Nová karta</translation>
+<translation id="3540141921715814660">Pridať medzi záložky</translation>
 <translation id="3551320343578183772">Zatvoriť kartu</translation>
+<translation id="3565207542107370586">Vymazať dáta prehliadania…</translation>
 <translation id="3575234738189584619">Vyhľadávať pomocou funkcie Lens</translation>
 <translation id="3581564640715911333">Ponúkať preklad stránok v ďalších jazykoch</translation>
 <translation id="3588820906588687999">Otvoriť obrázok na novej karte</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">Populárne vyhľadávania</translation>
 <translation id="3740397331642243698">Otvorí zadané webové adresy v prehliadači Google Chrome v režime inkognito.</translation>
 <translation id="3762232513783804601">Vytvorené pre váš iPad</translation>
+<translation id="3768725474733206671">Znova otvoriť poslednú zavretú kartu</translation>
 <translation id="3771033907050503522">Karty inkognito</translation>
 <translation id="3775743491439407556">Synchronizácia nefunguje</translation>
 <translation id="3779810277399252432">Internetové pripojenie nie je k dispozícii.</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">Ponúkať preklad tohto webu</translation>
 <translation id="3810973564298564668">Spravovať</translation>
 <translation id="3819183753496523827">Ste offline. Skontrolujte internetové pripojenie a skúste to znova.</translation>
+<translation id="3835964409414434850">Prejsť na ďalšiu kartu</translation>
 <translation id="385051799172605136">Späť</translation>
 <translation id="3858860766373142691">Názov</translation>
 <translation id="3861486700625780712">Prestať sledovať</translation>
+<translation id="387280738075653372">Tu si stiahnite Chrome.</translation>
 <translation id="3892144330757387737">Tu nájdete svoju históriu</translation>
 <translation id="3897092660631435901">Ponuka</translation>
 <translation id="3904829425754749514">Vaša organizácia vypla synchronizáciu. Naďalej uvidíte všetky svoje záložky, históriu, heslá a ďalšie nastavenia v tomto zariadení. Ak vykonáte zmeny, nebudú synchronizované do vášho účtu.</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">Zobraziť</translation>
 <translation id="5317780077021120954">Uložiť</translation>
 <translation id="5339316356165661760">Zapnúť synchronizáciu</translation>
+<translation id="536067926684072644">Zobraziť záložky</translation>
 <translation id="5360976571138293719">Ďalšie nastavenia týkajúce sa ochrany súkromia, zabezpečenia a zhromažďovania údajov nájdete v sekcii <ph name="BEGIN_LINK" />Služby Googlu<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Tu nájdete svoje sledované weby</translation>
 <translation id="5388358297987318779">Otvoriť obrázok</translation>
@@ -577,6 +584,7 @@
 <translation id="5631164295104953411">Pridať spôsob platby</translation>
 <translation id="5636282538000367086">Zistite, čo je nové v Chrome</translation>
 <translation id="5652623411397330904">Tu sa zobrazia výrobky, ktoré sledujete.</translation>
+<translation id="5657859710142657190">Prejsť na mriežku kariet</translation>
 <translation id="5659593005791499971">E-mail</translation>
 <translation id="5669335982068190158">V rámci resetovania iPhonu vás systém odhlásil. Ak sa chcete prihlásiť, klepnite na Pokračovať nižšie.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +601,7 @@
 <translation id="5737974891429562743">Informácie o prihlásení do účtu sú neaktuálne. Ak chcete spustiť synchronizáciu, aktualizujte ich.</translation>
 <translation id="5738385766833540397">Spravujte, ako dostávate upozornenia na pokles cien výrobkov, ktoré sledujete</translation>
 <translation id="5738887413654608789">Umožní vám to objavovať relevantné webové stránky na základe objektov vo vašom okolí.</translation>
+<translation id="5745916533876677730">Prejsť na predchádzajúcu kartu</translation>
 <translation id="5758631781033351321">Tu nájdete svoj čitateľský zoznam</translation>
 <translation id="5765456154762864099">Ponuka → Nastavenia → Predvolený prehliadač</translation>
 <translation id="5782227691023083829">Prebieha preklad...</translation>
@@ -609,6 +618,7 @@
 <translation id="5857090052475505287">Nový priečinok</translation>
 <translation id="5857675236236529683">Keď bude všetko pripravené, vyhľadajte tu svoj čitateľský zoznam</translation>
 <translation id="5857770089550859117">Spustenie synchronizácie vyžaduje prístupovú frázu.</translation>
+<translation id="5859715514067755465">Dopredu</translation>
 <translation id="5860033963881614850">Vypnuté</translation>
 <translation id="5869029295770560994">Dobre</translation>
 <translation id="5871497086027727873">1 položka bola presunutá</translation>
@@ -653,6 +663,7 @@
 <translation id="6152406514676263192">Synchronizujte a získavajte tak najrelevantnejší obsah na základe svojich záujmov.</translation>
 <translation id="6159839020698489198">nepovinné</translation>
 <translation id="6165508094623778733">Ďalšie informácie</translation>
+<translation id="6170450281939467187">Nepodarilo sa preložiť</translation>
 <translation id="6177442314419606057">Hľadať v Chrome</translation>
 <translation id="6184086493125982861">Zobraziť karty</translation>
 <translation id="6187302354554850004">Synchronizované <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +699,7 @@
 <translation id="6374469231428023295">Skúsiť znova</translation>
 <translation id="6377118281273296434">Zabezpečenie webu</translation>
 <translation id="6380866119319257197">Ak prístupovú frázu zabudnete alebo budete chcieť toto nastavenie zmeniť, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" />.</translation>
+<translation id="6383719166112032471">Otvoriť umiestnenie…</translation>
 <translation id="6387994324662817823">Heslá sa ukladajú do správcu hesiel od Googlu iba v tomto zariadení.</translation>
 <translation id="6389470377220713856">Meno na karte</translation>
 <translation id="6403371459378431832">Synchronizujte údaje vo všetkých zariadeniach</translation>
@@ -699,6 +711,7 @@
 Vaše údaje boli <ph name="TIME" /> zašifrované pomocou vlastnej prístupovej frázy synchronizácie. Keď ju zadáte, synchronizácia sa spustí.</translation>
 <translation id="6418346271604475326">Príprava PDF</translation>
 <translation id="6434591244308415567">Vyskytla sa chyba. Skúste to neskôr.</translation>
+<translation id="6435236283694032571">Pridať do čitateľského zoznamu</translation>
 <translation id="6439338047467462846">Povoliť všetky</translation>
 <translation id="6445051938772793705">Krajina</translation>
 <translation id="6445981559479772097">Správa sa odoslala.</translation>
@@ -863,6 +876,7 @@
 <translation id="7701040980221191251">Žiadne</translation>
 <translation id="7720410380936703141">SKÚSIŤ ZNOVA</translation>
 <translation id="7726702057919861819">Ponuka → História → Vymazať dáta prehliadania</translation>
+<translation id="7738120385185846461">Nahlásiť problém…</translation>
 <translation id="7741325291586284254">Nová stránka s kartou inkognito</translation>
 <translation id="7756478488453921771">Ponuka → Nastavenia → Spôsoby platby</translation>
 <translation id="7765158879357617694">Presunúť</translation>
@@ -957,6 +971,7 @@
 <translation id="8459333855531264009">Nezabezpečené</translation>
 <translation id="8487667956631253959">Zapnúť</translation>
 <translation id="8487700953926739672">K dispozícii offline</translation>
+<translation id="8488923644885757471">Nové okno</translation>
 <translation id="8490978609246021741">Uložiť zmeny</translation>
 <translation id="8503813439785031346">Meno používateľa</translation>
 <translation id="850600235656508448">Otvoriť v režime inkognito</translation>
@@ -1009,6 +1024,7 @@
 <translation id="8881801611828450202">Hľadať tento obrázok v službe <ph name="SEARCH_ENGINE" /></translation>
 <translation id="8891935667620843985">Ak nastavíte Chrome ako predvolený prehliadač, budete v ňom môcť automaticky otvárať odkazy.</translation>
 <translation id="8898822736010347272">Odosiela webové adresy niektorých navštívených stránok, obmedzené informácie o systéme a určitý obsah stránok, aby pomáhalo objavovať nové hrozby a chrániť všetkých na internete.</translation>
+<translation id="890565330728586731">Späť</translation>
 <translation id="8909135823018751308">Zdieľať…</translation>
 <translation id="8911759861431145525">Klepnite na Pridať a zadajte svoje informácie</translation>
 <translation id="891658175948553296">Zvýraznite text na webe</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
index 61283497..6dd0f80 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -229,6 +229,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Unable to Create Link (Pravljenje linka nije uspelo)</translation>
 <translation id="2786701870377699570">Pretražujte kartice na sinhronizovanim uređajima</translation>
+<translation id="2797029671965852011">Prikaži istoriju</translation>
 <translation id="2800683595868705743">Izađi iz prebacivača kartica</translation>
 <translation id="2815198996063984598">2. Dodirnite Podrazumevana aplikacija za pregledanje</translation>
 <translation id="2820289420301699633">Administrator ima kontrolu nad Chrome-om i može da pristupa njegovim podacima</translation>
@@ -331,7 +332,9 @@
 <translation id="3530206579861815432">Brzo pronađite otvorene i nedavno zatvorene kartice na sinhronizovanim uređajima.</translation>
 <translation id="3533202363250687977">Zatvori sve kartice bez arhiviranja</translation>
 <translation id="3533436815740441613">Nova kartica</translation>
+<translation id="3540141921715814660">Dodaj u obeleživače</translation>
 <translation id="3551320343578183772">Zatvori karticu</translation>
+<translation id="3565207542107370586">Obriši podatke pregledanja…</translation>
 <translation id="3575234738189584619">Pretražujte pomoću Objektiva</translation>
 <translation id="3581564640715911333">Ponudi prevod stranica na drugim jezicima</translation>
 <translation id="3588820906588687999">Otvori sliku na novoj kartici</translation>
@@ -350,6 +353,7 @@
 <translation id="37207012422556617">Pretrage u trendu</translation>
 <translation id="3740397331642243698">Otvara unete URL-ove u Google Chrome-u u režimu bez arhiviranja.</translation>
 <translation id="3762232513783804601">Napravljeno za iPad</translation>
+<translation id="3768725474733206671">Ponovo otvori poslednju zatvorenu karticu</translation>
 <translation id="3771033907050503522">Kartice Bez arhiviranja</translation>
 <translation id="3775743491439407556">Sinhronizacija ne radi</translation>
 <translation id="3779810277399252432">Nema internet veze.</translation>
@@ -361,9 +365,11 @@
 <translation id="3810973564298564668">Upravljaj</translation>
 <translation id="3818293389945649617">Pronalazi sledeće</translation>
 <translation id="3819183753496523827">Oflajn ste. Proverite internet vezu i probajte ponovo.</translation>
+<translation id="3835964409414434850">Idi na sledeću karticu</translation>
 <translation id="385051799172605136">Nazad</translation>
 <translation id="3858860766373142691">Naziv</translation>
 <translation id="3861486700625780712">Opozovi praćenje</translation>
+<translation id="387280738075653372">Preuzmite Chrome ovde.</translation>
 <translation id="3892144330757387737">Ovde ćete pronaći istoriju</translation>
 <translation id="3897092660631435901">Meni</translation>
 <translation id="3904829425754749514">Vaša organizacije je isključila sinhronizaciju. I dalje možete da vidite obeleživače, istoriju, lozinke i druga podešavanja na ovom uređaju. Ako unesete promene, one se neće sinhronizovati sa nalogom.</translation>
@@ -550,6 +556,7 @@
 <translation id="5300589172476337783">Prikaži</translation>
 <translation id="5317780077021120954">Sačuvaj</translation>
 <translation id="5339316356165661760">Uključi sinhronizaciju</translation>
+<translation id="536067926684072644">Prikaži obeleživače</translation>
 <translation id="5360976571138293719">Više podešavanja u vezi sa privatnošću, bezbednošću i prikupljanjem podataka potražite u odeljku <ph name="BEGIN_LINK" />Google usluge<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Ovde ćete pronaći sajtove koje pratite</translation>
 <translation id="5388358297987318779">Otvori sliku</translation>
@@ -582,6 +589,7 @@
 <translation id="5631164295104953411">Dodaj načina plaćanja</translation>
 <translation id="5636282538000367086">Šta je novo u Chrome-u</translation>
 <translation id="5652623411397330904">Proizvodi koje pratite će se prikazivati ovde.</translation>
+<translation id="5657859710142657190">Idi na mrežu sa karticama</translation>
 <translation id="5659593005791499971">Imejl</translation>
 <translation id="5669335982068190158">Odjavljeni ste u sklopu resetovanja iPhone-a. Dodirnite Nastavi u nastavku da biste se prijavili.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -598,6 +606,7 @@
 <translation id="5737974891429562743">Podaci za prijavljivanje na nalog su zastareli. Ažurirajte ih da biste započeli sinhronizaciju.</translation>
 <translation id="5738385766833540397">Upravljajte načinom na koji primate obaveštenja o sniženjima za proizvode koje pratite</translation>
 <translation id="5738887413654608789">Ovo vam omogućava da otkrijete relevantne veb-stranice na osnovu okruženja.</translation>
+<translation id="5745916533876677730">Idi na prethodnu karticu</translation>
 <translation id="5758631781033351321">Ovde ćete pronaći listu za čitanje</translation>
 <translation id="5765456154762864099">Meni → Podešavanja → Podrazumevani pregledač</translation>
 <translation id="5782227691023083829">Prevođenje je u toku...</translation>
@@ -614,6 +623,7 @@
 <translation id="5857090052475505287">Novi direktorijum</translation>
 <translation id="5857675236236529683">Kada budete spremni, ovde pronađite listu za čitanje</translation>
 <translation id="5857770089550859117">Za početak sinhronizacije potrebna je pristupna fraza.</translation>
+<translation id="5859715514067755465">Napred</translation>
 <translation id="5860033963881614850">Isključeno</translation>
 <translation id="5869029295770560994">Važi</translation>
 <translation id="5871497086027727873">1 stavka je premeštena</translation>
@@ -658,6 +668,7 @@
 <translation id="6152406514676263192">Sinhronizujte sa najrelevantnijim sadržajem na osnovu interesovanja.</translation>
 <translation id="6159839020698489198">opcionalno</translation>
 <translation id="6165508094623778733">Saznajte više</translation>
+<translation id="6170450281939467187">Prevođenje nije uspelo</translation>
 <translation id="6177442314419606057">Pretražite u Chrome-u</translation>
 <translation id="6184086493125982861">Prikaži kartice</translation>
 <translation id="6187302354554850004">Poslednja sinhron.: <ph name="LAST_USED_TIME" /></translation>
@@ -693,6 +704,7 @@
 <translation id="6374469231428023295">Probaj ponovo</translation>
 <translation id="6377118281273296434">Bezbednost sajta</translation>
 <translation id="6380866119319257197">Ako zaboravite pristupnu frazu ili želite da promenite ovo podešavanje, <ph name="BEGIN_LINK" />resetujte sinhronizaciju<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Otvori lokaciju…</translation>
 <translation id="6387994324662817823">Lozinke se čuvaju u Google menadžeru lozinki samo na ovom uređaju.</translation>
 <translation id="6389470377220713856">Ime i prezime na kartici</translation>
 <translation id="6403371459378431832">Sinhronizujte podatke na svim uređajima</translation>
@@ -704,6 +716,7 @@
 Podaci su šifrovani pomoću pristupne fraze za sinhronizaciju <ph name="TIME" />. Unesite je da biste započeli sinhronizaciju.</translation>
 <translation id="6418346271604475326">Priprema PDF datoteke</translation>
 <translation id="6434591244308415567">Došlo je do greške. Probajte ponovo kasnije.</translation>
+<translation id="6435236283694032571">Dodaj na Listu za čitanje</translation>
 <translation id="6439338047467462846">Sve je dozvoljeno</translation>
 <translation id="6445051938772793705">Zemlja</translation>
 <translation id="6445981559479772097">Poruka je poslata.</translation>
@@ -869,6 +882,7 @@
 <translation id="7701040980221191251">Ništa</translation>
 <translation id="7720410380936703141">PROBAJ PONOVO</translation>
 <translation id="7726702057919861819">Meni → Istorija → Obriši podatke pregledanja</translation>
+<translation id="7738120385185846461">Prijavi problem…</translation>
 <translation id="7741325291586284254">Nova stranica na kartici bez arhiviranja</translation>
 <translation id="7756478488453921771">Meni → Podešavanja → Načini plaćanja</translation>
 <translation id="7765158879357617694">Premesti</translation>
@@ -965,6 +979,7 @@
 <translation id="8459333855531264009">Nije bezbedan</translation>
 <translation id="8487667956631253959">Uključeno</translation>
 <translation id="8487700953926739672">Dostupno van mreže</translation>
+<translation id="8488923644885757471">Novi prozor</translation>
 <translation id="8490978609246021741">Sačuvaj promene</translation>
 <translation id="8503813439785031346">Korisničko ime</translation>
 <translation id="850600235656508448">Otvori u režimu bez arhiviranja</translation>
@@ -1018,6 +1033,7 @@
 <translation id="8881801611828450202">Pretraži ovu sliku u <ph name="SEARCH_ENGINE" />-u</translation>
 <translation id="8891935667620843985">Možete da automatski otvarate linkove u Chrome-u tako što ćete ga podesiti kao podrazumevanu aplikaciju za pregledanje.</translation>
 <translation id="8898822736010347272">Šalje Google-u URL-ove nekih stranica koje posećujete, ograničene informacije o sistemu i određeni sadržaj stranica da bi se otkrile nove pretnje i zaštitili svi širom veba.</translation>
+<translation id="890565330728586731">Nazad</translation>
 <translation id="8909135823018751308">Deli...</translation>
 <translation id="8911759861431145525">Dodirnite Dodaj, pa unesite informacije</translation>
 <translation id="891658175948553296">Istaknite tekst na sajtu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index edba979..9510b90 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -229,6 +229,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">Unable to Create Link (Прављење линка није успело)</translation>
 <translation id="2786701870377699570">Претражујте картице на синхронизованим уређајима</translation>
+<translation id="2797029671965852011">Прикажи историју</translation>
 <translation id="2800683595868705743">Изађи из пребацивача картица</translation>
 <translation id="2815198996063984598">2. Додирните Подразумевана апликација за прегледање</translation>
 <translation id="2820289420301699633">Администратор има контролу над Chrome-ом и може да приступа његовим подацима</translation>
@@ -331,7 +332,9 @@
 <translation id="3530206579861815432">Брзо пронађите отворене и недавно затворене картице на синхронизованим уређајима.</translation>
 <translation id="3533202363250687977">Затвори све картице без архивирања</translation>
 <translation id="3533436815740441613">Нова картица</translation>
+<translation id="3540141921715814660">Додај у обележиваче</translation>
 <translation id="3551320343578183772">Затвори картицу</translation>
+<translation id="3565207542107370586">Обриши податке прегледања…</translation>
 <translation id="3575234738189584619">Претражујте помоћу Објектива</translation>
 <translation id="3581564640715911333">Понуди превод страница на другим језицима</translation>
 <translation id="3588820906588687999">Отвори слику на новој картици</translation>
@@ -350,6 +353,7 @@
 <translation id="37207012422556617">Претраге у тренду</translation>
 <translation id="3740397331642243698">Отвара унете URL-ове у Google Chrome-у у режиму без архивирања.</translation>
 <translation id="3762232513783804601">Направљено за iPad</translation>
+<translation id="3768725474733206671">Поново отвори последњу затворену картицу</translation>
 <translation id="3771033907050503522">Картице Без архивирања</translation>
 <translation id="3775743491439407556">Синхронизација не ради</translation>
 <translation id="3779810277399252432">Нема интернет везе.</translation>
@@ -361,9 +365,11 @@
 <translation id="3810973564298564668">Управљај</translation>
 <translation id="3818293389945649617">Проналази следеће</translation>
 <translation id="3819183753496523827">Офлајн сте. Проверите интернет везу и пробајте поново.</translation>
+<translation id="3835964409414434850">Иди на следећу картицу</translation>
 <translation id="385051799172605136">Назад</translation>
 <translation id="3858860766373142691">Назив</translation>
 <translation id="3861486700625780712">Опозови праћење</translation>
+<translation id="387280738075653372">Преузмите Chrome овде.</translation>
 <translation id="3892144330757387737">Овде ћете пронаћи историју</translation>
 <translation id="3897092660631435901">Мени</translation>
 <translation id="3904829425754749514">Ваша организације је искључила синхронизацију. И даље можете да видите обележиваче, историју, лозинке и друга подешавања на овом уређају. Ако унесете промене, оне се неће синхронизовати са налогом.</translation>
@@ -550,6 +556,7 @@
 <translation id="5300589172476337783">Прикажи</translation>
 <translation id="5317780077021120954">Сачувај</translation>
 <translation id="5339316356165661760">Укључи синхронизацију</translation>
+<translation id="536067926684072644">Прикажи обележиваче</translation>
 <translation id="5360976571138293719">Више подешавања у вези са приватношћу, безбедношћу и прикупљањем података потражите у одељку <ph name="BEGIN_LINK" />Google услуге<ph name="END_LINK" />.</translation>
 <translation id="5386314158584363703">Овде ћете пронаћи сајтове које пратите</translation>
 <translation id="5388358297987318779">Отвори слику</translation>
@@ -582,6 +589,7 @@
 <translation id="5631164295104953411">Додај начина плаћања</translation>
 <translation id="5636282538000367086">Шта је ново у Chrome-у</translation>
 <translation id="5652623411397330904">Производи које пратите ће се приказивати овде.</translation>
+<translation id="5657859710142657190">Иди на мрежу са картицама</translation>
 <translation id="5659593005791499971">Имејл</translation>
 <translation id="5669335982068190158">Одјављени сте у склопу ресетовања iPhone-а. Додирните Настави у наставку да бисте се пријавили.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -598,6 +606,7 @@
 <translation id="5737974891429562743">Подаци за пријављивање на налог су застарели. Ажурирајте их да бисте започели синхронизацију.</translation>
 <translation id="5738385766833540397">Управљајте начином на који примате обавештења о снижењима за производе које пратите</translation>
 <translation id="5738887413654608789">Ово вам омогућава да откријете релевантне веб-странице на основу окружења.</translation>
+<translation id="5745916533876677730">Иди на претходну картицу</translation>
 <translation id="5758631781033351321">Овде ћете пронаћи листу за читање</translation>
 <translation id="5765456154762864099">Мени → Подешавања → Подразумевани прегледач</translation>
 <translation id="5782227691023083829">Превођење је у току...</translation>
@@ -614,6 +623,7 @@
 <translation id="5857090052475505287">Нови директоријум</translation>
 <translation id="5857675236236529683">Када будете спремни, овде пронађите листу за читање</translation>
 <translation id="5857770089550859117">За почетак синхронизације потребна је приступна фраза.</translation>
+<translation id="5859715514067755465">Напред</translation>
 <translation id="5860033963881614850">Искључено</translation>
 <translation id="5869029295770560994">Важи</translation>
 <translation id="5871497086027727873">1 ставка је премештена</translation>
@@ -658,6 +668,7 @@
 <translation id="6152406514676263192">Синхронизујте са најрелевантнијим садржајем на основу интересовања.</translation>
 <translation id="6159839020698489198">опционално</translation>
 <translation id="6165508094623778733">Сазнајте више</translation>
+<translation id="6170450281939467187">Превођење није успело</translation>
 <translation id="6177442314419606057">Претражите у Chrome-у</translation>
 <translation id="6184086493125982861">Прикажи картице</translation>
 <translation id="6187302354554850004">Последња синхрон.: <ph name="LAST_USED_TIME" /></translation>
@@ -693,6 +704,7 @@
 <translation id="6374469231428023295">Пробај поново</translation>
 <translation id="6377118281273296434">Безбедност сајта</translation>
 <translation id="6380866119319257197">Ако заборавите приступну фразу или желите да промените ово подешавање, <ph name="BEGIN_LINK" />ресетујте синхронизацију<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">Отвори локацију…</translation>
 <translation id="6387994324662817823">Лозинке се чувају у Google менаџеру лозинки само на овом уређају.</translation>
 <translation id="6389470377220713856">Име и презиме на картици</translation>
 <translation id="6403371459378431832">Синхронизујте податке на свим уређајима</translation>
@@ -704,6 +716,7 @@
 Подаци су шифровани помоћу приступне фразе за синхронизацију <ph name="TIME" />. Унесите је да бисте започели синхронизацију.</translation>
 <translation id="6418346271604475326">Припрема PDF датотеке</translation>
 <translation id="6434591244308415567">Дошло је до грешке. Пробајте поново касније.</translation>
+<translation id="6435236283694032571">Додај на Листу за читање</translation>
 <translation id="6439338047467462846">Све је дозвољено</translation>
 <translation id="6445051938772793705">Земља</translation>
 <translation id="6445981559479772097">Порука је послата.</translation>
@@ -869,6 +882,7 @@
 <translation id="7701040980221191251">Ништа</translation>
 <translation id="7720410380936703141">ПРОБАЈ ПОНОВО</translation>
 <translation id="7726702057919861819">Мени → Историја → Обриши податке прегледања</translation>
+<translation id="7738120385185846461">Пријави проблем…</translation>
 <translation id="7741325291586284254">Нова страница на картици без архивирања</translation>
 <translation id="7756478488453921771">Мени → Подешавања → Начини плаћања</translation>
 <translation id="7765158879357617694">Премести</translation>
@@ -965,6 +979,7 @@
 <translation id="8459333855531264009">Није безбедан</translation>
 <translation id="8487667956631253959">Укључено</translation>
 <translation id="8487700953926739672">Доступно ван мреже</translation>
+<translation id="8488923644885757471">Нови прозор</translation>
 <translation id="8490978609246021741">Сачувај промене</translation>
 <translation id="8503813439785031346">Корисничко име</translation>
 <translation id="850600235656508448">Отвори у режиму без архивирања</translation>
@@ -1018,6 +1033,7 @@
 <translation id="8881801611828450202">Претражи ову слику у <ph name="SEARCH_ENGINE" />-у</translation>
 <translation id="8891935667620843985">Можете да аутоматски отварате линкове у Chrome-у тако што ћете га подесити као подразумевану апликацију за прегледање.</translation>
 <translation id="8898822736010347272">Шаље Google-у URL-ове неких страница које посећујете, ограничене информације о систему и одређени садржај страница да би се откриле нове претње и заштитили сви широм веба.</translation>
+<translation id="890565330728586731">Назад</translation>
 <translation id="8909135823018751308">Дели...</translation>
 <translation id="8911759861431145525">Додирните Додај, па унесите информације</translation>
 <translation id="891658175948553296">Истакните текст на сајту</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index 355f5e76..18f7c57 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">இணைப்பை உருவாக்க முடியவில்லை</translation>
 <translation id="2786701870377699570">ஒத்திசைக்கப்பட்ட அனைத்துச் சாதனங்களிலும் பக்கங்களைத் தேடலாம்</translation>
+<translation id="2797029671965852011">பதிவுகளைக் காட்டு</translation>
 <translation id="2800683595868705743">தாவல் மாற்றியிலிருந்து வெளியேறு</translation>
 <translation id="2815198996063984598">2. இயல்பு உலாவி ஆப்ஸ் என்பதைத் தட்டவும்</translation>
 <translation id="2820289420301699633">Chromeமின் கட்டுப்பாடு உங்கள் நிர்வாகியிடம் இருப்பதால் அதன் தரவை அவரால் அணுக முடியும்</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">ஒத்திசைக்கப்பட்ட அனைத்துச் சாதனங்களிலும் திறந்துள்ள மற்றும் சமீபத்தில் மூடிய உலாவிப் பக்கங்களை விரைவாகக் கண்டறியலாம்.</translation>
 <translation id="3533202363250687977">எல்லா மறைநிலைத் தாவல்களையும் மூடு</translation>
 <translation id="3533436815740441613">புதிய தாவல்</translation>
+<translation id="3540141921715814660">புக்மார்க்குகளில் சேர்</translation>
 <translation id="3551320343578183772">தாவலை மூடுக</translation>
+<translation id="3565207542107370586">உலாவல் தரவை அழி…</translation>
 <translation id="3575234738189584619">Lens மூலம் தேடலாம்</translation>
 <translation id="3581564640715911333">பக்கங்களைப் பிற மொழிகளில் மொழிபெயர்க்க அனுமதி</translation>
 <translation id="3588820906588687999">படத்தைப் புதிய தாவலில் திற</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">பிரபலமான தேடல்</translation>
 <translation id="3740397331642243698">Google Chrome உலாவியில் உள்ளிட்ட URLகளை மறைநிலையில் திறக்கும்.</translation>
 <translation id="3762232513783804601">iPadக்காக உருவாக்கப்பட்டது</translation>
+<translation id="3768725474733206671">கடைசியாக மூடிய பக்கத்தைத் திற</translation>
 <translation id="3771033907050503522">மறைநிலைத் தாவல்கள்</translation>
 <translation id="3775743491439407556">ஒத்திசைவு வேலை செய்யவில்லை</translation>
 <translation id="3779810277399252432">இணைய இணைப்பு இல்லை.</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">இந்தத் தளத்தை மொழிபெயர்</translation>
 <translation id="3810973564298564668">நிர்வகி</translation>
 <translation id="3819183753496523827">ஆஃப்லைனில் உள்ளீர்கள். இணைய இணைப்பைச் சரிபார்த்து மீண்டும் முயலவும்.</translation>
+<translation id="3835964409414434850">அடுத்த பக்கம்</translation>
 <translation id="385051799172605136">திரும்பு</translation>
 <translation id="3858860766373142691">பெயர்</translation>
 <translation id="3861486700625780712">பின்தொடர்வதை நிறுத்து</translation>
+<translation id="387280738075653372">Chromeமை இங்கே பதிவிறக்கவும்.</translation>
 <translation id="3892144330757387737">உங்கள் வரலாற்றை இங்கே பார்ப்பீர்கள்</translation>
 <translation id="3897092660631435901">மெனு</translation>
 <translation id="3904829425754749514">உங்கள் நிறுவனம் ஒத்திசைவை முடக்கியுள்ளது. இருப்பினும் இந்தச் சாதனத்தில் உள்ள உங்கள் புக்மார்க்குகள், பதிவுகள், கடவுச்சொற்கள் மற்றும் பிற அமைப்புகளை உங்களால் பார்க்க முடியும். ஏதேனும் மாற்றங்களைச் செய்தால் அவை உங்கள் கணக்குடன் ஒத்திசைக்கப்படாது.</translation>
@@ -544,6 +550,7 @@
 <translation id="5300589172476337783">காண்பி</translation>
 <translation id="5317780077021120954">சேமி</translation>
 <translation id="5339316356165661760">ஒத்திசைவை இயக்கு</translation>
+<translation id="536067926684072644">புக்மார்க்குகளைக் காட்டு</translation>
 <translation id="5360976571138293719">தனியுரிமை, பாதுகாப்பு, தரவுச் சேகரிப்பு ஆகியவற்றுடன் தொடர்புடைய கூடுதல் அமைப்புகளுக்கு <ph name="BEGIN_LINK" />Google சேவைகள்<ph name="END_LINK" /> என்பதைப் பாருங்கள்.</translation>
 <translation id="5386314158584363703">நீங்கள் பின்தொடரும் தளங்கள் இங்கே காட்டப்படும்</translation>
 <translation id="5388358297987318779">படத்தைத் திற</translation>
@@ -576,6 +583,7 @@
 <translation id="5631164295104953411">கட்டண முறையைச் சேர்</translation>
 <translation id="5636282538000367086">Chromeமில் புதிய அம்சங்களைக் கண்டறியுங்கள்</translation>
 <translation id="5652623411397330904">நீங்கள் விலையைக் கண்காணிக்கும் தயாரிப்புகள் இங்கே காட்டப்படும்.</translation>
+<translation id="5657859710142657190">பக்கத்தின் கட்டக் காட்சிக்குச் செல்</translation>
 <translation id="5659593005791499971">மின்னஞ்சல்</translation>
 <translation id="5669335982068190158">iPhone மீட்டமைப்பின் ஒரு பகுதியாக வெளியேற்றப்பட்டீர்கள். உள்நுழைய கீழுள்ள 'தொடர்க' என்பதைத் தட்டவும்.</translation>
 <translation id="5669528293118408608">www</translation>
@@ -592,6 +600,7 @@
 <translation id="5737974891429562743">கணக்கு உள்நுழைவு விவரங்கள் காலாவதியாகிவிட்டன. ஒத்திசைவைத் தொடங்க, புதுப்பிக்கவும்.</translation>
 <translation id="5738385766833540397">நீங்கள் கண்காணிக்கும் தயாரிப்புகளின் விலை குறைவது தொடர்பான விழிப்பூட்டல்களை எதில் பெற வேண்டும் என்பதை நிர்வகிக்கலாம்</translation>
 <translation id="5738887413654608789">இதன் மூலம், உங்களைச் சுற்றியுள்ளவற்றின் அடிப்படையில் தொடர்புடைய இணையப் பக்கங்களைக் கண்டறியலாம்.</translation>
+<translation id="5745916533876677730">முந்தைய பக்கம்</translation>
 <translation id="5758631781033351321">உங்கள் வாசிப்புப் பட்டியலை இங்கே பார்ப்பீர்கள்</translation>
 <translation id="5765456154762864099">மெனு → அமைப்புகள் → இயல்பு உலாவி</translation>
 <translation id="5782227691023083829">மொழிபெயர்க்கிறது...</translation>
@@ -608,6 +617,7 @@
 <translation id="5857090052475505287">புதிய ஃபோல்டர்</translation>
 <translation id="5857675236236529683">படிக்கத் தயாரானதும் வாசிப்புப் பட்டியலை இங்கே பாருங்கள்</translation>
 <translation id="5857770089550859117">ஒத்திசைவைத் தொடங்க, கடவுச்சொற்றொடர் தேவை.</translation>
+<translation id="5859715514067755465">முன்செல்லும்</translation>
 <translation id="5860033963881614850">ஆஃப்</translation>
 <translation id="5869029295770560994">சரி, புரிந்தது</translation>
 <translation id="5871497086027727873">1 உருப்படி நகர்த்தப்பட்டது</translation>
@@ -652,6 +662,7 @@
 <translation id="6152406514676263192">உங்கள் ஆர்வங்களின் அடிப்படையில் மிகவும் தொடர்புடைய உள்ளடக்கத்தைப் பார்க்க ஒத்திசைக்கவும்.</translation>
 <translation id="6159839020698489198">விரும்பினால்</translation>
 <translation id="6165508094623778733">மேலும் அறிக</translation>
+<translation id="6170450281939467187">மொழிபெயர்க்க முடியவில்லை</translation>
 <translation id="6177442314419606057">Chromeமில் தேடு</translation>
 <translation id="6184086493125982861">தாவல்களைக் காண்பி</translation>
 <translation id="6187302354554850004">கடைசியாக ஒத்திசைத்தது: <ph name="LAST_USED_TIME" /></translation>
@@ -687,6 +698,7 @@
 <translation id="6374469231428023295">மீண்டும் முயலவும்</translation>
 <translation id="6377118281273296434">தளத்தின் பாதுகாப்பு</translation>
 <translation id="6380866119319257197">கடவுச்சொற்றொடரை மறந்துவிட்டால் அல்லது இந்த அமைப்பை மாற்ற விரும்பினால், <ph name="BEGIN_LINK" />ஒத்திசைவை மீட்டமைக்கவும்<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">இருப்பிடத்தைத் திற…</translation>
 <translation id="6387994324662817823">இந்தச் சாதனத்தில் மட்டுமே உள்ள Google கடவுச்சொல் நிர்வாகியில் கடவுச்சொற்கள் சேமிக்கப்படுகின்றன.</translation>
 <translation id="6389470377220713856">அட்டையிலுள்ள பெயர்</translation>
 <translation id="6403371459378431832">அனைத்துச் சாதனங்களிலும் உங்கள் தரவை ஒத்திசைக்கலாம்</translation>
@@ -698,6 +710,7 @@
 <ph name="TIME" /> அன்று உங்கள் தரவு உங்கள் ஒத்திசைவு கடவுச்சொற்றொடரைக் கொண்டு என்க்ரிப்ட் செய்யப்பட்டது. ஒத்திசைவைத் தொடங்க, அதை உள்ளிடவும்.</translation>
 <translation id="6418346271604475326">PDF தயாராகிறது</translation>
 <translation id="6434591244308415567">பிழை ஏற்பட்டது. பிறகு முயலவும்.</translation>
+<translation id="6435236283694032571">வாசிப்புப் பட்டியலில் சேர்</translation>
 <translation id="6439338047467462846">அனைத்தையும் அனுமதி</translation>
 <translation id="6445051938772793705">நாடு</translation>
 <translation id="6445981559479772097">செய்தி அனுப்பப்பட்டது.</translation>
@@ -862,6 +875,7 @@
 <translation id="7701040980221191251">எதுவுமில்லை</translation>
 <translation id="7720410380936703141">மீண்டும் முயல்க</translation>
 <translation id="7726702057919861819">மெனு → பதிவு → உலாவிய தரவை அழி</translation>
+<translation id="7738120385185846461">சிக்கலைப் புகார் செய்க…</translation>
 <translation id="7741325291586284254">புதிய மறைநிலைத் தாவல் பக்கம்</translation>
 <translation id="7756478488453921771">மெனு → அமைப்புகள் → பேமெண்ட் முறைகள்</translation>
 <translation id="7765158879357617694">நகர்த்து</translation>
@@ -956,6 +970,7 @@
 <translation id="8459333855531264009">பாதுகாப்பற்றது</translation>
 <translation id="8487667956631253959">ஆன்</translation>
 <translation id="8487700953926739672">ஆஃப்லைனில் இருக்கிறது</translation>
+<translation id="8488923644885757471">புதிய சாளரம்</translation>
 <translation id="8490978609246021741">மாற்றங்களைச் சேமி</translation>
 <translation id="8503813439785031346">பயனர்பெயர்</translation>
 <translation id="850600235656508448">மறைநிலையில் திற</translation>
@@ -1008,6 +1023,7 @@
 <translation id="8881801611828450202">இந்தப் படத்தை <ph name="SEARCH_ENGINE" /> இல் தேடு</translation>
 <translation id="8891935667620843985">Chromeமை உங்கள் இயல்பு உலாவி ஆப்ஸாக அமைப்பதன் மூலம் இணைப்புகளைத் தானாகவே அதில் திறக்கலாம்.</translation>
 <translation id="8898822736010347272">இணையத்தில் புதிய அச்சுறுத்தல்களைக் கண்டறிவதற்காகவும் அனைத்துப் பயனர்களையும் பாதுகாப்பதற்காகவும், நீங்கள் பார்வையிடும் சில பக்கங்களின் URLகள், வரையறுக்கப்பட்ட சிஸ்டம் தகவல்கள், சில பக்கங்களின் உள்ளடக்கம் ஆகியவற்றை Googleளுக்கு அனுப்பும்.</translation>
+<translation id="890565330728586731">பின்செல்</translation>
 <translation id="8909135823018751308">பகிர்...</translation>
 <translation id="8911759861431145525">சேர் என்பதைத் தட்டி உங்கள் தகவல்களை டைப் செய்யவும்</translation>
 <translation id="891658175948553296">தளத்தில் வார்த்தைகளை ஹைலைட் செய்யவும்</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index ea127c6..3840940 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -226,6 +226,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">สร้างลิงก์ไม่ได้</translation>
 <translation id="2786701870377699570">ค้นหาแท็บในอุปกรณ์ทุกเครื่องที่ซิงค์</translation>
+<translation id="2797029671965852011">แสดงประวัติ</translation>
 <translation id="2800683595868705743">ออกจากมุมมองตัวสลับแท็บ</translation>
 <translation id="2815198996063984598">2. แตะแอปเบราว์เซอร์เริ่มต้น</translation>
 <translation id="2820289420301699633">ผู้ดูแลระบบเป็นผู้ควบคุม Chrome และเข้าถึงข้อมูลของ Chrome ได้</translation>
@@ -328,7 +329,9 @@
 <translation id="3530206579861815432">ค้นหาแท็บที่เปิดอยู่และแท็บที่เพิ่งปิดได้อย่างรวดเร็วในอุปกรณ์ที่ซิงค์</translation>
 <translation id="3533202363250687977">ปิดแท็บไม่ระบุตัวตนทั้งหมด</translation>
 <translation id="3533436815740441613">แท็บใหม่</translation>
+<translation id="3540141921715814660">เพิ่มไปยังบุ๊กมาร์ก</translation>
 <translation id="3551320343578183772">ปิดแท็บ</translation>
+<translation id="3565207542107370586">ล้างข้อมูลการท่องเว็บ…</translation>
 <translation id="3575234738189584619">ค้นหาด้วย Lens</translation>
 <translation id="3581564640715911333">เสนอที่จะแปลหน้าเว็บในภาษาอื่นๆ</translation>
 <translation id="3588820906588687999">เปิดภาพในแท็บใหม่</translation>
@@ -347,6 +350,7 @@
 <translation id="37207012422556617">การค้นหาที่มาแรง</translation>
 <translation id="3740397331642243698">เปิด URL ที่ป้อนใน Google Chrome ในโหมดไม่ระบุตัวตน</translation>
 <translation id="3762232513783804601">สร้างมาเพื่อ iPad ของคุณ</translation>
+<translation id="3768725474733206671">เปิดแท็บที่ปิดไปล่าสุดอีกครั้ง</translation>
 <translation id="3771033907050503522">แท็บที่ไม่ระบุตัวตน</translation>
 <translation id="3775743491439407556">การซิงค์ไม่ทำงาน</translation>
 <translation id="3779810277399252432">ไม่มีการเชื่อมต่ออินเทอร์เน็ต</translation>
@@ -357,9 +361,11 @@
 <translation id="3803696231112616155">เสนอให้แปลเว็บไซต์นี้</translation>
 <translation id="3810973564298564668">จัดการ</translation>
 <translation id="3819183753496523827">คุณออฟไลน์อยู่ ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง</translation>
+<translation id="3835964409414434850">ไปที่แท็บถัดไป</translation>
 <translation id="385051799172605136">กลับ</translation>
 <translation id="3858860766373142691">ชื่อ</translation>
 <translation id="3861486700625780712">เลิกติดตาม</translation>
+<translation id="387280738075653372">ดาวน์โหลด Chrome ที่นี่</translation>
 <translation id="3892144330757387737">คุณจะเห็นประวัติการเข้าชมที่นี่</translation>
 <translation id="3897092660631435901">เมนู</translation>
 <translation id="3904829425754749514">องค์กรของคุณปิดการซิงค์ คุณจะยังคงเห็นบุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ ในอุปกรณ์นี้ หากทำการเปลี่ยนแปลง ระบบจะไม่ซิงค์การเปลี่ยนแปลงนั้นกับบัญชี</translation>
@@ -545,6 +551,7 @@
 <translation id="5300589172476337783">แสดง</translation>
 <translation id="5317780077021120954">บันทึก</translation>
 <translation id="5339316356165661760">เปิดการซิงค์</translation>
+<translation id="536067926684072644">แสดงบุ๊กมาร์ก</translation>
 <translation id="5360976571138293719">ดูการตั้งค่าเพิ่มเติมเกี่ยวกับความเป็นส่วนตัว ความปลอดภัย และการรวบรวมข้อมูลได้ที่<ph name="BEGIN_LINK" />บริการของ Google<ph name="END_LINK" /></translation>
 <translation id="5386314158584363703">คุณจะเห็นเว็บไซต์ที่ติดตามที่นี่</translation>
 <translation id="5388358297987318779">เปิดภาพ</translation>
@@ -577,6 +584,7 @@
 <translation id="5631164295104953411">เพิ่มวิธีการชำระเงิน</translation>
 <translation id="5636282538000367086">ดูว่ามีอะไรใหม่ใน Chrome</translation>
 <translation id="5652623411397330904">ผลิตภัณฑ์ที่คุณติดตามจะแสดงที่นี่</translation>
+<translation id="5657859710142657190">ไปที่ตารางกริดของแท็บ</translation>
 <translation id="5659593005791499971">อีเมล</translation>
 <translation id="5669335982068190158">คุณออกจากระบบในขั้นตอนการรีเซ็ต iPhone แตะ "ดําเนินการต่อ" ด้านล่างเพื่อลงชื่อเข้าใช้</translation>
 <translation id="5669528293118408608">www</translation>
@@ -593,6 +601,7 @@
 <translation id="5737974891429562743">รายละเอียดการลงชื่อเข้าใช้บัญชีล้าสมัยแล้ว โปรดอัปเดตเพื่อเริ่มการซิงค์</translation>
 <translation id="5738385766833540397">จัดการวิธีรับการแจ้งเตือนเมื่อราคาลดลงสำหรับผลิตภัณฑ์ที่คุณติดตาม</translation>
 <translation id="5738887413654608789">วิธีนี้ช่วยให้คุณค้นพบหน้าเว็บที่เกี่ยวข้องโดยอิงตามสิ่งที่อยู่รอบตัวคุณ</translation>
+<translation id="5745916533876677730">ไปที่แท็บก่อนหน้า</translation>
 <translation id="5758631781033351321">คุณจะเห็นเรื่องรออ่านที่นี่</translation>
 <translation id="5765456154762864099">เมนู → การตั้งค่า → เบราว์เซอร์เริ่มต้น</translation>
 <translation id="5782227691023083829">กำลังแปล...</translation>
@@ -609,6 +618,7 @@
 <translation id="5857090052475505287">โฟลเดอร์ใหม่</translation>
 <translation id="5857675236236529683">ค้นหาเรื่องรออ่านได้ที่นี่เมื่อคุณพร้อมแล้ว</translation>
 <translation id="5857770089550859117">ต้องระบุรหัสผ่านเพื่อเริ่มการซิงค์</translation>
+<translation id="5859715514067755465">ไปข้างหน้า</translation>
 <translation id="5860033963881614850">ปิด</translation>
 <translation id="5869029295770560994">รับทราบ</translation>
 <translation id="5871497086027727873">ย้ายแล้ว 1 รายการ</translation>
@@ -653,6 +663,7 @@
 <translation id="6152406514676263192">ซิงค์เพื่อดูเนื้อหาที่เกี่ยวข้องที่สุดตามความสนใจของคุณ</translation>
 <translation id="6159839020698489198">ไม่บังคับ</translation>
 <translation id="6165508094623778733">ดูข้อมูลเพิ่มเติม</translation>
+<translation id="6170450281939467187">แปลไม่สำเร็จ</translation>
 <translation id="6177442314419606057">ค้นหาใน Chrome</translation>
 <translation id="6184086493125982861">แสดงแท็บ</translation>
 <translation id="6187302354554850004">ซิงค์ครั้งล่าสุด: <ph name="LAST_USED_TIME" /></translation>
@@ -688,6 +699,7 @@
 <translation id="6374469231428023295">ลองอีกครั้ง</translation>
 <translation id="6377118281273296434">ความปลอดภัยของเว็บไซต์</translation>
 <translation id="6380866119319257197">หากคุณลืมรหัสผ่านหรือต้องการเปลี่ยนการตั้งค่านี้ โปรด<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">เปิดตำแหน่ง…</translation>
 <translation id="6387994324662817823">รหัสผ่านจะบันทึกอยู่ในเครื่องมือจัดการรหัสผ่านของ Google ในอุปกรณ์นี้เท่านั้น</translation>
 <translation id="6389470377220713856">ชื่อบนบัตร</translation>
 <translation id="6403371459378431832">ซิงค์ข้อมูลในอุปกรณ์ทุกเครื่อง</translation>
@@ -699,6 +711,7 @@
 ข้อมูลของคุณได้รับการเข้ารหัสด้วยรหัสผ่านการซิงค์เมื่อวันที่ <ph name="TIME" /> โปรดป้อนรหัสผ่านเพื่อเริ่มซิงค์</translation>
 <translation id="6418346271604475326">กำลังเตรียม PDF</translation>
 <translation id="6434591244308415567">เกิดข้อผิดพลาด โปรดลองอีกครั้งในภายหลัง</translation>
+<translation id="6435236283694032571">เพิ่มไปยังเรื่องรออ่าน</translation>
 <translation id="6439338047467462846">อนุญาตทั้งหมด</translation>
 <translation id="6445051938772793705">ประเทศ</translation>
 <translation id="6445981559479772097">ส่งข้อความแล้ว</translation>
@@ -863,6 +876,7 @@
 <translation id="7701040980221191251">ไม่มี</translation>
 <translation id="7720410380936703141">ลองอีกครั้ง</translation>
 <translation id="7726702057919861819">เมนู → ประวัติการเข้าชม → ล้างข้อมูลการท่องเว็บ</translation>
+<translation id="7738120385185846461">รายงานปัญหา…</translation>
 <translation id="7741325291586284254">หน้าแท็บใหม่ที่ไม่ระบุตัวตน</translation>
 <translation id="7756478488453921771">เมนู → การตั้งค่า → วิธีการชำระเงิน</translation>
 <translation id="7765158879357617694">ย้าย</translation>
@@ -957,6 +971,7 @@
 <translation id="8459333855531264009">ไม่ปลอดภัย</translation>
 <translation id="8487667956631253959">เปิด</translation>
 <translation id="8487700953926739672">ใช้งานแบบออฟไลน์ได้</translation>
+<translation id="8488923644885757471">หน้าต่างใหม่</translation>
 <translation id="8490978609246021741">บันทึกการเปลี่ยนแปลง</translation>
 <translation id="8503813439785031346">ชื่อผู้ใช้</translation>
 <translation id="850600235656508448">เปิดในโหมดไม่ระบุตัวตน</translation>
@@ -1009,6 +1024,7 @@
 <translation id="8881801611828450202">ค้นหาภาพนี้ใน <ph name="SEARCH_ENGINE" /></translation>
 <translation id="8891935667620843985">คุณเปิดลิงก์ใน Chrome โดยอัตโนมัติได้ด้วยการตั้งเป็นแอปเบราว์เซอร์เริ่มต้น</translation>
 <translation id="8898822736010347272">ส่ง URL ของหน้าบางหน้าที่คุณเข้าชม ข้อมูลระบบที่จำกัด และเนื้อหาบางส่วนของหน้าไปให้ Google เพื่อช่วยตรวจหาภัยคุกคามใหม่ๆ และปกป้องทุกคนที่ใช้อินเทอร์เน็ต</translation>
+<translation id="890565330728586731">กลับ</translation>
 <translation id="8909135823018751308">แชร์…</translation>
 <translation id="8911759861431145525">แตะ "เพิ่ม" แล้วป้อนข้อมูล</translation>
 <translation id="891658175948553296">ไฮไลต์ข้อความในเว็บไซต์</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
index 7132834..8d66cb3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -42,6 +42,7 @@
 <translation id="1229222343402087523">‏Chrome میں {searchPhrase}$ تلاش کریں</translation>
 <translation id="1242044645101871359">دوبارہ سائن ان کریں</translation>
 <translation id="1254117744268754948">فولڈر کا انتخاب کریں</translation>
+<translation id="1254424942107648268">پچھلا تلاش کریں</translation>
 <translation id="1258491128795710625">نیا کیا ہے</translation>
 <translation id="1265739287306757398">طریقہ جانیں</translation>
 <translation id="1272079795634619415">روکیں</translation>
@@ -187,6 +188,7 @@
 <translation id="2473876017985765807">آپ نے پہلے ہی <ph name="WEBSITE" /> کے لیے ایک پاس ورڈ محفوظ کیا ہے</translation>
 <translation id="2476359652512522418">انتخاب نہیں کیا گیا</translation>
 <translation id="2482878487686419369">اطلاعات</translation>
+<translation id="2496626742194544812">پہلے ٹیب پر جائیں</translation>
 <translation id="2500374554657206846">پاس ورڈ محفوظ کرنے کے اختیارات</translation>
 <translation id="2523363575747517183">یہ ویب سائٹ بار بار ایک اور ایپلیکیشن کھولنے کی کوشش کر رہی ہے۔</translation>
 <translation id="2529021024822217800">تمام کھولیں</translation>
@@ -202,6 +204,7 @@
 <translation id="2647269890314209800">زیر استعمال کوکیز</translation>
 <translation id="2648803196158606475">پڑھے ہوئے کو حذف کریں</translation>
 <translation id="2653659639078652383">جمع کرائیں</translation>
+<translation id="2664621323652615289">روکیں</translation>
 <translation id="2671426118752779020">‏آپ اپنے iPhone پر Google پاس ورڈ مینیجر میں اپنے محفوظ کردہ پاس ورڈز کو دیگر ایپس میں استعمال کر سکتے ہیں۔</translation>
 <translation id="2690858294534178585">کیمرا زیر استعمال ہے</translation>
 <translation id="2691653761409724435">آف لائن دستیاب نہیں ہے</translation>
@@ -360,6 +363,7 @@
 <translation id="380329542618494757">نام</translation>
 <translation id="3803696231112616155">اس سائٹ کا ترجمہ کرنے کی پیشکش کریں</translation>
 <translation id="3810973564298564668">نظم کریں</translation>
+<translation id="3818293389945649617">اگلا تلاش کریں</translation>
 <translation id="3819183753496523827">آپ آف لائن ہیں۔ اپنا انٹرنیٹ کنکشن چیک کریں اور دوبارہ کوشش کریں۔</translation>
 <translation id="3835964409414434850">اگلے ٹیب پر جائیں</translation>
 <translation id="385051799172605136">پیچھے</translation>
@@ -391,6 +395,7 @@
 <translation id="4049507953662678203">یقینی بنائیں کہ آپ کے پاس نیٹ ورک کنکشن ہے اور دوبارہ کوشش کریں۔</translation>
 <translation id="4063300985191096908">فیڈ پر جائیں</translation>
 <translation id="408404951701638773">تلاش بار تک رسائی حاصل کرنا اب زیادہ آسان ہے</translation>
+<translation id="4092655288299341041">مدد دکھائیں</translation>
 <translation id="4108998448622696017">جب خطرناک ایونٹس ہوتے ہیں تو ان کا پتہ لگا کر آپ کو ان کے بارے میں متنبہ کرتا ہے۔</translation>
 <translation id="411254640334432676">ڈاؤن لوڈ ناکام ہوگیا۔</translation>
 <translation id="4112644173421521737">تلاش کریں</translation>
@@ -783,6 +788,7 @@
 <translation id="6859944681507688231">‏QR کوڈ یا کریڈٹ کارڈ اسکین کرنے کیلئے، ترتیبات سے کیمرا کو فعال کریں۔</translation>
 <translation id="6867369562105931222">پاس ورڈ</translation>
 <translation id="6869389390665537774">آپ ان صفحات کو دیکھ سکتے ہیں جو آپ نے ملاحظہ کئے ہیں یا انھیں اپنی سرگزشت سے صاف کر سکتے ہیں</translation>
+<translation id="687135068089457384">ترتیبات دکھائیں</translation>
 <translation id="6873263987691478642">منقسم منظر</translation>
 <translation id="6882836635272038266">خطرناک مانی جانے والی ویب سائٹس، ڈاؤن لوڈز اور ایکسٹینشنز سے معیاری حفاظت۔</translation>
 <translation id="6888009575607455378">کیا آپ واقعی اپنی تبدیلیوں کو مسترد کرنا چاہتے ہیں؟</translation>
@@ -889,11 +895,13 @@
 <translation id="7807060072011926525">‏Google کے ذریعے فراہم کردہ</translation>
 <translation id="7839985698273989086">آف لائن صفحہ</translation>
 <translation id="7840771868269352570">آپ کے منتخب کردہ آئٹمز کو ہٹا دیا جائے گا۔</translation>
+<translation id="7845466610722898">پڑھنے کی فہرست دکھائیں</translation>
 <translation id="784551991304901159">مواد دیکھنے کے لیے، مینو سے 'آن کریں' کو منتخب کریں</translation>
 <translation id="7853202427316060426">سرگرمی</translation>
 <translation id="7856733331829174190">ڈاؤن لوڈ نہیں ہو سکی</translation>
 <translation id="785938070103630874">پاس ورڈز، ادائیگی کے طریقے یا پتہ اور بہت کچھ کھولیں</translation>
 <translation id="7859704718976024901">براؤزنگ سرگزشت</translation>
+<translation id="7879275349003161544">ڈاؤن لوڈز دکھائیں</translation>
 <translation id="7884694604461143138">تلاش کی سرگزشت (<ph name="COUNT" /> ملی)</translation>
 <translation id="7887198238286927132">‏آپ کی رازداری کے تحفظ کے لیے، Chrome اس فیلڈ کو آٹو فل نہیں کرے گا۔</translation>
 <translation id="7911190106180361398">آپ کی تنظیم آپ کے لیے ہر چیز کی مطابقت پذیری کرنے کی اجازت نہیں دیتی ہے۔</translation>
@@ -1006,6 +1014,7 @@
 <translation id="8741995161408053644">‏ممکن ہے کہ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> پر آپ کے Google اکاؤنٹ میں براؤزنگ کی سرگزشت کی دیگر فارمز موجود ہوں۔</translation>
 <translation id="8750037785291841318">آپ کو اپنے ٹیبز یہاں ملیں گے</translation>
 <translation id="8756969031206844760">پاس ورڈ کو اپ ڈیٹ کریں؟</translation>
+<translation id="8763613688786959833">آخری ٹیب پر جائیں</translation>
 <translation id="8764015330924122850"><ph name="DOMAIN_NAME" /> کی پیروی ختم کریں</translation>
 <translation id="8775144690796719618">‏غلط URL</translation>
 <translation id="8787968206789828143">ویب پر تلاش کریں</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
index 791180c..082c576a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -229,6 +229,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">無法建立連結</translation>
 <translation id="2786701870377699570">搜尋所有已同步裝置的分頁</translation>
+<translation id="2797029671965852011">顯示歷史記錄</translation>
 <translation id="2800683595868705743">退出分頁切換選項</translation>
 <translation id="2815198996063984598">2. 輕按 [預設瀏覽器應用程式]</translation>
 <translation id="2820289420301699633">管理員可控制 Chrome,並存取其中的資料</translation>
@@ -331,7 +332,9 @@
 <translation id="3530206579861815432">快速尋找所有已同步裝置上目前開啟和最近關閉的分頁</translation>
 <translation id="3533202363250687977">關閉所有無痕式分頁</translation>
 <translation id="3533436815740441613">新分頁</translation>
+<translation id="3540141921715814660">加入書籤</translation>
 <translation id="3551320343578183772">關閉分頁</translation>
+<translation id="3565207542107370586">清除瀏覽資料…</translation>
 <translation id="3575234738189584619">用「智能鏡頭」搜尋</translation>
 <translation id="3581564640715911333">詢問是否將網頁內容翻譯成其他語言</translation>
 <translation id="3588820906588687999">在新分頁中開啟圖片</translation>
@@ -350,6 +353,7 @@
 <translation id="37207012422556617">熱門搜尋</translation>
 <translation id="3740397331642243698">在 Google Chrome 中以無痕模式開啟已輸入的網址。</translation>
 <translation id="3762232513783804601">專為 iPad 而設</translation>
+<translation id="3768725474733206671">重新開啟最近關閉的分頁</translation>
 <translation id="3771033907050503522">無痕式分頁</translation>
 <translation id="3775743491439407556">同步功能無法正常運作</translation>
 <translation id="3779810277399252432">沒有互聯網連線。</translation>
@@ -361,9 +365,11 @@
 <translation id="3810973564298564668">管理</translation>
 <translation id="3818293389945649617">尋找下一個相符的項目</translation>
 <translation id="3819183753496523827">您已離線。請檢查您的互聯網連線,然後再試一次。</translation>
+<translation id="3835964409414434850">前往下一個分頁</translation>
 <translation id="385051799172605136">返回</translation>
 <translation id="3858860766373142691">名稱</translation>
 <translation id="3861486700625780712">取消追蹤</translation>
+<translation id="387280738075653372">在這裡下載 Chrome。</translation>
 <translation id="3892144330757387737">您可在此查看記錄</translation>
 <translation id="3897092660631435901">選單</translation>
 <translation id="3904829425754749514">您的機構已關閉同步功能。您仍可在此裝置上查看自己的書籤、記錄、密碼和其他設定,但作出的變更將不會同步到您的帳戶。</translation>
@@ -550,6 +556,7 @@
 <translation id="5300589172476337783">顯示</translation>
 <translation id="5317780077021120954">儲存</translation>
 <translation id="5339316356165661760">開啟同步處理功能</translation>
+<translation id="536067926684072644">顯示書籤</translation>
 <translation id="5360976571138293719">如需更多與私隱權、安全性和資料收集相關的設定,請參閱 <ph name="BEGIN_LINK" />Google 服務<ph name="END_LINK" />。</translation>
 <translation id="5386314158584363703">此處會顯示您已追蹤的網站</translation>
 <translation id="5388358297987318779">開啟圖片</translation>
@@ -582,6 +589,7 @@
 <translation id="5631164295104953411">新增付款方法</translation>
 <translation id="5636282538000367086">瞭解 Chrome 最新功能</translation>
 <translation id="5652623411397330904">您追蹤的產品會在此顯示。</translation>
+<translation id="5657859710142657190">前往頁方格</translation>
 <translation id="5659593005791499971">電郵</translation>
 <translation id="5669335982068190158">您已在重設 iPhone 時登出,輕按下方的 [繼續] 即可登入。</translation>
 <translation id="5669528293118408608">www</translation>
@@ -598,6 +606,7 @@
 <translation id="5737974891429562743">帳戶登入資料已過時。請先更新,然後開始同步資料。</translation>
 <translation id="5738385766833540397">管理如何接收已追蹤產品的減價通知</translation>
 <translation id="5738887413654608789">這樣您便可根據周圍環境探索相關網頁。</translation>
+<translation id="5745916533876677730">前往上一個分頁</translation>
 <translation id="5758631781033351321">您可在此查看閱讀清單</translation>
 <translation id="5765456154762864099">「選單」→「設定」→「預設瀏覽器」</translation>
 <translation id="5782227691023083829">正在翻譯...</translation>
@@ -614,6 +623,7 @@
 <translation id="5857090052475505287">新資料夾</translation>
 <translation id="5857675236236529683">準備就緒後,即可在這裡查看閱讀清單</translation>
 <translation id="5857770089550859117">必須輸入密碼短語,才能開始同步資料。</translation>
+<translation id="5859715514067755465">繼續</translation>
 <translation id="5860033963881614850">關閉</translation>
 <translation id="5869029295770560994">好,我知道了</translation>
 <translation id="5871497086027727873">已移動 1 個項目</translation>
@@ -658,6 +668,7 @@
 <translation id="6152406514676263192">系統會根據您的興趣同步最相關的內容。</translation>
 <translation id="6159839020698489198">選填</translation>
 <translation id="6165508094623778733">瞭解更多資料</translation>
+<translation id="6170450281939467187">無法翻譯</translation>
 <translation id="6177442314419606057">在 Chrome 中搜尋</translation>
 <translation id="6184086493125982861">顯示分頁</translation>
 <translation id="6187302354554850004">上次同步處理時間:<ph name="LAST_USED_TIME" /></translation>
@@ -693,6 +704,7 @@
 <translation id="6374469231428023295">再試一次</translation>
 <translation id="6377118281273296434">網站安全性</translation>
 <translation id="6380866119319257197">如果您忘記密碼短語,或希望變更這項設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">開啟位置…</translation>
 <translation id="6387994324662817823">密碼只會儲存至此裝置上的「Google 密碼管理工具」。</translation>
 <translation id="6389470377220713856">持卡人姓名</translation>
 <translation id="6403371459378431832">同步處理所有裝置上的資料</translation>
@@ -704,6 +716,7 @@
 您已於 <ph name="TIME" />使用同步密碼短語加密資料,請輸入密碼短語開始同步資料。</translation>
 <translation id="6418346271604475326">正在準備 PDF</translation>
 <translation id="6434591244308415567">發生錯誤,請稍後再試。</translation>
+<translation id="6435236283694032571">加入閱讀清單</translation>
 <translation id="6439338047467462846">全部允許</translation>
 <translation id="6445051938772793705">國家/地區</translation>
 <translation id="6445981559479772097">訊息已送出。</translation>
@@ -867,6 +880,7 @@
 <translation id="7701040980221191251">沒有</translation>
 <translation id="7720410380936703141">再試一次</translation>
 <translation id="7726702057919861819">「選單」→「記錄」→「清除瀏覽資料」</translation>
+<translation id="7738120385185846461">回報問題…</translation>
 <translation id="7741325291586284254">新無痕式分頁頁面</translation>
 <translation id="7756478488453921771">「選單」→「設定」→「付款方法」</translation>
 <translation id="7765158879357617694">移動</translation>
@@ -963,6 +977,7 @@
 <translation id="8459333855531264009">不安全</translation>
 <translation id="8487667956631253959">開</translation>
 <translation id="8487700953926739672">可離線使用</translation>
+<translation id="8488923644885757471">開新視窗</translation>
 <translation id="8490978609246021741">儲存變更</translation>
 <translation id="8503813439785031346">用戶名稱</translation>
 <translation id="850600235656508448">以無痕模式開啟</translation>
@@ -1016,6 +1031,7 @@
 <translation id="8881801611828450202">在 <ph name="SEARCH_ENGINE" /> 中搜尋此圖片</translation>
 <translation id="8891935667620843985">將 Chrome 設定為「預設瀏覽器應用程式」,即可自動以 Chrome 開啟連結。</translation>
 <translation id="8898822736010347272">向 Google 傳送部分您瀏覽網頁的網址、特定的系統資料及部分網頁內容,以協助探索新威脅,並保護所有網絡使用者。</translation>
+<translation id="890565330728586731">返回</translation>
 <translation id="8909135823018751308">共用…</translation>
 <translation id="8911759861431145525">輕按 [新增] 並輸入資料</translation>
 <translation id="891658175948553296">突顯網站的文字</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 0415e89b..be09c55 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -229,6 +229,7 @@
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2783054063075604403">無法建立連結</translation>
 <translation id="2786701870377699570">搜尋所有已同步裝置的分頁</translation>
+<translation id="2797029671965852011">顯示歷史記錄</translation>
 <translation id="2800683595868705743">退出分頁切換選項</translation>
 <translation id="2815198996063984598">2. 輕觸 [預設的瀏覽器應用程式]</translation>
 <translation id="2820289420301699633">管理員可以控管 Chrome,並存取該瀏覽器的資料</translation>
@@ -331,7 +332,9 @@
 <translation id="3530206579861815432">快速尋找所有已同步裝置上目前開啟和最近關閉的分頁</translation>
 <translation id="3533202363250687977">關閉所有無痕式分頁</translation>
 <translation id="3533436815740441613">新分頁</translation>
+<translation id="3540141921715814660">加入書籤</translation>
 <translation id="3551320343578183772">關閉分頁</translation>
+<translation id="3565207542107370586">清除瀏覽資料…</translation>
 <translation id="3575234738189584619">使用智慧鏡頭搜尋</translation>
 <translation id="3581564640715911333">詢問是否要將網頁內容翻譯成其他語言</translation>
 <translation id="3588820906588687999">在新分頁中開啟圖片</translation>
@@ -350,6 +353,7 @@
 <translation id="37207012422556617">熱門搜尋</translation>
 <translation id="3740397331642243698">在 Google Chrome 無痕模式中開啟輸入的網址。</translation>
 <translation id="3762232513783804601">專為 iPad 量身打造</translation>
+<translation id="3768725474733206671">重新開啟最近關閉的分頁</translation>
 <translation id="3771033907050503522">無痕式分頁</translation>
 <translation id="3775743491439407556">同步功能無法正常運作</translation>
 <translation id="3779810277399252432">沒有網際網路連線。</translation>
@@ -361,9 +365,11 @@
 <translation id="3810973564298564668">管理</translation>
 <translation id="3818293389945649617">尋找下一個相符的項目</translation>
 <translation id="3819183753496523827">你已經離線,請檢查網際網路連線,然後再試一次。</translation>
+<translation id="3835964409414434850">前往下一個分頁</translation>
 <translation id="385051799172605136">返回</translation>
 <translation id="3858860766373142691">名稱</translation>
 <translation id="3861486700625780712">取消追蹤</translation>
+<translation id="387280738075653372">在這裡下載 Chrome。</translation>
 <translation id="3892144330757387737">這裡會顯示你的歷史記錄</translation>
 <translation id="3897092660631435901">選單</translation>
 <translation id="3904829425754749514">貴機構已關閉同步功能。你仍然可以在這部裝置上查看自己的書籤、歷史記錄、密碼和其他設定,但你所做的變更將不會同步到帳戶。</translation>
@@ -550,6 +556,7 @@
 <translation id="5300589172476337783">顯示</translation>
 <translation id="5317780077021120954">儲存</translation>
 <translation id="5339316356165661760">開啟同步功能</translation>
+<translation id="536067926684072644">顯示書籤</translation>
 <translation id="5360976571138293719">如需與隱私權、安全性和資料收集相關的其他設定,請參閱 <ph name="BEGIN_LINK" />Google 服務<ph name="END_LINK" /></translation>
 <translation id="5386314158584363703">此處會顯示你已追蹤的網站</translation>
 <translation id="5388358297987318779">開啟圖片</translation>
@@ -582,6 +589,7 @@
 <translation id="5631164295104953411">新增付款方式</translation>
 <translation id="5636282538000367086">看看 Chrome 有哪些新功能</translation>
 <translation id="5652623411397330904">你追蹤的產品會顯示在這裡。</translation>
+<translation id="5657859710142657190">前往頁方格</translation>
 <translation id="5659593005791499971">電子郵件</translation>
 <translation id="5669335982068190158">你已在重設 iPhone 時登出,輕觸下方的「繼續」即可登入。</translation>
 <translation id="5669528293118408608">www</translation>
@@ -598,6 +606,7 @@
 <translation id="5737974891429562743">帳戶登入詳細資訊過舊。請先更新,再開始進行同步處理。</translation>
 <translation id="5738385766833540397">管理如何接收追蹤產品的降價快訊</translation>
 <translation id="5738887413654608789">可讓你找到與目前周遭環境相關的網頁。</translation>
+<translation id="5745916533876677730">前往上一個分頁</translation>
 <translation id="5758631781033351321">這裡會顯示你的閱讀清單</translation>
 <translation id="5765456154762864099">「選單」→「設定」→「預設瀏覽器」</translation>
 <translation id="5782227691023083829">正在翻譯...</translation>
@@ -614,6 +623,7 @@
 <translation id="5857090052475505287">新資料夾</translation>
 <translation id="5857675236236529683">準備就緒後,即可在這裡查看閱讀清單</translation>
 <translation id="5857770089550859117">必須輸入通關密語,才能開始進行同步處理。</translation>
+<translation id="5859715514067755465">繼續</translation>
 <translation id="5860033963881614850">關閉</translation>
 <translation id="5869029295770560994">好,我知道了</translation>
 <translation id="5871497086027727873">已移動 1 個項目</translation>
@@ -658,6 +668,7 @@
 <translation id="6152406514676263192">系統會根據你的興趣同步處理最相關的內容。</translation>
 <translation id="6159839020698489198">選填</translation>
 <translation id="6165508094623778733">瞭解詳情</translation>
+<translation id="6170450281939467187">無法翻譯</translation>
 <translation id="6177442314419606057">在 Chrome 中搜尋</translation>
 <translation id="6184086493125982861">顯示分頁</translation>
 <translation id="6187302354554850004">上次同步處理時間:<ph name="LAST_USED_TIME" /></translation>
@@ -693,6 +704,7 @@
 <translation id="6374469231428023295">再試一次</translation>
 <translation id="6377118281273296434">網站安全性</translation>
 <translation id="6380866119319257197">如果您忘記通關密語,或是想變更這項設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation>
+<translation id="6383719166112032471">開啟位置…</translation>
 <translation id="6387994324662817823">密碼只會儲存至這部裝置上的 Google 密碼管理員。</translation>
 <translation id="6389470377220713856">持卡人姓名</translation>
 <translation id="6403371459378431832">同步處理所有裝置上的資料</translation>
@@ -704,6 +716,7 @@
 您已在 <ph name="TIME" />使用同步通關密語對資料進行加密,請輸入通關密語開始進行同步。</translation>
 <translation id="6418346271604475326">正在準備 PDF</translation>
 <translation id="6434591244308415567">發生錯誤,請稍後再試。</translation>
+<translation id="6435236283694032571">加入閱讀清單</translation>
 <translation id="6439338047467462846">全部允許</translation>
 <translation id="6445051938772793705">國家/地區</translation>
 <translation id="6445981559479772097">訊息已送出。</translation>
@@ -869,6 +882,7 @@
 <translation id="7701040980221191251">無</translation>
 <translation id="7720410380936703141">再試一次</translation>
 <translation id="7726702057919861819">「選單」→「歷史記錄」→「清除瀏覽資料」</translation>
+<translation id="7738120385185846461">回報問題…</translation>
 <translation id="7741325291586284254">新的無痕分頁頁面</translation>
 <translation id="7756478488453921771">「選單」→「設定」→「付款方式」</translation>
 <translation id="7765158879357617694">移動</translation>
@@ -965,6 +979,7 @@
 <translation id="8459333855531264009">不安全</translation>
 <translation id="8487667956631253959">開啟</translation>
 <translation id="8487700953926739672">可離線使用</translation>
+<translation id="8488923644885757471">開新視窗</translation>
 <translation id="8490978609246021741">儲存變更</translation>
 <translation id="8503813439785031346">使用者名稱</translation>
 <translation id="850600235656508448">以無痕模式開啟</translation>
@@ -1018,6 +1033,7 @@
 <translation id="8881801611828450202">透過 <ph name="SEARCH_ENGINE" /> 搜尋這張圖片</translation>
 <translation id="8891935667620843985">只要將 Chrome 設為預設瀏覽器應用程式,即可自動在 Chrome 中開啟連結。</translation>
 <translation id="8898822736010347272">將部分已造訪網頁的網址、特定的系統資訊和部分網頁內容傳送至 Google,以協助發現新威脅並保障所有網路使用者的安全。</translation>
+<translation id="890565330728586731">返回</translation>
 <translation id="8909135823018751308">分享…</translation>
 <translation id="8911759861431145525">輕觸「新增」並輸入資訊</translation>
 <translation id="891658175948553296">醒目顯示網站的文字</translation>
diff --git a/ios/chrome/browser/autofill/form_input_accessory_view_handler.mm b/ios/chrome/browser/autofill/form_input_accessory_view_handler.mm
index 2fff4458..725e2f8 100644
--- a/ios/chrome/browser/autofill/form_input_accessory_view_handler.mm
+++ b/ios/chrome/browser/autofill/form_input_accessory_view_handler.mm
@@ -282,24 +282,17 @@
 
 #pragma mark - Private
 
-// Tries to close the keyboard sendind an action to the default accessory bar
-// if that fails, fallbacks on JavaScript. Logs metrics if loggingButtonPressed
-// is YES.
+// Tries to close the keyboard sending an action to the default accessory bar.
+// If that fails, fallbacks on the view to resign the first responder status.
+// Logs metrics if loggingButtonPressed is YES.
 - (void)closeKeyboardLoggingButtonPressed:(BOOL)loggingButtonPressed {
   NSString* actionName = kFormSuggestionAssistButtonDone;
   BOOL performedAction = [self executeFormAssistAction:actionName];
 
-  if (!performedAction && [_lastFocusFormActivityWebFrameID length] &&
-      _webState) {
-    // We could not find the built-in form assist controls, so try to focus
-    // the next or previous control using JavaScript.
-    web::WebFrame* frame = _webState->GetWebFramesManager()->GetFrameWithId(
-        base::SysNSStringToUTF8(_lastFocusFormActivityWebFrameID));
-
-    if (frame) {
-      autofill::SuggestionControllerJavaScriptFeature::GetInstance()
-          ->CloseKeyboardForFrame(frame);
-    }
+  if (!performedAction && _webState) {
+    UIView* view = _webState->GetView();
+    DCHECK(view);
+    [view endEditing:YES];
   }
   if (loggingButtonPressed) {
     _keyboardAccessoryMetricsLogger->OnCloseButtonPressed();
diff --git a/ios/chrome/browser/autofill/suggestion_controller_java_script_feature_unittest.mm b/ios/chrome/browser/autofill/suggestion_controller_java_script_feature_unittest.mm
index 0f16ebd..2b4bda1 100644
--- a/ios/chrome/browser/autofill/suggestion_controller_java_script_feature_unittest.mm
+++ b/ios/chrome/browser/autofill/suggestion_controller_java_script_feature_unittest.mm
@@ -353,24 +353,6 @@
   SequentialNavigationSkipCheck(@"type='checkbox'", YES);
 }
 
-// Special test for a condition where the closeKeyboard script would cause an
-// illegal JS recursion if a blur event results in an event that triggers a
-// crwebinvoke:// back, such as a page change.
-TEST_F(SuggestionControllerJavaScriptFeatureTest, CloseKeyboardSafetyTest) {
-  web::test::LoadHtml(@"<select id='select'>Select</select>", web_state());
-  web::test::ExecuteJavaScript(
-      @"select.onblur = function(){window.location.href = '#test'}",
-      web_state());
-  web::test::ExecuteJavaScript(@"select.focus()", web_state());
-  // In the failure condition the app will crash during the next line.
-  autofill::SuggestionControllerJavaScriptFeature::GetInstance()
-      ->CloseKeyboardForFrame(GetMainFrame());
-  // TODO(crbug.com/661624): add a check for the keyboard actually being
-  // dismissed; unfortunately it is not known how to adapt
-  // WaitForBackgroundTasks to yield for events wrapped with window.setTimeout()
-  // or other deferred events.
-}
-
 // Test fixture to test
 // `FetchPreviousAndNextElementsPresenceInFrameWithID`.
 class FetchPreviousAndNextExceptionTest
diff --git a/ios/chrome/browser/bookmarks/bookmark_model_factory.cc b/ios/chrome/browser/bookmarks/bookmark_model_factory.cc
index 08f9a5f..e5cf4e0 100644
--- a/ios/chrome/browser/bookmarks/bookmark_model_factory.cc
+++ b/ios/chrome/browser/bookmarks/bookmark_model_factory.cc
@@ -71,6 +71,7 @@
     : BrowserStateKeyedServiceFactory(
           "BookmarkModel",
           BrowserStateDependencyManager::GetInstance()) {
+  DependsOn(ios::BookmarkSyncServiceFactory::GetInstance());
   DependsOn(ios::BookmarkUndoServiceFactory::GetInstance());
   DependsOn(ManagedBookmarkServiceFactory::GetInstance());
 }
diff --git a/ios/chrome/browser/bookmarks/bookmark_sync_service_factory.cc b/ios/chrome/browser/bookmarks/bookmark_sync_service_factory.cc
index 6694d39..979bf9d7 100644
--- a/ios/chrome/browser/bookmarks/bookmark_sync_service_factory.cc
+++ b/ios/chrome/browser/bookmarks/bookmark_sync_service_factory.cc
@@ -31,7 +31,7 @@
     : BrowserStateKeyedServiceFactory(
           "BookmarkSyncServiceFactory",
           BrowserStateDependencyManager::GetInstance()) {
-  DependsOn(ios::BookmarkUndoServiceFactory::GetInstance());
+  DependsOn(BookmarkUndoServiceFactory::GetInstance());
 }
 
 BookmarkSyncServiceFactory::~BookmarkSyncServiceFactory() {}
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm b/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
index 0ad75f3d..1ad05bf 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
@@ -406,6 +406,96 @@
   // elements. Not currently supported by MetricsAppInterface.
 }
 
+// Regression test for crbug.com/1379261. Checks that cancelling a prerendered
+// navigation doesn't cause a crash. Steps are:
+// 1. Disable HTTPS-Only Mode and visit an http:// URL. This puts the
+//    URL in browser history.
+// 2. Close tabs and reopen. Enable HTTPS-Only Mode.
+// 3. Type the first letter of the http:// URL in step 1. This will prerender
+//    the http URL.
+// 4. Check that the prerender was cancelled properly.
+- (void)test_Prerender_CancelShouldNotCrash {
+  // TODO(crbug.com/793306): Re-enable the test on iPad once the alternate
+  // letters problem is fixed.
+  if ([ChromeEarlGrey isIPadIdiom]) {
+    EARL_GREY_TEST_DISABLED(
+        @"Disabled for iPad due to alternate letters educational screen.");
+  }
+
+  // TODO(crbug.com/1315304): Reenable.
+  if ([ChromeEarlGrey isNewOmniboxPopupEnabled]) {
+    EARL_GREY_TEST_DISABLED(@"Disabled for new popup");
+  }
+
+  // Step 1: Disable HTTPS-Only Mode and visit an http:// URL. This puts the
+  // URL in browser history.
+  [ChromeEarlGrey setBoolValue:NO forUserPref:prefs::kHttpsOnlyModeEnabled];
+  [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.badHTTPSServer->port()
+                                      useFakeHTTPS:false];
+  [ChromeEarlGrey clearBrowsingHistory];
+
+  GURL testURL = self.testServer->GetURL("/");
+  NSString* testURLString = base::SysUTF8ToNSString(testURL.GetContent());
+  [ChromeEarlGrey loadURL:testURL];
+  GREYAssertEqual(1, _HTTPResponseCounter,
+                  @"The server should have responded once");
+  [ChromeEarlGrey goBack];
+
+  // Step 2: Close tabs and reopen. Enable HTTPS-Only Mode.
+  [[self class] closeAllTabs];
+  [ChromeEarlGrey openNewTab];
+  [ChromeEarlGrey setBoolValue:YES forUserPref:prefs::kHttpsOnlyModeEnabled];
+
+  // Step 3: Type the first letter of the http:// URL in step 1. This will
+  // prerender the http URL.
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
+      performAction:grey_tap()];
+  [ChromeEarlGrey
+      waitForSufficientlyVisibleElementWithMatcher:chrome_test_util::Omnibox()];
+  [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
+      performAction:grey_typeText([testURLString substringToIndex:1])];
+
+  bool prerendered = WaitUntilConditionOrTimeout(kWaitForPageLoadTimeout, ^{
+    // The first response was for the http:// URL. The remaining responses are
+    // prerendered. When the whole test suite runs, we may get more than one
+    // prerendered navigation here.
+    return self->_HTTPResponseCounter > 1;
+  });
+  GREYAssertTrue(prerendered, @"Prerender did not happen");
+
+  // Step 4: Check that the prerender was cancelled properly.
+  // Check the histograms. All prerender attempts must be cancelled. Relying on
+  // the histogram here isn't great, but there doesn't seem to be a good
+  // way of testing that prerenders have been cancelled.
+  GREYAssertNil(
+      [MetricsAppInterface expectCount:0
+                             forBucket:/*PRERENDER_FINAL_STATUS_USED=*/0
+                          forHistogram:@"Prerender.FinalStatus"],
+      @"Prerender was used");
+  GREYAssert(![HttpsUpgradeAppInterface isHttpsOnlyModeTimerRunning],
+             @"Timer is still running");
+  GREYAssert(![HttpsUpgradeAppInterface isOmniboxUpgradeTimerRunning],
+             @"Omnibox upgrade timer is unexpectedly running");
+
+  // Check that the HTTPS-Only Mode tab helper recorded the prerender
+  // cancellation.
+  // First server response loaded normally, the rest should be prerenders.
+  int prerenderCount = self->_HTTPResponseCounter - 1;
+  GREYAssertNil([MetricsAppInterface
+                    expectTotalCount:prerenderCount
+                        forHistogram:@(security_interstitials::https_only_mode::
+                                           kEventHistogram)],
+                @"Failed to record event histogram");
+  GREYAssertNil([MetricsAppInterface
+                     expectCount:prerenderCount
+                       forBucket:static_cast<int>(
+                                     security_interstitials::https_only_mode::
+                                         Event::kPrerenderCancelled)
+                    forHistogram:@(security_interstitials::https_only_mode::
+                                       kEventHistogram)],
+                @"Failed to record prerender cancellation");
+}
+
 // Navigate to an HTTP URL and allowlist the URL. Then clear browsing data.
 // This should clear the HTTP allowlist.
 - (void)test_RemoveBrowsingData_ShouldClearAllowlist {
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
index f4b21b5..d3e4a94 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
@@ -280,10 +280,13 @@
     // If the tab is being prerendered, cancel the HTTP response.
     if (prerender_service_ &&
         prerender_service_->IsWebStatePrerendered(web_state())) {
-      prerender_service_->CancelPrerender();
+      RecordUMA(Event::kPrerenderCancelled);
       ResetState();
       std::move(callback).Run(
           web::WebStatePolicyDecider::PolicyDecision::Cancel());
+      prerender_service_->CancelPrerender();
+      // IMPORTANT: CancelPrerender() destroys the web state. Do not access
+      // it after here.
       return;
     }
     StopToUpgrade(url, item_pending->GetReferrer(), std::move(callback));
diff --git a/ios/chrome/browser/providers/lens/chromium_lens.mm b/ios/chrome/browser/providers/lens/chromium_lens.mm
index c95bb15..4ed2035 100644
--- a/ios/chrome/browser/providers/lens/chromium_lens.mm
+++ b/ios/chrome/browser/providers/lens/chromium_lens.mm
@@ -31,6 +31,9 @@
 
 }
 
+using LensWebParamsCallback =
+    base::OnceCallback<void(web::NavigationManager::WebLoadParams)>;
+
 id<ChromeLensController> NewChromeLensController(LensConfiguration* config) {
   // Lens is not supported in Chromium.
   return nil;
@@ -55,5 +58,12 @@
   return web::NavigationManager::WebLoadParams({});
 }
 
+void GenerateLensLoadParamsForImageAsync(UIImage* image,
+                                         LensEntrypoint entry_point,
+                                         bool is_incognito,
+                                         LensWebParamsCallback completion) {
+  NOTREACHED() << "Lens is not supported.";
+}
+
 }  // namespace provider
 }  // namespace ios
diff --git a/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper.mm b/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper.mm
index d0a3f59..475b52b 100644
--- a/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper.mm
+++ b/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper.mm
@@ -59,18 +59,20 @@
 void TailoredSecurityTabHelper::OnTailoredSecurityBitChanged(
     bool enabled,
     base::Time previous_update) {
+  if (!enabled || !web_state_->IsVisible()) {
+    return;
+  }
   ChromeBrowserState* browser_state =
       ChromeBrowserState::FromBrowserState(web_state_->GetBrowserState());
   signin::IdentityManager* identity_manager =
       IdentityManagerFactory::GetForBrowserState(browser_state);
-  if (!enabled || !safe_browsing::CanShowUnconsentedTailoredSecurityDialog(
-                      identity_manager, browser_state->GetPrefs()))
+  if (!safe_browsing::CanShowUnconsentedTailoredSecurityDialog(
+          identity_manager, browser_state->GetPrefs())) {
     return;
+  }
 
   if (base::Time::Now() - previous_update <=
-          base::Minutes(
-              safe_browsing::kThresholdForInFlowNotificationMinutes) &&
-      web_state_->IsVisible()) {
+      safe_browsing::kThresholdForInFlowNotification) {
     browser_state->GetPrefs()->SetBoolean(
         prefs::kAccountTailoredSecurityShownNotification, true);
     ShowInfoBar(safe_browsing::TailoredSecurityServiceMessageState::
diff --git a/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper_unittest.mm b/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper_unittest.mm
index 3792023..ed91623 100644
--- a/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper_unittest.mm
+++ b/ios/chrome/browser/safe_browsing/tailored_security/tailored_security_tab_helper_unittest.mm
@@ -6,6 +6,7 @@
 
 #import "base/test/task_environment.h"
 #import "components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.h"
+#import "components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h"
 #import "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #import "components/sync_preferences/pref_service_mock_factory.h"
 #import "components/sync_preferences/pref_service_syncable.h"
@@ -171,8 +172,7 @@
   // When a nonsynced in-flow message prompt is triggered, the message prompt
   // should show for the WebState that is currently shown.
   web_state_.WasShown();
-  tab_helper->OnTailoredSecurityBitChanged(/*enabled=*/true,
-                                           base::Time::NowFromSystemTime());
+  tab_helper->OnTailoredSecurityBitChanged(/*enabled=*/true, base::Time::Now());
   EXPECT_TRUE(infobar_manager->infobar_count() == 1);
   EXPECT_TRUE(chrome_browser_state_->GetPrefs()->GetBoolean(
       prefs::kAccountTailoredSecurityShownNotification));
@@ -191,8 +191,7 @@
   // When a nonsynced in-flow message prompt is triggered, the message prompt
   // should not show for the WebState that is currently hidden.
   web_state_.WasHidden();
-  tab_helper->OnTailoredSecurityBitChanged(/*enabled=*/true,
-                                           base::Time::NowFromSystemTime());
+  tab_helper->OnTailoredSecurityBitChanged(/*enabled=*/true, base::Time::Now());
   EXPECT_TRUE(infobar_manager->infobar_count() == 0);
   EXPECT_FALSE(chrome_browser_state_->GetPrefs()->GetBoolean(
       prefs::kAccountTailoredSecurityShownNotification));
@@ -210,14 +209,14 @@
       InfoBarManagerImpl::FromWebState(&web_state_);
 
   tab_helper->OnTailoredSecurityBitChanged(/*enabled=*/false,
-                                           base::Time::NowFromSystemTime());
+                                           base::Time::Now());
   EXPECT_TRUE(infobar_manager->infobar_count() == 0);
   EXPECT_FALSE(chrome_browser_state_->GetPrefs()->GetBoolean(
       prefs::kAccountTailoredSecurityShownNotification));
 }
 
 // Tests that an infobar isn't created when the time difference is greater than
-// kThresholdForInFlowNotificationMinutes.
+// kThresholdForInFlowNotification.
 TEST_F(TailoredSecurityTabHelperTest,
        TailoredSecurityBitChangedAfterFiveMinutes) {
   MockTailoredSecurityService mock_service;
@@ -229,7 +228,8 @@
       InfoBarManagerImpl::FromWebState(&web_state_);
 
   tab_helper->OnTailoredSecurityBitChanged(
-      /*enabled=*/true, base::Time::NowFromSystemTime() - base::Minutes(6));
+      /*enabled=*/true,
+      base::Time::Now() - (kThresholdForInFlowNotification + base::Minutes(1)));
   EXPECT_TRUE(infobar_manager->infobar_count() == 0);
   EXPECT_FALSE(chrome_browser_state_->GetPrefs()->GetBoolean(
       prefs::kAccountTailoredSecurityShownNotification));
diff --git a/ios/chrome/browser/signin/about_signin_internals_factory.cc b/ios/chrome/browser/signin/about_signin_internals_factory.cc
index d78a270..2c6eb00 100644
--- a/ios/chrome/browser/signin/about_signin_internals_factory.cc
+++ b/ios/chrome/browser/signin/about_signin_internals_factory.cc
@@ -22,6 +22,7 @@
     : BrowserStateKeyedServiceFactory(
           "AboutSigninInternals",
           BrowserStateDependencyManager::GetInstance()) {
+  DependsOn(AccountReconcilorFactory::GetInstance());
   DependsOn(IdentityManagerFactory::GetInstance());
   DependsOn(SigninClientFactory::GetInstance());
   DependsOn(SigninErrorControllerFactory::GetInstance());
diff --git a/ios/chrome/browser/signin/fake_system_identity.h b/ios/chrome/browser/signin/fake_system_identity.h
index 8efa7381..04661f95 100644
--- a/ios/chrome/browser/signin/fake_system_identity.h
+++ b/ios/chrome/browser/signin/fake_system_identity.h
@@ -27,6 +27,9 @@
 // Returns a second fake identity.
 + (instancetype)fakeIdentity2;
 
+// Returns a third fake identity.
++ (instancetype)fakeIdentity3;
+
 // Returns a fake managed identity.
 + (instancetype)fakeManagedIdentity;
 
diff --git a/ios/chrome/browser/signin/fake_system_identity.mm b/ios/chrome/browser/signin/fake_system_identity.mm
index a3e536e0..2cde2358 100644
--- a/ios/chrome/browser/signin/fake_system_identity.mm
+++ b/ios/chrome/browser/signin/fake_system_identity.mm
@@ -59,6 +59,12 @@
                                           name:@"Fake Foo 2"];
 }
 
++ (instancetype)fakeIdentity3 {
+  return [FakeSystemIdentity identityWithEmail:@"foo3@gmail.com"
+                                        gaiaID:@"foo3ID"
+                                          name:@"Fake Foo 3"];
+}
+
 + (instancetype)fakeManagedIdentity {
   return [FakeSystemIdentity identityWithEmail:@"foo@google.com"
                                         gaiaID:@"fooManagedID"
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
index 7097dccc..7bd5457 100644
--- a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
@@ -20,8 +20,9 @@
 #import "ios/chrome/browser/policy/cloud/user_policy_constants.h"
 #import "ios/chrome/browser/policy/cloud/user_policy_switch.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
@@ -52,10 +53,12 @@
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     builder.SetPrefService(CreatePrefService());
     browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     browser_ = std::make_unique<TestBrowser>(browser_state_.get());
 
     ios::FakeChromeIdentityService* identityService =
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
index 543af6b..d8544287 100644
--- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
@@ -13,12 +13,13 @@
 #import "ios/chrome/browser/infobars/infobar_ios.h"
 #import "ios/chrome/browser/infobars/infobar_utils.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/ui/authentication/signin_presenter.h"
 #import "ios/chrome/browser/ui/commands/show_signin_command.h"
 #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
+#import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h"
 #import "ios/web/public/test/web_task_environment.h"
 #import "testing/gtest_mac.h"
 #import "testing/platform_test.h"
@@ -43,22 +44,23 @@
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     chrome_browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        chrome_browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
   }
 
   void SetUpMainChromeBrowserStateWithSignedInUser() {
     SetUpMainChromeBrowserStateNotSignedIn();
 
-    id<SystemIdentity> chrome_identity =
-        [FakeSystemIdentity identityWithEmail:@"john.appleseed@gmail.com"
-                                       gaiaID:@"1234"
-                                         name:@"John"];
-
+    id<SystemIdentity> chrome_identity = [FakeSystemIdentity fakeIdentity1];
     AuthenticationService* authentication_service =
         AuthenticationServiceFactory::GetForBrowserState(
             chrome_browser_state_.get());
+    ios::FakeChromeIdentityService* identity_service_ =
+        ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
+    identity_service_->AddIdentity(chrome_identity);
     authentication_service->SignIn(chrome_identity);
   }
 
diff --git a/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm b/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm
index 520b49d..d300b71 100644
--- a/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm
@@ -11,12 +11,14 @@
 #import "components/signin/public/identity_manager/identity_test_environment.h"
 #import "components/variations/scoped_variations_ids_provider.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
+#import "ios/chrome/browser/sync/mock_sync_service_utils.h"
+#import "ios/chrome/browser/sync/sync_service_factory.h"
 #import "ios/chrome/browser/sync/sync_setup_service_factory.h"
 #import "ios/chrome/browser/sync/sync_setup_service_mock.h"
 #import "ios/chrome/test/block_cleanup_test.h"
@@ -38,7 +40,7 @@
     BlockCleanupTest::SetUp();
     identity_service_ =
         ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
-    identity_service_->AddIdentities(@[ @"identity1" ]);
+    identity_service_->AddIdentity([FakeSystemIdentity fakeIdentity1]);
 
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
@@ -47,6 +49,8 @@
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
         AuthenticationServiceFactory::GetDefaultFactory());
+    builder.AddTestingFactory(SyncServiceFactory::GetInstance(),
+                              base::BindRepeating(&CreateMockSyncService));
     browser_state_ = builder.Build();
     AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
         browser_state_.get(),
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm
index b88d6348d..b2a2a562 100644
--- a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm
@@ -14,8 +14,9 @@
 #import "components/signin/public/identity_manager/identity_manager.h"
 #import "components/sync/test/mock_sync_service.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/signin/identity_manager_factory.h"
 #import "ios/chrome/browser/sync/mock_sync_service_utils.h"
@@ -47,28 +48,27 @@
   void SetUp() override {
     PlatformTest::SetUp();
 
-    identity_ = [FakeSystemIdentity identityWithEmail:@"foo1@gmail.com"
-                                               gaiaID:@"foo1ID"
-                                                 name:@"Fake Foo 1"];
+    identity_ = [FakeSystemIdentity fakeIdentity1];
     identity_service()->AddIdentity(identity_);
 
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     builder.AddTestingFactory(SyncServiceFactory::GetInstance(),
                               base::BindRepeating(&CreateMockSyncService));
     browser_state_ = builder.Build();
-
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     mediator_ = [[AdvancedSettingsSigninMediator alloc]
         initWithAuthenticationService:authentication_service()
                           syncService:sync_service()
                           prefService:GetPrefService()
                       identityManager:identity_manager()];
 
-    authentication_service_fake_ =
-        static_cast<AuthenticationServiceFake*>(authentication_service());
+    authentication_service_ =
+        static_cast<AuthenticationService*>(authentication_service());
   }
 
   // Registers account preferences that will be used in reauthentication.
@@ -106,24 +106,24 @@
   base::test::TaskEnvironment environment_;
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
   std::unique_ptr<TestChromeBrowserState> browser_state_;
-  FakeSystemIdentity* identity_ = nullptr;
+  id<SystemIdentity> identity_ = nil;
 
   AdvancedSettingsSigninMediator* mediator_ = nil;
 
-  AuthenticationServiceFake* authentication_service_fake_ = nullptr;
+  AuthenticationService* authentication_service_ = nullptr;
 };
 
 // Tests that a user's authentication does not change when sign-in is
 // interrupted.
 TEST_F(AdvancedSettingsSigninMediatorTest,
        saveUserPreferenceSigninInterruptedWithSyncDisabled) {
-  authentication_service_fake_->SignIn(identity_);
+  authentication_service_->SignIn(identity_);
   [mediator_
       saveUserPreferenceForSigninResult:SigninCoordinatorResultInterrupted
                     originalSigninState:
                         IdentitySigninStateSignedInWithSyncDisabled];
 
-  ASSERT_TRUE(authentication_service_fake_->HasPrimaryIdentity(
+  ASSERT_TRUE(authentication_service_->HasPrimaryIdentity(
       signin::ConsentLevel::kSignin));
 }
 
@@ -131,11 +131,11 @@
 // interrupted with IdentitySigninStateSignedOut.
 TEST_F(AdvancedSettingsSigninMediatorTest,
        saveUserPreferenceSigninInterruptedWithSignout) {
-  authentication_service_fake_->SignIn(identity_);
+  authentication_service_->SignIn(identity_);
   [mediator_
       saveUserPreferenceForSigninResult:SigninCoordinatorResultInterrupted
                     originalSigninState:IdentitySigninStateSignedOut];
 
-  ASSERT_FALSE(authentication_service_fake_->HasPrimaryIdentity(
+  ASSERT_FALSE(authentication_service_->HasPrimaryIdentity(
       signin::ConsentLevel::kSignin));
 }
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm
index e0d89e6d..d55fc340 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm
@@ -7,14 +7,16 @@
 #import <UIKit/UIKit.h>
 
 #import "base/strings/sys_string_conversions.h"
+#import "base/test/ios/wait_util.h"
 #import "base/test/metrics/histogram_tester.h"
 #import "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
 #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h"
 #import "components/sync_preferences/testing_pref_service_syncable.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/prefs/pref_names.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/signin/identity_manager_factory.h"
@@ -47,22 +49,18 @@
   void SetUp() override {
     PlatformTest::SetUp();
     authentication_flow_ = OCMStrictClassMock([AuthenticationFlow class]);
-    identity1_ = [FakeSystemIdentity identityWithEmail:@"foo1@gmail.com"
-                                                gaiaID:@"foo1ID1"
-                                                  name:@"Fake Foo 1"];
-    identity2_ = [FakeSystemIdentity identityWithEmail:@"foo2@gmail.com"
-                                                gaiaID:@"foo1ID2"
-                                                  name:@"Fake Foo 2"];
+    identity1_ = [FakeSystemIdentity fakeIdentity1];
+    identity2_ = [FakeSystemIdentity fakeIdentity2];
     GetIdentityService()->AddIdentity(identity1_);
     GetIdentityService()->AddIdentity(identity2_);
-
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     browser_state_ = builder.Build();
-
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     PrefRegistrySimple* registry = pref_service_.registry();
     registry->RegisterIntegerPref(prefs::kSigninWebSignDismissalCount, 0);
 
@@ -129,10 +127,15 @@
   void SigninAndSimulateError(ConsistencyPromoSigninMediator* mediator,
                               id<SystemIdentity> identity) {
     GetAuthenticationService()->SignIn(identity);
-    OCMExpect([mediator_delegate_mock_
-        consistencyPromoSigninMediator:mediator
-                        errorDidHappen:
-                            ConsistencyPromoSigninMediatorErrorGeneric]);
+    __block BOOL error_did_happen_called = NO;
+    OCMExpect(
+        [mediator_delegate_mock_
+            consistencyPromoSigninMediator:mediator
+                            errorDidHappen:
+                                ConsistencyPromoSigninMediatorErrorGeneric])
+        .andDo(^(NSInvocation*) {
+          error_did_happen_called = YES;
+        });
     id<IdentityManagerObserverBridgeDelegate>
         identityManagerObserverBridgeDelegate =
             (id<IdentityManagerObserverBridgeDelegate>)mediator;
@@ -145,6 +148,11 @@
     [identityManagerObserverBridgeDelegate
         onAccountsInCookieUpdated:cookieJarInfo
                             error:error];
+    EXPECT_TRUE(base::test::ios::WaitUntilConditionOrTimeout(
+        base::test::ios::kWaitForActionTimeout, ^bool {
+          base::RunLoop().RunUntilIdle();
+          return error_did_happen_called;
+        }));
   }
 
   void SigninWithMediator(ConsistencyPromoSigninMediator* mediator,
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm b/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm
index ce42b019..f3b1c04c 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm
@@ -20,8 +20,9 @@
 #import "ios/chrome/browser/policy/policy_util.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
 #import "ios/chrome/browser/prefs/pref_names.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_constants.h"
@@ -47,9 +48,11 @@
     builder.SetPrefService(CreatePrefService());
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     chrome_browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        chrome_browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     account_manager_service_ =
         ChromeAccountManagerServiceFactory::GetForBrowserState(
             chrome_browser_state_.get());
diff --git a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm
index bf7fe4ec..71bc73e 100644
--- a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm
@@ -8,8 +8,9 @@
 #import "components/sync/driver/sync_service_utils.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/signin/trusted_vault_client_backend_factory.h"
 #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
@@ -37,18 +38,15 @@
     base_view_controller_ = [[UIViewController alloc] init];
     base_view_controller_.view.backgroundColor = UIColor.blueColor;
     GetAnyKeyWindow().rootViewController = base_view_controller_;
-
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     browser_state_ = builder.Build();
-
-    id<SystemIdentity> identity =
-        [FakeSystemIdentity identityWithEmail:@"foo1@gmail.com"
-                                       gaiaID:@"foo1ID"
-                                         name:@"Fake Foo 1"];
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
+    id<SystemIdentity> identity = [FakeSystemIdentity fakeIdentity1];
     ios::FakeChromeIdentityService* identity_service =
         ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
     identity_service->AddIdentity(identity);
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator_unittest.mm
index 4507235..ed86874 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator_unittest.mm
@@ -9,8 +9,8 @@
 #import "base/ios/block_types.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/logging/user_signin_logger.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_coordinator.h"
 #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_view_controller.h"
@@ -56,11 +56,12 @@
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     browser_ = std::make_unique<TestBrowser>(browser_state_.get());
-
     SetupLoggerMock();
     SetupUserSigninViewControllerMock();
     SetupBaseViewControllerMock();
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm
index 1732aec3..13bd4ac 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm
@@ -15,8 +15,9 @@
 #import "ios/chrome/browser/consent_auditor/consent_auditor_factory.h"
 #import "ios/chrome/browser/consent_auditor/consent_auditor_test_utils.h"
 #import "ios/chrome/browser/main/test_browser.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/signin/identity_manager_factory.h"
@@ -47,16 +48,12 @@
 
   void SetUp() override {
     PlatformTest::SetUp();
-    identity_ = [FakeSystemIdentity identityWithEmail:@"foo1@gmail.com"
-                                               gaiaID:@"foo1ID"
-                                                 name:@"Fake Foo 1"];
+    identity_ = [FakeSystemIdentity fakeIdentity1];
     identity_service()->AddIdentity(identity_);
-
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     builder.AddTestingFactory(ConsentAuditorFactory::GetInstance(),
                               base::BindRepeating(&BuildFakeConsentAuditor));
     builder.AddTestingFactory(SyncServiceFactory::GetInstance(),
@@ -66,6 +63,9 @@
         base::BindRepeating(&SyncSetupServiceMock::CreateKeyedService));
     browser_state_ = builder.Build();
 
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     browser_ = std::make_unique<TestBrowser>(browser_state_.get());
 
     mediator_delegate_mock_ =
@@ -141,7 +141,10 @@
   void SetPerformerSignoutExpectations() {
     OCMExpect([performer_mock_ signOutBrowserState:browser_state_.get()])
         .andDo(^(NSInvocation*) {
-          [authentication_flow_ didSignOut];
+          authentication_service()->SignOut(
+              signin_metrics::ProfileSignout::SIGNOUT_TEST, false, ^{
+                [authentication_flow_ didSignOut];
+              });
         });
   }
 
@@ -261,7 +264,7 @@
   // Needed for test browser state created by TestChromeBrowserState().
   web::WebTaskEnvironment task_environment_;
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
-  FakeSystemIdentity* identity_ = nullptr;
+  id<SystemIdentity> identity_ = nil;
 
   AuthenticationFlow* authentication_flow_ = nullptr;
   std::unique_ptr<Browser> browser_;
@@ -500,10 +503,7 @@
 //   * Cancel the user sign-in dialog
 TEST_F(UserSigninMediatorTest, OpenSettingsLinkWithDifferentIdentityAndCancel) {
   // Signs in with identity 2.
-  id<SystemIdentity> identity2 =
-      [FakeSystemIdentity identityWithEmail:@"foo2@gmail.com"
-                                     gaiaID:@"foo2ID"
-                                       name:@"Fake Foo 2"];
+  id<SystemIdentity> identity2 = [FakeSystemIdentity fakeIdentity2];
   identity_service()->AddIdentity(identity2);
   authentication_service()->SignIn(identity2);
 
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
index 303626d..64d3b08 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
@@ -17,8 +17,9 @@
 #import "ios/chrome/browser/policy/policy_util.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
 #import "ios/chrome/browser/prefs/pref_names.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
@@ -59,7 +60,7 @@
 class SigninPromoViewMediatorTest : public PlatformTest {
  protected:
   void SetUp() override {
-    user_full_name_ = @"John Doe";
+    identity_ = [FakeSystemIdentity fakeIdentity1];
     close_button_hidden_ = YES;
 
     TestChromeBrowserState::Builder builder;
@@ -70,9 +71,11 @@
         base::BindRepeating(&SyncSetupServiceMock::CreateKeyedService));
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     chrome_browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        chrome_browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
   }
 
   void TearDown() override {
@@ -134,12 +137,8 @@
 
   // Creates the default identity and adds it into the ChromeIdentityService.
   void AddDefaultIdentity() {
-    expected_default_identity_ =
-        [FakeSystemIdentity identityWithEmail:@"johndoe@example.com"
-                                       gaiaID:@"1"
-                                         name:user_full_name_];
     ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()
-        ->AddIdentity(expected_default_identity_);
+        ->AddIdentity(identity_);
   }
 
   PrefService* GetLocalState() { return scoped_testing_local_state_.Get(); }
@@ -207,7 +206,7 @@
   // Expects the signin promo view to be configured when accounts are on the
   // device.
   void ExpectSigninWithAccountConfiguration(SigninPromoViewStyle style) {
-    EXPECT_EQ(expected_default_identity_, mediator_.identity);
+    EXPECT_EQ(identity_, mediator_.identity);
     OCMExpect(
         [signin_promo_view_ setMode:SigninPromoViewModeSigninWithAccount]);
     switch (style) {
@@ -217,9 +216,9 @@
               image_view_profile_image_ = value;
               return YES;
             }]]);
-        NSString* name = expected_default_identity_.userGivenName.length
-                             ? expected_default_identity_.userGivenName
-                             : expected_default_identity_.userEmail;
+        NSString* name = identity_.userGivenName.length
+                             ? identity_.userGivenName
+                             : identity_.userEmail;
         std::u16string name16 = SysNSStringToUTF16(name);
         OCMExpect([primary_button_
             setTitle:GetNSStringF(IDS_IOS_SIGNIN_PROMO_CONTINUE_AS, name16)
@@ -268,9 +267,8 @@
           image_view_profile_image_ = value;
           return YES;
         }]]);
-    NSString* name = expected_default_identity_.userGivenName.length
-                         ? expected_default_identity_.userGivenName
-                         : expected_default_identity_.userEmail;
+    NSString* name = identity_.userGivenName.length ? identity_.userGivenName
+                                                    : identity_.userEmail;
     std::u16string name16 = SysNSStringToUTF16(name);
     OCMExpect([primary_button_
         setTitle:GetNSString(IDS_IOS_SYNC_PROMO_TURN_ON_SYNC)
@@ -312,10 +310,8 @@
   // Mediator used for the tests.
   SigninPromoViewMediator* mediator_;
 
-  // User full name for the identity;
-  NSString* user_full_name_;
   // Identity used for sign-in.
-  FakeSystemIdentity* expected_default_identity_;
+  id<SystemIdentity> identity_;
 
   // Configurator received from the consumer.
   SigninPromoViewConfigurator* configurator_;
@@ -359,7 +355,6 @@
 // without full name.
 TEST_F(SigninPromoViewMediatorTest,
        SigninWithAccountConfigureSigninPromoViewWithoutName) {
-  user_full_name_ = nil;
   CreateMediator(signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS);
   TestSigninPromoWithAccount(SigninPromoViewStyleStandard);
 }
@@ -401,8 +396,8 @@
   // configureSigninPromoWithConfigurator:identityChanged:].
   ExpectConfiguratorNotification(YES /* identity changed */);
   ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()
-      ->ForgetIdentity(expected_default_identity_, nil);
-  expected_default_identity_ = nil;
+      ->ForgetIdentity(identity_, nil);
+  identity_ = nil;
   // Check the received configurator.
   CheckNoAccountsConfigurator(configurator_, SigninPromoViewStyleStandard);
 }
@@ -495,7 +490,7 @@
         return YES;
       }];
   OCMExpect([consumer_ signinPromoViewMediator:mediator_
-                  shouldOpenSigninWithIdentity:expected_default_identity_
+                  shouldOpenSigninWithIdentity:identity_
                                    promoAction:signin_metrics::PromoAction::
                                                    PROMO_ACTION_WITH_DEFAULT
                                     completion:completion_arg]);
@@ -506,7 +501,7 @@
   id<ChromeAccountManagerServiceObserver> accountManagerServiceObserver =
       (id<ChromeAccountManagerServiceObserver>)mediator_;
   // Simulates an identity update.
-  [accountManagerServiceObserver identityChanged:expected_default_identity_];
+  [accountManagerServiceObserver identityChanged:identity_];
   // Spins the run loop to wait for the profile image update.
   EXPECT_TRUE(ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()
                   ->WaitForServiceCallbacksToComplete());
@@ -535,17 +530,14 @@
 // signed in.
 TEST_F(SigninPromoViewMediatorTest, SigninPromoWhileSignedIn) {
   AddDefaultIdentity();
-  expected_default_identity_ =
-      [FakeSystemIdentity identityWithEmail:@"johndoe2@example.com"
-                                     gaiaID:@"2"
-                                       name:@"johndoe2"];
+  identity_ = [FakeSystemIdentity fakeIdentity2];
   ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()->AddIdentity(
-      expected_default_identity_);
-  GetAuthenticationService()->SignIn(expected_default_identity_);
+      identity_);
+  GetAuthenticationService()->SignIn(identity_);
   CreateMediator(signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS);
   ExpectConfiguratorNotification(NO /* identity changed */);
   [mediator_ signinPromoViewIsVisible];
-  EXPECT_EQ(expected_default_identity_, mediator_.identity);
+  EXPECT_EQ(identity_, mediator_.identity);
   EXPECT_TRUE(ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()
                   ->WaitForServiceCallbacksToComplete());
   CheckSyncPromoWithAccountConfigurator(configurator_,
@@ -572,7 +564,7 @@
     return value == weak_mediator;
   }];
   OCMExpect([consumer_ signinPromoViewMediator:mediator_checker
-                  shouldOpenSigninWithIdentity:expected_default_identity_
+                  shouldOpenSigninWithIdentity:identity_
                                    promoAction:signin_metrics::PromoAction::
                                                    PROMO_ACTION_WITH_DEFAULT
                                     completion:completion_arg]);
@@ -603,7 +595,7 @@
         return YES;
       }];
   OCMExpect([consumer_ signinPromoViewMediator:mediator_
-                  shouldOpenSigninWithIdentity:expected_default_identity_
+                  shouldOpenSigninWithIdentity:identity_
                                    promoAction:signin_metrics::PromoAction::
                                                    PROMO_ACTION_WITH_DEFAULT
                                     completion:completion_arg]);
diff --git a/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator_unittest.mm
index 85a1e1de..3c9e0549 100644
--- a/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator_unittest.mm
@@ -16,8 +16,9 @@
 #import "ios/chrome/browser/consent_auditor/consent_auditor_factory.h"
 #import "ios/chrome/browser/consent_auditor/consent_auditor_test_utils.h"
 #import "ios/chrome/browser/main/test_browser.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/constants.h"
@@ -96,14 +97,12 @@
     PlatformTest::SetUp();
     identity_service_ =
         ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
-    identity_ = [FakeSystemIdentity identityWithEmail:@"test@email.com"
-                                               gaiaID:@"gaiaID"
-                                                 name:@"Test Name"];
+    identity_ = [FakeSystemIdentity fakeIdentity1];
+    identity_service_->AddIdentity(identity_);
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     builder.AddTestingFactory(ConsentAuditorFactory::GetInstance(),
                               base::BindRepeating(&BuildFakeConsentAuditor));
     builder.AddTestingFactory(SyncServiceFactory::GetInstance(),
@@ -113,7 +112,9 @@
         base::BindRepeating(&SyncSetupServiceMock::CreateKeyedService));
 
     browser_state_ = builder.Build();
-
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     AuthenticationService* authentication_service =
         AuthenticationServiceFactory::GetForBrowserState(browser_state_.get());
     signin::IdentityManager* identity_manager =
@@ -171,7 +172,7 @@
   std::unique_ptr<ChromeBrowserState> browser_state_;
   ios::FakeChromeIdentityService* identity_service_;
   FakeSigninSyncConsumer* consumer_;
-  FakeSystemIdentity* identity_;
+  id<SystemIdentity> identity_;
   SyncSetupServiceMock* sync_setup_service_mock_;
   syncer::MockSyncService* sync_service_mock_;
 };
@@ -312,11 +313,14 @@
   [consentStringIDs addObject:@2];
   [consentStringIDs addObject:@3];
 
+  AuthenticationService* authentication_service =
+      AuthenticationServiceFactory::GetForBrowserState(browser_state_.get());
   id mock_flow = OCMClassMock([AuthenticationFlow class]);
   OCMStub([mock_flow startSignInWithCompletion:[OCMArg any]])
       .andDo(^(NSInvocation* invocation) {
         __weak signin_ui::CompletionCallback block;
         [invocation getArgument:&block atIndex:2];
+        authentication_service->SignIn(identity_);
         block(YES);
       });
 
@@ -365,6 +369,9 @@
   EXPECT_FALSE(browser_state_->GetPrefs()->GetBoolean(
       unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled));
 
+  AuthenticationService* authentication_service =
+      AuthenticationServiceFactory::GetForBrowserState(browser_state_.get());
+  authentication_service->SignIn(identity_);
   // Simulate the signin completion being successful.
   completion(YES);
 
diff --git a/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm b/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm
index 1470cbf..8636c1f 100644
--- a/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm
@@ -14,8 +14,9 @@
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
 #import "ios/chrome/browser/prefs/pref_names.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/sync/mock_sync_service_utils.h"
 #import "ios/chrome/browser/sync/sync_service_factory.h"
@@ -44,22 +45,21 @@
   void SetUp() override {
     PlatformTest::SetUp();
 
-    identity_ = [FakeSystemIdentity identityWithEmail:@"foo1@gmail.com"
-                                               gaiaID:@"foo1ID"
-                                                 name:@"Fake Foo 1"];
+    identity_ = [FakeSystemIdentity fakeIdentity1];
     identity_service()->AddIdentity(identity_);
-
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     builder.AddTestingFactory(SyncServiceFactory::GetInstance(),
                               base::BindRepeating(&CreateMockSyncService));
     builder.AddTestingFactory(
         SyncSetupServiceFactory::GetInstance(),
         base::BindRepeating(&SyncSetupServiceMock::CreateKeyedService));
     browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     browser_ = std::make_unique<TestBrowser>(browser_state_.get());
 
     sync_service_mock_ = static_cast<syncer::MockSyncService*>(
@@ -103,7 +103,7 @@
   UIViewController* view_controller_ = nullptr;
   std::unique_ptr<Browser> browser_;
   std::unique_ptr<TestChromeBrowserState> browser_state_;
-  FakeSystemIdentity* identity_ = nullptr;
+  id<SystemIdentity> identity_ = nil;
 
   syncer::MockSyncService* sync_service_mock_ = nullptr;
 };
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm
index 3bdd6b51..8560ac44 100644
--- a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm
@@ -9,8 +9,9 @@
 #import "components/prefs/testing_pref_service.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/signin/identity_manager_factory.h"
@@ -33,22 +34,18 @@
  public:
   void SetUp() override {
     PlatformTest::SetUp();
-    identity1_ = [FakeSystemIdentity identityWithEmail:@"foo1@gmail.com"
-                                                gaiaID:@"foo1ID"
-                                                  name:@"Fake Foo 1"];
-    identity2_ = [FakeSystemIdentity identityWithEmail:@"foo2@gmail.com"
-                                                gaiaID:@"foo2ID"
-                                                  name:@"Fake Foo 2"];
-    identity3_ = [FakeSystemIdentity identityWithEmail:@"foo3@gmail.com"
-                                                gaiaID:@"foo3ID"
-                                                  name:@"Fake Foo 3"];
+    identity1_ = [FakeSystemIdentity fakeIdentity1];
+    identity2_ = [FakeSystemIdentity fakeIdentity2];
+    identity3_ = [FakeSystemIdentity fakeIdentity3];
 
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     view_controller_ = [[UnifiedConsentViewController alloc]
         initWithPostRestoreSigninPromo:NO];
     pref_service_ = new TestingPrefServiceSimple();
@@ -96,9 +93,9 @@
   IOSChromeScopedTestingLocalState scoped_testing_local_state_;
   std::unique_ptr<TestChromeBrowserState> browser_state_;
 
-  FakeSystemIdentity* identity1_ = nullptr;
-  FakeSystemIdentity* identity2_ = nullptr;
-  FakeSystemIdentity* identity3_ = nullptr;
+  id<SystemIdentity> identity1_ = nil;
+  id<SystemIdentity> identity2_ = nil;
+  id<SystemIdentity> identity3_ = nil;
 
   UnifiedConsentMediator* mediator_ = nullptr;
   PrefService* pref_service_ = nullptr;
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/address_view_controller_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/address_view_controller_egtest.mm
index 73d2f70..5621b7b 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/address_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/address_view_controller_egtest.mm
@@ -146,15 +146,8 @@
 
 // Tests that returning from "Manage Addresses..." leaves the icons and keyboard
 // in the right state.
-// TODO(crbug.com/1111076): Flaky on iOS simulator.
-#if TARGET_IPHONE_SIMULATOR
-#define MAYBE_testAddressesStateAfterPresentingManageAddresses \
-  DISABLED_testAddressesStateAfterPresentingManageAddresses
-#else
-#define MAYBE_testAddressesStateAfterPresentingManageAddresses \
-  testAddressesStateAfterPresentingManageAddresses
-#endif
-- (void)MAYBE_testAddressesStateAfterPresentingManageAddresses {
+// TODO(crbug.com/1111076): Flaky on iOS simulator and device.
+- (void)DISABLED_testAddressesStateAfterPresentingManageAddresses {
   // Bring up the keyboard.
   [[EarlGrey selectElementWithMatcher:chrome_test_util::WebViewMatcher()]
       performAction:chrome_test_util::TapWebElementWithId(kFormElementName)];
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
index ba6e1ec..2395cf7 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_ios_unittest.mm
@@ -12,8 +12,8 @@
 #import "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -27,16 +27,17 @@
 void BookmarkIOSUnitTest::SetUp() {
   // Get a BookmarkModel from the test ChromeBrowserState.
   TestChromeBrowserState::Builder test_cbs_builder;
-
   test_cbs_builder.AddTestingFactory(
       AuthenticationServiceFactory::GetInstance(),
-      base::BindRepeating(
-          &AuthenticationServiceFake::CreateAuthenticationService));
+      AuthenticationServiceFactory::GetDefaultFactory());
   test_cbs_builder.AddTestingFactory(
       ios::BookmarkModelFactory::GetInstance(),
       ios::BookmarkModelFactory::GetDefaultFactory());
 
   chrome_browser_state_ = test_cbs_builder.Build();
+  AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+      chrome_browser_state_.get(),
+      std::make_unique<AuthenticationServiceDelegateFake>());
 
   bookmark_model_ = ios::BookmarkModelFactory::GetForBrowserState(
       chrome_browser_state_.get());
diff --git a/ios/chrome/browser/ui/bookmarks/bookmarks_entries_egtest.mm b/ios/chrome/browser/ui/bookmarks/bookmarks_entries_egtest.mm
index 323d803..ba0fd0d 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmarks_entries_egtest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmarks_entries_egtest.mm
@@ -15,6 +15,7 @@
 #import "ios/chrome/browser/ui/bookmarks/bookmark_ui_constants.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
 #import "ios/chrome/grit/ios_strings.h"
+#import "ios/chrome/test/earl_grey/chrome_actions.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
@@ -36,9 +37,10 @@
 using chrome_test_util::ContextBarLeadingButtonWithLabel;
 using chrome_test_util::ContextMenuCopyButton;
 using chrome_test_util::OmniboxText;
-using chrome_test_util::OpenLinkInNewTabButton;
 using chrome_test_util::OpenLinkInIncognitoButton;
+using chrome_test_util::OpenLinkInNewTabButton;
 using chrome_test_util::OpenLinkInNewWindowButton;
+using chrome_test_util::SwipeToShowDeleteButton;
 using chrome_test_util::TappableBookmarkNodeWithLabel;
 using chrome_test_util::WindowWithNumber;
 
@@ -78,15 +80,6 @@
 #pragma mark - BookmarksEntriesTestCase Tests
 
 - (void)testUndoDeleteBookmarkFromSwipe {
-  // TODO(crbug.com/851227): On Compact Width, the bookmark cell is being
-  // deleted by grey_swipeFastInDirection.
-  // grey_swipeFastInDirectionWithStartPoint doesn't work either and it might
-  // fail on devices. Disabling this test under these conditions on the
-  // meantime.
-  if (![ChromeEarlGrey isCompactWidth]) {
-    EARL_GREY_TEST_SKIPPED(@"Test disabled on iPad.");
-  }
-
   [BookmarkEarlGrey setupStandardBookmarks];
   [BookmarkEarlGreyUI openBookmarks];
   [BookmarkEarlGreyUI openMobileBookmarks];
@@ -94,7 +87,7 @@
   // Swipe action on the URL.
   [[EarlGrey
       selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"Second URL")]
-      performAction:grey_swipeFastInDirection(kGREYDirectionLeft)];
+      performAction:SwipeToShowDeleteButton()];
 
   // Verify context bar does not change when "Delete" shows up.
   [BookmarkEarlGreyUI verifyContextBarInDefaultStateWithSelectEnabled:YES
@@ -120,15 +113,6 @@
 }
 
 - (void)testSwipeToDeleteDisabledInEditMode {
-  // TODO(crbug.com/851227): On non Compact Width  the bookmark cell is being
-  // deleted by grey_swipeFastInDirection.
-  // grey_swipeFastInDirectionWithStartPoint doesn't work either and it might
-  // fail on devices. Disabling this test under these conditions on the
-  // meantime.
-  if (![ChromeEarlGrey isCompactWidth]) {
-    EARL_GREY_TEST_SKIPPED(@"Test disabled on iPad on iOS11.");
-  }
-
   [BookmarkEarlGrey setupStandardBookmarks];
   [BookmarkEarlGreyUI openBookmarks];
   [BookmarkEarlGreyUI openMobileBookmarks];
@@ -136,7 +120,7 @@
   // Swipe action on the URL.
   [[EarlGrey
       selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"First URL")]
-      performAction:grey_swipeFastInDirection(kGREYDirectionLeft)];
+      performAction:SwipeToShowDeleteButton()];
 
   // Verify the delete confirmation button shows up.
   [[[EarlGrey selectElementWithMatcher:BookmarksDeleteSwipeButton()]
@@ -158,7 +142,7 @@
   // confirmation button as swipe-to-delete is disabled in edit mode.
   [[EarlGrey
       selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"Second URL")]
-      performAction:grey_swipeFastInDirection(kGREYDirectionLeft)];
+      performAction:SwipeToShowDeleteButton()];
 
   // Verify the delete confirmation button doesn't appear.
   [[[EarlGrey selectElementWithMatcher:BookmarksDeleteSwipeButton()]
@@ -171,7 +155,7 @@
   // Swipe action on the URL.
   [[EarlGrey
       selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"French URL")]
-      performAction:grey_swipeFastInDirection(kGREYDirectionLeft)];
+      performAction:SwipeToShowDeleteButton()];
 
   // Verify the delete confirmation button shows up. (swipe-to-delete is
   // re-enabled).
diff --git a/ios/chrome/browser/ui/bookmarks/bookmarks_search_egtest.mm b/ios/chrome/browser/ui/bookmarks/bookmarks_search_egtest.mm
index 7525e3f5..9c7a93a 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmarks_search_egtest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmarks_search_egtest.mm
@@ -12,6 +12,7 @@
 #import "ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_ui.h"
 #import "ios/chrome/browser/ui/bookmarks/bookmark_ui_constants.h"
 #import "ios/chrome/grit/ios_strings.h"
+#import "ios/chrome/test/earl_grey/chrome_actions.h"
 #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/web_http_server_chrome_test_case.h"
@@ -22,15 +23,16 @@
 #error "This file requires ARC support."
 #endif
 
-using chrome_test_util::BookmarksSaveEditFolderButton;
 using chrome_test_util::BookmarksDeleteSwipeButton;
 using chrome_test_util::BookmarksNavigationBarBackButton;
+using chrome_test_util::BookmarksSaveEditFolderButton;
 using chrome_test_util::ButtonWithAccessibilityLabelId;
 using chrome_test_util::CancelButton;
 using chrome_test_util::ContextBarCenterButtonWithLabel;
 using chrome_test_util::ContextBarLeadingButtonWithLabel;
 using chrome_test_util::ContextBarTrailingButtonWithLabel;
 using chrome_test_util::SearchIconButton;
+using chrome_test_util::SwipeToShowDeleteButton;
 using chrome_test_util::TappableBookmarkNodeWithLabel;
 
 // Bookmark search integration tests for Chrome.
@@ -421,15 +423,6 @@
 
 // Tests that you can swipe URL items in search mode.
 - (void)testSearchUrlCanBeSwipedToDelete {
-  // TODO(crbug.com/851227): On non Compact Width, the bookmark cell is being
-  // deleted by grey_swipeFastInDirection.
-  // grey_swipeFastInDirectionWithStartPoint doesn't work either and it might
-  // fail on devices. Disabling this test under these conditions on the
-  // meantime.
-  if (![ChromeEarlGrey isCompactWidth]) {
-    EARL_GREY_TEST_SKIPPED(@"Test disabled on iPad on iOS11.");
-  }
-
   [BookmarkEarlGrey setupStandardBookmarks];
   [BookmarkEarlGreyUI openBookmarks];
   [BookmarkEarlGreyUI openMobileBookmarks];
@@ -440,7 +433,7 @@
 
   [[EarlGrey
       selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"First URL")]
-      performAction:grey_swipeFastInDirection(kGREYDirectionLeft)];
+      performAction:SwipeToShowDeleteButton()];
 
   // Verify we have a delete button.
   [[EarlGrey selectElementWithMatcher:BookmarksDeleteSwipeButton()]
@@ -449,15 +442,6 @@
 
 // Tests that you can swipe folders in search mode.
 - (void)testSearchFolderCanBeSwipedToDelete {
-  // TODO(crbug.com/851227): On non Compact Width, the bookmark cell is being
-  // deleted by grey_swipeFastInDirection.
-  // grey_swipeFastInDirectionWithStartPoint doesn't work either and it might
-  // fail on devices. Disabling this test under these conditions on the
-  // meantime.
-  if (![ChromeEarlGrey isCompactWidth]) {
-    EARL_GREY_TEST_SKIPPED(@"Test disabled on iPad on iOS11.");
-  }
-
   [BookmarkEarlGrey setupStandardBookmarks];
   [BookmarkEarlGreyUI openBookmarks];
   [BookmarkEarlGreyUI openMobileBookmarks];
@@ -468,7 +452,7 @@
 
   [[EarlGrey
       selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"Folder 1")]
-      performAction:grey_swipeFastInDirection(kGREYDirectionLeft)];
+      performAction:SwipeToShowDeleteButton()];
 
   // Verify we have a delete button.
   [[EarlGrey selectElementWithMatcher:BookmarksDeleteSwipeButton()]
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
index 9b717eb..286c3b5 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller_unittest.mm
@@ -24,8 +24,8 @@
 #import "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
 #import "ios/chrome/browser/sessions/session_restoration_browser_agent.h"
 #import "ios/chrome/browser/sessions/test_session_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/tabs/tab_helper_util.h"
 #import "ios/chrome/browser/ui/bookmarks/bookmark_interaction_controller.h"
 #import "ios/chrome/browser/ui/browser_container/browser_container_view_controller.h"
@@ -115,11 +115,12 @@
         ios::BookmarkModelFactory::GetDefaultFactory());
     test_cbs_builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
 
     chrome_browser_state_ = test_cbs_builder.Build();
-
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        chrome_browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     id passKitController =
         [OCMockObject niceMockForClass:[PKAddPassesViewController class]];
     passKitViewController_ = passKitController;
diff --git a/ios/chrome/browser/ui/browser_view/key_commands_provider.mm b/ios/chrome/browser/ui/browser_view/key_commands_provider.mm
index c757412b..ee0dad69 100644
--- a/ios/chrome/browser/ui/browser_view/key_commands_provider.mm
+++ b/ios/chrome/browser/ui/browser_view/key_commands_provider.mm
@@ -27,6 +27,7 @@
 #import "ios/chrome/browser/window_activities/window_activity_helpers.h"
 #import "ios/chrome/grit/ios_strings.h"
 #import "ios/public/provider/chrome/browser/user_feedback/user_feedback_sender.h"
+#import "ios/web/public/navigation/referrer.h"
 #import "ios/web/public/web_state.h"
 #import "ui/base/l10n/l10n_util_mac.h"
 
@@ -229,6 +230,14 @@
                                              GURL(kChromeUINewTabURL))];
 }
 
+- (void)keyCommand_openNewIncognitoWindow {
+  [_dispatcher
+      openNewWindowWithActivity:ActivityToLoadURL(
+                                    WindowActivityKeyCommandOrigin,
+                                    GURL(kChromeUINewTabURL), web::Referrer(),
+                                    /* in_incognito */ true)];
+}
+
 - (void)keyCommand_reopenLastClosedTab {
   ChromeBrowserState* browserState = self.browser->GetBrowserState();
   sessions::TabRestoreService* const tabRestoreService =
@@ -416,7 +425,8 @@
 }
 
 - (void)keyCommand_goToTabGrid {
-  // TODO(crbug.com/1378942): Implement this action.
+  [_dispatcher prepareTabSwitcher];
+  [_dispatcher displayTabSwitcherInGridLayout];
 }
 
 - (void)keyCommand_clearBrowsingData {
diff --git a/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm b/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm
index 9fd6e487b..5e0c01ed 100644
--- a/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm
+++ b/ios/chrome/browser/ui/browser_view/key_commands_provider_unittest.mm
@@ -104,6 +104,7 @@
   [provider_ keyCommand_openNewRegularTab];
   [provider_ keyCommand_openNewIncognitoTab];
   [provider_ keyCommand_openNewWindow];
+  [provider_ keyCommand_openNewIncognitoWindow];
   [provider_ keyCommand_reopenLastClosedTab];
   [provider_ keyCommand_openFindInPage];
   [provider_ keyCommand_findNextStringInPage];
diff --git a/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h b/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h
index 6844291..68c0d776 100644
--- a/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h
+++ b/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.h
@@ -25,6 +25,7 @@
 @property(class, nonatomic, readonly) UIKeyCommand* cr_openNewRegularTab;
 @property(class, nonatomic, readonly) UIKeyCommand* cr_openNewIncognitoTab;
 @property(class, nonatomic, readonly) UIKeyCommand* cr_openNewWindow;
+@property(class, nonatomic, readonly) UIKeyCommand* cr_openNewIncognitoWindow;
 @property(class, nonatomic, readonly) UIKeyCommand* cr_reopenLastClosedTab;
 @property(class, nonatomic, readonly) UIKeyCommand* cr_openFindInPage;
 @property(class, nonatomic, readonly) UIKeyCommand* cr_findNextStringInPage;
diff --git a/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.mm b/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.mm
index e65a492..18bc41a 100644
--- a/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.mm
+++ b/ios/chrome/browser/ui/keyboard/UIKeyCommand+Chrome.mm
@@ -66,6 +66,13 @@
                            titleID:IDS_IOS_KEYBOARD_NEW_WINDOW];
 }
 
++ (UIKeyCommand*)cr_openNewIncognitoWindow {
+  return [self cr_commandWithInput:@"n"
+                     modifierFlags:AltShiftCommand
+                            action:@selector(keyCommand_openNewIncognitoWindow)
+                           titleID:IDS_IOS_KEYBOARD_NEW_INCOGNITO_WINDOW];
+}
+
 + (UIKeyCommand*)cr_reopenLastClosedTab {
   return [self cr_commandWithInput:@"t"
                      modifierFlags:ShiftCommand
diff --git a/ios/chrome/browser/ui/keyboard/UIKeyCommand+ChromeTest.mm b/ios/chrome/browser/ui/keyboard/UIKeyCommand+ChromeTest.mm
index 8fe8474..2f9b2bde 100644
--- a/ios/chrome/browser/ui/keyboard/UIKeyCommand+ChromeTest.mm
+++ b/ios/chrome/browser/ui/keyboard/UIKeyCommand+ChromeTest.mm
@@ -59,6 +59,9 @@
          IDS_IOS_TOOLS_MENU_NEW_INCOGNITO_TAB);
   Verify(UIKeyCommand.cr_openNewWindow, @"⌥⌘N", @"keyCommand_openNewWindow",
          IDS_IOS_KEYBOARD_NEW_WINDOW);
+  Verify(UIKeyCommand.cr_openNewIncognitoWindow, @"⌥⇧⌘N",
+         @"keyCommand_openNewIncognitoWindow",
+         IDS_IOS_KEYBOARD_NEW_INCOGNITO_WINDOW);
   Verify(UIKeyCommand.cr_reopenLastClosedTab, @"⇧⌘T",
          @"keyCommand_reopenLastClosedTab", IDS_IOS_KEYBOARD_REOPEN_CLOSED_TAB);
   Verify(UIKeyCommand.cr_openFindInPage, @"⌘F", @"keyCommand_openFindInPage",
diff --git a/ios/chrome/browser/ui/keyboard/key_command_actions.h b/ios/chrome/browser/ui/keyboard/key_command_actions.h
index de3a3a7..6e52c17 100644
--- a/ios/chrome/browser/ui/keyboard/key_command_actions.h
+++ b/ios/chrome/browser/ui/keyboard/key_command_actions.h
@@ -15,6 +15,7 @@
 - (void)keyCommand_openNewRegularTab;
 - (void)keyCommand_openNewIncognitoTab;
 - (void)keyCommand_openNewWindow;
+- (void)keyCommand_openNewIncognitoWindow;
 - (void)keyCommand_reopenLastClosedTab;
 - (void)keyCommand_openFindInPage;
 - (void)keyCommand_findNextStringInPage;
diff --git a/ios/chrome/browser/ui/keyboard/menu_builder.mm b/ios/chrome/browser/ui/keyboard/menu_builder.mm
index 3aa6b1e..7cdb404e 100644
--- a/ios/chrome/browser/ui/keyboard/menu_builder.mm
+++ b/ios/chrome/browser/ui/keyboard/menu_builder.mm
@@ -23,6 +23,7 @@
     UIKeyCommand.cr_openNewTab,
     UIKeyCommand.cr_openNewIncognitoTab,
     UIKeyCommand.cr_openNewWindow,
+    UIKeyCommand.cr_openNewIncognitoWindow,
     UIKeyCommand.cr_focusOmnibox,
     UIKeyCommand.cr_closeTab,
     UIKeyCommand.cr_startVoiceSearch,
diff --git a/ios/chrome/browser/ui/lens/lens_coordinator.mm b/ios/chrome/browser/ui/lens/lens_coordinator.mm
index bf39ddf..057c96eb 100644
--- a/ios/chrome/browser/ui/lens/lens_coordinator.mm
+++ b/ios/chrome/browser/ui/lens/lens_coordinator.mm
@@ -136,9 +136,13 @@
 
 - (void)searchImageWithLens:(SearchImageWithLensCommand*)command {
   const bool isIncognito = self.browser->GetBrowserState()->IsOffTheRecord();
-  [self openWebLoadParams:ios::provider::GenerateLensLoadParamsForImage(
-                              command.image, LensEntrypoint::ContextMenu,
-                              isIncognito)];
+  __weak LensCoordinator* weakSelf = self;
+
+  ios::provider::GenerateLensLoadParamsForImageAsync(
+      command.image, LensEntrypoint::ContextMenu, isIncognito,
+      base::BindOnce(^(const web::NavigationManager::WebLoadParams params) {
+        [weakSelf openWebLoadParams:params];
+      }));
 }
 
 - (void)openInputSelectionForEntrypoint:(LensEntrypoint)entrypoint {
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm
index e09e58df..b6b73c43 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator_unittest.mm
@@ -12,8 +12,8 @@
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
 #import "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
 #import "ios/chrome/browser/ui/commands/omnibox_commands.h"
 #import "ios/chrome/browser/ui/commands/snackbar_commands.h"
@@ -54,10 +54,11 @@
         IOSChromeLargeIconServiceFactory::GetDefaultFactory());
     test_cbs_builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     browser_state_ = test_cbs_builder.Build();
-
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     toolbar_delegate_ =
         OCMProtocolMock(@protocol(NewTabPageControllerDelegate));
   }
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm
index 525d38bc..94f3b17 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_carousel_control.mm
@@ -34,6 +34,8 @@
 
 // Corner radius of the context menu preview.
 const CGFloat kPreviewCornerRadius = 13.0f;
+// Corner radius of the icon's `backgroundView`.
+const CGFloat kBackgroundCornerRadius = 13.0f;
 
 // UILabel displaying text at the bottom of carousel item.
 UILabel* CarouselItemLabel() {
@@ -75,6 +77,23 @@
   return faviconView;
 }
 
+// CAGradientLayer for `backgroundView` when selected.
+CAGradientLayer* CarouselBackgroundGradientLayer() {
+  CAGradientLayer* gradientLayer = [[CAGradientLayer alloc] init];
+  gradientLayer.startPoint = CGPointMake(0, 0.5);
+  gradientLayer.endPoint = CGPointMake(1, 0.5);
+  UIColor* gradientStartColor =
+      [[UIColor colorNamed:@"omnibox_suggestion_row_highlight_color"]
+          colorWithAlphaComponent:0.85];
+  UIColor* gradientEndColor =
+      [UIColor colorNamed:@"omnibox_suggestion_row_highlight_color"];
+  gradientLayer.colors =
+      @[ (id)[gradientStartColor CGColor], (id)[gradientEndColor CGColor] ];
+  gradientLayer.cornerRadius = kBackgroundCornerRadius;
+  gradientLayer.cornerCurve = kCACornerCurveContinuous;
+  return gradientLayer;
+}
+
 }  // namespace
 
 @interface OmniboxPopupCarouselControl ()
@@ -85,6 +104,8 @@
 @property(nonatomic, strong) FaviconView* faviconView;
 // UILabel containing the text.
 @property(nonatomic, strong) UILabel* label;
+// Gradient layer for `backgroundView` when selected.
+@property(nonatomic, strong) CAGradientLayer* gradientLayer;
 
 @end
 
@@ -97,6 +118,7 @@
     _backgroundView = CarouselItemBackgroundView();
     _faviconView = CarouselItemFaviconView();
     _carouselItem = nil;
+    _gradientLayer = CarouselBackgroundGradientLayer();
   }
   return self;
 }
@@ -104,13 +126,17 @@
 - (void)setSelected:(BOOL)selected {
   [super setSelected:selected];
   if (selected) {
-    self.backgroundColor =
-        [UIColor colorNamed:@"omnibox_suggestion_row_highlight_color"];
+    [self.backgroundView.layer addSublayer:self.gradientLayer];
   } else {
-    self.backgroundColor = UIColor.clearColor;
+    [self.gradientLayer removeFromSuperlayer];
   }
 }
 
+- (void)layoutSubviews {
+  self.gradientLayer.frame = self.backgroundView.bounds;
+  [super layoutSubviews];
+}
+
 - (void)addSubviews {
   // Rounds corners in a Squircle.
   self.layer.cornerCurve = kCACornerCurveContinuous;
diff --git a/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm b/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm
index bcf0e3a..e87190f 100644
--- a/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/recent_tabs/recent_tabs_coordinator_unittest.mm
@@ -20,8 +20,8 @@
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/sync/session_sync_service_factory.h"
 #import "ios/chrome/browser/sync/sync_setup_service.h"
 #import "ios/chrome/browser/sync/sync_setup_service_factory.h"
@@ -118,10 +118,6 @@
 
     TestChromeBrowserState::Builder test_cbs_builder;
     test_cbs_builder.AddTestingFactory(
-        AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
-    test_cbs_builder.AddTestingFactory(
         SyncSetupServiceFactory::GetInstance(),
         base::BindRepeating(&SyncSetupServiceMock::CreateKeyedService));
     test_cbs_builder.AddTestingFactory(
@@ -133,10 +129,8 @@
         IOSChromeTabRestoreServiceFactory::GetDefaultFactory());
     test_cbs_builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     chrome_browser_state_ = test_cbs_builder.Build();
-
     browser_ = std::make_unique<TestBrowser>(chrome_browser_state_.get());
   }
 
@@ -194,6 +188,9 @@
       ON_CALL(open_tabs_ui_delegate_, GetAllForeignSessions(_))
           .WillByDefault(Return(hasForeignSessions));
     }
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        chrome_browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
   }
 
   void CreateController() {
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn b/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
index b5471ca7..e3c63ad 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/BUILD.gn
@@ -196,6 +196,8 @@
     "//ios/chrome/browser/signin:fake_system_identity",
     "//ios/chrome/browser/signin:test_support",
     "//ios/chrome/browser/snapshots",
+    "//ios/chrome/browser/sync",
+    "//ios/chrome/browser/sync:test_support",
     "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/tabs:tabs_internal",
     "//ios/chrome/browser/ui:feature_flags",
@@ -214,6 +216,7 @@
     "//ios/chrome/browser/web_state_list/web_usage_enabler",
     "//ios/chrome/test:block_cleanup_test",
     "//ios/chrome/test:test_support",
+    "//ios/public/provider/chrome/browser/signin:test_support",
     "//ios/web/common",
     "//ios/web/public/test",
     "//ios/web/public/test/fakes",
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm
index 89e88cd3..f0bcd033 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator_unittest.mm
@@ -17,8 +17,8 @@
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/snapshots/snapshot_browser_agent.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browsing_data_commands.h"
@@ -123,13 +123,14 @@
         IOSChromeTabRestoreServiceFactory::GetDefaultFactory());
     test_cbs_builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
+        AuthenticationServiceFactory::GetDefaultFactory());
     test_cbs_builder.AddTestingFactory(
         ios::BookmarkModelFactory::GetInstance(),
         ios::BookmarkModelFactory::GetDefaultFactory());
     chrome_browser_state_ = test_cbs_builder.Build();
-
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        chrome_browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     bookmark_model_ = ios::BookmarkModelFactory::GetForBrowserState(
         chrome_browser_state_.get());
     bookmarks::test::WaitForBookmarkModelToLoad(bookmark_model_);
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
index 42bff9b..38c2375c 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
@@ -30,11 +30,14 @@
 #import "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
 #import "ios/chrome/browser/sessions/session_restoration_browser_agent.h"
 #import "ios/chrome/browser/sessions/test_session_service.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
-#import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/fake_system_identity.h"
 #import "ios/chrome/browser/snapshots/snapshot_browser_agent.h"
 #import "ios/chrome/browser/snapshots/snapshot_tab_helper.h"
+#import "ios/chrome/browser/sync/mock_sync_service_utils.h"
+#import "ios/chrome/browser/sync/sync_service_factory.h"
 #import "ios/chrome/browser/tabs/closing_web_state_observer_browser_agent.h"
 #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_commands.h"
 #import "ios/chrome/browser/ui/tab_switcher/tab_grid/grid/grid_consumer.h"
@@ -48,6 +51,7 @@
 #import "ios/chrome/browser/web_state_list/web_state_opener.h"
 #import "ios/chrome/browser/web_state_list/web_usage_enabler/web_usage_enabler_browser_agent.h"
 #import "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
+#import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h"
 #import "ios/web/common/features.h"
 #import "ios/web/public/test/fakes/fake_navigation_manager.h"
 #import "ios/web/public/test/fakes/fake_web_state.h"
@@ -274,22 +278,26 @@
     TestChromeBrowserState::Builder builder;
     builder.AddTestingFactory(IOSChromeTabRestoreServiceFactory::GetInstance(),
                               base::BindRepeating(BuildFakeTabRestoreService));
+    builder.AddTestingFactory(SyncServiceFactory::GetInstance(),
+                              base::BindRepeating(&CreateMockSyncService));
     builder.AddTestingFactory(
         AuthenticationServiceFactory::GetInstance(),
-        base::BindRepeating(
-            &AuthenticationServiceFake::CreateAuthenticationService));
-
+        AuthenticationServiceFactory::GetDefaultFactory());
     browser_state_ = builder.Build();
+    AuthenticationServiceFactory::CreateAndInitializeForBrowserState(
+        browser_state_.get(),
+        std::make_unique<AuthenticationServiceDelegateFake>());
     // Price Drops are only available to signed in MSBB users.
     browser_state_->GetPrefs()->SetBoolean(
         unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled, true);
-    fake_identity_ = [FakeSystemIdentity identityWithEmail:@"foo1@gmail.com"
-                                                    gaiaID:@"foo1ID"
-                                                      name:@"Fake Foo 1"];
-    auth_service_ = static_cast<AuthenticationServiceFake*>(
+    id<SystemIdentity> identity = [FakeSystemIdentity fakeIdentity1];
+    ios::FakeChromeIdentityService* identity_service_ =
+        ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
+    identity_service_->AddIdentity(identity);
+    auth_service_ = static_cast<AuthenticationService*>(
         AuthenticationServiceFactory::GetInstance()->GetForBrowserState(
             browser_state_.get()));
-    auth_service_->SignIn(fake_identity_);
+    auth_service_->SignIn(identity);
 
     tab_restore_service_ =
         IOSChromeTabRestoreServiceFactory::GetForBrowserState(
@@ -404,8 +412,7 @@
   BrowserList* browser_list_;
   base::UserActionTester user_action_tester_;
   base::test::ScopedFeatureList scoped_feature_list_;
-  FakeSystemIdentity* fake_identity_ = nullptr;
-  AuthenticationServiceFake* auth_service_ = nullptr;
+  AuthenticationService* auth_service_ = nullptr;
 };
 
 #pragma mark - Consumer tests
diff --git a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
index 08ebdc9..e3b9710 100644
--- a/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
+++ b/ios/chrome/browser/ui/tabs/tab_strip_controller.mm
@@ -32,6 +32,7 @@
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_controller.h"
 #import "ios/chrome/browser/ui/fullscreen/scoped_fullscreen_disabler.h"
 #import "ios/chrome/browser/ui/gestures/view_revealing_vertical_pan_handler.h"
+#import "ios/chrome/browser/ui/icons/symbols.h"
 #import "ios/chrome/browser/ui/main/scene_state.h"
 #import "ios/chrome/browser/ui/main/scene_state_browser_agent.h"
 #import "ios/chrome/browser/ui/ntp/ntp_util.h"
@@ -128,6 +129,8 @@
   return UIColor.blackColor;
 }
 
+const CGFloat kSymbolSize = 18;
+
 }  // namespace
 
 // Helper class to display a UIButton with the image and text centered
@@ -479,9 +482,14 @@
                                       UIViewAutoresizingFlexibleBottomMargin);
     _buttonNewTab.imageView.contentMode = UIViewContentModeCenter;
 
-    UIImage* buttonNewTabImage = [UIImage imageNamed:@"tabstrip_new_tab"];
-    buttonNewTabImage = [buttonNewTabImage
-        imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+    UIImage* buttonNewTabImage;
+    if (UseSymbols()) {
+      buttonNewTabImage = DefaultSymbolWithPointSize(kPlusSymbol, kSymbolSize);
+    } else {
+      buttonNewTabImage = [UIImage imageNamed:@"tabstrip_new_tab"];
+      buttonNewTabImage = [buttonNewTabImage
+          imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+    }
     [_buttonNewTab setImage:buttonNewTabImage forState:UIControlStateNormal];
     [_buttonNewTab.imageView setTintColor:[UIColor colorNamed:kGrey500Color]];
 
diff --git a/ios/chrome/test/earl_grey/chrome_actions.h b/ios/chrome/test/earl_grey/chrome_actions.h
index 13daca8..7505d43c 100644
--- a/ios/chrome/test/earl_grey/chrome_actions.h
+++ b/ios/chrome/test/earl_grey/chrome_actions.h
@@ -62,6 +62,10 @@
 id<GREYAction> TapAtPointPercentage(CGFloat xOriginStartPercentage,
                                     CGFloat yOriginStartPercentage);
 
+// Action to swipe a TableViewCell enough to display the "Delete" button and
+// not too much to have the cell being deleted right away.
+id<GREYAction> SwipeToShowDeleteButton();
+
 }  // namespace chrome_test_util
 
 #endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_ACTIONS_H_
diff --git a/ios/chrome/test/earl_grey/chrome_actions.mm b/ios/chrome/test/earl_grey/chrome_actions.mm
index d3be624..63eaf9e6 100644
--- a/ios/chrome/test/earl_grey/chrome_actions.mm
+++ b/ios/chrome/test/earl_grey/chrome_actions.mm
@@ -6,6 +6,7 @@
 
 #import "base/mac/foundation_util.h"
 #import "ios/chrome/test/earl_grey/chrome_actions_app_interface.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/testing/earl_grey/earl_grey_test.h"
 #import "ios/web/public/test/element_selector.h"
 
@@ -60,4 +61,8 @@
                   yOriginStartPercentage:yOriginStartPercentage];
 }
 
+id<GREYAction> SwipeToShowDeleteButton() {
+  return [ChromeActionsAppInterface swipeToShowDeleteButton];
+}
+
 }  // namespace chrome_test_util
diff --git a/ios/chrome/test/earl_grey/chrome_actions_app_interface.h b/ios/chrome/test/earl_grey/chrome_actions_app_interface.h
index a64a0769..57c61f3 100644
--- a/ios/chrome/test/earl_grey/chrome_actions_app_interface.h
+++ b/ios/chrome/test/earl_grey/chrome_actions_app_interface.h
@@ -51,6 +51,10 @@
 + (id<GREYAction>)tapAtPointAtxOriginStartPercentage:(CGFloat)x
                               yOriginStartPercentage:(CGFloat)y;
 
+// Action to swipe a TableViewCell enough to display the "Delete" button and
+// not too much to have the cell being deleted right away.
++ (id<GREYAction>)swipeToShowDeleteButton;
+
 @end
 
 #endif  // IOS_CHROME_TEST_EARL_GREY_CHROME_ACTIONS_APP_INTERFACE_H_
diff --git a/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm b/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm
index 887e123..7a67b46 100644
--- a/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm
+++ b/ios/chrome/test/earl_grey/chrome_actions_app_interface.mm
@@ -17,7 +17,33 @@
 #endif
 
 namespace {
+
+// Action to swipe left on 150pt.
+NSArray<NSValue*>* SwipeLeft(CGPoint startPoint) {
+  const CGFloat total_length = 150;
+  const int number_of_frames = 30;
+  const CGFloat deltaX = total_length / number_of_frames;
+  // Initial displacement to trigger a swipe.
+  const int initial_displacement = 10;
+  const int beginning = ceil(initial_displacement / deltaX);
+
+  NSMutableArray* touchPath = [[NSMutableArray alloc] init];
+  [touchPath addObject:[NSValue valueWithCGPoint:startPoint]];
+
+  for (int i = beginning; i < number_of_frames; i++) {
+    CGPoint point = CGPointMake(startPoint.x - i * deltaX, startPoint.y);
+    [touchPath addObject:[NSValue valueWithCGPoint:point]];
+  }
+
+  [touchPath addObject:[NSValue valueWithCGPoint:CGPointMake(startPoint.x -
+                                                                 total_length,
+                                                             startPoint.y)]];
+
+  return touchPath;
+}
+
 NSString* kChromeActionsErrorDomain = @"ChromeActionsError";
+
 }  // namespace
 
 @implementation ChromeActionsAppInterface : NSObject
@@ -151,4 +177,37 @@
                             performBlock:actionBlock];
 }
 
++ (id<GREYAction>)swipeToShowDeleteButton {
+  return [GREYActionBlock
+      actionWithName:@"Swipe to display delete button"
+         constraints:nil
+        performBlock:^(UIView* element, NSError* __strong* errorOrNil) {
+          if ([element window] == nil) {
+            NSString* errorDescription = [NSString
+                stringWithFormat:
+                    @"Cannot swipe on this view as it has no window and "
+                    @"isn't a window itself:\n%@",
+                    [element grey_description]];
+            *errorOrNil = [NSError
+                errorWithDomain:@"No window available"
+                           code:0
+                       userInfo:@{@"Failure Reason" : (errorDescription)}];
+            // Indicates that the action failed.
+            return NO;
+          }
+          CGRect accessibilityFrame = element.accessibilityFrame;
+          CGPoint startPoint = CGPointMake(
+              accessibilityFrame.origin.x + accessibilityFrame.size.width * 0.5,
+              accessibilityFrame.origin.y +
+                  accessibilityFrame.size.height * 0.5);
+          // Invoke a custom selector that animates the window of the element.
+          [GREYSyntheticEvents touchAlongPath:SwipeLeft(startPoint)
+                             relativeToWindow:[element window]
+                                  forDuration:1
+                                      timeout:10];
+          // Indicates that the action was executed successfully.
+          return YES;
+        }];
+}
+
 @end
diff --git a/ios/chrome/test/providers/lens/test_lens.mm b/ios/chrome/test/providers/lens/test_lens.mm
index cce1f1ff..a268445 100644
--- a/ios/chrome/test/providers/lens/test_lens.mm
+++ b/ios/chrome/test/providers/lens/test_lens.mm
@@ -31,6 +31,9 @@
 
 }
 
+using LensWebParamsCallback =
+    base::OnceCallback<void(web::NavigationManager::WebLoadParams)>;
+
 id<ChromeLensController> NewChromeLensController(LensConfiguration* config) {
   // Lens is not supported for tests.
   return nil;
@@ -55,5 +58,12 @@
   return web::NavigationManager::WebLoadParams({});
 }
 
+void GenerateLensLoadParamsForImageAsync(UIImage* image,
+                                         LensEntrypoint entry_point,
+                                         bool is_incognito,
+                                         LensWebParamsCallback completion) {
+  NOTREACHED() << "Lens is not supported.";
+}
+
 }  // namespace provider
 }  // namespace ios
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
index f9a72d5c..6530e255 100644
--- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-f384b6988a69526ca2b99d33a05e87f825860224
\ No newline at end of file
+dde22e33c62acb6a0fd0284a2b765c78dae7736d
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
index c495b763..f260641 100644
--- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
+++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@
-e093af8040f694fde23a7139644520c9d3fd82b3
\ No newline at end of file
+0877c54347328e4c05eb00e86602531bc266a5e3
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
index 49b3e2a..91e0f1be 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-adb53d72e356287df6cba6db1874240c96a879b8
\ No newline at end of file
+5c5347e6ce81fa4f9326336c18c420275a842b3a
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
index 848d1d0..4a15b21 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-25c5bd206ce4796ff5641baed2d388148ee5b0d2
\ No newline at end of file
+e940bddddacda1bf7110f8d1b0eaed01929caf0b
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
index 64d979b..b36163b 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-b5b8bf71d21ab72f6f729d449e07b018032c8af3
\ No newline at end of file
+afb88a6af107dfc62f193a232f177ebc33096900
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
index 3af8881..940b73e2 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-69eb6d4a8f5fb0a721cd0fda64bb78b44de5d3fc
\ No newline at end of file
+397e3b367a155ae6e771b074e112a03ac5c4d7d7
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
index 4134238..8a92ea90 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-507c4137bc9ab34c8ba4a43ae75630b9ddc8f03b
\ No newline at end of file
+43942db2cb7cc955b0faf7545ea13627717a66e8
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
index 8a885e2..edd8523 100644
--- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-6218c10d732b17bbc8a974f67a3f6b55da4c2fa6
\ No newline at end of file
+72b120d9f22f69ea4526d219eb4c6f66769fc8fe
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
index c6d0fc5..246b5f7 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-db3fac89776239a8b26dbc29538acdbb58937dd5
\ No newline at end of file
+f2b7c85eb65c78c5c33a0b13608d2fbde46de314
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
index 7c511170..68640de 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-63f4e8ead51803e827da4c4658c72a7cfe0e079b
\ No newline at end of file
+23f518454c61517022b3c66b7917ea88a1878673
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
index be6906b..dc645f81 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-d8b77e4e2b5b991b2257f2ac49fb85de994f670b
\ No newline at end of file
+208849510c567832422b8edbc82a3882fcff0fe2
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
index 5e4ae9b..b15d512 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-19289cc0597a3ddf931bdfddfc34c8088da0a156
\ No newline at end of file
+951e6f58d4e1c5e5e96f8031840a0169a0200020
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
index 65a223da..9daaa9a 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-5fea5abacadbc0a315d282c3336afe7726b66754
\ No newline at end of file
+eb060be022144de8f94074472acaa007664094fc
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
index c8b1ffa..ca438d8 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-20ff1346f6e30749e3a630421128a24acc59d755
\ No newline at end of file
+4af7d54ce4def746404f95c0f0d36d62bdc25427
\ No newline at end of file
diff --git a/ios/public/provider/chrome/browser/lens/lens_api.h b/ios/public/provider/chrome/browser/lens/lens_api.h
index 793f86b0..821893b 100644
--- a/ios/public/provider/chrome/browser/lens/lens_api.h
+++ b/ios/public/provider/chrome/browser/lens/lens_api.h
@@ -7,6 +7,7 @@
 
 #import <UIKit/UIKit.h>
 
+#import "base/callback.h"
 #import "ios/web/public/navigation/navigation_manager.h"
 
 @class LensConfiguration;
@@ -47,6 +48,11 @@
 namespace ios {
 namespace provider {
 
+// Callback invoked when the web load params for a Lens query have been
+// generated.
+using LensWebParamsCallback =
+    base::OnceCallback<void(web::NavigationManager::WebLoadParams)>;
+
 // Returns a controller for the given configuration that can facilitate
 // communication with the downstream Lens controller.
 id<ChromeLensController> NewChromeLensController(LensConfiguration* config);
@@ -64,6 +70,14 @@
     LensEntrypoint entry_point,
     bool is_incognito);
 
+// Generates web load params for a Lens image search for the given
+// 'image' and 'entry_point'. `completion` will be run on the main
+// thread.
+void GenerateLensLoadParamsForImageAsync(UIImage* image,
+                                         LensEntrypoint entry_point,
+                                         bool is_incognito,
+                                         LensWebParamsCallback completion);
+
 }  // namespace provider
 }  // namespace ios
 
diff --git a/ios/testing/earl_grey/app_launch_manager.mm b/ios/testing/earl_grey/app_launch_manager.mm
index 2ecf05a18..8399388 100644
--- a/ios/testing/earl_grey/app_launch_manager.mm
+++ b/ios/testing/earl_grey/app_launch_manager.mm
@@ -151,8 +151,21 @@
     if (gracefullyKill) {
       GREYAssertTrue([EarlGrey backgroundApplication],
                      @"Failed to background application.");
+
+      if (self.runningApplication.state ==
+          XCUIApplicationStateRunningBackgroundSuspended) {
+        [self.runningApplication terminate];
+      } else {
+        [BaseEarlGreyTestCaseAppInterface gracefulTerminate];
+        if (![self.runningApplication
+                waitForState:XCUIApplicationStateNotRunning
+                     timeout:5]) {
+          [self.runningApplication terminate];
+        }
+      }
     }
 
+    // No-op if already terminated above.
     [self.runningApplication terminate];
 
     // Can't use EG conditionals here since the app is terminated.
diff --git a/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.h b/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.h
index 9161f54..0d80118e 100644
--- a/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.h
+++ b/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.h
@@ -18,6 +18,10 @@
 // Adjusts the speed property of CALayer to 100 to speed up XCUITests.
 + (void)enableFastAnimation;
 
+// Calls _terminateWithStatus and exit. This causes UIKit to call
+// applicationWillTerminate, which is a more realistic termination.
++ (void)gracefulTerminate;
+
 @end
 
 #endif  // IOS_TESTING_EARL_GREY_BASE_EARL_GREY_TEST_CASE_APP_INTERFACE_H_
diff --git a/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.mm b/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.mm
index 2575020..47dd774 100644
--- a/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.mm
+++ b/ios/testing/earl_grey/base_earl_grey_test_case_app_interface.mm
@@ -13,6 +13,10 @@
 #error "This file requires ARC support."
 #endif
 
+@interface UIApplication (Testing)
+- (void)_terminateWithStatus:(int)status;
+@end
+
 @implementation BaseEarlGreyTestCaseAppInterface
 
 + (void)logMessage:(NSString*)message {
@@ -25,4 +29,12 @@
   }
 }
 
++ (void)gracefulTerminate {
+  dispatch_async(dispatch_get_main_queue(), ^{
+    UIApplication* application = UIApplication.sharedApplication;
+    [application _terminateWithStatus:0];
+    exit(0);
+  });
+}
+
 @end
diff --git a/ios/testing/earl_grey/earl_grey_app.h b/ios/testing/earl_grey/earl_grey_app.h
index e8b5fc1..bacb7d1 100644
--- a/ios/testing/earl_grey/earl_grey_app.h
+++ b/ios/testing/earl_grey/earl_grey_app.h
@@ -10,9 +10,11 @@
 #import <AppFramework/Action/GREYActionsShorthand.h>
 #import <AppFramework/Core/GREYElementInteraction.h>
 #import <AppFramework/EarlGreyApp.h>
+#import <AppFramework/Event/GREYSyntheticEvents.h>
 #import <AppFramework/Matcher/GREYMatchersShorthand.h>
 #import <AppFramework/Synchronization/GREYSyncAPI.h>
 #import <AppFramework/Synchronization/GREYUIThreadExecutor+GREYApp.h>
+#import <CommonLib/Additions/NSObject+GREYCommon.h>
 #import <CommonLib/Error/GREYErrorConstants.h>
 #import <CommonLib/GREYAppleInternals.h>
 
diff --git a/media/audio/mac/audio_low_latency_input_mac.cc b/media/audio/mac/audio_low_latency_input_mac.cc
index 21180ea..fa83b9cd 100644
--- a/media/audio/mac/audio_low_latency_input_mac.cc
+++ b/media/audio/mac/audio_low_latency_input_mac.cc
@@ -55,13 +55,13 @@
 
 // Max length of sequence of TooManyFramesToProcessError errors.
 // The stream will be stopped as soon as this time limit is passed.
-const int kMaxErrorTimeoutInSeconds = 1;
+constexpr base::TimeDelta kMaxErrorTimeout = base::Seconds(1);
 
 // A one-shot timer is created and started in Start() and it triggers
 // CheckInputStartupSuccess() after this amount of time. UMA stats marked
 // Media.Audio.InputStartupSuccessMac is then updated where true is added
 // if input callbacks have started, and false otherwise.
-const int kInputCallbackStartTimeoutInSeconds = 5;
+constexpr base::TimeDelta kInputCallbackStartTimeout = base::Seconds(5);
 
 // Returns true if the format flags in |format_flags| has the "non-interleaved"
 // flag (kAudioFormatFlagIsNonInterleaved) cleared (set to 0).
@@ -663,9 +663,8 @@
   // CheckInputStartupSuccess() will check if |input_callback_is_active_| is
   // true when the timer expires.
   input_callback_timer_ = std::make_unique<base::OneShotTimer>();
-  input_callback_timer_->Start(
-      FROM_HERE, base::Seconds(kInputCallbackStartTimeoutInSeconds), this,
-      &AUAudioInputStream::CheckInputStartupSuccess);
+  input_callback_timer_->Start(FROM_HERE, kInputCallbackStartTimeout, this,
+                               &AUAudioInputStream::CheckInputStartupSuccess);
   DCHECK(input_callback_timer_->IsRunning());
 }
 
@@ -1036,53 +1035,44 @@
     TRACE_EVENT_END0("audio", "AudioUnitRender");
   }
 
-  if (result != noErr) {
-    TRACE_EVENT_INSTANT0("audio", "AudioUnitRender error",
-                         TRACE_EVENT_SCOPE_THREAD);
-    // Only upload UMA histograms for the case when AGC is enabled. The reason
-    // is that we want to compare these stats with others in this class and
-    // they are only stored for "AGC streams", e.g. WebRTC audio streams.
-    const bool add_uma_histogram = GetAutomaticGainControl();
-    if (add_uma_histogram) {
-      base::UmaHistogramSparse("Media.AudioInputCbErrorMac", result);
-    }
-    OSSTATUS_LOG(ERROR, result) << "AudioUnitRender() failed ";
-    if (result == kAudioUnitErr_TooManyFramesToProcess ||
-        result == kAudioUnitErr_CannotDoInCurrentContext) {
-      DCHECK(!last_success_time_.is_null());
-      // We delay stopping the stream for kAudioUnitErr_TooManyFramesToProcess
-      // since it has been observed that some USB headsets can cause this error
-      // but only for a few initial frames at startup and then then the stream
-      // returns to a stable state again. See b/19524368 for details.
-      // Instead, we measure time since last valid audio frame and call
-      // HandleError() only if a too long error sequence is detected. We do
-      // this to avoid ending up in a non recoverable bad core audio state.
-      // Also including kAudioUnitErr_CannotDoInCurrentContext since long
-      // sequences can be produced in combination with e.g. sample-rate changes
-      // for input devices.
-      base::TimeDelta time_since_last_success =
-          base::TimeTicks::Now() - last_success_time_;
-      if ((time_since_last_success >
-           base::Seconds(kMaxErrorTimeoutInSeconds))) {
-        const char* err = (result == kAudioUnitErr_TooManyFramesToProcess)
-                              ? "kAudioUnitErr_TooManyFramesToProcess"
-                              : "kAudioUnitErr_CannotDoInCurrentContext";
-        LOG(ERROR) << "Too long sequence of " << err << " errors!";
-        HandleError(result);
-      }
+  if (result == noErr) {
+    // Update time of successful call to AudioUnitRender().
+    last_success_time_ = base::TimeTicks::Now();
 
-    } else {
-      // We have also seen kAudioUnitErr_NoConnection in some cases. Bailing
-      // out for this error for now.
-      HandleError(result);
-    }
-    return result;
+    // Deliver recorded data to the consumer as a callback.
+    return Provide(number_of_frames, &audio_buffer_list_, time_stamp);
   }
-  // Update time of successful call to AudioUnitRender().
-  last_success_time_ = base::TimeTicks::Now();
 
-  // Deliver recorded data to the consumer as a callback.
-  return Provide(number_of_frames, &audio_buffer_list_, time_stamp);
+  TRACE_EVENT_INSTANT0("audio", "AudioUnitRender error",
+                       TRACE_EVENT_SCOPE_THREAD);
+  OSSTATUS_LOG(ERROR, result) << "AudioUnitRender() failed ";
+
+  if (result == kAudioUnitErr_TooManyFramesToProcess ||
+      result == kAudioUnitErr_CannotDoInCurrentContext) {
+    DCHECK(!last_success_time_.is_null());
+    // We delay stopping the stream for kAudioUnitErr_TooManyFramesToProcess
+    // since it has been observed that some USB headsets can cause this error
+    // but only for a few initial frames at startup and then then the stream
+    // returns to a stable state again. See b/19524368 for details.
+    // Instead, we measure time since last valid audio frame and call
+    // HandleError() only if a too long error sequence is detected. We do
+    // this to avoid ending up in a non recoverable bad core audio state.
+    // Also including kAudioUnitErr_CannotDoInCurrentContext since long
+    // sequences can be produced in combination with e.g. sample-rate changes
+    // for input devices.
+    if (base::TimeTicks::Now() - last_success_time_ <= kMaxErrorTimeout) {
+      // Skip error handling for now.
+      return result;
+    }
+
+    const char* err = (result == kAudioUnitErr_TooManyFramesToProcess)
+                          ? "kAudioUnitErr_TooManyFramesToProcess"
+                          : "kAudioUnitErr_CannotDoInCurrentContext";
+    LOG(ERROR) << "Too long sequence of " << err << " errors!";
+  }
+
+  HandleError(result);
+  return result;
 }
 
 OSStatus AUAudioInputStream::Provide(UInt32 number_of_frames,
diff --git a/media/base/media_serializers.h b/media/base/media_serializers.h
index 2148825..2dd192b 100644
--- a/media/base/media_serializers.h
+++ b/media/base/media_serializers.h
@@ -14,7 +14,7 @@
 #include "media/base/buffering_state.h"
 #include "media/base/decoder.h"
 #include "media/base/media_serializers_base.h"
-#include "media/base/renderer_factory_selector.h"
+#include "media/base/renderer.h"
 #include "media/base/status.h"
 #include "media/base/text_track_config.h"
 #include "media/base/video_decoder_config.h"
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index 40b2bf74..d6ffeb64 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -526,6 +526,7 @@
                void(std::vector<DemuxerStream*>, base::OnceClosure));
   MOCK_METHOD2(OnSelectedAudioTracksChanged,
                void(std::vector<DemuxerStream*>, base::OnceClosure));
+  RendererType GetRendererType() override { return RendererType::kTest; }
 };
 
 class MockRendererFactory : public RendererFactory {
diff --git a/media/base/renderer.cc b/media/base/renderer.cc
index 232de6c..553025a 100644
--- a/media/base/renderer.cc
+++ b/media/base/renderer.cc
@@ -7,6 +7,35 @@
 
 namespace media {
 
+// WARNING: The returned names are used as part of UMA names. Do NOT change
+// existing return names.
+std::string GetRendererName(RendererType renderer_type) {
+  switch (renderer_type) {
+    case RendererType::kDefault:
+      return "RendererImpl";
+    case RendererType::kMojo:
+      return "MojoRenderer";
+    case RendererType::kMediaPlayer:
+      return "MediaPlayerRenderer";
+    case RendererType::kCourier:
+      return "CourierRenderer";
+    case RendererType::kFlinging:
+      return "FlingingRenderer";
+    case RendererType::kCast:
+      return "CastRenderer";
+    case RendererType::kMediaFoundation:
+      return "MediaFoundationRenderer";
+    case RendererType::kRemoting:
+      return "RemotingRenderer";  // media::remoting::Receiver
+    case RendererType::kCastStreaming:
+      return "CastStreamingRenderer";
+    case RendererType::kContentEmbedderDefined:
+      return "EmbedderDefined";
+    case RendererType::kTest:
+      return "Media Renderer Implementation For Testing";
+  }
+}
+
 Renderer::Renderer() = default;
 
 Renderer::~Renderer() = default;
diff --git a/media/base/renderer.h b/media/base/renderer.h
index 8fdc608..756a178 100644
--- a/media/base/renderer.h
+++ b/media/base/renderer.h
@@ -20,6 +20,30 @@
 class MediaResource;
 class RendererClient;
 
+// Types of media::Renderer.
+// WARNING: These values are reported to metrics. Entries should not be
+// renumbered and numeric values should not be reused. When adding new entries,
+// also update media::mojom::RendererType & tools/metrics/histograms/enums.xml.
+enum class RendererType {
+  kDefault = 0,          // DefaultRendererFactory
+  kMojo = 1,             // MojoRendererFactory
+  kMediaPlayer = 2,      // MediaPlayerRendererClientFactory
+  kCourier = 3,          // CourierRendererFactory
+  kFlinging = 4,         // FlingingRendererClientFactory
+  kCast = 5,             // CastRendererClientFactory
+  kMediaFoundation = 6,  // MediaFoundationRendererClientFactory
+  // kFuchsia = 7,       // Deprecated
+  kRemoting = 8,       // RemotingRendererFactory for remoting::Receiver
+  kCastStreaming = 9,  // PlaybackCommandForwardingRendererFactory
+  kContentEmbedderDefined = 10,  // Defined by the content embedder
+  kTest = 11,                    // Renderer implementations used in tests
+  kMaxValue = kTest,
+};
+
+// Get the name of the Renderer for `renderer_type`. The returned name could be
+// the actual Renderer class name or a descriptive name.
+std::string MEDIA_EXPORT GetRendererName(RendererType renderer_type);
+
 class MEDIA_EXPORT Renderer {
  public:
   Renderer();
@@ -103,6 +127,11 @@
   // MediaFoundationRendererClient to produce a VideoFrame with 'data'
   // accessible by the client it must switch to operate in Frame Server mode.
   virtual void OnExternalVideoFrameRequest();
+
+  // Returns the type of the Renderer implementation. Marked as pure virtual to
+  // enforce RendererType registration for all Renderer implementations.
+  // Note: New implementation should update RendererType.
+  virtual RendererType GetRendererType() = 0;
 };
 
 }  // namespace media
diff --git a/media/base/renderer_client.h b/media/base/renderer_client.h
index ad3ffec..515a173 100644
--- a/media/base/renderer_client.h
+++ b/media/base/renderer_client.h
@@ -7,6 +7,7 @@
 
 #include "media/base/audio_decoder_config.h"
 #include "media/base/buffering_state.h"
+#include "media/base/media_export.h"
 #include "media/base/media_status.h"
 #include "media/base/pipeline_status.h"
 #include "media/base/video_decoder_config.h"
diff --git a/media/base/renderer_factory_selector.cc b/media/base/renderer_factory_selector.cc
index 83249b2..965cb5a1 100644
--- a/media/base/renderer_factory_selector.cc
+++ b/media/base/renderer_factory_selector.cc
@@ -9,36 +9,6 @@
 
 namespace media {
 
-// WARNING: The returned names are used as part of UMA names. Do NOT change
-// existing return names.
-std::string GetRendererName(RendererType renderer_type) {
-  switch (renderer_type) {
-    case RendererType::kDefault:
-      return "RendererImpl";
-    case RendererType::kMojo:
-      return "MojoRenderer";
-    case RendererType::kMediaPlayer:
-      return "MediaPlayerRenderer";
-    case RendererType::kCourier:
-      return "CourierRenderer";
-    case RendererType::kFlinging:
-      return "FlingingRenderer";
-    case RendererType::kCast:
-      return "CastRenderer";
-    case RendererType::kMediaFoundation:
-      return "MediaFoundationRenderer";
-    case RendererType::kRemoting:
-      return "RemotingRenderer";  // media::remoting::Receiver
-    case RendererType::kCastStreaming:
-      return "CastStreamingRenderer";
-    case RendererType::kContentEmbedderDefined:
-      return "EmbedderDefined";
-    default:
-      NOTREACHED();
-      return "RendererType created through invalid static_cast";
-  }
-}
-
 RendererFactorySelector::RendererFactorySelector() = default;
 
 RendererFactorySelector::~RendererFactorySelector() = default;
diff --git a/media/base/renderer_factory_selector.h b/media/base/renderer_factory_selector.h
index 96eee86..f245a1ea7 100644
--- a/media/base/renderer_factory_selector.h
+++ b/media/base/renderer_factory_selector.h
@@ -9,35 +9,14 @@
 
 #include "base/callback.h"
 #include "build/build_config.h"
+#include "media/base/media_export.h"
 #include "media/base/media_status.h"
+#include "media/base/renderer.h"
 #include "media/base/renderer_factory.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace media {
 
-// Types of media::Renderer.
-// WARNING: These values are reported to metrics. Entries should not be
-// renumbered and numeric values should not be reused. When adding new entries,
-// also update media::mojom::RendererType & tools/metrics/histograms/enums.xml.
-enum class RendererType {
-  kDefault = 0,          // DefaultRendererFactory
-  kMojo = 1,             // MojoRendererFactory
-  kMediaPlayer = 2,      // MediaPlayerRendererClientFactory
-  kCourier = 3,          // CourierRendererFactory
-  kFlinging = 4,         // FlingingRendererClientFactory
-  kCast = 5,             // CastRendererClientFactory
-  kMediaFoundation = 6,  // MediaFoundationRendererClientFactory
-  // kFuchsia = 7,       // Deprecated
-  kRemoting = 8,       // RemotingRendererFactory for remoting::Receiver
-  kCastStreaming = 9,  // PlaybackCommandForwardingRendererFactory
-  kContentEmbedderDefined = 10,  // Defined by the content embedder
-  kMaxValue = kContentEmbedderDefined,
-};
-
-// Get the name of the Renderer for `renderer_type`. The returned name could be
-// the actual Renderer class name or a descriptive name.
-std::string MEDIA_EXPORT GetRendererName(RendererType renderer_type);
-
 // RendererFactorySelector owns RendererFactory instances used within WMPI.
 // Its purpose is to aggregate the signals and centralize the logic behind
 // choosing which RendererFactory should be used when creating a new Renderer.
diff --git a/media/base/user_input_monitor_unittest.cc b/media/base/user_input_monitor_unittest.cc
index 71990e8..44b94ed 100644
--- a/media/base/user_input_monitor_unittest.cc
+++ b/media/base/user_input_monitor_unittest.cc
@@ -17,7 +17,7 @@
 #include "base/files/file_descriptor_watcher_posix.h"
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"  // nogncheck
 #endif
 
@@ -33,7 +33,7 @@
  protected:
   // testing::Test.
   void SetUp() override {
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
     if (ui::OzonePlatform::GetPlatformNameForTest() == "drm") {
       // OzonePlatformDrm::InitializeUI hangs in tests on the DRM platform.
       GTEST_SKIP();
diff --git a/media/gpu/chromeos/video_decoder_pipeline.cc b/media/gpu/chromeos/video_decoder_pipeline.cc
index e830d30..b63406a 100644
--- a/media/gpu/chromeos/video_decoder_pipeline.cc
+++ b/media/gpu/chromeos/video_decoder_pipeline.cc
@@ -20,7 +20,6 @@
 #include "build/build_config.h"
 #include "media/base/async_destroy_video_decoder.h"
 #include "media/base/bind_to_current_loop.h"
-#include "media/base/limits.h"
 #include "media/base/media_log.h"
 #include "media/base/media_switches.h"
 #include "media/gpu/chromeos/dmabuf_video_frame_pool.h"
@@ -74,6 +73,25 @@
   return absl::nullopt;
 }
 
+// Estimates the number of buffers needed in the output frame pool to fill the
+// Renderer pipeline (this pool may provide buffers to the VideoDecoder
+// directly or to the ImageProcessor, when this is instantiated).
+size_t EstimateRequiredRendererPipelineBuffers(bool low_delay) {
+  // kMaxVideoFrames is meant to be the number of VideoFrames needed to populate
+  // the whole Renderer playback pipeline when there's no smoothing playback
+  // queue, i.e. in low latency scenarios such as WebRTC etc. For non-low
+  // latency scenarios, a large smoothing playback is used in the Renderer
+  // process. Heuristically, the extra depth needed is in the range of 15 or
+  // so, so we need to add a few extra buffers.
+  constexpr size_t kExpectedNonLatencyPipelineDepth = 16;
+  static_assert(kExpectedNonLatencyPipelineDepth > limits::kMaxVideoFrames,
+                "kMaxVideoFrames is expected to be relatively small");
+  if (low_delay)
+    return limits::kMaxVideoFrames + 1;
+  else
+    return kExpectedNonLatencyPipelineDepth;
+}
+
 class DecoderThreadPool {
  public:
   DecoderThreadPool(const DecoderThreadPool&) = delete;
@@ -357,7 +375,7 @@
 }
 
 void VideoDecoderPipeline::Initialize(const VideoDecoderConfig& config,
-                                      bool /* low_delay */,
+                                      bool low_delay,
                                       CdmContext* cdm_context,
                                       InitCB init_cb,
                                       const OutputCB& output_cb,
@@ -414,11 +432,12 @@
   decoder_task_runner_->PostTask(
       FROM_HERE,
       base::BindOnce(&VideoDecoderPipeline::InitializeTask, decoder_weak_this_,
-                     config, cdm_context, std::move(init_cb),
+                     config, low_delay, cdm_context, std::move(init_cb),
                      std::move(output_cb), std::move(waiting_cb)));
 }
 
 void VideoDecoderPipeline::InitializeTask(const VideoDecoderConfig& config,
+                                          bool low_delay,
                                           CdmContext* cdm_context,
                                           InitCB init_cb,
                                           const OutputCB& output_cb,
@@ -446,6 +465,9 @@
     return;
   }
 
+  estimated_num_buffers_for_renderer_ =
+      EstimateRequiredRendererPipelineBuffers(low_delay);
+
   decoder_->Initialize(
       config, /* low_delay=*/false, cdm_context,
       base::BindOnce(&VideoDecoderPipeline::OnInitializeDone,
@@ -736,12 +758,16 @@
     const gfx::Rect& decoder_visible_rect,
     const gfx::Size& decoder_natural_size,
     absl::optional<gfx::Size> output_size,
-    size_t num_of_pictures,
+    size_t num_codec_reference_frames,
     bool use_protected,
     bool need_aux_frame_pool,
     absl::optional<DmabufVideoFramePool::CreateFrameCB> allocator) {
   DVLOGF(3);
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
+  // Verify |num_codec_reference_frames| has a reasonable value. Anecdotally 16
+  // is the largest amount of reference frames seen, on an ITU-T H.264 test
+  // vector (CAPCM*1_Sand_E.h264).
+  CHECK_LE(num_codec_reference_frames, 32u);
 
   if (candidates.empty())
     return CroStatus::Codes::kNoDecoderOutputFormatCandidates;
@@ -796,11 +822,19 @@
 #endif
 
   if (viable_candidate) {
+    // |main_frame_pool_| needs to allocate enough buffers for both the codec
+    // reference needs and the Renderer pipeline.
+    // |num_codec_reference_frames| is augmented by 1 to account for the frame
+    // being decoded.
+    const size_t num_pictures =
+        num_codec_reference_frames + 1 + estimated_num_buffers_for_renderer_;
+    VLOGF(1) << "Initializing frame pool with up to " << num_pictures
+             << " VideoFrames. No ImageProcessor needed.";
     CroStatus::Or<GpuBufferLayout> status_or_layout =
         main_frame_pool_->Initialize(viable_candidate->fourcc,
                                      viable_candidate->size,
                                      decoder_visible_rect, decoder_natural_size,
-                                     num_of_pictures, use_protected);
+                                     num_pictures, use_protected);
     if (!status_or_layout.has_value())
       return std::move(status_or_layout).error();
 
@@ -826,18 +860,23 @@
 #endif  // BUILDFLAG(USE_VAAPI) && BUILDFLAG(IS_CHROMEOS_ASH)
   }
 
+  // We haven't found a |viable_candidate|, and need to instantiate an
+  // ImageProcessor; this might need to allocate buffers internally, but only
+  // to fill the Renderer pipeline.
   std::unique_ptr<ImageProcessor> image_processor;
   if (create_image_processor_cb_for_testing_) {
     image_processor = create_image_processor_cb_for_testing_.Run(
         candidates,
         /*input_visible_rect=*/decoder_visible_rect,
         output_size ? *output_size : decoder_visible_rect.size(),
-        num_of_pictures);
+        estimated_num_buffers_for_renderer_);
   } else {
+    VLOGF(1) << "Initializing ImageProcessor; max buffers: "
+             << estimated_num_buffers_for_renderer_;
     image_processor = ImageProcessorFactory::CreateWithInputCandidates(
         candidates, /*input_visible_rect=*/decoder_visible_rect,
         output_size ? *output_size : decoder_visible_rect.size(),
-        num_of_pictures, decoder_task_runner_,
+        estimated_num_buffers_for_renderer_, decoder_task_runner_,
         base::BindRepeating(&PickRenderableFourcc),
         BindToCurrentLoop(base::BindRepeating(&VideoDecoderPipeline::OnError,
                                               decoder_weak_this_,
@@ -852,15 +891,23 @@
 
   if (need_aux_frame_pool) {
     // Initialize the auxiliary frame pool with the input format of the image
-    // processor.
+    // processor. Same as before, this might need to allocate buffers
+    // internally, but only to serve the codec needs, hence |num_pictures| is
+    // just the number of codec reference frames, plus one to serve the video
+    // destination.
     auxiliary_frame_pool_ = std::make_unique<PlatformVideoFramePool>();
+    // Use here |num_codec_reference_frames| + 1 to account for the frame being
+    // decoded.
+    const size_t num_pictures = num_codec_reference_frames + 1;
 
+    VLOGF(1) << "Initializing auxiliary frame pool with up to " << num_pictures
+             << " VideoFrames";
     auxiliary_frame_pool_->set_parent_task_runner(decoder_task_runner_);
     CroStatus::Or<GpuBufferLayout> status_or_layout =
         auxiliary_frame_pool_->Initialize(
             image_processor->input_config().fourcc,
             image_processor->input_config().size, decoder_visible_rect,
-            decoder_natural_size, num_of_pictures, use_protected);
+            decoder_natural_size, num_pictures, use_protected);
     if (!status_or_layout.has_value()) {
       // A PlatformVideoFramePool should never abort initialization.
       DCHECK_NE(status_or_layout.code(), CroStatus::Codes::kResetRequired);
@@ -872,14 +919,18 @@
   auto fourcc = image_processor->input_config().fourcc;
   auto size = image_processor->input_config().size;
 
-  // Setup new pipeline.
+  // We need to instantiate an ImageProcessor with a pool large enough to serve
+  // the Renderer pipeline, hence we use |estimated_num_buffers_for_renderer_|.
+  //
   // TODO(b/203240043): Verify that if we're using the image processor for tiled
   // to linear transformation, that the created frame pool is of linear format.
   // TODO(b/203240043): Add CHECKs to verify that the image processor is being
   // created for only valid use cases. Writing to a linear output buffer, e.g.
+  VLOGF(1) << "Initializing Image Processor frame pool with up to "
+           << estimated_num_buffers_for_renderer_ << " VideoFrames";
   auto status_or_image_processor = ImageProcessorWithPool::Create(
-      std::move(image_processor), main_frame_pool_.get(), num_of_pictures,
-      use_protected, decoder_task_runner_);
+      std::move(image_processor), main_frame_pool_.get(),
+      estimated_num_buffers_for_renderer_, use_protected, decoder_task_runner_);
   if (!status_or_image_processor.has_value()) {
     DVLOGF(2) << "Unable to create ImageProcessorWithPool.";
     return std::move(status_or_image_processor).error();
diff --git a/media/gpu/chromeos/video_decoder_pipeline.h b/media/gpu/chromeos/video_decoder_pipeline.h
index 7501540..f44d13a 100644
--- a/media/gpu/chromeos/video_decoder_pipeline.h
+++ b/media/gpu/chromeos/video_decoder_pipeline.h
@@ -14,6 +14,7 @@
 #include "build/chromeos_buildflags.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
 #include "media/base/cdm_context.h"
+#include "media/base/limits.h"
 #include "media/base/supported_video_decoder_config.h"
 #include "media/base/video_decoder.h"
 #include "media/base/video_decoder_config.h"
@@ -78,6 +79,10 @@
     // if |allocator| is not absl::nullopt, the frame pool will be set
     // to use the allocator provided for allocating video frames.
     //
+    // The client also provides the |num_codec_reference_frames|, which is
+    // sometimes fixed (e.g. kVp9NumRefFrames) and sometimes variable (e.g.
+    // H.264, HEVC).
+    //
     // Note: after a call to this method, callers should assume that a pointer
     // returned by a prior call to GetVideoFramePool() is no longer valid.
     virtual CroStatus::Or<ImageProcessor::PixelLayoutCandidate>
@@ -86,7 +91,7 @@
         const gfx::Rect& decoder_visible_rect,
         const gfx::Size& decoder_natural_size,
         absl::optional<gfx::Size> output_size,
-        size_t num_of_pictures,
+        size_t num_codec_reference_frames,
         bool use_protected,
         bool need_aux_frame_pool,
         absl::optional<DmabufVideoFramePool::CreateFrameCB> allocator) = 0;
@@ -176,7 +181,7 @@
       const gfx::Rect& decoder_visible_rect,
       const gfx::Size& decoder_natural_size,
       absl::optional<gfx::Size> output_size,
-      size_t num_of_pictures,
+      size_t num_codec_reference_frames,
       bool use_protected,
       bool need_aux_frame_pool,
       absl::optional<DmabufVideoFramePool::CreateFrameCB> allocator) override;
@@ -197,6 +202,7 @@
       CreateDecoderFunctionCB create_decoder_function_cb);
 
   void InitializeTask(const VideoDecoderConfig& config,
+                      bool low_delay,
                       CdmContext* cdm_context,
                       InitCB init_cb,
                       const OutputCB& output_cb,
@@ -327,6 +333,11 @@
   bool need_frame_pool_rebuild_ GUARDED_BY_CONTEXT(decoder_sequence_checker_) =
       false;
 
+  // Calculated upon Initialize(), to determine how many buffers to allocate for
+  // the Renderer pipeline.
+  size_t estimated_num_buffers_for_renderer_ GUARDED_BY_CONTEXT(
+      decoder_sequence_checker_) = limits::kMaxVideoFrames + 1;
+
   // Set to true to bypass checks for encrypted content support for testing.
   bool allow_encrypted_content_for_testing_ = false;
 
diff --git a/media/gpu/chromeos/video_decoder_pipeline_unittest.cc b/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
index 1e3d674..a36d415 100644
--- a/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
+++ b/media/gpu/chromeos/video_decoder_pipeline_unittest.cc
@@ -670,7 +670,7 @@
 TEST_F(VideoDecoderPipelineTest, PickDecoderOutputFormat) {
   constexpr gfx::Size kSize(320, 240);
   constexpr gfx::Rect kVisibleRect(320, 240);
-  constexpr size_t kMaxNumOfFrames = 4u;
+  constexpr size_t kNumCodecReferenceFrames = 4u;
   constexpr uint64_t kModifier = ~DRM_FORMAT_MOD_LINEAR;
 
   const struct {
@@ -712,18 +712,21 @@
         test_vector.expected_chosen_candidate.size;
     std::vector<ColorPlaneLayout> planes(
         VideoFrame::NumPlanes(expected_fourcc.ToVideoPixelFormat()));
-    EXPECT_CALL(*pool_,
-                Initialize(expected_fourcc, expected_coded_size, kVisibleRect,
-                           /*natural_size=*/kVisibleRect.size(),
-                           kMaxNumOfFrames, /*use_protected=*/false,
-                           /*use_linear_buffers=*/false))
+    EXPECT_CALL(
+        *pool_,
+        Initialize(expected_fourcc, expected_coded_size, kVisibleRect,
+                   /*natural_size=*/kVisibleRect.size(),
+                   /*max_num_frames=*/::testing::Gt(kNumCodecReferenceFrames),
+                   /*use_protected=*/false,
+                   /*use_linear_buffers=*/false))
         .WillOnce(Return(*GpuBufferLayout::Create(
             expected_fourcc, expected_coded_size, std::move(planes),
             /*modifier=*/kModifier)));
     auto status_or_chosen_candidate = decoder_->PickDecoderOutputFormat(
         test_vector.input_candidates, kVisibleRect,
         /*decoder_natural_size=*/kVisibleRect.size(),
-        /*output_size=*/absl::nullopt, /*num_of_pictures=*/kMaxNumOfFrames,
+        /*output_size=*/absl::nullopt,
+        /*num_codec_reference_frames=*/kNumCodecReferenceFrames,
         /*use_protected=*/false, /*need_aux_frame_pool=*/false, absl::nullopt);
     ASSERT_TRUE(status_or_chosen_candidate.has_value());
     const PixelLayoutCandidate chosen_candidate =
@@ -749,7 +752,7 @@
 TEST_F(VideoDecoderPipelineTest, PickDecoderOutputFormatLinearModifier) {
   constexpr gfx::Size kSize(320, 240);
   constexpr gfx::Rect kVisibleRect(320, 240);
-  constexpr size_t kMaxNumOfFrames = 4u;
+  constexpr size_t kNumCodecReferenceFrames = 4u;
   const Fourcc kFourcc(Fourcc::NV12);
 
   auto image_processor =
@@ -781,7 +784,8 @@
   auto status_or_chosen_candidate = decoder_->PickDecoderOutputFormat(
       {candidate}, kVisibleRect,
       /*decoder_natural_size=*/kVisibleRect.size(),
-      /*output_size=*/absl::nullopt, /*num_of_pictures=*/kMaxNumOfFrames,
+      /*output_size=*/absl::nullopt,
+      /*num_codec_reference_frames=*/kNumCodecReferenceFrames,
       /*use_protected=*/false, /*need_aux_frame_pool=*/false, absl::nullopt);
 
   EXPECT_TRUE(status_or_chosen_candidate.has_value());
@@ -796,7 +800,7 @@
 TEST_F(VideoDecoderPipelineTest, PickDecoderOutputFormatUnsupportedModifier) {
   constexpr gfx::Size kSize(320, 240);
   constexpr gfx::Rect kVisibleRect(320, 240);
-  constexpr size_t kMaxNumOfFrames = 4u;
+  constexpr size_t kNumCodecReferenceFrames = 4u;
   const Fourcc kFourcc(Fourcc::NV12);
 
   // Modifier is *not* the linear format.
@@ -814,7 +818,8 @@
   auto status_or_chosen_candidate = decoder_->PickDecoderOutputFormat(
       {candidate}, kVisibleRect,
       /*decoder_natural_size=*/kVisibleRect.size(),
-      /*output_size=*/absl::nullopt, /*num_of_pictures=*/kMaxNumOfFrames,
+      /*output_size=*/absl::nullopt,
+      /*num_codec_reference_frames=*/kNumCodecReferenceFrames,
       /*use_protected=*/false, /*need_aux_frame_pool=*/false, absl::nullopt);
 
   EXPECT_FALSE(status_or_chosen_candidate.has_value());
diff --git a/media/gpu/test/video_test_environment.cc b/media/gpu/test/video_test_environment.cc
index 2ed50f2..1d6495b 100644
--- a/media/gpu/test/video_test_environment.cc
+++ b/media/gpu/test/video_test_environment.cc
@@ -16,7 +16,7 @@
 #include "media/gpu/vaapi/vaapi_wrapper.h"
 #endif
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"
 #endif
 
@@ -51,7 +51,7 @@
 
   // Perform all static initialization that is required when running video
   // codecs in a test environment.
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   // Initialize Ozone. This is necessary to gain access to the GPU for hardware
   // video acceleration.
   // TODO(b/230370976): we may no longer need to initialize Ozone since we don't
diff --git a/media/gpu/v4l2/v4l2_device.h b/media/gpu/v4l2/v4l2_device.h
index 93e1756..8ee721ce 100644
--- a/media/gpu/v4l2/v4l2_device.h
+++ b/media/gpu/v4l2/v4l2_device.h
@@ -527,9 +527,9 @@
 
   SEQUENCE_CHECKER(sequence_checker_);
 
-  base::WeakPtrFactory<V4L2Queue> weak_this_factory_;
-
   bool incoherent_ = false;
+
+  base::WeakPtrFactory<V4L2Queue> weak_this_factory_;
 };
 
 class V4L2Request;
diff --git a/media/gpu/v4l2/v4l2_video_decoder.cc b/media/gpu/v4l2/v4l2_video_decoder.cc
index e5175af..c0ce44b 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder.cc
@@ -137,7 +137,7 @@
 }
 
 void V4L2VideoDecoder::Initialize(const VideoDecoderConfig& config,
-                                  bool low_delay,
+                                  bool /*low_delay*/,
                                   CdmContext* cdm_context,
                                   InitCB init_cb,
                                   const OutputCB& output_cb,
@@ -222,7 +222,6 @@
   profile_ = config.profile();
   aspect_ratio_ = config.aspect_ratio();
   color_space_ = config.color_space_info();
-  low_delay_ = low_delay;
 
   if (profile_ == VIDEO_CODEC_PROFILE_UNKNOWN) {
     VLOGF(1) << "Unknown profile.";
@@ -326,8 +325,7 @@
     VLOGF(1) << "Using a stateful API for profile: " << GetProfileName(profile_)
              << " and fourcc: " << FourccToString(input_format_fourcc);
     backend_ = std::make_unique<V4L2StatefulVideoDecoderBackend>(
-        this, device_, profile_, color_space_, low_delay_,
-        decoder_task_runner_);
+        this, device_, profile_, color_space_, decoder_task_runner_);
   } else {
     DCHECK_EQ(preferred_api_and_format.first, kStateless);
     VLOGF(1) << "Using a stateless API for profile: "
@@ -401,8 +399,10 @@
   return true;
 }
 
-CroStatus V4L2VideoDecoder::SetupOutputFormat(const gfx::Size& size,
-                                              const gfx::Rect& visible_rect) {
+CroStatus V4L2VideoDecoder::SetupOutputFormat(
+    const gfx::Size& size,
+    const gfx::Rect& visible_rect,
+    size_t num_codec_reference_frames) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   DVLOGF(3) << "size: " << size.ToString()
             << ", visible_rect: " << visible_rect.ToString();
@@ -434,7 +434,7 @@
   CroStatus::Or<PixelLayoutCandidate> status_or_output_format =
       client_->PickDecoderOutputFormat(
           candidates, visible_rect, aspect_ratio_.GetNaturalSize(visible_rect),
-          /*output_size=*/absl::nullopt, num_output_frames_,
+          /*output_size=*/absl::nullopt, num_codec_reference_frames,
           /*use+protected=*/false, /*need_aux_frame_pool=*/false,
           absl::nullopt);
   if (!status_or_output_format.has_value()) {
@@ -662,7 +662,7 @@
 
 void V4L2VideoDecoder::ChangeResolution(gfx::Size pic_size,
                                         gfx::Rect visible_rect,
-                                        size_t num_output_frames) {
+                                        size_t num_codec_reference_frames) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   DVLOGF(3);
   DCHECK(!continue_change_resolution_cb_);
@@ -673,7 +673,7 @@
   continue_change_resolution_cb_ =
       base::BindOnce(&V4L2VideoDecoder::ContinueChangeResolution,
                      base::Unretained(this), pic_size, visible_rect,
-                     num_output_frames)
+                     num_codec_reference_frames)
           .Then(base::BindOnce(&V4L2VideoDecoder::OnChangeResolutionDone,
                                base::Unretained(this)));
 
@@ -692,7 +692,7 @@
 CroStatus V4L2VideoDecoder::ContinueChangeResolution(
     const gfx::Size& pic_size,
     const gfx::Rect& visible_rect,
-    const size_t num_output_frames) {
+    const size_t num_codec_reference_frames) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_);
   DVLOGF(3);
 
@@ -707,10 +707,6 @@
   if (state_ != State::kFlushing)
     return CroStatus::Codes::kResetRequired;
 
-  DCHECK_GT(num_output_frames,
-            static_cast<size_t>(limits::kMaxVideoFrames + 1));
-  num_output_frames_ = num_output_frames;
-
   // Stateful decoders require the input queue to keep running during resolution
   // changes, but stateless ones require it to be stopped.
   if (!StopStreamV4L2Queue(backend_->StopInputQueueOnResChange()))
@@ -721,12 +717,13 @@
     return CroStatus::Codes::kFailedToChangeResolution;
   }
 
-  if (!backend_->ApplyResolution(pic_size, visible_rect, num_output_frames_)) {
+  if (!backend_->ApplyResolution(pic_size, visible_rect)) {
     SetState(State::kError);
     return CroStatus::Codes::kFailedToChangeResolution;
   }
 
-  const CroStatus status = SetupOutputFormat(pic_size, visible_rect);
+  const CroStatus status =
+      SetupOutputFormat(pic_size, visible_rect, num_codec_reference_frames);
   if (status == CroStatus::Codes::kResetRequired) {
     DVLOGF(2) << "SetupOutputFormat is aborted.";
     return CroStatus::Codes::kResetRequired;
@@ -745,9 +742,12 @@
   const v4l2_memory type =
       use_v4l2_allocated_buffers ? V4L2_MEMORY_MMAP : V4L2_MEMORY_DMABUF;
   // If we don't use driver-allocated buffers, request as many as possible
-  // (VIDEO_MAX_FRAME) since they are shallow allocations.
-  const size_t v4l2_num_buffers =
-      use_v4l2_allocated_buffers ? num_output_frames_ : VIDEO_MAX_FRAME;
+  // (VIDEO_MAX_FRAME) since they are shallow allocations. Otherwise, allocate
+  // |num_codec_reference_frames| plus one for the video frame being decoded,
+  // and one for our client (presumably an ImageProcessor).
+  const size_t v4l2_num_buffers = use_v4l2_allocated_buffers
+                                      ? num_codec_reference_frames + 2
+                                      : VIDEO_MAX_FRAME;
 
   VLOGF(1) << "Requesting: " << v4l2_num_buffers << " CAPTURE buffers of type "
            << (use_v4l2_allocated_buffers ? "V4L2_MEMORY_MMAP"
diff --git a/media/gpu/v4l2/v4l2_video_decoder.h b/media/gpu/v4l2/v4l2_video_decoder.h
index 5f53d59..0acc819 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.h
+++ b/media/gpu/v4l2/v4l2_video_decoder.h
@@ -77,7 +77,7 @@
   void CompleteFlush() override;
   void ChangeResolution(gfx::Size pic_size,
                         gfx::Rect visible_rect,
-                        size_t num_output_frames) override;
+                        size_t num_codec_reference_frames) override;
   void OutputFrame(scoped_refptr<VideoFrame> frame,
                    const gfx::Rect& visible_rect,
                    const VideoColorSpace& color_space,
@@ -138,7 +138,8 @@
   // Return CroStatus::Codes::kResetRequired if the setup is aborted.
   // Return CroStatus::Codes::kFailedToChangeResolution if other error occurs.
   CroStatus SetupOutputFormat(const gfx::Size& size,
-                              const gfx::Rect& visible_rect);
+                              const gfx::Rect& visible_rect,
+                              size_t num_codec_reference_frames);
 
   // Start streaming V4L2 input and (if |start_output_queue| is true) output
   // queues. Attempt to start |device_poll_thread_| after streaming starts.
@@ -156,7 +157,7 @@
   // Return CroStatus::Codes::kFailedToChangeResolution if any error occurs.
   CroStatus ContinueChangeResolution(const gfx::Size& pic_size,
                                      const gfx::Rect& visible_rect,
-                                     const size_t num_output_frames);
+                                     size_t num_codec_reference_frames);
   void OnChangeResolutionDone(CroStatus status);
 
   // Change the state and check the state transition is valid.
@@ -189,19 +190,16 @@
   // State of the instance.
   State state_ = State::kUninitialized;
 
-  // Number of output frames requested to |frame_pool_|.
-  // The default value is only used at the first time of
-  // DmabufVideoFramePool::Initialize() during Initialize().
-  size_t num_output_frames_ = 1;
+  // Aspect ratio from config to use for output frames.
+  VideoAspectRatio aspect_ratio_;
 
-  // Callback passed from Initialize().
+  // Callbacks passed from Initialize().
   OutputCB output_cb_;
 
-  // Initialize()-passed configuration options.
+  // Hold onto profile and color space passed in from Initialize() so that
+  // it is available for InitializeBackend().
   VideoCodecProfile profile_ = VIDEO_CODEC_PROFILE_UNKNOWN;
-  VideoAspectRatio aspect_ratio_;
   VideoColorSpace color_space_;
-  bool low_delay_;
 
   // V4L2 input and output queue.
   scoped_refptr<V4L2Queue> input_queue_;
@@ -211,14 +209,14 @@
 
   SEQUENCE_CHECKER(decoder_sequence_checker_);
 
+  // Whether or not our V4L2Queues should be requested with
+  // V4L2_MEMORY_FLAG_NON_COHERENT
+  bool incoherent_ = false;
+
   // |weak_this_for_polling_| must be dereferenced and invalidated on
   // |decoder_task_runner_|.
   base::WeakPtr<V4L2VideoDecoder> weak_this_for_polling_;
   base::WeakPtrFactory<V4L2VideoDecoder> weak_this_for_polling_factory_;
-
-  // Whether or not our V4L2Queues should be requested with
-  // V4L2_MEMORY_FLAG_NON_COHERENT
-  bool incoherent_ = false;
 };
 
 }  // namespace media
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend.h b/media/gpu/v4l2/v4l2_video_decoder_backend.h
index a7a5eb61..52285f8 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend.h
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend.h
@@ -54,7 +54,7 @@
     // between calls to |InitiateFlush| and |CompleteFlush|.
     virtual void ChangeResolution(gfx::Size pic_size,
                                   gfx::Rect visible_rect,
-                                  size_t num_output_frames) = 0;
+                                  size_t num_codec_reference_frames) = 0;
     // Convert the frame and call the output callback.
     virtual void OutputFrame(scoped_refptr<VideoFrame> frame,
                              const gfx::Rect& visible_rect,
@@ -89,8 +89,7 @@
   // to do something specific beyond applying these parameters to the CAPTURE
   // queue.
   virtual bool ApplyResolution(const gfx::Size& pic_size,
-                               const gfx::Rect& visible_rect,
-                               const size_t num_output_frames) = 0;
+                               const gfx::Rect& visible_rect) = 0;
   // Called when ChangeResolution is done. |status| indicates whether there is
   // any error occurs during the resolution change.
   virtual void OnChangeResolutionDone(CroStatus status) = 0;
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
index a95bf00..3923caf 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
@@ -41,42 +41,6 @@
   const std::string kVP9KSVCSupportedDrivers[] = {"qcom-venus"};
   return base::Contains(kVP9KSVCSupportedDrivers, driver_name);
 }
-
-// Estimates the amount of buffers needed in the CAPTURE queue to serve both the
-// codec reference requirements and the Renderer pipeline.
-size_t EstimateRequiredNumCAPTUREBuffers(V4L2Device* const v4l2_device,
-                                         bool low_latency) {
-  DCHECK(v4l2_device);
-
-  // Estimate the amount of buffers needed for the CAPTURE queue and for codec
-  // reference requirements. For VP9 and AV1, the maximum number of reference
-  // frames is constant and 8 (for VP8 is 4); for H.264 and other ITU-T codecs,
-  // we query it from the driver.
-  constexpr size_t kDefaultNumReferenceFrames = 8;
-  size_t num_capture_buffers = kDefaultNumReferenceFrames;
-  // On QC Venus, this control ranges between 1 and 32 at the time of writing.
-  auto ctrl = v4l2_device->GetCtrl(V4L2_CID_MIN_BUFFERS_FOR_CAPTURE);
-  if (ctrl) {
-    VLOGF(2) << "V4L2_CID_MIN_BUFFERS_FOR_CAPTURE  = " << ctrl->value;
-    num_capture_buffers =
-        std::max(base::checked_cast<size_t>(ctrl->value), num_capture_buffers);
-  }
-
-  // kMaxVideoFrames is meant to be the amount of VideoFrames needed to populate
-  // the whole Renderer playback pipeline when there's no smoothing playback
-  // queue, i.e. in low latency scenarios such as WebRTC etc. For non-low
-  // latency scenarios, a large smoothing playback is used in the Renderer
-  // process. Heuristically, the extra depth needed is in the range of 15 or
-  // so, so we need to add a few extra buffers.
-  constexpr size_t kExpectedNonLatencyPipelineDepth = 16;
-  static_assert(kExpectedNonLatencyPipelineDepth > limits::kMaxVideoFrames,
-                "kMaxVideoFrames is expected to be relatively small");
-  if (low_latency)
-    return num_capture_buffers + limits::kMaxVideoFrames + 1;
-  else
-    return num_capture_buffers + kExpectedNonLatencyPipelineDepth;
-}
-
 }  // namespace
 
 V4L2StatefulVideoDecoderBackend::DecodeRequest::DecodeRequest(
@@ -102,13 +66,11 @@
     scoped_refptr<V4L2Device> device,
     VideoCodecProfile profile,
     const VideoColorSpace& color_space,
-    bool low_latency,
     scoped_refptr<base::SequencedTaskRunner> task_runner)
     : V4L2VideoDecoderBackend(client, std::move(device)),
       driver_name_(device_->GetDriverName()),
       profile_(profile),
       color_space_(color_space),
-      low_latency_(low_latency),
       task_runner_(task_runner) {
   DVLOGF(3);
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -654,19 +616,32 @@
     return;
   }
 
-  const size_t num_output_buffers =
-      EstimateRequiredNumCAPTUREBuffers(device_.get(), low_latency_);
-  VLOGF(2) << "Estimated " << num_output_buffers
-           << " buffers needed for the CAPTURE queue";
+  // Estimate the amount of buffers needed for the CAPTURE queue and for codec
+  // reference requirements. For VP9 and AV1, the maximum number of reference
+  // frames is constant and 8 (for VP8 is 4); for H.264 and other ITU-T codecs,
+  // it depends on the bitstream. Here we query it from the driver anyway.
+  constexpr size_t kDefaultNumReferenceFrames = 8;
+  size_t num_codec_reference_frames = kDefaultNumReferenceFrames;
+  // On QC Venus, this control ranges between 1 and 32 at the time of writing.
+  auto ctrl = device_->GetCtrl(V4L2_CID_MIN_BUFFERS_FOR_CAPTURE);
+  if (ctrl) {
+    VLOGF(2) << "V4L2_CID_MIN_BUFFERS_FOR_CAPTURE  = " << ctrl->value;
+    num_codec_reference_frames = std::max(
+        base::checked_cast<size_t>(ctrl->value), num_codec_reference_frames);
+  }
+  // Verify |num_codec_reference_frames| has a reasonable value. Anecdotally 16
+  // is the largest amount of reference frames seen, on an ITU-T H.264 test
+  // vector (CAPCM*1_Sand_E.h264).
+  CHECK_LE(num_codec_reference_frames, 32u);
 
   // Signal that we are flushing and initiate the resolution change.
   // Our flush will be done when we receive a buffer with the LAST flag on the
   // CAPTURE queue.
   client_->InitiateFlush();
   DCHECK(!resolution_change_cb_);
-  resolution_change_cb_ =
-      base::BindOnce(&V4L2StatefulVideoDecoderBackend::ContinueChangeResolution,
-                     weak_this_, pic_size, *visible_rect, num_output_buffers);
+  resolution_change_cb_ = base::BindOnce(
+      &V4L2StatefulVideoDecoderBackend::ContinueChangeResolution, weak_this_,
+      pic_size, *visible_rect, num_codec_reference_frames);
 
   // ...that is, unless we are not streaming yet, in which case the resolution
   // change can take place immediately.
@@ -677,19 +652,18 @@
 void V4L2StatefulVideoDecoderBackend::ContinueChangeResolution(
     const gfx::Size& pic_size,
     const gfx::Rect& visible_rect,
-    const size_t num_output_buffers) {
+    const size_t num_codec_reference_frames) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DVLOGF(3);
 
   // Flush is done, but stay in flushing state and ask our client to set the new
   // resolution.
-  client_->ChangeResolution(pic_size, visible_rect, num_output_buffers);
+  client_->ChangeResolution(pic_size, visible_rect, num_codec_reference_frames);
 }
 
 bool V4L2StatefulVideoDecoderBackend::ApplyResolution(
     const gfx::Size& pic_size,
-    const gfx::Rect& visible_rect,
-    const size_t num_output_frames) {
+    const gfx::Rect& visible_rect) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DVLOGF(3);
 
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.h b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.h
index f61cc52..4a0511d0 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.h
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.h
@@ -31,7 +31,6 @@
       scoped_refptr<V4L2Device> device,
       VideoCodecProfile profile,
       const VideoColorSpace& color_space,
-      bool low_latency,
       scoped_refptr<base::SequencedTaskRunner> task_runner);
   ~V4L2StatefulVideoDecoderBackend() override;
 
@@ -50,8 +49,7 @@
   void OnServiceDeviceTask(bool event) override;
   void OnStreamStopped(bool stop_input_queue) override;
   bool ApplyResolution(const gfx::Size& pic_size,
-                       const gfx::Rect& visible_rect,
-                       const size_t num_output_frames) override;
+                       const gfx::Rect& visible_rect) override;
   void OnChangeResolutionDone(CroStatus status) override;
   void ClearPendingRequests(DecoderStatus status) override;
   bool StopInputQueueOnResChange() const override;
@@ -104,7 +102,7 @@
   // to actually apply the resolution.
   void ContinueChangeResolution(const gfx::Size& pic_size,
                                 const gfx::Rect& visible_rect,
-                                const size_t num_output_buffers);
+                                const size_t num_codec_reference_frames);
 
   // Enqueue all output buffers that are available.
   void EnqueueOutputBuffers();
@@ -125,10 +123,11 @@
   // The name of the running driver.
   const std::string driver_name_;
 
-  // Configuration options coming from upper layers initialization.
-  const VideoCodecProfile profile_;
-  const VideoColorSpace color_space_;
-  const bool low_latency_;
+  // Video profile we are decoding.
+  VideoCodecProfile profile_;
+
+  // Video color space we are decoding.
+  VideoColorSpace color_space_;
 
   // The task runner we are running on, for convenience.
   const scoped_refptr<base::SequencedTaskRunner> task_runner_;
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc
index d74c341..5057f577 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.cc
@@ -549,19 +549,23 @@
   DCHECK(surfaces_at_device_.empty());
   DCHECK(output_request_queue_.empty());
 
-  size_t num_output_frames = decoder_->GetRequiredNumOfPictures();
-  gfx::Rect visible_rect = decoder_->GetVisibleRect();
-  gfx::Size pic_size = decoder_->GetPicSize();
+  const size_t num_codec_reference_frames = decoder_->GetNumReferenceFrames();
+  // Verify |num_codec_reference_frames| has a reasonable value. Anecdotally 16
+  // is the largest amount of reference frames seen, on an ITU-T H.264 test
+  // vector (CAPCM*1_Sand_E.h264).
+  CHECK_LE(num_codec_reference_frames, 32u);
+
+  const gfx::Rect visible_rect = decoder_->GetVisibleRect();
+  const gfx::Size pic_size = decoder_->GetPicSize();
   // Set output format with the new resolution.
   DCHECK(!pic_size.IsEmpty());
   DVLOGF(3) << "Change resolution to " << pic_size.ToString();
-  client_->ChangeResolution(pic_size, visible_rect, num_output_frames);
+  client_->ChangeResolution(pic_size, visible_rect, num_codec_reference_frames);
 }
 
 bool V4L2StatelessVideoDecoderBackend::ApplyResolution(
     const gfx::Size& pic_size,
-    const gfx::Rect& visible_rect,
-    const size_t num_output_frames) {
+    const gfx::Rect& visible_rect) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK_EQ(input_queue_->QueuedBuffersCount(), 0u);
 
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.h b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.h
index baace68..fc57a061 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.h
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateless.h
@@ -53,8 +53,7 @@
   void OnOutputBufferDequeued(V4L2ReadableBufferRef buffer) override;
   void OnStreamStopped(bool stop_input_queue) override;
   bool ApplyResolution(const gfx::Size& pic_size,
-                       const gfx::Rect& visible_rect,
-                       const size_t num_output_frames) override;
+                       const gfx::Rect& visible_rect) override;
   void OnChangeResolutionDone(CroStatus status) override;
   void ClearPendingRequests(DecoderStatus status) override;
   bool StopInputQueueOnResChange() const override;
diff --git a/media/gpu/vaapi/vaapi_picture_factory.cc b/media/gpu/vaapi/vaapi_picture_factory.cc
index 54825cd..7f44de0 100644
--- a/media/gpu/vaapi/vaapi_picture_factory.cc
+++ b/media/gpu/vaapi/vaapi_picture_factory.cc
@@ -5,13 +5,14 @@
 #include "media/gpu/vaapi/vaapi_picture_factory.h"
 
 #include "base/containers/contains.h"
+#include "build/build_config.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
 #include "media/video/picture.h"
 #include "ui/gl/gl_bindings.h"
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "media/gpu/vaapi/vaapi_picture_native_pixmap_ozone.h"
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 #if BUILDFLAG(USE_VAAPI_X11)
 #include "media/gpu/vaapi/vaapi_picture_native_pixmap_angle.h"
 #include "media/gpu/vaapi/vaapi_picture_tfp.h"
@@ -52,7 +53,7 @@
   vaapi_impl_pairs_.insert(
       std::make_pair(gl::kGLImplementationDesktopGL,
                      VaapiPictureFactory::kVaapiImplementationX11));
-#elif defined(USE_OZONE)
+#elif BUILDFLAG(IS_OZONE)
   vaapi_impl_pairs_.insert(
       std::make_pair(gl::kGLImplementationEGLANGLE,
                      VaapiPictureFactory::kVaapiImplementationDrm));
@@ -114,14 +115,14 @@
 
 void VaapiPictureFactory::DeterminePictureCreationAndDownloadingMechanism() {
   switch (GetVaapiImplementation(gl::GetGLImplementation())) {
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
     // We can be called without GL initialized, which is valid if we use Ozone.
     case kVaapiImplementationNone:
       create_picture_cb_ = base::BindRepeating(
           &CreateVaapiPictureNativeImpl<VaapiPictureNativePixmapOzone>);
       needs_vpp_for_downloading_ = true;
       break;
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
 #if BUILDFLAG(USE_VAAPI_X11)
     case kVaapiImplementationX11:
       create_picture_cb_ =
@@ -137,7 +138,7 @@
       break;
 #endif  // BUILDFLAG(USE_VAAPI_X11)
     case kVaapiImplementationDrm:
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
       create_picture_cb_ = base::BindRepeating(
           &CreateVaapiPictureNativeImpl<VaapiPictureNativePixmapOzone>);
       needs_vpp_for_downloading_ = true;
diff --git a/media/gpu/vaapi/vaapi_unittest.cc b/media/gpu/vaapi/vaapi_unittest.cc
index 2a89811f..9ade72a 100644
--- a/media/gpu/vaapi/vaapi_unittest.cc
+++ b/media/gpu/vaapi/vaapi_unittest.cc
@@ -33,6 +33,7 @@
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_suite.h"
+#include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "media/base/media_switches.h"
 #include "media/gpu/vaapi/vaapi_wrapper.h"
@@ -41,7 +42,7 @@
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "ui/gfx/linux/gbm_defines.h"
 
-#if defined(USE_OZONE) && BUILDFLAG(IS_LINUX)
+#if BUILDFLAG(IS_OZONE) && BUILDFLAG(IS_LINUX)
 // GN doesn't understand conditional includes, so we need nogncheck here.
 // See crbug.com/1125897.
 #include "ui/ozone/public/ozone_platform.h"  // nogncheck
@@ -921,7 +922,7 @@
 int main(int argc, char** argv) {
   base::TestSuite test_suite(argc, argv);
 
-#if defined(USE_OZONE) && BUILDFLAG(IS_LINUX)
+#if BUILDFLAG(IS_OZONE) && BUILDFLAG(IS_LINUX)
   // Initialize Ozone so that the VADisplayState can decide if we're running
   // on top of a platform that can deal with VA-API buffers.
   // TODO(b/230370976): we may no longer need to initialize Ozone since we
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
index 37e3520f..e01a3dd 100644
--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
@@ -805,7 +805,7 @@
   }
 }
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 void VaapiVideoDecodeAccelerator::ImportBufferForPicture(
     int32_t picture_buffer_id,
     VideoPixelFormat pixel_format,
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.h b/media/gpu/vaapi/vaapi_video_decode_accelerator.h
index 82a4a49b..4bbe6c90 100644
--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.h
+++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.h
@@ -27,6 +27,7 @@
 #include "base/thread_annotations.h"
 #include "base/threading/thread.h"
 #include "base/trace_event/memory_dump_provider.h"
+#include "build/build_config.h"
 #include "media/base/bitstream_buffer.h"
 #include "media/gpu/decode_surface_handler.h"
 #include "media/gpu/gpu_video_decode_accelerator_helpers.h"
@@ -77,7 +78,7 @@
   void Decode(scoped_refptr<DecoderBuffer> buffer,
               int32_t bitstream_id) override;
   void AssignPictureBuffers(const std::vector<PictureBuffer>& buffers) override;
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
   void ImportBufferForPicture(
       int32_t picture_buffer_id,
       VideoPixelFormat pixel_format,
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc
index 2b0c061c..5bb1a3c 100644
--- a/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc
+++ b/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc
@@ -12,6 +12,7 @@
 #include "base/test/gmock_callback_support.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
+#include "build/build_config.h"
 #include "media/gpu/accelerated_video_decoder.h"
 #include "media/gpu/vaapi/vaapi_picture.h"
 #include "media/gpu/vaapi/vaapi_picture_factory.h"
@@ -427,7 +428,7 @@
   EXPECT_EQ(VaapiPictureFactory::kVaapiImplementationX11,
             mock_vaapi_picture_factory_->GetVaapiImplementation(
                 gl::kGLImplementationDesktopGL));
-#elif defined(USE_OZONE)
+#elif BUILDFLAG(IS_OZONE)
   EXPECT_EQ(VaapiPictureFactory::kVaapiImplementationDrm,
             mock_vaapi_picture_factory_->GetVaapiImplementation(
                 gl::kGLImplementationEGLANGLE));
diff --git a/media/gpu/vaapi/vaapi_video_decoder.cc b/media/gpu/vaapi/vaapi_video_decoder.cc
index a6c78ca5..1e846132 100644
--- a/media/gpu/vaapi/vaapi_video_decoder.cc
+++ b/media/gpu/vaapi/vaapi_video_decoder.cc
@@ -63,11 +63,11 @@
 absl::optional<VideoPixelFormat> GetPixelFormatForBitDepth(uint8_t bit_depth) {
   constexpr auto kSupportedBitDepthAndGfxFormats = base::MakeFixedFlatMap<
       uint8_t, gfx::BufferFormat>({
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
     {8u, gfx::BufferFormat::YUV_420_BIPLANAR}, {10u, gfx::BufferFormat::P010},
 #else
     {8u, gfx::BufferFormat::RGBX_8888},
-#endif  // defined(USE_OZONE)
+#endif  // BUILDFLAG(IS_OZONE)
   });
   if (!base::Contains(kSupportedBitDepthAndGfxFormats, bit_depth)) {
     VLOGF(1) << "Unsupported bit depth: " << base::strict_cast<int>(bit_depth);
@@ -805,9 +805,15 @@
        .modifier = dummy_frame->layout().modifier()}};
 #endif  // BUILDFLAG(IS_LINUX)
 
+  const size_t num_codec_reference_frames = decoder_->GetNumReferenceFrames();
+  // Verify |num_codec_reference_frames| has a reasonable value. Anecdotally 16
+  // is the largest amount of reference frames seen, on an ITU-T H.264 test
+  // vector (CAPCM*1_Sand_E.h264).
+  CHECK_LE(num_codec_reference_frames, 32u);
+
   auto status_or_layout = client_->PickDecoderOutputFormat(
       candidates, decoder_visible_rect, decoder_natural_size,
-      output_visible_rect.size(), decoder_->GetRequiredNumOfPictures(),
+      output_visible_rect.size(), num_codec_reference_frames,
       /*use_protected=*/!!cdm_context_ref_,
       /*need_aux_frame_pool=*/true, std::move(allocator));
 
diff --git a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
index 85903cf..2dd78a42 100644
--- a/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_video_encode_accelerator.cc
@@ -243,7 +243,7 @@
 
   if (config.storage_type.value_or(Config::StorageType::kShmem) ==
       Config::StorageType::kGpuMemoryBuffer) {
-#if !defined(USE_OZONE)
+#if !BUILDFLAG(IS_OZONE)
     MEDIA_LOG(ERROR, media_log.get())
         << "Native mode is only available on OZONE platform.";
     return false;
@@ -256,7 +256,7 @@
       return false;
     }
     native_input_mode_ = true;
-#endif  // USE_OZONE
+#endif  // BUILDFLAG(IS_OZONE)
   }
 
   if (config.HasSpatialLayer() && !native_input_mode_) {
diff --git a/media/gpu/vaapi/vaapi_wrapper.cc b/media/gpu/vaapi/vaapi_wrapper.cc
index 9051c726..5d94177 100644
--- a/media/gpu/vaapi/vaapi_wrapper.cc
+++ b/media/gpu/vaapi/vaapi_wrapper.cc
@@ -72,7 +72,7 @@
 #include "ui/gfx/x/connection.h"  // nogncheck
 #endif                            // BUILDFLAG(USE_VAAPI_X11)
 
-#if defined(USE_OZONE)
+#if BUILDFLAG(IS_OZONE)
 #include "ui/ozone/public/ozone_platform.h"
 #include "ui/ozone/public/surface_factory_ozone.h"
 #endif
@@ -740,7 +740,7 @@
 bool VADisplayState::Initialize() {
   base::AutoLock auto_lock(va_lock_);
 
-#if defined(USE_OZONE) && BUILDFLAG(IS_LINUX)
+#if BUILDFLAG(IS_OZONE) && BUILDFLAG(IS_LINUX)
   // TODO(crbug.com/1116701): add vaapi support for other Ozone platforms on
   // Linux. See comment in OzonePlatform::PlatformProperties::supports_vaapi
   // for more details. This will also require revisiting everything that's
diff --git a/media/gpu/vaapi/vp8_vaapi_video_encoder_delegate.cc b/media/gpu/vaapi/vp8_vaapi_video_encoder_delegate.cc
index c0b74d00..66844ca 100644
--- a/media/gpu/vaapi/vp8_vaapi_video_encoder_delegate.cc
+++ b/media/gpu/vaapi/vp8_vaapi_video_encoder_delegate.cc
@@ -520,8 +520,8 @@
           ? picture.metadata_for_encoding->temporal_idx
           : 0;
 
-  rate_ctrl_->ComputeQP(frame_params);
-  picture.frame_hdr->quantization_hdr.y_ac_qi = rate_ctrl_->GetQP();
+  picture.frame_hdr->quantization_hdr.y_ac_qi =
+      rate_ctrl_->ComputeQP(frame_params);
   DVLOGF(4) << "qp="
             << static_cast<int>(picture.frame_hdr->quantization_hdr.y_ac_qi)
             << (keyframe ? " (keyframe)" : "")
diff --git a/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate.cc b/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate.cc
index aa64ca838f..1ec035a 100644
--- a/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate.cc
+++ b/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate.cc
@@ -468,8 +468,8 @@
         picture->metadata_for_encoding->temporal_idx;
     frame_params.spatial_layer_id = picture->metadata_for_encoding->spatial_idx;
   }
-  rate_ctrl_->ComputeQP(frame_params);
-  picture->frame_hdr->quant_params.base_q_idx = rate_ctrl_->GetQP();
+  picture->frame_hdr->quant_params.base_q_idx =
+      rate_ctrl_->ComputeQP(frame_params);
   picture->frame_hdr->loop_filter.level = rate_ctrl_->GetLoopfilterLevel();
   DVLOGF(4) << "qp="
             << static_cast<int>(picture->frame_hdr->quant_params.base_q_idx)
diff --git a/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate_unittest.cc b/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate_unittest.cc
index 9a911e0..ef8fe00a7 100644
--- a/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate_unittest.cc
+++ b/media/gpu/vaapi/vp9_vaapi_video_encoder_delegate_unittest.cc
@@ -248,9 +248,8 @@
   ~MockVP9RateControl() override = default;
 
   MOCK_METHOD1(UpdateRateControl, void(const libvpx::VP9RateControlRtcConfig&));
-  MOCK_CONST_METHOD0(GetQP, int());
   MOCK_CONST_METHOD0(GetLoopfilterLevel, int());
-  MOCK_METHOD1(ComputeQP, void(const libvpx::VP9FrameParamsQpRTC&));
+  MOCK_METHOD1(ComputeQP, int(const libvpx::VP9FrameParamsQpRTC&));
   MOCK_METHOD1(PostEncodeUpdate, void(uint64_t));
 };
 }  // namespace
@@ -400,14 +399,13 @@
 
   FRAME_TYPE libvpx_frame_type =
       is_keyframe ? FRAME_TYPE::KEY_FRAME : FRAME_TYPE::INTER_FRAME;
+  constexpr int kDefaultQP = 34;
   EXPECT_CALL(
       *mock_rate_ctrl_,
       ComputeQP(MatchFrameParam(libvpx_frame_type, expected_temporal_layer_id,
                                 expected_spatial_layer_id)))
-      .WillOnce(Return());
-  constexpr int kDefaultQP = 34;
+      .WillOnce(Return(kDefaultQP));
   constexpr int kDefaultLoopFilterLevel = 8;
-  EXPECT_CALL(*mock_rate_ctrl_, GetQP()).WillOnce(Return(kDefaultQP));
   EXPECT_CALL(*mock_rate_ctrl_, GetLoopfilterLevel())
       .WillOnce(Return(kDefaultLoopFilterLevel));
 
diff --git a/media/gpu/video_rate_control.h b/media/gpu/video_rate_control.h
index 88da1ff..0c5f7b9 100644
--- a/media/gpu/video_rate_control.h
+++ b/media/gpu/video_rate_control.h
@@ -36,11 +36,11 @@
     impl_->UpdateRateControl(rate_control_config);
   }
   // libvpx::VP(8|9)FrameParamsQpRTC take 0-63 quantization parameter.
-  virtual void ComputeQP(const U& frame_params) {
+  // ComputeQP() returns vp8/9 ac/dc table index. The range is 0-255.
+  virtual int ComputeQP(const U& frame_params) {
     impl_->ComputeQP(frame_params);
+    return impl_->GetQP();
   }
-  // GetQP() returns vp8/9 ac/dc table index. The range is 0-255.
-  virtual int GetQP() const { return impl_->GetQP(); }
   // GetLoopfilterLevel() is only available for VP9 -- see .cc file.
   virtual int GetLoopfilterLevel() const { return -1; }
   virtual void PostEncodeUpdate(uint64_t encoded_frame_size) {
diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc
index 7eba4c8..06b70b17 100644
--- a/media/mojo/clients/mojo_renderer.cc
+++ b/media/mojo/clients/mojo_renderer.cc
@@ -224,6 +224,10 @@
   return media_time_interpolator_.GetInterpolatedTime();
 }
 
+RendererType MojoRenderer::GetRendererType() {
+  return RendererType::kMojo;
+}
+
 void MojoRenderer::OnTimeUpdate(base::TimeDelta time,
                                 base::TimeDelta max_time,
                                 base::TimeTicks capture_time) {
diff --git a/media/mojo/clients/mojo_renderer.h b/media/mojo/clients/mojo_renderer.h
index 75ca4fd..c0e7c7e9 100644
--- a/media/mojo/clients/mojo_renderer.h
+++ b/media/mojo/clients/mojo_renderer.h
@@ -62,6 +62,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  RendererType GetRendererType() override;
 
  private:
   // mojom::RendererClient implementation, dispatched on the |task_runner_|.
diff --git a/media/mojo/clients/win/media_foundation_renderer_client.cc b/media/mojo/clients/win/media_foundation_renderer_client.cc
index f71a564d..7f1aa79 100644
--- a/media/mojo/clients/win/media_foundation_renderer_client.cc
+++ b/media/mojo/clients/win/media_foundation_renderer_client.cc
@@ -270,6 +270,10 @@
   }
 }
 
+RendererType MediaFoundationRendererClient::GetRendererType() {
+  return RendererType::kMediaFoundation;
+}
+
 // RendererClient implementation.
 
 void MediaFoundationRendererClient::OnError(PipelineStatus status) {
diff --git a/media/mojo/clients/win/media_foundation_renderer_client.h b/media/mojo/clients/win/media_foundation_renderer_client.h
index 7d47baf..5d1d7ca 100644
--- a/media/mojo/clients/win/media_foundation_renderer_client.h
+++ b/media/mojo/clients/win/media_foundation_renderer_client.h
@@ -90,6 +90,7 @@
       const std::vector<DemuxerStream*>& enabled_tracks,
       base::OnceClosure change_completed_cb) override;
   void OnExternalVideoFrameRequest() override;
+  RendererType GetRendererType() override;
 
   // RendererClient implementation.
   void OnError(PipelineStatus status) override;
diff --git a/media/mojo/mojom/media_types.mojom b/media/mojo/mojom/media_types.mojom
index 630f852..257e14e 100644
--- a/media/mojo/mojom/media_types.mojom
+++ b/media/mojo/mojom/media_types.mojom
@@ -507,7 +507,7 @@
   kDeviceInUse = 2,
 };
 
-// See media/base/renderer_factory_selector.h for description.
+// See media/base/renderer.h for description.
 enum RendererType {
   kDefault = 0,          // DefaultRendererFactory
   kMojo = 1,             // MojoRendererFactory
@@ -520,4 +520,5 @@
   kRemoting = 8,         // RemotingRendererFactory for remoting::Receiver
   kCastStreaming = 9,    // CastStreamingRendererFactory
   kContentEmbedderDefined = 10,  // Defined by the content embedder
+  kTest= 11,             // Renderer implementations used in tests
 };
diff --git a/media/mojo/mojom/media_types_enum_mojom_traits.h b/media/mojo/mojom/media_types_enum_mojom_traits.h
index d744796..f95320e 100644
--- a/media/mojo/mojom/media_types_enum_mojom_traits.h
+++ b/media/mojo/mojom/media_types_enum_mojom_traits.h
@@ -293,6 +293,8 @@
         return media::mojom::RendererType::kCastStreaming;
       case ::media::RendererType::kContentEmbedderDefined:
         return media::mojom::RendererType::kContentEmbedderDefined;
+      case ::media::RendererType::kTest:
+        return media::mojom::RendererType::kTest;
     }
 
     NOTREACHED();
@@ -334,6 +336,9 @@
       case media::mojom::RendererType::kContentEmbedderDefined:
         *output = ::media::RendererType::kContentEmbedderDefined;
         return true;
+      case media::mojom::RendererType::kTest:
+        *output = ::media::RendererType::kTest;
+        return true;
     }
 
     NOTREACHED();
diff --git a/media/mojo/mojom/video_frame_mojom_traits_unittest.cc b/media/mojo/mojom/video_frame_mojom_traits_unittest.cc
index 1b6c6244..a101194 100644
--- a/media/mojo/mojom/video_frame_mojom_traits_unittest.cc
+++ b/media/mojo/mojom/video_frame_mojom_traits_unittest.cc
@@ -161,10 +161,10 @@
 
 // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) because
 // media::FakeGpuMemoryBuffer supports NativePixmapHandle backed
-// GpuMemoryBufferHandle only. !defined(USE_OZONE) so as to force
+// GpuMemoryBufferHandle only. !BUILDFLAG(IS_OZONE) so as to force
 // GpuMemoryBufferSupport to select gfx::ClientNativePixmapFactoryDmabuf for
 // gfx::ClientNativePixmapFactory.
-#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !defined(USE_OZONE)
+#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) && !BUILDFLAG(IS_OZONE)
 TEST_F(VideoFrameStructTraitsTest, GpuMemoryBufferVideoFrame) {
   gfx::Size coded_size = gfx::Size(256, 256);
   gfx::Rect visible_rect(coded_size);
@@ -197,5 +197,5 @@
   EXPECT_EQ(frame->GetGpuMemoryBuffer()->GetSize(), expected_gmb_size);
 }
 #endif  // (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)) &&
-        // !defined(USE_OZONE)
+        // !BUILDFLAG(IS_OZONE)
 }  // namespace media
diff --git a/media/mojo/services/media_foundation_renderer_wrapper.cc b/media/mojo/services/media_foundation_renderer_wrapper.cc
index 3a16cab..19dd478 100644
--- a/media/mojo/services/media_foundation_renderer_wrapper.cc
+++ b/media/mojo/services/media_foundation_renderer_wrapper.cc
@@ -120,6 +120,10 @@
   return renderer_->GetMediaTime();
 }
 
+RendererType MediaFoundationRendererWrapper::GetRendererType() {
+  return RendererType::kMediaFoundation;
+}
+
 void MediaFoundationRendererWrapper::GetDCOMPSurface(
     GetDCOMPSurfaceCallback callback) {
   if (has_get_dcomp_surface_called_) {
diff --git a/media/mojo/services/media_foundation_renderer_wrapper.h b/media/mojo/services/media_foundation_renderer_wrapper.h
index f59061d..358117a 100644
--- a/media/mojo/services/media_foundation_renderer_wrapper.h
+++ b/media/mojo/services/media_foundation_renderer_wrapper.h
@@ -56,6 +56,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  RendererType GetRendererType() override;
 
   // mojom::MediaFoundationRendererExtension implementation.
   void GetDCOMPSurface(GetDCOMPSurfaceCallback callback) override;
diff --git a/media/mojo/services/media_metrics_provider.cc b/media/mojo/services/media_metrics_provider.cc
index fd84fa2..90567c4c 100644
--- a/media/mojo/services/media_metrics_provider.cc
+++ b/media/mojo/services/media_metrics_provider.cc
@@ -13,6 +13,7 @@
 #include "build/build_config.h"
 #include "build/chromecast_buildflags.h"
 #include "media/base/key_systems.h"
+#include "media/base/renderer.h"
 #include "media/base/video_codecs.h"
 #include "media/learning/mojo/mojo_learning_task_controller_service.h"
 #include "media/mojo/services/video_decode_stats_recorder.h"
diff --git a/media/remoting/courier_renderer.cc b/media/remoting/courier_renderer.cc
index 8cc6d60..1e61282 100644
--- a/media/remoting/courier_renderer.cc
+++ b/media/remoting/courier_renderer.cc
@@ -265,6 +265,10 @@
   return current_media_time_;
 }
 
+RendererType CourierRenderer::GetRendererType() {
+  return RendererType::kCourier;
+}
+
 // static
 void CourierRenderer::OnDataPipeCreatedOnMainThread(
     scoped_refptr<base::SequencedTaskRunner> media_task_runner,
diff --git a/media/remoting/courier_renderer.h b/media/remoting/courier_renderer.h
index b2cd3b9..ec84f6a 100644
--- a/media/remoting/courier_renderer.h
+++ b/media/remoting/courier_renderer.h
@@ -88,6 +88,7 @@
   void SetPlaybackRate(double playback_rate) final;
   void SetVolume(float volume) final;
   base::TimeDelta GetMediaTime() final;
+  RendererType GetRendererType() final;
 
  private:
   friend class CourierRendererTest;
diff --git a/media/remoting/end2end_test_renderer.cc b/media/remoting/end2end_test_renderer.cc
index 9a05a71..4e9d6f3 100644
--- a/media/remoting/end2end_test_renderer.cc
+++ b/media/remoting/end2end_test_renderer.cc
@@ -399,6 +399,10 @@
   return courier_renderer_->GetMediaTime();
 }
 
+RendererType End2EndTestRenderer::GetRendererType() {
+  return RendererType::kTest;
+}
+
 void End2EndTestRenderer::SendMessageToSink(
     const std::vector<uint8_t>& message) {
   media_remotee_->OnMessage(message);
diff --git a/media/remoting/end2end_test_renderer.h b/media/remoting/end2end_test_renderer.h
index f2f02b65..aee7526 100644
--- a/media/remoting/end2end_test_renderer.h
+++ b/media/remoting/end2end_test_renderer.h
@@ -40,6 +40,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  RendererType GetRendererType() override;
 
   void OnSelectedVideoTracksChanged(
       const std::vector<DemuxerStream*>& enabled_tracks,
diff --git a/media/remoting/receiver.cc b/media/remoting/receiver.cc
index 4d6ef125..a567464 100644
--- a/media/remoting/receiver.cc
+++ b/media/remoting/receiver.cc
@@ -109,6 +109,10 @@
   return base::TimeDelta();
 }
 
+RendererType Receiver::GetRendererType() {
+  return RendererType::kRemoting;
+}
+
 void Receiver::SendRpcMessageOnMainThread(
     std::unique_ptr<openscreen::cast::RpcMessage> message) {
   // |rpc_messenger_| is owned by |receiver_controller_| which is a singleton
diff --git a/media/remoting/receiver.h b/media/remoting/receiver.h
index c2a1da5..9eba259 100644
--- a/media/remoting/receiver.h
+++ b/media/remoting/receiver.h
@@ -70,6 +70,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  RendererType GetRendererType() override;
 
   // RendererClient implementation.
   void OnError(PipelineStatus status) override;
diff --git a/media/renderers/decrypting_renderer.cc b/media/renderers/decrypting_renderer.cc
index 2521e57..27f87970 100644
--- a/media/renderers/decrypting_renderer.cc
+++ b/media/renderers/decrypting_renderer.cc
@@ -154,6 +154,11 @@
                                          std::move(change_completed_cb));
 }
 
+RendererType DecryptingRenderer::GetRendererType() {
+  // DecryptingRenderer is a thin wrapping layer; return the underlying type.
+  return renderer_->GetRendererType();
+}
+
 void DecryptingRenderer::CreateAndInitializeDecryptingMediaResource() {
   DCHECK(media_task_runner_->RunsTasksInCurrentSequence());
   DCHECK(init_cb_);
diff --git a/media/renderers/decrypting_renderer.h b/media/renderers/decrypting_renderer.h
index e900b1e..191d7c5 100644
--- a/media/renderers/decrypting_renderer.h
+++ b/media/renderers/decrypting_renderer.h
@@ -66,6 +66,7 @@
   void OnEnabledAudioTracksChanged(
       const std::vector<DemuxerStream*>& enabled_tracks,
       base::OnceClosure change_completed_cb) override;
+  RendererType GetRendererType() override;
 
   bool HasDecryptingMediaResourceForTesting() const;
 
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index 8cff5e8..a7f87ee 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -1055,4 +1055,8 @@
                                         &audio_ended_, &audio_playing_));
 }
 
+RendererType RendererImpl::GetRendererType() {
+  return RendererType::kDefault;
+}
+
 }  // namespace media
diff --git a/media/renderers/renderer_impl.h b/media/renderers/renderer_impl.h
index 9d250a3..0e30262 100644
--- a/media/renderers/renderer_impl.h
+++ b/media/renderers/renderer_impl.h
@@ -68,10 +68,11 @@
   base::TimeDelta GetMediaTime() final;
   void OnSelectedVideoTracksChanged(
       const std::vector<DemuxerStream*>& enabled_tracks,
-      base::OnceClosure change_completed_cb) override;
+      base::OnceClosure change_completed_cb) final;
   void OnEnabledAudioTracksChanged(
       const std::vector<DemuxerStream*>& enabled_tracks,
-      base::OnceClosure change_completed_cb) override;
+      base::OnceClosure change_completed_cb) final;
+  RendererType GetRendererType() final;
 
   // Helper functions for testing purposes. Must be called before Initialize().
   void DisableUnderflowForTesting();
diff --git a/media/renderers/win/media_foundation_renderer.cc b/media/renderers/win/media_foundation_renderer.cc
index 1460d4cc..78a50d6 100644
--- a/media/renderers/win/media_foundation_renderer.cc
+++ b/media/renderers/win/media_foundation_renderer.cc
@@ -806,6 +806,10 @@
   return media_time;
 }
 
+RendererType MediaFoundationRenderer::GetRendererType() {
+  return RendererType::kMediaFoundation;
+}
+
 void MediaFoundationRenderer::OnPlaybackError(PipelineStatus status,
                                               HRESULT hr) {
   DVLOG_FUNC(1) << "status=" << status << ", hr=" << hr;
diff --git a/media/renderers/win/media_foundation_renderer.h b/media/renderers/win/media_foundation_renderer.h
index be9ef512..dfaee16 100644
--- a/media/renderers/win/media_foundation_renderer.h
+++ b/media/renderers/win/media_foundation_renderer.h
@@ -89,6 +89,7 @@
   void SetPlaybackRate(double playback_rate) override;
   void SetVolume(float volume) override;
   base::TimeDelta GetMediaTime() override;
+  RendererType GetRendererType() override;
 
   // MediaFoundationRendererExtension implementation.
   void GetDCompSurface(GetDCompSurfaceCB callback) override;
diff --git a/net/base/features.cc b/net/base/features.cc
index 6e7f392..4b528ab 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -195,7 +195,7 @@
 #if BUILDFLAG(CHROME_ROOT_STORE_SUPPORTED)
 BASE_FEATURE(kChromeRootStoreUsed,
              "ChromeRootStoreUsed",
-#if BUILDFLAG(IS_MAC)
+#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
              base::FEATURE_ENABLED_BY_DEFAULT
 #else
              base::FEATURE_DISABLED_BY_DEFAULT
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc
index 792cc00..9be57079 100644
--- a/net/cookies/canonical_cookie.cc
+++ b/net/cookies/canonical_cookie.cc
@@ -542,6 +542,12 @@
 
   ParsedCookie parsed_cookie(cookie_line, status);
 
+  // We record this metric before checking validity because when
+  // kExtraCookieValidityChecks is enabled the presence of an HTAB will
+  // invalidate the ParsedCookie.
+  UMA_HISTOGRAM_BOOLEAN("Cookie.NameOrValueHtab",
+                        parsed_cookie.HasInternalHtab());
+
   if (!parsed_cookie.IsValid()) {
     DVLOG(net::cookie_util::kVlogSetCookies)
         << "WARNING: Couldn't parse cookie";
diff --git a/net/cookies/parsed_cookie.cc b/net/cookies/parsed_cookie.cc
index 282a51e2..7d5855ed 100644
--- a/net/cookies/parsed_cookie.cc
+++ b/net/cookies/parsed_cookie.cc
@@ -665,6 +665,14 @@
     // OK, we're finished with a Token/Value.
     pair.second = std::string(value_start, value_end);
 
+    // For metrics, check if either the name or value contain an internal HTAB
+    // (0x9). That is, not leading or trailing.
+    if (pair_num == 0 &&
+        (pair.first.find_first_of("\t") != std::string::npos ||
+         pair.second.find_first_of("\t") != std::string::npos)) {
+      internal_htab_ = true;
+    }
+
     if (base::FeatureList::IsEnabled(features::kExtraCookieValidityChecks)) {
       bool ignore_pair = false;
       if (pair_num == 0) {
diff --git a/net/cookies/parsed_cookie.h b/net/cookies/parsed_cookie.h
index c81a298..937df29 100644
--- a/net/cookies/parsed_cookie.h
+++ b/net/cookies/parsed_cookie.h
@@ -90,6 +90,7 @@
   bool IsSameParty() const { return same_party_index_ != 0; }
   bool IsPartitioned() const { return partitioned_index_ != 0; }
   bool HasTruncatedNameOrValue() const { return truncated_name_or_value_; }
+  bool HasInternalHtab() const { return internal_htab_; }
   TruncatingCharacterInCookieStringType
   GetTruncatingCharacterInCookieStringType() const {
     return truncating_char_in_cookie_string_type_;
@@ -225,6 +226,8 @@
   bool truncated_name_or_value_ = false;
   TruncatingCharacterInCookieStringType truncating_char_in_cookie_string_type_ =
       TruncatingCharacterInCookieStringType::kTruncatingCharNone;
+  // For metrics on cookie name/value internal HTABS
+  bool internal_htab_ = false;
 };
 
 }  // namespace net
diff --git a/net/cookies/parsed_cookie_unittest.cc b/net/cookies/parsed_cookie_unittest.cc
index 4eb68621..da0319d 100644
--- a/net/cookies/parsed_cookie_unittest.cc
+++ b/net/cookies/parsed_cookie_unittest.cc
@@ -1409,4 +1409,22 @@
             TruncatingCharacterInCookieStringType::kTruncatingCharNone);
 }
 
+TEST(ParsedCookieTest, HtabInNameOrValue) {
+  std::string no_htab_string = "foo=bar";
+  ParsedCookie no_htab(no_htab_string);
+  EXPECT_FALSE(no_htab.HasInternalHtab());
+
+  std::string htab_leading_trailing_string = "\tfoo=bar\t";
+  ParsedCookie htab_leading_trailing(htab_leading_trailing_string);
+  EXPECT_FALSE(htab_leading_trailing.HasInternalHtab());
+
+  std::string htab_name_string = "f\too=bar";
+  ParsedCookie htab_name(htab_name_string);
+  EXPECT_TRUE(htab_name.HasInternalHtab());
+
+  std::string htab_value_string = "foo=b\tar";
+  ParsedCookie htab_value(htab_value_string);
+  EXPECT_TRUE(htab_value.HasInternalHtab());
+}
+
 }  // namespace net
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index 57769cf..63f9bc36 100644
--- a/net/http/transport_security_state_static.pins
+++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@
 #   hash function for preloaded entries again (we have already done so once).
 #
 
-# Last updated: 2022-11-01 12:54 UTC
+# Last updated: 2022-11-02 12:54 UTC
 PinsListTimestamp
-1667307244
+1667393654
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/third_party/quiche/BUILD.gn b/net/third_party/quiche/BUILD.gn
index 5bf4a69f..66546b8 100644
--- a/net/third_party/quiche/BUILD.gn
+++ b/net/third_party/quiche/BUILD.gn
@@ -68,6 +68,8 @@
     "overrides/quiche_platform_impl/quiche_time_utils_impl.h",
     "overrides/quiche_platform_impl/quiche_url_utils_impl.cc",
     "overrides/quiche_platform_impl/quiche_url_utils_impl.h",
+    "src/quiche/binary_http/binary_http_message.cc",
+    "src/quiche/binary_http/binary_http_message.h",
     "src/quiche/common/platform/api/quiche_bug_tracker.h",
     "src/quiche/common/platform/api/quiche_client_stats.h",
     "src/quiche/common/platform/api/quiche_containers.h",
@@ -1382,6 +1384,7 @@
 source_set("quiche_tests") {
   testonly = true
   sources = [
+    "src/quiche/binary_http/binary_http_message_test.cc",
     "src/quiche/common/platform/api/quiche_file_utils_test.cc",
     "src/quiche/common/platform/api/quiche_hostname_utils_test.cc",
     "src/quiche/common/platform/api/quiche_mem_slice_test.cc",
diff --git a/sandbox/linux/services/credentials.h b/sandbox/linux/services/credentials.h
index 078e489..e59ebef4 100644
--- a/sandbox/linux/services/credentials.h
+++ b/sandbox/linux/services/credentials.h
@@ -5,6 +5,8 @@
 #ifndef SANDBOX_LINUX_SERVICES_CREDENTIALS_H_
 #define SANDBOX_LINUX_SERVICES_CREDENTIALS_H_
 
+#include <sys/types.h>
+
 #include "build/build_config.h"
 // Link errors are tedious to track, raise a compile-time error instead.
 #if BUILDFLAG(IS_ANDROID)
diff --git a/services/device/generic_sensor/android/junit/src/org/chromium/device/sensors/PlatformSensorAndProviderTest.java b/services/device/generic_sensor/android/junit/src/org/chromium/device/sensors/PlatformSensorAndProviderTest.java
index 1eaba00..d595d244 100644
--- a/services/device/generic_sensor/android/junit/src/org/chromium/device/sensors/PlatformSensorAndProviderTest.java
+++ b/services/device/generic_sensor/android/junit/src/org/chromium/device/sensors/PlatformSensorAndProviderTest.java
@@ -24,7 +24,6 @@
 import android.hardware.SensorEvent;
 import android.hardware.SensorEventListener;
 import android.hardware.SensorManager;
-import android.os.Build;
 import android.os.Handler;
 import android.util.SparseArray;
 
@@ -51,7 +50,7 @@
  * Unit tests for PlatformSensor and PlatformSensorProvider.
  */
 @RunWith(BaseRobolectricTestRunner.class)
-@Config(sdk = Build.VERSION_CODES.M, manifest = Config.NONE)
+@Config(manifest = Config.NONE)
 @SuppressWarnings("GuardedBy") // verify(sensor, times(1)).sensorError() cannot resolve |mLock|.
 public class PlatformSensorAndProviderTest {
     @Mock
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 e5ed558..f7521ff 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
@@ -30,7 +30,6 @@
 import android.nfc.Tag;
 import android.nfc.TagLostException;
 import android.nfc.tech.TagTechnology;
-import android.os.Build;
 import android.os.Bundle;
 
 import org.junit.Before;
@@ -71,7 +70,7 @@
  * Unit tests for NfcImpl and NdefMessageUtils classes.
  */
 @RunWith(BaseRobolectricTestRunner.class)
-@Config(sdk = Build.VERSION_CODES.M, manifest = Config.NONE)
+@Config(manifest = Config.NONE)
 public class NFCTest {
     private TestNfcDelegate mDelegate;
     private int mNextWatchId;
diff --git a/services/device/nfc/android/junit/src/org/chromium/device/nfc/NfcBlocklistTest.java b/services/device/nfc/android/junit/src/org/chromium/device/nfc/NfcBlocklistTest.java
index e91e99ac..57b5e2e5 100644
--- a/services/device/nfc/android/junit/src/org/chromium/device/nfc/NfcBlocklistTest.java
+++ b/services/device/nfc/android/junit/src/org/chromium/device/nfc/NfcBlocklistTest.java
@@ -7,8 +7,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import android.os.Build;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.annotation.Config;
@@ -20,7 +18,7 @@
  * Unit tests for the {@link NfcBlocklist} class.
  */
 @RunWith(BaseRobolectricTestRunner.class)
-@Config(sdk = Build.VERSION_CODES.M, manifest = Config.NONE)
+@Config(manifest = Config.NONE)
 public class NfcBlocklistTest {
     // Static historical bytes
     private static final byte[] YUBIKEY_NEO_HISTORICAL_BYTES = new byte[] {
diff --git a/services/network/BUILD.gn b/services/network/BUILD.gn
index ec6be1b..aa977fa8 100644
--- a/services/network/BUILD.gn
+++ b/services/network/BUILD.gn
@@ -89,6 +89,8 @@
     "network_service_network_delegate.h",
     "network_service_proxy_delegate.cc",
     "network_service_proxy_delegate.h",
+    "oblivious_http_request_handler.cc",
+    "oblivious_http_request_handler.h",
     "pending_callback_chain.cc",
     "pending_callback_chain.h",
     "private_network_access_checker.cc",
@@ -374,6 +376,7 @@
     "network_service_memory_cache_unittest.cc",
     "network_service_proxy_delegate_unittest.cc",
     "network_service_unittest.cc",
+    "oblivious_http_request_handler_unittest.cc",
     "pending_callback_chain_unittest.cc",
     "private_network_access_checker_unittest.cc",
     "proxy_auto_config_library_unittest.cc",
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
index 81da99a..c5a340b 100644
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -98,6 +98,7 @@
 #include "services/network/network_service_memory_cache.h"
 #include "services/network/network_service_network_delegate.h"
 #include "services/network/network_service_proxy_delegate.h"
+#include "services/network/oblivious_http_request_handler.h"
 #include "services/network/proxy_config_service_mojo.h"
 #include "services/network/proxy_lookup_request.h"
 #include "services/network/proxy_resolving_socket_factory_mojo.h"
@@ -484,6 +485,7 @@
           std::move(params_->first_party_sets_access_delegate_params),
           network_service_->first_party_sets_manager()),
       cors_preflight_controller_(network_service),
+      ohttp_handler_(this),
       cors_non_wildcard_request_headers_support_(base::FeatureList::IsEnabled(
           features::kCorsNonWildcardRequestHeadersSupport)) {
 #if BUILDFLAG(IS_WIN) && DCHECK_IS_ON()
@@ -612,7 +614,8 @@
       socket_factory_(
           std::make_unique<SocketFactory>(url_request_context_->net_log(),
                                           url_request_context)),
-      cors_preflight_controller_(network_service) {
+      cors_preflight_controller_(network_service),
+      ohttp_handler_(this) {
   // May be nullptr in tests.
   if (network_service_)
     network_service_->RegisterNetworkContext(this);
@@ -774,6 +777,12 @@
     factory->ClearBindings();
 }
 
+void NetworkContext::GetViaObliviousHttp(
+    mojom::ObliviousHttpRequestPtr request,
+    mojo::PendingRemote<mojom::ObliviousHttpClient> client) {
+  ohttp_handler_.StartRequest(std::move(request), std::move(client));
+}
+
 void NetworkContext::GetCookieManager(
     mojo::PendingReceiver<mojom::CookieManager> receiver) {
   cookie_manager_->AddReceiver(std::move(receiver));
@@ -2195,9 +2204,9 @@
 
   //  Unlike server credentials, proxy credentials are not keyed on
   //  NetworkAnonymizationKey.
-  net::HttpAuthCache::Entry* entry =
-      http_auth_cache->Lookup(scheme_host_port, net::HttpAuth::AUTH_PROXY,
-                              realm, net_scheme, net::NetworkAnonymizationKey());
+  net::HttpAuthCache::Entry* entry = http_auth_cache->Lookup(
+      scheme_host_port, net::HttpAuth::AUTH_PROXY, realm, net_scheme,
+      net::NetworkAnonymizationKey());
   if (entry)
     std::move(callback).Run(entry->credentials());
   else
diff --git a/services/network/network_context.h b/services/network/network_context.h
index 30d5099..3a97911d 100644
--- a/services/network/network_context.h
+++ b/services/network/network_context.h
@@ -47,6 +47,7 @@
 #include "services/network/http_cache_data_counter.h"
 #include "services/network/http_cache_data_remover.h"
 #include "services/network/network_qualities_pref_delegate.h"
+#include "services/network/oblivious_http_request_handler.h"
 #include "services/network/public/cpp/cors/origin_access_list.h"
 #include "services/network/public/cpp/network_service_buildflags.h"
 #include "services/network/public/cpp/transferable_directory.h"
@@ -240,6 +241,9 @@
       mojo::PendingReceiver<mojom::URLLoaderFactory> receiver,
       mojom::URLLoaderFactoryParamsPtr params) override;
   void ResetURLLoaderFactories() override;
+  void GetViaObliviousHttp(
+      mojom::ObliviousHttpRequestPtr request,
+      mojo::PendingRemote<mojom::ObliviousHttpClient> client) override;
   void GetCookieManager(
       mojo::PendingReceiver<mojom::CookieManager> receiver) override;
   void GetRestrictedCookieManager(
@@ -903,6 +907,8 @@
 
   std::unique_ptr<NetworkServiceMemoryCache> memory_cache_;
 
+  ObliviousHttpRequestHandler ohttp_handler_;
+
   // Whether all external consumers are expected to provide a non-empty
   // NetworkAnonymizationKey with all requests. When set, enabled a variety of
   // DCHECKs on APIs used by external callers.
diff --git a/services/network/oblivious_http_request_handler.cc b/services/network/oblivious_http_request_handler.cc
new file mode 100644
index 0000000..1322ecd
--- /dev/null
+++ b/services/network/oblivious_http_request_handler.cc
@@ -0,0 +1,218 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/network/oblivious_http_request_handler.h"
+
+#include "mojo/public/cpp/bindings/remote_set.h"
+#include "net/base/load_flags.h"
+#include "net/http/http_status_code.h"
+#include "net/third_party/quiche/src/quiche/binary_http/binary_http_message.h"
+#include "services/network/network_context.h"
+#include "services/network/public/cpp/simple_url_loader.h"
+#include "services/network/public/mojom/oblivious_http_request.mojom.h"
+#include "services/network/public/mojom/url_loader_factory.mojom.h"
+
+namespace network {
+
+namespace {
+
+constexpr size_t kMaxResponseSize = 10 * 1024;  // Response size limit is 10kB
+constexpr base::TimeDelta kRequestTimeout = base::Minutes(1);
+constexpr char kObliviousHttpRequestMimeType[] = "message/ohttp-req";
+
+constexpr size_t kMaxMethodSize = 16;
+constexpr size_t kMaxRequestBodySize = 10 * 1024;  // Request size limit is 10kB
+constexpr size_t kMaxContentTypeSize = 256;        // Per RFC6838
+
+std::string CreateAndSerializeBhttpMessage(
+    const GURL& request_url,
+    const std::string& method,
+    absl::optional<std::string> content_type,
+    absl::optional<std::string> content_data) {
+  std::string host_port = request_url.host();
+  if (request_url.has_port()) {
+    host_port += ":" + request_url.port();
+  }
+
+  quiche::BinaryHttpRequest bhttp_request(
+      {method, request_url.scheme(), host_port, request_url.PathForRequest()});
+  bhttp_request.AddHeaderField({net::HttpRequestHeaders::kHost, host_port});
+  // Date should be provided by the client to allow for server anti-replay
+  // protections (according to the OHTTP spec).
+  bhttp_request.AddHeaderField(
+      {"Date", base::TimeFormatHTTP(base::Time::Now())});
+  if (content_data) {
+    DCHECK(content_type);
+    bhttp_request.AddHeaderField(
+        {net::HttpRequestHeaders::kContentType, std::move(*content_type)});
+    bhttp_request.AddHeaderField({net::HttpRequestHeaders::kContentLength,
+                                  base::NumberToString(content_data->size())});
+    bhttp_request.set_body(std::move(*content_data));
+  }
+
+  return bhttp_request.Serialize().value();
+}
+
+}  // namespace
+
+class ObliviousHttpRequestHandler::RequestState {
+ public:
+  std::unique_ptr<SimpleURLLoader> loader;
+  // Crypto stuff that needs to last from request to response.
+  // TrustToken handler
+};
+
+ObliviousHttpRequestHandler::ObliviousHttpRequestHandler(
+    mojom::NetworkContext* context)
+    : owner_network_context_(context) {
+  clients_.set_disconnect_handler(
+      base::BindRepeating(&ObliviousHttpRequestHandler::OnClientDisconnect,
+                          base::Unretained(this)));
+}
+
+ObliviousHttpRequestHandler::~ObliviousHttpRequestHandler() = default;
+
+void ObliviousHttpRequestHandler::StartRequest(
+    mojom::ObliviousHttpRequestPtr ohttp_request,
+    mojo::PendingRemote<mojom::ObliviousHttpClient> client) {
+  DCHECK(client.is_valid());
+  DCHECK(ohttp_request);
+  if (!ohttp_request->relay_url.is_valid() ||
+      !ohttp_request->relay_url.SchemeIs(url::kHttpsScheme)) {
+    mojo::ReportBadMessage("Invalid OHTTP Relay URL");
+    return;
+  }
+  if (!ohttp_request->resource_url.is_valid() ||
+      !ohttp_request->resource_url.SchemeIs(url::kHttpsScheme)) {
+    mojo::ReportBadMessage("Invalid OHTTP Resource URL");
+    return;
+  }
+  if (ohttp_request->method.size() > kMaxMethodSize) {
+    mojo::ReportBadMessage("Invalid OHTTP Method");
+    return;
+  }
+  if (!ohttp_request->traffic_annotation.is_valid()) {
+    mojo::ReportBadMessage("Invalid OHTTP Traffic Annotation");
+    return;
+  }
+  if (ohttp_request->request_body) {
+    if (ohttp_request->request_body->content.size() > kMaxRequestBodySize) {
+      mojo::ReportBadMessage("Request body too large");
+      return;
+    }
+    if (ohttp_request->request_body->content_type.size() >
+        kMaxContentTypeSize) {
+      mojo::ReportBadMessage("Content-Type too large");
+      return;
+    }
+  }
+
+  mojo::RemoteSetElementId id = clients_.Add(std::move(client));
+  auto state_pair_iter =
+      client_state_.insert({id, std::make_unique<RequestState>()});
+  RequestState* state = state_pair_iter.first->second.get();
+
+  std::string bhttp_payload = CreateAndSerializeBhttpMessage(
+      ohttp_request->resource_url, ohttp_request->method,
+      std::move(ohttp_request->request_body->content_type),
+      std::move(ohttp_request->request_body->content));
+
+  // TODO(behamilton): handle encryption, padding.
+  std::string unencrypted_blob = bhttp_payload;
+
+  std::unique_ptr<ResourceRequest> resource_request =
+      std::make_unique<ResourceRequest>();
+  resource_request->url = ohttp_request->relay_url;
+  resource_request->method = net::HttpRequestHeaders::kPostMethod;
+  resource_request->redirect_mode = mojom::RedirectMode::kError;
+  resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit;
+  resource_request->load_flags |= net::LOAD_DISABLE_CACHE;
+
+  state->loader = SimpleURLLoader::Create(
+      std::move(resource_request),
+      net::NetworkTrafficAnnotationTag(ohttp_request->traffic_annotation));
+
+  state->loader->AttachStringForUpload(unencrypted_blob,
+                                       kObliviousHttpRequestMimeType);
+  state->loader->SetTimeoutDuration(kRequestTimeout);
+  state->loader->DownloadToString(
+      GetURLLoaderFactory(),
+      base::BindOnce(&ObliviousHttpRequestHandler::OnRequestComplete,
+                     base::Unretained(this), id),
+      kMaxResponseSize);
+}
+
+void ObliviousHttpRequestHandler::RespondWithError(mojo::RemoteSetElementId id,
+                                                   int error_code) {
+  mojom::ObliviousHttpClient* client = clients_.Get(id);
+  DCHECK(client);
+  client->OnCompleted(absl::nullopt, error_code);
+  clients_.Remove(id);
+
+  DCHECK_EQ(1u, client_state_.count(id));
+  client_state_.erase(id);
+}
+
+void ObliviousHttpRequestHandler::OnRequestComplete(
+    mojo::RemoteSetElementId id,
+    std::unique_ptr<std::string> response) {
+  mojom::ObliviousHttpClient* client = clients_.Get(id);
+  auto state_iter = client_state_.find(id);
+  DCHECK(client);
+  DCHECK(state_iter != client_state_.end());
+
+  RequestState* state = state_iter->second.get();
+  if (!response) {
+    RespondWithError(id, state->loader->NetError());
+    return;
+  }
+  // TODO(behamilton): decrypt payload.
+  std::string payload = std::move(*response);
+
+  auto bhttp_response = quiche::BinaryHttpResponse::Create(payload);
+  if (!bhttp_response.ok()) {
+    RespondWithError(id, net::ERR_FAILED);
+    return;
+  }
+
+  // Check that the inner request was successful.
+  int status_code = bhttp_response->status_code();
+  if (status_code / 100 != 2) {
+    RespondWithError(id, net::ERR_HTTP_RESPONSE_CODE_FAILURE);
+    return;
+  }
+
+  client->OnCompleted(std::string(bhttp_response->body()), net::OK);
+  clients_.Remove(id);
+  client_state_.erase(id);
+}
+
+void ObliviousHttpRequestHandler::OnClientDisconnect(
+    mojo::RemoteSetElementId id) {
+  DCHECK_GT(client_state_.count(id), 0u);
+  client_state_.erase(id);
+}
+
+network::mojom::URLLoaderFactory*
+ObliviousHttpRequestHandler::GetURLLoaderFactory() {
+  // Create the URLLoaderFactory as needed.
+  if (url_loader_factory_ && url_loader_factory_.is_connected()) {
+    return url_loader_factory_.get();
+  }
+
+  network::mojom::URLLoaderFactoryParamsPtr params =
+      network::mojom::URLLoaderFactoryParams::New();
+  params->process_id = network::mojom::kBrowserProcessId;
+  params->is_corb_enabled = false;
+  params->is_trusted = true;
+  params->automatically_assign_isolation_info = true;
+
+  url_loader_factory_.reset();
+  owner_network_context_->CreateURLLoaderFactory(
+      url_loader_factory_.BindNewPipeAndPassReceiver(), std::move(params));
+
+  return url_loader_factory_.get();
+}
+
+}  // namespace network
\ No newline at end of file
diff --git a/services/network/oblivious_http_request_handler.h b/services/network/oblivious_http_request_handler.h
new file mode 100644
index 0000000..97d7bc90
--- /dev/null
+++ b/services/network/oblivious_http_request_handler.h
@@ -0,0 +1,75 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_NETWORK_OBLIVIOUS_HTTP_REQUEST_HANDLER_H_
+#define SERVICES_NETWORK_OBLIVIOUS_HTTP_REQUEST_HANDLER_H_
+
+#include "mojo/public/cpp/bindings/remote_set.h"
+#include "services/network/public/mojom/network_context.mojom-forward.h"
+#include "services/network/public/mojom/oblivious_http_request.mojom.h"
+#include "services/network/public/mojom/url_loader_factory.mojom.h"
+
+namespace network {
+
+// Handles the request based on the OHTTP specification:
+// https://ietf-wg-ohai.github.io/oblivious-http/draft-ietf-ohai-ohttp.html
+//
+// The basic steps are:
+// 1. Construct the inner binary HTTP request based on the provided parameters
+// (leveraging binary HTTP support in quiche).
+// 2. Encrypt the inner request based on the Key Configuration (leveraging
+// upcoming OHTTP support in quiche)
+// 3. Create a network::ResourceRequest to perform an HTTP POST to the relay
+// URL with the provided IsolationInfo. The request payload will be set to the
+// encrypted inner request.
+// 4. The ResourceRequest should be passed to a SimpleURLLoader to complete
+// the request.
+// 5. When the callback from the SimpleURLLoader is received and there is no
+// error, decrypt the response body to get the inner response.
+// 6. Check the inner binary HTTP response for error. Finish any pending trust
+// token operations related to this request. Then perform the callback,
+// specifying the inner response body if there was any.
+class COMPONENT_EXPORT(NETWORK_SERVICE) ObliviousHttpRequestHandler {
+ public:
+  // The network context must outlive this object.
+  explicit ObliviousHttpRequestHandler(mojom::NetworkContext* context);
+
+  ~ObliviousHttpRequestHandler();
+
+  // Completes steps 1-4 of the request procedure above.
+  void StartRequest(
+      mojom::ObliviousHttpRequestPtr request,
+      mojo::PendingRemote<mojom::ObliviousHttpClient> unbound_client);
+
+ private:
+  class RequestState;
+
+  // Calls the completed event with the specified error code on the
+  // corresponding client. The client with the specified id must be in the
+  // `clients_` set and the `client_state_` map.
+  void RespondWithError(mojo::RemoteSetElementId id, int error_code);
+
+  // Called by the SimpleURLLoader when the outer request has completed.
+  // Performs steps 5 and 6 of the OHTTP request procedure above.
+  void OnRequestComplete(mojo::RemoteSetElementId id,
+                         std::unique_ptr<std::string> response);
+
+  // Handles cleaning up when an ObliviousHttpClient disconnects.
+  void OnClientDisconnect(mojo::RemoteSetElementId id);
+
+  mojom::URLLoaderFactory* GetURLLoaderFactory();
+
+  // The NetworkContext which owns this ObliviousHttpRequestHandler.
+  raw_ptr<mojom::NetworkContext> owner_network_context_;
+  mojo::Remote<mojom::URLLoaderFactory> url_loader_factory_;
+
+  // Clients and matching state.
+  mojo::RemoteSet<mojom::ObliviousHttpClient> clients_;
+  std::map<mojo::RemoteSetElementId, std::unique_ptr<RequestState>>
+      client_state_;
+};
+
+}  // namespace network
+
+#endif  // SERVICES_NETWORK_OBLIVIOUS_HTTP_REQUEST_HANDLER_H_
diff --git a/services/network/oblivious_http_request_handler_unittest.cc b/services/network/oblivious_http_request_handler_unittest.cc
new file mode 100644
index 0000000..7150430
--- /dev/null
+++ b/services/network/oblivious_http_request_handler_unittest.cc
@@ -0,0 +1,306 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <cstddef>
+#include <cstdint>
+
+#include "base/test/task_environment.h"
+#include "mojo/public/cpp/test_support/fake_message_dispatch_context.h"
+#include "mojo/public/cpp/test_support/test_utils.h"
+#include "net/http/http_status_code.h"
+#include "net/third_party/quiche/src/quiche/binary_http/binary_http_message.h"
+#include "net/third_party/quiche/src/quiche/common/quiche_data_writer.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
+#include "services/network/oblivious_http_request_handler.h"
+#include "services/network/public/mojom/fetch_api.mojom-shared.h"
+#include "services/network/public/mojom/oblivious_http_request.mojom.h"
+#include "services/network/public/mojom/url_loader_factory.mojom.h"
+#include "services/network/test/test_network_context.h"
+#include "services/network/test/test_url_loader_factory.h"
+#include "services/network/test/test_utils.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/boringssl/src/include/openssl/hpke.h"
+
+namespace {
+
+const char kRelayURL[] = "https://relay.test:13/";
+const char kResourceURL[] = "https://resource.test:37/path";
+
+testing::Matcher<net::HttpRequestHeaders::HeaderVector> UnorderedHeadersAre(
+    const net::HttpRequestHeaders::HeaderVector& expected) {
+  std::vector<testing::Matcher<net::HttpRequestHeaders::HeaderKeyValuePair>> ms;
+  for (const auto& expected_pair : expected) {
+    ms.emplace_back(testing::AllOf(
+        testing::Field("key", &net::HttpRequestHeaders::HeaderKeyValuePair::key,
+                       expected_pair.key),
+        testing::Field("value",
+                       &net::HttpRequestHeaders::HeaderKeyValuePair::value,
+                       expected_pair.value)));
+  }
+  return testing::UnorderedElementsAreArray(ms);
+}
+
+class TestOhttpNetworkContext : public network::TestNetworkContext {
+ public:
+  void CreateURLLoaderFactory(
+      mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver,
+      network::mojom::URLLoaderFactoryParamsPtr params) override {
+    EXPECT_EQ(network::mojom::kBrowserProcessId, params->process_id);
+    EXPECT_FALSE(params->is_corb_enabled);
+    EXPECT_TRUE(params->is_trusted);
+
+    factory_reciever_ =
+        std::make_unique<mojo::Receiver<network::mojom::URLLoaderFactory>>(
+            &loader_factory_, std::move(receiver));
+  }
+
+  network::TestURLLoaderFactory* loader_factory() { return &loader_factory_; }
+
+ private:
+  network::TestURLLoaderFactory loader_factory_;
+  std::unique_ptr<mojo::Receiver<network::mojom::URLLoaderFactory>>
+      factory_reciever_;
+};
+
+class TestOhttpClient : public network::mojom::ObliviousHttpClient {
+ public:
+  TestOhttpClient(absl::optional<std::string> expected_body,
+                  int expected_status)
+      : expected_body_(std::move(expected_body)),
+        expected_status_(expected_status),
+        receiver_(this) {}
+
+  mojo::PendingRemote<network::mojom::ObliviousHttpClient>
+  CreatePendingRemote() {
+    return receiver_.BindNewPipeAndPassRemote();
+  }
+
+  void OnCompleted(const absl::optional<std::string>& response,
+                   int net_error) override {
+    EXPECT_EQ(expected_body_, response);
+    EXPECT_EQ(expected_status_, net_error);
+    run_loop_.Quit();
+  }
+
+  void WaitForCall() { run_loop_.Run(); }
+
+ private:
+  const absl::optional<std::string> expected_body_;
+  const int expected_status_;
+  mojo::Receiver<network::mojom::ObliviousHttpClient> receiver_;
+  base::RunLoop run_loop_;
+};
+
+}  // namespace
+
+class TestObliviousHttpRequestHandler : public testing::Test {
+ public:
+  TestObliviousHttpRequestHandler()
+      : task_environment_(base::test::TaskEnvironment::MainThreadType::IO) {}
+
+  TestOhttpNetworkContext* network_context() { return &network_context_; }
+  network::TestURLLoaderFactory* loader_factory() {
+    return network_context()->loader_factory();
+  }
+
+  void AddResponse(std::string body, GURL relay_url = GURL(kRelayURL)) {
+    quiche::BinaryHttpResponse response(net::HTTP_OK);
+    response.set_body(std::move(body));
+    loader_factory()->AddResponse(
+        /*url=*/relay_url,
+        /*head=*/network::CreateURLResponseHead(net::HTTP_OK),
+        /*content=*/response.Serialize().value(),
+        /*status=*/network::URLLoaderCompletionStatus());
+  }
+
+  network::mojom::ObliviousHttpRequestPtr CreateRequest() {
+    network::mojom::ObliviousHttpRequestPtr request =
+        network::mojom::ObliviousHttpRequest::New();
+    request->relay_url = GURL(kRelayURL);
+    request->resource_url = GURL(kResourceURL);
+    request->method = net::HttpRequestHeaders::kGetMethod;
+    request->traffic_annotation =
+        net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+    request->request_body = network::mojom::ObliviousHttpRequestBody::New(
+        /*content=*/"test data", /*content_type=*/"application/testdata");
+    return request;
+  }
+
+ private:
+  base::test::TaskEnvironment task_environment_;
+  TestOhttpNetworkContext network_context_;
+};
+
+TEST_F(TestObliviousHttpRequestHandler, TestDisconnect) {
+  network::ObliviousHttpRequestHandler handler(network_context());
+  AddResponse("");
+  {
+    TestOhttpClient client("", net::OK);
+    handler.StartRequest(CreateRequest(), client.CreatePendingRemote());
+  }
+
+  {
+    TestOhttpClient client("", net::OK);
+    handler.StartRequest(CreateRequest(), client.CreatePendingRemote());
+    client.WaitForCall();
+  }
+}
+
+TEST_F(TestObliviousHttpRequestHandler, TestInvalidArguments) {
+  network::ObliviousHttpRequestHandler handler(network_context());
+  {
+    mojo::FakeMessageDispatchContext context;
+    mojo::test::BadMessageObserver obs;
+    TestOhttpClient client(absl::nullopt, net::ERR_INVALID_URL);
+    network::mojom::ObliviousHttpRequestPtr request =
+        network::mojom::ObliviousHttpRequest::New();
+
+    handler.StartRequest(std::move(request), client.CreatePendingRemote());
+    EXPECT_EQ("Invalid OHTTP Relay URL", obs.WaitForBadMessage());
+  }
+  {
+    mojo::FakeMessageDispatchContext context;
+    mojo::test::BadMessageObserver obs;
+    TestOhttpClient client(absl::nullopt, net::ERR_INVALID_URL);
+    network::mojom::ObliviousHttpRequestPtr request = CreateRequest();
+    request->relay_url = GURL();
+
+    handler.StartRequest(std::move(request), client.CreatePendingRemote());
+    EXPECT_EQ("Invalid OHTTP Relay URL", obs.WaitForBadMessage());
+  }
+  {
+    mojo::FakeMessageDispatchContext context;
+    mojo::test::BadMessageObserver obs;
+    TestOhttpClient client(absl::nullopt, net::ERR_INVALID_URL);
+    network::mojom::ObliviousHttpRequestPtr request = CreateRequest();
+    request->resource_url = GURL();
+
+    handler.StartRequest(std::move(request), client.CreatePendingRemote());
+    EXPECT_EQ("Invalid OHTTP Resource URL", obs.WaitForBadMessage());
+  }
+  {
+    mojo::FakeMessageDispatchContext context;
+    mojo::test::BadMessageObserver obs;
+    TestOhttpClient client(absl::nullopt, net::ERR_INVALID_ARGUMENT);
+    network::mojom::ObliviousHttpRequestPtr request = CreateRequest();
+    request->traffic_annotation = net::MutableNetworkTrafficAnnotationTag();
+
+    handler.StartRequest(std::move(request), client.CreatePendingRemote());
+    EXPECT_EQ("Invalid OHTTP Traffic Annotation", obs.WaitForBadMessage());
+  }
+  {
+    mojo::FakeMessageDispatchContext context;
+    mojo::test::BadMessageObserver obs;
+    TestOhttpClient client(absl::nullopt, net::ERR_INVALID_ARGUMENT);
+    network::mojom::ObliviousHttpRequestPtr request = CreateRequest();
+    request->request_body->content = std::string(10 * 1024 + 1, ' ');
+
+    handler.StartRequest(std::move(request), client.CreatePendingRemote());
+    EXPECT_EQ("Request body too large", obs.WaitForBadMessage());
+  }
+  {
+    mojo::FakeMessageDispatchContext context;
+    mojo::test::BadMessageObserver obs;
+    TestOhttpClient client(absl::nullopt, net::ERR_INVALID_ARGUMENT);
+    network::mojom::ObliviousHttpRequestPtr request = CreateRequest();
+    request->request_body->content_type = std::string(257, ' ');
+
+    handler.StartRequest(std::move(request), client.CreatePendingRemote());
+    EXPECT_EQ("Content-Type too large", obs.WaitForBadMessage());
+  }
+}
+
+TEST_F(TestObliviousHttpRequestHandler, TestRequestFormat) {
+  network::ObliviousHttpRequestHandler handler(network_context());
+  {
+    TestOhttpClient client("response body", net::OK);
+
+    handler.StartRequest(CreateRequest(), client.CreatePendingRemote());
+    const network::ResourceRequest* pending_request;
+    ASSERT_TRUE(loader_factory()->IsPending(kRelayURL, &pending_request));
+    EXPECT_EQ(net::HttpRequestHeaders::kPostMethod, pending_request->method);
+    EXPECT_EQ(network::mojom::RedirectMode::kError,
+              pending_request->redirect_mode);
+    EXPECT_EQ(network::mojom::CredentialsMode::kOmit,
+              pending_request->credentials_mode);
+    EXPECT_TRUE(pending_request->site_for_cookies.IsNull());
+    EXPECT_FALSE(pending_request->trust_token_params);
+    EXPECT_THAT(
+        pending_request->headers.GetHeaderVector(),
+        UnorderedHeadersAre({
+            {net::HttpRequestHeaders::kContentType, "message/ohttp-req"},
+        }));
+    ASSERT_TRUE(pending_request->request_body);
+    ASSERT_EQ(1u, pending_request->request_body->elements()->size());
+
+    std::string body = std::string(pending_request->request_body->elements()
+                                       ->at(0)
+                                       .As<network::DataElementBytes>()
+                                       .AsStringPiece());
+    // TODO(behamilton): decryption
+    std::string plain_text_body = body;
+    auto maybe_request = quiche::BinaryHttpRequest::Create(body);
+    ASSERT_TRUE(maybe_request.ok()) << maybe_request.status();
+    quiche::BinaryHttpRequest request = std::move(maybe_request).value();
+    EXPECT_EQ(request.control_data().method, "GET");
+    EXPECT_EQ(request.control_data().scheme, "https");
+    EXPECT_EQ(request.control_data().authority, "");  // Stored in headers.
+    EXPECT_EQ(request.control_data().path, "/path");
+    EXPECT_THAT(request.GetHeaderFields(),
+                testing::IsSupersetOf<quiche::BinaryHttpRequest::Field>({
+                    {"host", "resource.test:37"},
+                    {"content-length", "9"},
+                    {"content-type", "application/testdata"},
+                }));
+    EXPECT_EQ(request.body(), "test data");
+    AddResponse("response body");
+    client.WaitForCall();
+  }
+}
+
+TEST_F(TestObliviousHttpRequestHandler, HandlesOuterHttpError) {
+  network::ObliviousHttpRequestHandler handler(network_context());
+  {
+    loader_factory()->AddResponse(kRelayURL, "", net::HTTP_NOT_FOUND);
+    TestOhttpClient client(absl::nullopt, net::ERR_HTTP_RESPONSE_CODE_FAILURE);
+
+    handler.StartRequest(CreateRequest(), client.CreatePendingRemote());
+    client.WaitForCall();
+  }
+}
+
+TEST_F(TestObliviousHttpRequestHandler, HandlesInnerHttpError) {
+  network::ObliviousHttpRequestHandler handler(network_context());
+  {
+    quiche::BinaryHttpResponse response(net::HTTP_NOT_FOUND);
+    loader_factory()->AddResponse(kRelayURL, response.Serialize().value(),
+                                  net::HTTP_OK);
+    TestOhttpClient client(absl::nullopt, net::ERR_HTTP_RESPONSE_CODE_FAILURE);
+
+    handler.StartRequest(CreateRequest(), client.CreatePendingRemote());
+    client.WaitForCall();
+  }
+}
+
+TEST_F(TestObliviousHttpRequestHandler, HandlesMultipleRequests) {
+  network::ObliviousHttpRequestHandler handler(network_context());
+  {
+    TestOhttpClient client_a("", net::OK);
+    network::mojom::ObliviousHttpRequestPtr request_a = CreateRequest();
+    TestOhttpClient client_b("", net::OK);
+    network::mojom::ObliviousHttpRequestPtr request_b = CreateRequest();
+    request_b->relay_url = GURL("https://another.relay.test");
+
+    handler.StartRequest(std::move(request_a), client_a.CreatePendingRemote());
+    handler.StartRequest(std::move(request_b), client_b.CreatePendingRemote());
+
+    AddResponse("", GURL("https://another.relay.test"));
+    client_b.WaitForCall();
+
+    AddResponse("");
+    client_a.WaitForCall();
+  }
+}
\ No newline at end of file
diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn
index 716b2d8..c396d13 100644
--- a/services/network/public/mojom/BUILD.gn
+++ b/services/network/public/mojom/BUILD.gn
@@ -1096,6 +1096,7 @@
     "network_quality_estimator_manager.mojom",
     "network_service.mojom",
     "network_service_test.mojom",
+    "oblivious_http_request.mojom",
     "proxy_lookup_client.mojom",
     "proxy_resolving_socket.mojom",
     "reporting_service.mojom",
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
index 454860b..d57c6f1 100644
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -32,6 +32,7 @@
 import "services/network/public/mojom/net_log.mojom";
 import "services/network/public/mojom/network_isolation_key.mojom";
 import "services/network/public/mojom/network_anonymization_key.mojom";
+import "services/network/public/mojom/oblivious_http_request.mojom";
 import "services/network/public/mojom/isolation_info.mojom";
 import "services/network/public/mojom/network_param.mojom";
 import "services/network/public/mojom/parsed_headers.mojom";
@@ -864,6 +865,11 @@
   // used on URLLoaders.
   ResetURLLoaderFactories();
 
+  // Uses Oblivious HTTP to indirectly perform the request. Specification at
+  // https://ietf-wg-ohai.github.io/oblivious-http/draft-ietf-ohai-ohttp.html
+  GetViaObliviousHttp(ObliviousHttpRequest request,
+                      pending_remote<ObliviousHttpClient> client);
+
   // Gets the CookieManager associated with this network context.
   //
   // The CookieManager must only be passed to trusted processes. Whenever
diff --git a/services/network/public/mojom/oblivious_http_request.mojom b/services/network/public/mojom/oblivious_http_request.mojom
new file mode 100644
index 0000000..705d612
--- /dev/null
+++ b/services/network/public/mojom/oblivious_http_request.mojom
@@ -0,0 +1,44 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module network.mojom;
+
+import "services/network/public/mojom/isolation_info.mojom";
+import
+ "services/network/public/mojom/mutable_network_traffic_annotation_tag.mojom";
+import "services/network/public/mojom/trust_tokens.mojom";
+import "url/mojom/url.mojom";
+
+// The body and content-type of the request. The size of the content is used as
+// the content length when constructing headers.
+struct ObliviousHttpRequestBody {
+  string content;
+  string content_type;
+};
+
+struct ObliviousHttpRequest {
+  url.mojom.Url relay_url;
+  MutableNetworkTrafficAnnotationTag traffic_annotation;
+
+  // The key config contains the public key of the `resource_url` server, which
+  // is the only reassurance we have that we are talking to the `resource_url`
+  // server, so care should be taken when getting the key config.
+  string key_config;
+
+  url.mojom.Url resource_url;
+
+  // The request method: GET, POST, etc.
+  string method;
+
+  // An optional HTTP request body.
+  ObliviousHttpRequestBody? request_body;
+};
+
+// Callback interface for Oblivious HTTP Requests.
+interface ObliviousHttpClient {
+  // Called when the OHTTP request completes. `net_error` indicates the
+  // net::Error code for the operation. `response_body` will contain the body
+  // of the response.
+  OnCompleted(string? response_body, int32 net_error);
+};
diff --git a/services/network/test/test_network_context.h b/services/network/test/test_network_context.h
index 5d143b8..fb185c1 100644
--- a/services/network/test/test_network_context.h
+++ b/services/network/test/test_network_context.h
@@ -28,6 +28,7 @@
 #include "services/network/public/mojom/network_context.mojom-forward.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 #include "services/network/public/mojom/network_service.mojom.h"
+#include "services/network/public/mojom/oblivious_http_request.mojom.h"
 #include "services/network/public/mojom/proxy_resolving_socket.mojom.h"
 #include "services/network/public/mojom/restricted_cookie_manager.mojom.h"
 #include "services/network/public/mojom/tcp_socket.mojom.h"
@@ -275,6 +276,9 @@
       mojo::PendingReceiver<mojom::MdnsResponder> responder_receiver) override {
   }
   void ResetURLLoaderFactories() override {}
+  void GetViaObliviousHttp(
+      mojom::ObliviousHttpRequestPtr request,
+      mojo::PendingRemote<mojom::ObliviousHttpClient>) override {}
   void ForceReloadProxyConfig(
       ForceReloadProxyConfigCallback callback) override {}
   void ClearBadProxiesCache(ClearBadProxiesCacheCallback callback) override {}
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json
index 6cee103..c5915d1 100644
--- a/testing/buildbot/chrome.json
+++ b/testing/buildbot/chrome.json
@@ -77,6 +77,7 @@
     "gtest_tests": [
       {
         "args": [
+          "--magic-vm-cache=magic_cros_vm_cache",
           "--strip-chrome"
         ],
         "merge": {
@@ -121,7 +122,8 @@
       },
       {
         "args": [
-          "--strip-chrome"
+          "--strip-chrome",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
@@ -169,7 +171,8 @@
     "gtest_tests": [
       {
         "args": [
-          "--ozone-platform=headless"
+          "--ozone-platform=headless",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -205,6 +208,9 @@
         "test_id_prefix": "ninja://ui/aura:aura_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -241,7 +247,8 @@
       {
         "args": [
           "--test-launcher-jobs=1",
-          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*"
+          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -277,6 +284,9 @@
         "test_id_prefix": "ninja://media/capture:capture_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -311,6 +321,9 @@
         "test_id_prefix": "ninja://cc:cc_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -352,6 +365,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "experiment_percentage": 100,
         "merge": {
           "args": [],
@@ -392,6 +408,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_variations_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -427,7 +446,8 @@
       },
       {
         "args": [
-          "--strip-chrome"
+          "--strip-chrome",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
@@ -467,6 +487,9 @@
         "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -501,6 +524,9 @@
         "test_id_prefix": "ninja://ui/display:display_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -535,6 +561,9 @@
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -569,6 +598,9 @@
         "test_id_prefix": "ninja://ipc:ipc_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -603,6 +635,9 @@
         "test_id_prefix": "ninja://ui/latency:latency_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -638,7 +673,8 @@
       },
       {
         "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -674,6 +710,9 @@
         "test_id_prefix": "ninja://media:media_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -708,6 +747,9 @@
         "test_id_prefix": "ninja://media/midi:midi_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -744,7 +786,8 @@
       {
         "args": [
           "--vpython-dir=../../vpython_dir_linux_amd64",
-          "--gtest_filter=-PythonUtils.PythonRunTime"
+          "--gtest_filter=-PythonUtils.PythonRunTime",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -794,7 +837,8 @@
       },
       {
         "args": [
-          "--stop-ui"
+          "--stop-ui",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -831,6 +875,7 @@
       },
       {
         "args": [
+          "--magic-vm-cache=magic_cros_vm_cache",
           "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter"
         ],
         "merge": {
@@ -867,6 +912,9 @@
         "test_id_prefix": "ninja://ui/ozone:ozone_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -901,6 +949,9 @@
         "test_id_prefix": "ninja://pdf:pdf_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -937,7 +988,8 @@
       {
         "args": [
           "--stop-ui",
-          "--test-launcher-jobs=1"
+          "--test-launcher-jobs=1",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -973,6 +1025,9 @@
         "test_id_prefix": "ninja://chrome/browser/metrics/perf:profile_provider_unittest/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -1007,6 +1062,9 @@
         "test_id_prefix": "ninja://sql:sql_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -1055,7 +1113,8 @@
           "--env-var",
           "LIBVA_FOOL_POSTP",
           "1",
-          "--gtest_filter=\"VaapiTest.*\""
+          "--gtest_filter=\"VaapiTest.*\"",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -1098,7 +1157,8 @@
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
           "--xvfb",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_perf_unittests",
         "merge": {
@@ -1146,7 +1206,8 @@
           "--browser=cros-chrome",
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_unittests",
         "merge": {
@@ -1592,62 +1653,7 @@
     "additional_compile_targets": [
       "chromiumos_preflight"
     ],
-    "gtest_tests": [
-      {
-        "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.base_unittests.filter"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "octopus",
-              "os": "ChromeOS",
-              "pool": "chrome.tests"
-            }
-          ],
-          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "base_unittests",
-        "test_id_prefix": "ninja://base:base_unittests/",
-        "trigger_script": {
-          "script": "//testing/trigger_scripts/chromeos_device_trigger.py"
-        }
-      },
-      {
-        "args": [
-          "--strip-chrome"
-        ],
-        "merge": {
-          "script": "//tools/perf/process_perf_results.py"
-        },
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "device_type": "octopus",
-              "os": "ChromeOS",
-              "pool": "chrome.tests"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "disk_usage_tast_test",
-        "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/",
-        "trigger_script": {
-          "script": "//testing/trigger_scripts/chromeos_device_trigger.py"
-        }
-      }
-    ]
+    "gtest_tests": []
   },
   "chromeos-reven-chrome": {
     "additional_compile_targets": [
@@ -1655,6 +1661,9 @@
     ],
     "gtest_tests": [
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_reven_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -1697,7 +1706,8 @@
       },
       {
         "args": [
-          "--strip-chrome"
+          "--strip-chrome",
+          "--magic-vm-cache=magic_cros_reven_vm_cache"
         ],
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json
index b55689f..1f25421 100644
--- a/testing/buildbot/chromium.chromiumos.json
+++ b/testing/buildbot/chromium.chromiumos.json
@@ -60,7 +60,8 @@
     "gtest_tests": [
       {
         "args": [
-          "--ozone-platform=headless"
+          "--ozone-platform=headless",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -95,6 +96,9 @@
         "test_id_prefix": "ninja://ui/aura:aura_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -130,7 +134,8 @@
       {
         "args": [
           "--test-launcher-jobs=1",
-          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*"
+          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -165,6 +170,9 @@
         "test_id_prefix": "ninja://media/capture:capture_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -199,6 +207,9 @@
         "test_id_prefix": "ninja://cc:cc_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -240,6 +251,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "experiment_percentage": 100,
         "merge": {
           "args": [],
@@ -279,6 +293,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_variations_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -313,7 +330,8 @@
       },
       {
         "args": [
-          "--strip-chrome"
+          "--strip-chrome",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
@@ -352,6 +370,9 @@
         "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -385,6 +406,9 @@
         "test_id_prefix": "ninja://ui/display:display_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -418,6 +442,9 @@
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -451,6 +478,9 @@
         "test_id_prefix": "ninja://ipc:ipc_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -484,6 +514,9 @@
         "test_id_prefix": "ninja://ui/latency:latency_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -518,7 +551,8 @@
       },
       {
         "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -553,6 +587,9 @@
         "test_id_prefix": "ninja://media:media_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -586,6 +623,9 @@
         "test_id_prefix": "ninja://media/midi:midi_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -621,7 +661,8 @@
       {
         "args": [
           "--vpython-dir=../../vpython_dir_linux_amd64",
-          "--gtest_filter=-PythonUtils.PythonRunTime"
+          "--gtest_filter=-PythonUtils.PythonRunTime",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -671,7 +712,8 @@
       },
       {
         "args": [
-          "--stop-ui"
+          "--stop-ui",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -706,6 +748,9 @@
         "test_id_prefix": "ninja://ui/ozone/gl:ozone_gl_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -739,6 +784,9 @@
         "test_id_prefix": "ninja://ui/ozone:ozone_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -772,6 +820,9 @@
         "test_id_prefix": "ninja://pdf:pdf_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -807,7 +858,8 @@
       {
         "args": [
           "--stop-ui",
-          "--test-launcher-jobs=1"
+          "--test-launcher-jobs=1",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -842,6 +894,9 @@
         "test_id_prefix": "ninja://chrome/browser/metrics/perf:profile_provider_unittest/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -875,6 +930,9 @@
         "test_id_prefix": "ninja://sql:sql_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -922,7 +980,8 @@
           "--env-var",
           "LIBVA_FOOL_POSTP",
           "1",
-          "--gtest_filter=\"VaapiTest.*\""
+          "--gtest_filter=\"VaapiTest.*\"",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -964,7 +1023,8 @@
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
           "--xvfb",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_perf_unittests",
         "merge": {
@@ -1012,7 +1072,8 @@
           "--browser=cros-chrome",
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_unittests",
         "merge": {
@@ -1066,7 +1127,8 @@
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
           "--jobs=1",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -5813,9 +5875,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -5827,8 +5889,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -5979,9 +6041,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -5993,8 +6055,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -6130,9 +6192,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -6144,8 +6206,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index e0018cf..6b90889 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -17866,7 +17866,8 @@
     "gtest_tests": [
       {
         "args": [
-          "--ozone-platform=headless"
+          "--ozone-platform=headless",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -17901,6 +17902,9 @@
         "test_id_prefix": "ninja://ui/aura:aura_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -17936,7 +17940,8 @@
       {
         "args": [
           "--test-launcher-jobs=1",
-          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*"
+          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -17971,6 +17976,9 @@
         "test_id_prefix": "ninja://media/capture:capture_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18004,6 +18012,9 @@
         "test_id_prefix": "ninja://cc:cc_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18044,6 +18055,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "experiment_percentage": 100,
         "merge": {
           "args": [],
@@ -18083,6 +18097,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_variations_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18117,7 +18134,8 @@
       },
       {
         "args": [
-          "--strip-chrome"
+          "--strip-chrome",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
@@ -18156,6 +18174,9 @@
         "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18189,6 +18210,9 @@
         "test_id_prefix": "ninja://ui/display:display_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18222,6 +18246,9 @@
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18255,6 +18282,9 @@
         "test_id_prefix": "ninja://ipc:ipc_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18288,6 +18318,9 @@
         "test_id_prefix": "ninja://ui/latency:latency_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18322,7 +18355,8 @@
       },
       {
         "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -18357,6 +18391,9 @@
         "test_id_prefix": "ninja://media:media_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18390,6 +18427,9 @@
         "test_id_prefix": "ninja://media/midi:midi_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18425,7 +18465,8 @@
       {
         "args": [
           "--vpython-dir=../../vpython_dir_linux_amd64",
-          "--gtest_filter=-PythonUtils.PythonRunTime"
+          "--gtest_filter=-PythonUtils.PythonRunTime",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -18474,7 +18515,8 @@
       },
       {
         "args": [
-          "--stop-ui"
+          "--stop-ui",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -18509,6 +18551,9 @@
         "test_id_prefix": "ninja://ui/ozone/gl:ozone_gl_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18542,6 +18587,9 @@
         "test_id_prefix": "ninja://ui/ozone:ozone_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18575,6 +18623,9 @@
         "test_id_prefix": "ninja://pdf:pdf_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18610,7 +18661,8 @@
       {
         "args": [
           "--stop-ui",
-          "--test-launcher-jobs=1"
+          "--test-launcher-jobs=1",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -18645,6 +18697,9 @@
         "test_id_prefix": "ninja://chrome/browser/metrics/perf:profile_provider_unittest/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18678,6 +18733,9 @@
         "test_id_prefix": "ninja://sql:sql_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -18725,7 +18783,8 @@
           "--env-var",
           "LIBVA_FOOL_POSTP",
           "1",
-          "--gtest_filter=\"VaapiTest.*\""
+          "--gtest_filter=\"VaapiTest.*\"",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -18767,7 +18826,8 @@
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
           "--xvfb",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_perf_unittests",
         "merge": {
@@ -18814,7 +18874,8 @@
           "--browser=cros-chrome",
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_unittests",
         "merge": {
@@ -18867,7 +18928,8 @@
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
           "--jobs=1",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -88143,9 +88205,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -88157,8 +88219,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -88279,9 +88341,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -88293,8 +88355,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
@@ -88405,9 +88467,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -88419,8 +88481,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
@@ -89760,9 +89822,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -89773,8 +89835,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -89926,9 +89988,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -89939,8 +90001,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -90077,9 +90139,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -90090,8 +90152,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -91612,9 +91674,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -91625,8 +91687,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -91778,9 +91840,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -91791,8 +91853,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -91929,9 +91991,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -91942,8 +92004,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -92741,9 +92803,9 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome"
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -92754,8 +92816,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -95374,7 +95436,6 @@
       {
         "args": [
           "--child-processes=8",
-          "--no-restart-on-new-group",
           "--log-wptreport",
           "--xvfb",
           "--flag-specific",
@@ -95402,7 +95463,7 @@
             }
           ],
           "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 15
+          "shards": 3
         },
         "test_id_prefix": "ninja://:wpt_tests_isolate_content_shell/"
       }
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index 2e95b93..f707aea 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -4399,7 +4399,8 @@
           "--use-cmd-decoder=validating",
           "--use-gpu-in-tests",
           "--stop-ui",
-          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.amd64-generic.gl_tests_validating.filter"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.amd64-generic.gl_tests_validating.filter",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -4439,7 +4440,8 @@
         "args": [
           "--use-gpu-in-tests",
           "--stop-ui",
-          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.gl_unittests.filter"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.gl_unittests.filter",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -4486,7 +4488,8 @@
           "--stable-jobs",
           "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -4538,7 +4541,8 @@
           "--stable-jobs",
           "--extra-browser-args=--log-level=0 --js-flags=--expose-gc",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -4590,7 +4594,8 @@
           "--stable-jobs",
           "--extra-browser-args=--log-level=0 --js-flags=--expose-gc",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -4645,6 +4650,7 @@
           "1af4",
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache",
           "--expected-device-id",
           "1050"
         ],
@@ -4702,6 +4708,7 @@
           "${buildername}",
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache",
           "--git-revision=${got_revision}"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4759,7 +4766,8 @@
           "--stable-jobs",
           "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --force_higher_performance_gpu --use-cmd-decoder=validating",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -4815,6 +4823,7 @@
           "${buildername}",
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache",
           "--git-revision=${got_revision}"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4873,7 +4882,8 @@
           "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
           "--dont-restore-color-profile-after-test",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -4925,7 +4935,8 @@
           "--stable-jobs",
           "--extra-browser-args=--log-level=0 --js-flags=--expose-gc",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -4977,7 +4988,8 @@
           "--stable-jobs",
           "--extra-browser-args=--log-level=0 --js-flags=--expose-gc --use-cmd-decoder=validating",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -5032,7 +5044,8 @@
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json",
           "--jobs=1",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
@@ -5088,7 +5101,8 @@
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json",
           "--jobs=1",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "experiment_percentage": 100,
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5144,7 +5158,8 @@
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
           "--jobs=1",
           "--remote=127.0.0.1",
-          "--remote-ssh-port=9222"
+          "--remote-ssh-port=9222",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "merge": {
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json
index b5635148..969be8b 100644
--- a/testing/buildbot/chromium.memory.json
+++ b/testing/buildbot/chromium.memory.json
@@ -18612,10 +18612,10 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter;../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18627,8 +18627,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -18786,10 +18786,10 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18801,8 +18801,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
@@ -18942,10 +18942,10 @@
       {
         "args": [
           "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter",
-          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome",
+          "--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome",
           "--test-launcher-print-test-stdio=always"
         ],
-        "description": "Run with ash-chrome version 109.0.5395.0",
+        "description": "Run with ash-chrome version 109.0.5397.0",
         "isolate_profile_data": true,
         "merge": {
           "args": [],
@@ -18957,8 +18957,8 @@
           "cipd_packages": [
             {
               "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip",
-              "location": "lacros_version_skew_tests_v109.0.5395.0",
-              "revision": "version:109.0.5395.0"
+              "location": "lacros_version_skew_tests_v109.0.5397.0",
+              "revision": "version:109.0.5397.0"
             }
           ],
           "dimension_sets": [
diff --git a/testing/buildbot/filters/mac.mac12-arm64-rel.browser_tests.filter b/testing/buildbot/filters/mac.mac12-arm64-rel.browser_tests.filter
index 67dcdf4..6ec3056 100644
--- a/testing/buildbot/filters/mac.mac12-arm64-rel.browser_tests.filter
+++ b/testing/buildbot/filters/mac.mac12-arm64-rel.browser_tests.filter
@@ -35,9 +35,9 @@
 -All/PromotionalTabsEnabledPolicyWhatsNewTest.RunTest/2
 -AccessCodeCastHandlerBrowserTest.ExpectGenericErrorWhenNoSync
 -AccessCodeCastHandlerBrowserTest.ExpectNetworkErrorWhenNoNetwork
--AccessCodeCastHandlerBrowserTest.ExpectProfileSynErrorWhenNoSync
 -AccessCodeCastHandlerBrowserTest.ReturnSuccessfulResponse
 -AmbientAuthenticationTestWithPolicy.GuestAndRegular
+-AmbientAuthenticationTestWithPolicy.IncognitoAndRegular
 -AmbientAuthenticationTestWithPolicy.RegularOnly
 -AttemptRestartTest.AttemptRestartWithOTRProfiles/1
 -AutomationApiTest.ForceLayout
@@ -48,7 +48,6 @@
 -BackForwardCachePageLoadMetricsObserverBrowserTest.ResponsivenessMetricsNormalizationWithSendingAllLatencies
 -BackForwardCachePageLoadMetricsObserverBrowserTest.ResumesLoggingAfterRestoringFromCacheAfterBackgrounding
 -BackgroundFetchBrowserTest.OfflineItemCollection_VerifyIconReceived
--BatterySaverBubbleViewTest.DisableModeForSession
 -BrowserShutdownBrowserTest.TwoBrowsersClosingShutdownHistograms
 -ChromeURLDataManagerWebUITrustedTypesTest.NoTrustedTypesViolation/chrome___net_internals
 -CrExtensionsA11yTestWithMultipleExensions.WithExtensions_marquee
@@ -80,6 +79,12 @@
 -CrExtensionsA11yTestWithMultipleExensions.WithExtensions_aria_required_children
 -CrExtensionsA11yTestWithMultipleExensions.WithExtensions_aria_hidden_body
 -CrExtensionsA11yTestWithMultipleExensions.WithExtensions_listitem
+-CrExtensionsManagerUnitTest.UpdateItemData
+-CrExtensionsManagerUnitTestWithActivityLogFlag.UpdateFromActivityLog
+-CrExtensionsSidebarTest.LayoutAndClickHandlers
+-CrExtensionsSidebarTest.SetSelected
+-CrSettingsPrivacyGuidePageTest.CompletionFragmentPrivacyGuide2DisabledTests
+-CrSettingsPrivacyGuidePageTest.CompletionFragmentPrivacySandboxRestricted
 -CrSettingsReviewNotificationPermissionsTest.All
 -ComponentCloudPolicyTest.InstallNewExtension
 -CookieControlsBubbleViewTest.InvokeUi_CookiesBlocked
@@ -110,11 +115,14 @@
 -FormfillPageLoadMetricsObserverBrowserTest.UserDataFieldFilledPreviouslyUseCounter
 -FormfillPageLoadMetricsObserverBrowserTest.UserDataFieldFilledUseCounter
 -GlobalErrorServiceBrowserTest.BubbleViewDismissedOnRemove
+-HeadlessModeBrowserTest.ToggleFullscreenWindowVisibility
 -HeadlessModeBrowserTestWithStartWindowMode/HeadlessModeBrowserTestWithStartWindowMode.BrowserDesktopWindowVisibility/0
 -HeadlessModeBrowserTestWithStartWindowMode/HeadlessModeBrowserTestWithStartWindowMode.BrowserDesktopWindowVisibility/1
 -HeadlessModeBrowserTestWithStartWindowMode/HeadlessModeBrowserTestWithStartWindowMode.BrowserDesktopWindowVisibility/2
+-HistoryRoutingWithQueryParamTest.All
 -HttpsOnlyModeBrowserTest.BadHttpsFollowedByGoodHttps
 -IdleServiceTest.Basic
+-IdleServiceTest.MultiProfileWithDifferentThresholds
 -InlineLoginHelperBrowserTest.UntrustedSigninDialogCancel
 -InspectUIFencedFrameTest.FencedFrameInFrontEnd
 -InspectUITest.LaunchUIDevtools
@@ -145,9 +153,14 @@
 -PrintBrowserTest.LazyLoadedIframeFetchedCrossOrigin
 -PrintPreviewDialogControllerBrowserTest.ReloadInitiatorTab
 -PrintPreviewDialogControllerBrowserTest.TaskManagementTest
+-PrintPreviewKeyEventTest.CmdPeriodClosesDialogOnMacOnly
+-PrintPreviewKeyEventTest.EnterOnInputTriggersPrint
+-PrintPreviewKeyEventTest.EscapeClosesDialogOnMacOnly
 -PrintPreviewPreviewGenerationTest.ZeroDefaultMarginsClearsHeaderFooter
 -ProcessesApiTest.CannotTerminateBrowserProcess
 -ProfileBrowserTest.CreateOldProfileAsynchronous
+-ProfileBrowserTest.OneHour
+-ProfileBrowserTest.TestProfileTypes
 -ProfileBrowserTestWithoutDestroyProfile.DISABLE_DestroyRegularProfileBeforeOTRs
 -ProfileMenuClickTest_MultipleProfiles.ProfileMenuClickTest_MultipleProfiles/0
 -ProfileMenuClickTest_MultipleProfiles.ProfileMenuClickTest_MultipleProfiles/1
@@ -214,7 +227,9 @@
 -SupportToolTest.All
 -TabRestoreTest.RestoreTabFromClosedWindowByID
 -TabStatsTrackerBrowserTest.TabSwitch
+-ToolbarAccountIconContainerViewBrowserTest.ShouldUpdateHighlightInGuestWindow
 -TranslateModelServiceBrowserTest.LanguageDetectionWithBackgroundTab
+-UsbChooserBrowserTest.InvokeUi_NoDevicesBubble
 -UsbInternalsTest.WebUIValueRenderTest
 -WebAppBrowserTest.AppInfoOpensPageInfo
 -WebAppBrowserTest.WebAppCreateAndDeleteShortcut
@@ -225,6 +240,7 @@
 -WebContentsInteractionTestUtilTest.EvaluateString
 -WebViewTests/WebViewTest.SpatialNavigationJavascriptAPI/SiteIsolationForGuestsDisabled
 -WelcomeAppChooserTest.All
+-WelcomeWelcomeAppTest.All
 -WorkerDevToolsTest.PauseInSharedWorkerInitialization
 -VariationsSafeModeEndToEndBrowserTest.ExtendedSafeModeEndToEnd
 -_/RegionCaptureMultiCaptureBrowserTest.CannotSelfCaptureAgainIfCropped/1
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json
index 7cb998d..23810f6 100644
--- a/testing/buildbot/internal.chromeos.fyi.json
+++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -8,7 +8,8 @@
     "gtest_tests": [
       {
         "args": [
-          "--ozone-platform=headless"
+          "--ozone-platform=headless",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -44,6 +45,9 @@
         "test_id_prefix": "ninja://ui/aura:aura_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -80,7 +84,8 @@
       {
         "args": [
           "--test-launcher-jobs=1",
-          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*"
+          "--gtest_filter=-*UsingRealWebcam_CaptureMjpeg*",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -116,6 +121,9 @@
         "test_id_prefix": "ninja://media/capture:capture_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -150,6 +158,9 @@
         "test_id_prefix": "ninja://cc:cc_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -191,6 +202,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_all_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "experiment_percentage": 100,
         "merge": {
           "args": [],
@@ -231,6 +245,9 @@
         "test_id_prefix": "ninja://chromeos:chrome_variations_tast_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -266,7 +283,8 @@
       },
       {
         "args": [
-          "--strip-chrome"
+          "--strip-chrome",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "script": "//tools/perf/process_perf_results.py"
@@ -306,6 +324,9 @@
         "test_id_prefix": "ninja://chromeos:disk_usage_tast_test/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -340,6 +361,9 @@
         "test_id_prefix": "ninja://ui/display:display_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -374,6 +398,9 @@
         "test_id_prefix": "ninja://google_apis:google_apis_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -408,6 +435,9 @@
         "test_id_prefix": "ninja://ipc:ipc_tests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -442,6 +472,9 @@
         "test_id_prefix": "ninja://ui/latency:latency_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -477,7 +510,8 @@
       },
       {
         "args": [
-          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter"
+          "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.media_unittests.filter",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -513,6 +547,9 @@
         "test_id_prefix": "ninja://media:media_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -547,6 +584,9 @@
         "test_id_prefix": "ninja://media/midi:midi_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -583,7 +623,8 @@
       {
         "args": [
           "--vpython-dir=../../vpython_dir_linux_amd64",
-          "--gtest_filter=-PythonUtils.PythonRunTime"
+          "--gtest_filter=-PythonUtils.PythonRunTime",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -633,7 +674,8 @@
       },
       {
         "args": [
-          "--stop-ui"
+          "--stop-ui",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -670,6 +712,7 @@
       },
       {
         "args": [
+          "--magic-vm-cache=magic_cros_vm_cache",
           "--test-launcher-filter-file=../../testing/buildbot/filters/chromeos.ozone_unittests.filter"
         ],
         "merge": {
@@ -706,6 +749,9 @@
         "test_id_prefix": "ninja://ui/ozone:ozone_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -740,6 +786,9 @@
         "test_id_prefix": "ninja://pdf:pdf_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -776,7 +825,8 @@
       {
         "args": [
           "--stop-ui",
-          "--test-launcher-jobs=1"
+          "--test-launcher-jobs=1",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -812,6 +862,9 @@
         "test_id_prefix": "ninja://chrome/browser/metrics/perf:profile_provider_unittest/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -846,6 +899,9 @@
         "test_id_prefix": "ninja://sql:sql_unittests/"
       },
       {
+        "args": [
+          "--magic-vm-cache=magic_cros_vm_cache"
+        ],
         "merge": {
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
@@ -894,7 +950,8 @@
           "--env-var",
           "LIBVA_FOOL_POSTP",
           "1",
-          "--gtest_filter=\"VaapiTest.*\""
+          "--gtest_filter=\"VaapiTest.*\"",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "merge": {
           "args": [],
@@ -937,7 +994,8 @@
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
           "--xvfb",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_perf_unittests",
         "merge": {
@@ -985,7 +1043,8 @@
           "--browser=cros-chrome",
           "--remote=127.0.0.1",
           "--remote-ssh-port=9222",
-          "--typ-max-failures=3"
+          "--typ-max-failures=3",
+          "--magic-vm-cache=magic_cros_vm_cache"
         ],
         "isolate_name": "telemetry_unittests",
         "merge": {
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl
index 15d7847..a5491417 100644
--- a/testing/buildbot/mixins.pyl
+++ b/testing/buildbot/mixins.pyl
@@ -302,6 +302,11 @@
         },
       ],
     },
+    '$mixin_append': {
+      'args': [
+        '--magic-vm-cache=magic_cros_vm_cache',
+      ],
+    },
   },
   'chromeos-betty': {
     'swarming': {
@@ -330,6 +335,11 @@
         },
       ],
     },
+    '$mixin_append': {
+      'args': [
+        '--magic-vm-cache=magic_cros_vm_cache',
+      ],
+    },
   },
   'chromeos-jacuzzi': {
     'swarming': {
@@ -388,6 +398,11 @@
         },
       ],
     },
+    '$mixin_append': {
+      'args': [
+        '--magic-vm-cache=magic_cros_reven_vm_cache',
+      ],
+    },
   },
   'chromeos-zork': {
     'swarming': {
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl
index 1337057..35d504e5 100644
--- a/testing/buildbot/test_suite_exceptions.pyl
+++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -161,6 +161,10 @@
         ],
       },
     },
+    'remove_from': [
+      # TODO(crbug.com/1379748): Add the test back after it's fixed.
+      'chromeos-octopus-chrome',
+    ],
   },
   'bf_cache_content_browsertests': {
     'modifications': {
@@ -1946,9 +1950,11 @@
     },
   },
   'disk_usage_tast_test': {
-    # TODO(crbug.com/1077659): Add the test back after it's fixed.
     'remove_from': [
+      # TODO(crbug.com/1077659): Add the test back after it's fixed.
       'chromeos-kevin-rel',
+      # TODO(crbug.com/1379748): Add the test back after it's fixed.
+      'chromeos-octopus-chrome',
     ],
   },
   'exo_unittests': {
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index d698efeb..6c0a1435 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -5410,7 +5410,6 @@
       'wpt_tests_suite_highdpi': {
         'args': [
           '--child-processes=8',
-          '--no-restart-on-new-group',
           '--log-wptreport',
           '--xvfb',
           '--flag-specific',
@@ -5425,7 +5424,7 @@
         'isolate_name': 'wpt_tests_isolate_content_shell',
         'results_handler': 'layout tests',
         'swarming': {
-          'shards': 15,
+          'shards': 3,
         },
         'experiment_percentage': 100,
       },
@@ -7268,27 +7267,31 @@
       'gpu_common_and_optional_telemetry_tests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
           'MAC_RETINA_NVIDIA_GPU_STABLE',
         ],
       },
       'gpu_mediapipe_passthrough_telemetry_tests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
           'MAC_RETINA_NVIDIA_GPU_STABLE',
         ],
       },
       'gpu_passthrough_telemetry_tests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
         ],
       },
       'gpu_webcodecs_telemetry_test': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
           'MAC_RETINA_NVIDIA_GPU_STABLE',
         ],
       },
@@ -7302,19 +7305,22 @@
       'gpu_webgl_conformance_gl_passthrough_telemetry_tests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
         ],
       },
       'gpu_webgl_conformance_metal_passthrough_telemetry_tests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
         ],
       },
       'gpu_webgl_conformance_swangle_passthrough_representative_telemetry_tests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
         ],
       },
     },
@@ -7323,21 +7329,24 @@
       'gpu_fyi_and_optional_non_linux_gtests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
           'MAC_RETINA_NVIDIA_GPU_STABLE',
         ],
       },
       'gpu_fyi_mac_specific_gtests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
           'MAC_RETINA_NVIDIA_GPU_STABLE',
         ],
       },
       'gpu_gles2_conform_gtests': {
         'variants': [
           'MAC_MINI_INTEL_GPU_STABLE',
-          'MAC_RETINA_AMD_GPU_STABLE',
+          # Not enough capacity on Mac AMD https://crbug.com/1380184.
+          # 'MAC_RETINA_AMD_GPU_STABLE',
           'MAC_RETINA_NVIDIA_GPU_STABLE',
         ],
       },
diff --git a/testing/buildbot/tryserver.chromium.mac.json b/testing/buildbot/tryserver.chromium.mac.json
index 828bdcbe..ab9f61e 100644
--- a/testing/buildbot/tryserver.chromium.mac.json
+++ b/testing/buildbot/tryserver.chromium.mac.json
@@ -11,33 +11,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "gles2_conform_test 1002:6821",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gles2_conform_test",
-        "test_id_prefix": "ninja://gpu/gles2_conform_support:gles2_conform_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
         "name": "gles2_conform_test 10de:0fe9",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -88,31 +61,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "gpu_unittests 1002:6821",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "gpu_unittests",
-        "test_id_prefix": "ninja://gpu:gpu_unittests/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
         "name": "gpu_unittests 10de:0fe9",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -164,34 +112,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_gtest_merge.py"
         },
-        "name": "services_unittests 1002:6821",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test": "services_unittests",
-        "test_id_prefix": "ninja://services:services_unittests/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "--gtest_filter=*Detection*",
-          "--use-gpu-in-tests"
-        ],
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
         "name": "services_unittests 10de:0fe9",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -254,45 +174,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "context_lost_passthrough_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "context_lost",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "context_lost_passthrough_tests 8086:3e9b",
         "resultdb": {
           "enable": true,
@@ -330,45 +211,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "gpu_process_launch_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "gpu_process",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--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 8086:3e9b",
         "resultdb": {
           "enable": true,
@@ -406,45 +248,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "hardware_accelerated_feature_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "hardware_accelerated_feature",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--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 8086:3e9b",
         "resultdb": {
           "enable": true,
@@ -477,49 +280,6 @@
           "--stable-jobs",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
           "--expected-vendor-id",
-          "1002",
-          "--expected-device-id",
-          "6821"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "info_collection_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "info_collection",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_high_performance_gpu",
-          "--expected-vendor-id",
           "10de",
           "--expected-device-id",
           "0fe9"
@@ -613,54 +373,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "maps_pixel_passthrough_test 1002:6821",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "maps",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test",
-          "--test-machine-name",
-          "${buildername}",
-          "--git-revision=${got_revision}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "maps_pixel_passthrough_test 8086:3e9b",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -703,45 +415,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "mediapipe_passthrough_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "mediapipe",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_higher_performance_gpu --use-cmd-decoder=passthrough --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "mediapipe_passthrough_tests 10de:0fe9",
         "resultdb": {
           "enable": true,
@@ -822,54 +495,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "pixel_skia_gold_passthrough_test 1002:6821",
-        "precommit_args": [
-          "--gerrit-issue=${patch_issue}",
-          "--gerrit-patchset=${patch_set}",
-          "--buildbucket-id=${buildbucket_build_id}"
-        ],
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "pixel",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test",
-          "--test-machine-name",
-          "${buildername}",
-          "--git-revision=${got_revision}"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "pixel_skia_gold_passthrough_test 8086:3e9b",
         "precommit_args": [
           "--gerrit-issue=${patch_issue}",
@@ -913,46 +538,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "screenshot_sync_passthrough_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "screenshot_sync",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=passthrough --use-gl=angle",
-          "--dont-restore-color-profile-after-test"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "screenshot_sync_passthrough_tests 8086:3e9b",
         "resultdb": {
           "enable": true,
@@ -990,45 +575,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "trace_test 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "trace_test",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--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 10de:0fe9",
         "resultdb": {
           "enable": true,
@@ -1105,45 +651,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webcodecs_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "webcodecs",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "webcodecs_tests 10de:0fe9",
         "resultdb": {
           "enable": true,
@@ -1254,48 +761,6 @@
           "--passthrough",
           "-v",
           "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu --disable-background-media-suspend --disable-renderer-backgrounding --disable-background-timer-throttling",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
-        "name": "webgl_conformance_gl_passthrough_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 2
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough --force_high_performance_gpu",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
           "--jobs=4"
@@ -1345,48 +810,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_metal_passthrough_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
-          "shards": 3
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=metal --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl_conformance_tests_output.json",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "webgl_conformance_metal_passthrough_tests 8086:3e9b",
         "resultdb": {
           "enable": true,
@@ -1427,47 +850,6 @@
           "args": [],
           "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
         },
-        "name": "webgl_conformance_swangle_passthrough_tests 1002:6821",
-        "resultdb": {
-          "enable": true,
-          "has_native_resultdb_integration": true
-        },
-        "should_retry_with_patch": false,
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "cpu": "x86-64",
-              "display_attached": "1",
-              "gpu": "1002:6821",
-              "hidpi": "1",
-              "os": "Mac-12.1",
-              "pool": "chromium.tests.gpu"
-            }
-          ],
-          "idempotent": false,
-          "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com"
-        },
-        "test_id_prefix": "ninja://chrome/test:telemetry_gpu_integration_test/",
-        "variant_id": "1002:6821"
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
-          "--stable-jobs",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=swiftshader --use-cmd-decoder=passthrough --force_high_performance_gpu",
-          "--test-filter=conformance/rendering/gl-drawelements.html",
-          "--jobs=4"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_isolated_script_merge.py"
-        },
         "name": "webgl_conformance_swangle_passthrough_tests 8086:3e9b",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 29b36b3..7d4004d8 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -22,16 +22,16 @@
   },
   'LACROS_VERSION_SKEW_CANARY': {
     'args': [
-      '--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5395.0/test_ash_chrome',
+      '--ash-chrome-path-override=../../lacros_version_skew_tests_v109.0.5397.0/test_ash_chrome',
     ],
-    'description': 'Run with ash-chrome version 109.0.5395.0',
+    'description': 'Run with ash-chrome version 109.0.5397.0',
     'identifier': 'Lacros version skew testing ash canary',
     'swarming': {
       'cipd_packages': [
         {
           'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip',
-          'location': 'lacros_version_skew_tests_v109.0.5395.0',
-          'revision': 'version:109.0.5395.0',
+          'location': 'lacros_version_skew_tests_v109.0.5397.0',
+          'revision': 'version:109.0.5397.0',
         },
       ],
     },
@@ -99,12 +99,13 @@
       'mac_mini_intel_gpu_stable',
     ],
   },
-  'MAC_RETINA_AMD_GPU_STABLE': {
-    'identifier': '1002:6821',
-    'mixins': [
-      'mac_retina_amd_gpu_stable',
-    ],
-  },
+  # Not enough capacity on Mac AMD https://crbug.com/1380184.
+  # 'MAC_RETINA_AMD_GPU_STABLE': {
+  #   'identifier': '1002:6821',
+  #   'mixins': [
+  #     'mac_retina_amd_gpu_stable',
+  #   ],
+  # },
   'MAC_RETINA_NVIDIA_GPU_STABLE': {
     'identifier': '10de:0fe9',
     'mixins': [
@@ -887,4 +888,4 @@
       'win10_nvidia_gtx_1660_stable',
     ],
   },
-}
\ No newline at end of file
+}
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index fdcd07a..b15e5a6 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1342,15 +1342,12 @@
             ]
         }
     ],
-    "AutofillRetrieveOverallPredictionsFromCache": [
+    "AutofillRetrieveOverallPredictionsFromCacheV2": [
         {
             "platforms": [
-                "android_webview",
-                "android_weblayer",
                 "android",
                 "chromeos",
                 "chromeos_lacros",
-                "fuchsia",
                 "ios",
                 "linux",
                 "mac",
@@ -1358,8 +1355,9 @@
             ],
             "experiments": [
                 {
-                    "name": "Enabled",
+                    "name": "EnabledWithCleanup",
                     "enable_features": [
+                        "AutofillDontPreserveAutofillState",
                         "AutofillRetrieveOverallPredictionsFromCache"
                     ]
                 }
@@ -2322,21 +2320,6 @@
             ]
         }
     ],
-    "CertVerifierBuiltin": [
-        {
-            "platforms": [
-                "windows"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "ChromeRootStoreUsed"
-                    ]
-                }
-            ]
-        }
-    ],
     "ChangeExtensionEventPageSuspendDelay": [
         {
             "platforms": [
@@ -4451,6 +4434,25 @@
             ]
         }
     ],
+    "EnableWatchdogReportOnlyModeOnGpuInit": [
+        {
+            "platforms": [
+                "chromeos",
+                "chromeos_lacros",
+                "linux",
+                "mac",
+                "windows"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "EnableWatchdogReportOnlyModeOnGpuInit"
+                    ]
+                }
+            ]
+        }
+    ],
     "ExploreSitesDense": [
         {
             "platforms": [
@@ -5503,21 +5505,6 @@
             ]
         }
     ],
-    "IOSEnableUnrealizedWebStates": [
-        {
-            "platforms": [
-                "ios"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "enable_features": [
-                        "EnableUnrealizedWebStates"
-                    ]
-                }
-            ]
-        }
-    ],
     "IOSExpKitCalendar": [
         {
             "platforms": [
@@ -7033,10 +7020,11 @@
             ],
             "experiments": [
                 {
-                    "name": "NoBackground-ForYou2",
+                    "name": "NoSetDefault-ForYou3",
                     "params": {
-                        "new-user-modules": "nux-google-apps,nux-set-as-default,signin-view",
-                        "onboarding-group": "NoBackgroundSynthetic-ForYou2"
+                        "new-user-modules": "nux-google-apps,nux-ntp-background,signin-view",
+                        "onboarding-group": "NoSetDefaultSynthetic-ForYou3",
+                        "returning-user-modules": "nux-invalid-module"
                     },
                     "enable_features": [
                         "NuxOnboarding"
@@ -8003,24 +7991,6 @@
             ]
         }
     ],
-    "PaintPreviewShowOnStartup": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled_NoSrp_20220719",
-                    "params": {
-                        "allow_srp": "false"
-                    },
-                    "enable_features": [
-                        "PaintPreviewShowOnStartup"
-                    ]
-                }
-            ]
-        }
-    ],
     "ParkableImages": [
         {
             "platforms": [
diff --git a/third_party/abseil-cpp/CMake/AbseilDll.cmake b/third_party/abseil-cpp/CMake/AbseilDll.cmake
index 8a48599..a4560df 100644
--- a/third_party/abseil-cpp/CMake/AbseilDll.cmake
+++ b/third_party/abseil-cpp/CMake/AbseilDll.cmake
@@ -241,6 +241,7 @@
   "strings/internal/stl_type_traits.h"
   "strings/internal/string_constant.h"
   "strings/internal/stringify_sink.h"
+  "strings/internal/stringify_sink.cc"
   "strings/match.cc"
   "strings/match.h"
   "strings/numbers.cc"
@@ -473,6 +474,35 @@
   "variant"
 )
 
+function(_absl_target_compile_features_if_available TARGET TYPE FEATURE)
+  if(FEATURE IN_LIST CMAKE_CXX_COMPILE_FEATURES)
+    target_compile_features(${TARGET} ${TYPE} ${FEATURE})
+  else()
+    message(WARNING "Feature ${FEATURE} is unknown for the CXX compiler")
+  endif()
+endfunction()
+
+include(CheckCXXSourceCompiles)
+
+check_cxx_source_compiles(
+  [==[
+#ifdef _MSC_VER
+#  if _MSVC_LANG < 201700L
+#    error "The compiler defaults or is configured for C++ < 17"
+#  endif
+#elif __cplusplus < 201700L
+#  error "The compiler defaults or is configured for C++ < 17"
+#endif
+int main() { return 0; }
+]==]
+  ABSL_INTERNAL_AT_LEAST_CXX17)
+
+if(ABSL_INTERNAL_AT_LEAST_CXX17)
+  set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_17)
+else()
+  set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_14)
+endif()
+
 function(absl_internal_dll_contains)
   cmake_parse_arguments(ABSL_INTERNAL_DLL
     ""
@@ -552,6 +582,25 @@
       ${ABSL_CC_LIB_DEFINES}
       ABSL_CONSUME_DLL
   )
+
+  if(ABSL_PROPAGATE_CXX_STD)
+    # Abseil libraries require C++14 as the current minimum standard. When
+    # compiled with C++17 (either because it is the compiler's default or
+    # explicitly requested), then Abseil requires C++17.
+    _absl_target_compile_features_if_available(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE})
+  else()
+    # Note: This is legacy (before CMake 3.8) behavior. Setting the
+    # target-level CXX_STANDARD property to ABSL_CXX_STANDARD (which is
+    # initialized by CMAKE_CXX_STANDARD) should have no real effect, since
+    # that is the default value anyway.
+    #
+    # CXX_STANDARD_REQUIRED does guard against the top-level CMake project
+    # not having enabled CMAKE_CXX_STANDARD_REQUIRED (which prevents
+    # "decaying" to an older standard if the requested one isn't available).
+    set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${ABSL_CXX_STANDARD})
+    set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
+  endif()
+
   install(TARGETS abseil_dll EXPORT ${PROJECT_NAME}Targets
         RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
         LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
diff --git a/third_party/abseil-cpp/CMake/AbseilHelpers.cmake b/third_party/abseil-cpp/CMake/AbseilHelpers.cmake
index 6d402872..8e08d3f 100644
--- a/third_party/abseil-cpp/CMake/AbseilHelpers.cmake
+++ b/third_party/abseil-cpp/CMake/AbseilHelpers.cmake
@@ -32,35 +32,6 @@
   set(ABSL_INTERNAL_INCLUDE_WARNING_GUARD "")
 endif()
 
-function(_absl_target_compile_features_if_available TARGET TYPE FEATURE)
-  if(FEATURE IN_LIST CMAKE_CXX_COMPILE_FEATURES)
-    target_compile_features(${TARGET} ${TYPE} ${FEATURE})
-  else()
-    message(WARNING "Feature ${FEATURE} is unknown for the CXX compiler")
-  endif()
-endfunction()
-
-include(CheckCXXSourceCompiles)
-
-check_cxx_source_compiles(
-  [==[
-#ifdef _MSC_VER
-#  if _MSVC_LANG < 201700L
-#    error "The compiler defaults or is configured for C++ < 17"
-#  endif
-#elif __cplusplus < 201700L
-#  error "The compiler defaults or is configured for C++ < 17"
-#endif
-int main() { return 0; }
-]==]
-  ABSL_INTERNAL_AT_LEAST_CXX17)
-
-if(ABSL_INTERNAL_AT_LEAST_CXX17)
-  set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_17)
-else()
-  set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_14)
-endif()
-
 # absl_cc_library()
 #
 # CMake function to imitate Bazel's cc_library rule.
@@ -297,9 +268,9 @@
     endif()
 
     if(ABSL_PROPAGATE_CXX_STD)
-      # Abseil libraries require C++14 as the current minimum standard.
-      # Top-level application CMake projects should ensure a consistent C++
-      # standard for all compiled sources by setting CMAKE_CXX_STANDARD.
+      # Abseil libraries require C++14 as the current minimum standard. When
+      # compiled with C++17 (either because it is the compiler's default or
+      # explicitly requested), then Abseil requires C++17.
       _absl_target_compile_features_if_available(${_NAME} PUBLIC ${ABSL_INTERNAL_CXX_STD_FEATURE})
     else()
       # Note: This is legacy (before CMake 3.8) behavior. Setting the
diff --git a/third_party/abseil-cpp/README.chromium b/third_party/abseil-cpp/README.chromium
index 08a9b40..4f5341b 100644
--- a/third_party/abseil-cpp/README.chromium
+++ b/third_party/abseil-cpp/README.chromium
@@ -4,7 +4,7 @@
 License: Apache 2.0
 License File: LICENSE
 Version: 0
-Revision: 2fc358dab079c220feb81f75b5a366f8d1464cd4
+Revision: 0064d9db90d32d35e9f9d70e2df4ddf8d0ab1257
 Security Critical: yes
 
 Description:
diff --git a/third_party/abseil-cpp/absl/base/policy_checks.h b/third_party/abseil-cpp/absl/base/policy_checks.h
index d13073c..2626fb6 100644
--- a/third_party/abseil-cpp/absl/base/policy_checks.h
+++ b/third_party/abseil-cpp/absl/base/policy_checks.h
@@ -44,10 +44,10 @@
 // Toolchain Check
 // -----------------------------------------------------------------------------
 
-// We support MSVC++ 14.0 update 2 and later.
+// We support Visual Studio 2017 (MSVC++ 15.0) and later.
 // This minimum will go up.
-#if defined(_MSC_FULL_VER) && _MSC_FULL_VER < 190023918 && !defined(__clang__)
-#error "This package requires Visual Studio 2015 Update 2 or higher."
+#if defined(_MSC_VER) && _MSC_VER < 1910 && !defined(__clang__)
+#error "This package requires Visual Studio 2017 (MSVC++ 15.0) or higher."
 #endif
 
 // We support gcc 5 and later.
diff --git a/third_party/abseil-cpp/absl/container/btree_map.h b/third_party/abseil-cpp/absl/container/btree_map.h
index 479db8b..819a925f 100644
--- a/third_party/abseil-cpp/absl/container/btree_map.h
+++ b/third_party/abseil-cpp/absl/container/btree_map.h
@@ -44,8 +44,8 @@
 // an issue if insertion and deletion operations are interleaved with the use of
 // more than one iterator, pointer, or reference simultaneously. For this
 // reason, `insert()` and `erase()` return a valid iterator at the current
-// position. Another important difference is that key-types must be
-// copy-constructible.
+// position (and `extract()` cannot be used in this way). Another important
+// difference is that key-types must be copy-constructible.
 //
 // Another API difference is that btree iterators can be subtracted, and this
 // is faster than using std::distance.
@@ -325,7 +325,8 @@
   // btree_map::extract()
   //
   // Extracts the indicated element, erasing it in the process, and returns it
-  // as a C++17-compatible node handle. Overloads are listed below.
+  // as a C++17-compatible node handle. Any references, pointers, or iterators
+  // are invalidated. Overloads are listed below.
   //
   // node_type extract(const_iterator position):
   //
diff --git a/third_party/abseil-cpp/absl/container/btree_set.h b/third_party/abseil-cpp/absl/container/btree_set.h
index bbff65d1..d93bdbf6 100644
--- a/third_party/abseil-cpp/absl/container/btree_set.h
+++ b/third_party/abseil-cpp/absl/container/btree_set.h
@@ -44,7 +44,7 @@
 // an issue if insertion and deletion operations are interleaved with the use of
 // more than one iterator, pointer, or reference simultaneously. For this
 // reason, `insert()` and `erase()` return a valid iterator at the current
-// position.
+// position (and `extract()` cannot be used in this way).
 //
 // Another API difference is that btree iterators can be subtracted, and this
 // is faster than using std::distance.
@@ -272,7 +272,8 @@
   // btree_set::extract()
   //
   // Extracts the indicated element, erasing it in the process, and returns it
-  // as a C++17-compatible node handle. Overloads are listed below.
+  // as a C++17-compatible node handle. Any references, pointers, or iterators
+  // are invalidated. Overloads are listed below.
   //
   // node_type extract(const_iterator position):
   //
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
index 93de2221..676cebd7 100644
--- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
+++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
@@ -797,15 +797,22 @@
   return 0;
 }
 
-#define ABSL_INTERNAL_ASSERT_IS_FULL(ctrl, msg) \
-  ABSL_HARDENING_ASSERT((ctrl != nullptr && IsFull(*ctrl)) && msg)
+#define ABSL_INTERNAL_ASSERT_IS_FULL(ctrl, operation)                         \
+  do {                                                                        \
+    ABSL_HARDENING_ASSERT(                                                    \
+        (ctrl != nullptr) && operation                                        \
+        " called on invalid iterator. The iterator might be an end() "        \
+        "iterator or may have been default constructed.");                    \
+    ABSL_HARDENING_ASSERT(                                                    \
+        (IsFull(*ctrl)) && operation                                          \
+        " called on invalid iterator. The element might have been erased or " \
+        "the table might have rehashed.");                                    \
+  } while (0)
 
 inline void AssertIsValid(ctrl_t* ctrl) {
-  ABSL_HARDENING_ASSERT(
-      (ctrl == nullptr || IsFull(*ctrl)) &&
-      "Invalid operation on iterator. The element might have "
-      "been erased, the table might have rehashed, or this may "
-      "be an end() iterator.");
+  ABSL_HARDENING_ASSERT((ctrl == nullptr || IsFull(*ctrl)) &&
+                        "Invalid operation on iterator. The element might have "
+                        "been erased or the table might have rehashed.");
 }
 
 struct FindInfo {
@@ -1034,22 +1041,19 @@
 
     // PRECONDITION: not an end() iterator.
     reference operator*() const {
-      ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_,
-                                   "operator*() called on invalid iterator.");
+      ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_, "operator*()");
       return PolicyTraits::element(slot_);
     }
 
     // PRECONDITION: not an end() iterator.
     pointer operator->() const {
-      ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_,
-                                   "operator-> called on invalid iterator.");
+      ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_, "operator->");
       return &operator*();
     }
 
     // PRECONDITION: not an end() iterator.
     iterator& operator++() {
-      ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_,
-                                   "operator++ called on invalid iterator.");
+      ABSL_INTERNAL_ASSERT_IS_FULL(ctrl_, "operator++");
       ++ctrl_;
       ++slot_;
       skip_empty_or_deleted();
@@ -1081,7 +1085,7 @@
     // Fixes up `ctrl_` to point to a full by advancing it and `slot_` until
     // they reach one.
     //
-    // If a sentinel is reached, we null both of them out instead.
+    // If a sentinel is reached, we null `ctrl_` out instead.
     void skip_empty_or_deleted() {
       while (IsEmptyOrDeleted(*ctrl_)) {
         uint32_t shift = Group{ctrl_}.CountLeadingEmptyOrDeleted();
@@ -1601,8 +1605,7 @@
   // This overload is necessary because otherwise erase<K>(const K&) would be
   // a better match if non-const iterator is passed as an argument.
   void erase(iterator it) {
-    ABSL_INTERNAL_ASSERT_IS_FULL(it.ctrl_,
-                                 "erase() called on invalid iterator.");
+    ABSL_INTERNAL_ASSERT_IS_FULL(it.ctrl_, "erase()");
     PolicyTraits::destroy(&alloc_ref(), it.slot_);
     erase_meta_only(it);
   }
@@ -1636,8 +1639,7 @@
   }
 
   node_type extract(const_iterator position) {
-    ABSL_INTERNAL_ASSERT_IS_FULL(position.inner_.ctrl_,
-                                 "extract() called on invalid iterator.");
+    ABSL_INTERNAL_ASSERT_IS_FULL(position.inner_.ctrl_, "extract()");
     auto node =
         CommonAccess::Transfer<node_type>(alloc_ref(), position.inner_.slot_);
     erase_meta_only(position);
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
index eec9da4..6478d3f 100644
--- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
+++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
@@ -2036,20 +2036,59 @@
   EXPECT_NE(old_ptr, addr(0));
 }
 
-// Confirm that we assert if we try to erase() end().
-TEST(TableDeathTest, EraseOfEndAsserts) {
+bool IsAssertEnabled() {
   // Use an assert with side-effects to figure out if they are actually enabled.
   bool assert_enabled = false;
   assert([&]() {  // NOLINT
     assert_enabled = true;
     return true;
   }());
-  if (!assert_enabled) return;
+  return assert_enabled;
+}
+
+TEST(TableDeathTest, InvalidIteratorAsserts) {
+  if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
 
   IntTable t;
   // Extra simple "regexp" as regexp support is highly varied across platforms.
-  constexpr char kDeathMsg[] = "erase.. called on invalid iterator";
-  EXPECT_DEATH_IF_SUPPORTED(t.erase(t.end()), kDeathMsg);
+  EXPECT_DEATH_IF_SUPPORTED(
+      t.erase(t.end()),
+      "erase.* called on invalid iterator. The iterator might be an "
+      "end.*iterator or may have been default constructed.");
+  typename IntTable::iterator iter;
+  EXPECT_DEATH_IF_SUPPORTED(
+      ++iter,
+      "operator.* called on invalid iterator. The iterator might be an "
+      "end.*iterator or may have been default constructed.");
+  t.insert(0);
+  iter = t.begin();
+  t.erase(iter);
+  EXPECT_DEATH_IF_SUPPORTED(
+      ++iter,
+      "operator.* called on invalid iterator. The element might have been "
+      "erased or .*the table might have rehashed.");
+}
+
+TEST(TableDeathTest, IteratorInvalidAssertsEqualityOperator) {
+  if (!IsAssertEnabled()) GTEST_SKIP() << "Assertions not enabled.";
+
+  IntTable t;
+  t.insert(1);
+  t.insert(2);
+  t.insert(3);
+  auto iter1 = t.begin();
+  auto iter2 = std::next(iter1);
+  ASSERT_NE(iter1, t.end());
+  ASSERT_NE(iter2, t.end());
+  t.erase(iter1);
+  // Extra simple "regexp" as regexp support is highly varied across platforms.
+  const char* const kDeathMessage =
+      "Invalid operation on iterator. The element might have .*been erased or "
+      "the table might have rehashed.";
+  EXPECT_DEATH_IF_SUPPORTED(void(iter1 == iter2), kDeathMessage);
+  EXPECT_DEATH_IF_SUPPORTED(void(iter2 != iter1), kDeathMessage);
+  t.erase(iter2);
+  EXPECT_DEATH_IF_SUPPORTED(void(iter1 == iter2), kDeathMessage);
 }
 
 #if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
diff --git a/third_party/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake b/third_party/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake
index 73435e99..f728c0e 100644
--- a/third_party/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake
+++ b/third_party/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake
@@ -67,7 +67,6 @@
     message(WARNING "Value of CMAKE_SIZEOF_VOID_P (${CMAKE_SIZEOF_VOID_P}) is not supported.")
   endif()
 else()
-  message(WARNING "Value of CMAKE_SYSTEM_PROCESSOR (${CMAKE_SYSTEM_PROCESSOR}) is unknown and cannot be used to set ABSL_RANDOM_RANDEN_COPTS")
   set(ABSL_RANDOM_RANDEN_COPTS "")
 endif()
 
diff --git a/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake b/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake
index 38b57ee..46563d4 100644
--- a/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake
+++ b/third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake
@@ -25,6 +25,7 @@
     "-Wno-shorten-64-to-32"
     "-Wno-sign-compare"
     "-Wno-sign-conversion"
+    "-Wno-unreachable-code-loop-increment"
     "-Wno-unused-function"
     "-Wno-unused-member-function"
     "-Wno-unused-parameter"
@@ -112,6 +113,7 @@
     "-Wno-shorten-64-to-32"
     "-Wno-sign-compare"
     "-Wno-sign-conversion"
+    "-Wno-unreachable-code-loop-increment"
     "-Wno-unused-function"
     "-Wno-unused-member-function"
     "-Wno-unused-parameter"
diff --git a/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl b/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl
index fb0788a..8518b63 100644
--- a/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl
+++ b/third_party/abseil-cpp/absl/copts/GENERATED_copts.bzl
@@ -26,6 +26,7 @@
     "-Wno-shorten-64-to-32",
     "-Wno-sign-compare",
     "-Wno-sign-conversion",
+    "-Wno-unreachable-code-loop-increment",
     "-Wno-unused-function",
     "-Wno-unused-member-function",
     "-Wno-unused-parameter",
@@ -113,6 +114,7 @@
     "-Wno-shorten-64-to-32",
     "-Wno-sign-compare",
     "-Wno-sign-conversion",
+    "-Wno-unreachable-code-loop-increment",
     "-Wno-unused-function",
     "-Wno-unused-member-function",
     "-Wno-unused-parameter",
diff --git a/third_party/abseil-cpp/absl/copts/copts.py b/third_party/abseil-cpp/absl/copts/copts.py
index 8281d98..17c467c 100644
--- a/third_party/abseil-cpp/absl/copts/copts.py
+++ b/third_party/abseil-cpp/absl/copts/copts.py
@@ -29,6 +29,7 @@
     "-Wno-shorten-64-to-32",
     "-Wno-sign-compare",
     "-Wno-sign-conversion",
+    "-Wno-unreachable-code-loop-increment",
     "-Wno-unused-function",
     "-Wno-unused-member-function",
     "-Wno-unused-parameter",
diff --git a/third_party/abseil-cpp/absl/strings/BUILD.bazel b/third_party/abseil-cpp/absl/strings/BUILD.bazel
index 809f566..4794f4ca 100644
--- a/third_party/abseil-cpp/absl/strings/BUILD.bazel
+++ b/third_party/abseil-cpp/absl/strings/BUILD.bazel
@@ -43,6 +43,7 @@
         "internal/stl_type_traits.h",
         "internal/str_join_internal.h",
         "internal/str_split_internal.h",
+        "internal/stringify_sink.cc",
         "internal/stringify_sink.h",
         "match.cc",
         "numbers.cc",
diff --git a/third_party/abseil-cpp/absl/strings/BUILD.gn b/third_party/abseil-cpp/absl/strings/BUILD.gn
index 7ee5de4..5cf9c7a1 100644
--- a/third_party/abseil-cpp/absl/strings/BUILD.gn
+++ b/third_party/abseil-cpp/absl/strings/BUILD.gn
@@ -20,6 +20,7 @@
     "internal/stl_type_traits.h",
     "internal/str_join_internal.h",
     "internal/str_split_internal.h",
+    "internal/stringify_sink.cc",
     "internal/stringify_sink.h",
     "match.cc",
     "numbers.cc",
diff --git a/third_party/abseil-cpp/absl/strings/CMakeLists.txt b/third_party/abseil-cpp/absl/strings/CMakeLists.txt
index 30dedcf5..87b1a78 100644
--- a/third_party/abseil-cpp/absl/strings/CMakeLists.txt
+++ b/third_party/abseil-cpp/absl/strings/CMakeLists.txt
@@ -44,6 +44,7 @@
     "internal/memutil.cc"
     "internal/memutil.h"
     "internal/stringify_sink.h"
+    "internal/stringify_sink.cc"
     "internal/stl_type_traits.h"
     "internal/str_join_internal.h"
     "internal/str_split_internal.h"
diff --git a/third_party/abseil-cpp/absl/strings/cord.cc b/third_party/abseil-cpp/absl/strings/cord.cc
index 66f45fe..92822c05 100644
--- a/third_party/abseil-cpp/absl/strings/cord.cc
+++ b/third_party/abseil-cpp/absl/strings/cord.cc
@@ -420,6 +420,7 @@
 // we keep it here to make diffs easier.
 void Cord::InlineRep::AppendArray(absl::string_view src,
                                   MethodIdentifier method) {
+  MaybeRemoveEmptyCrcNode();
   if (src.empty()) return;  // memcpy(_, nullptr, 0) is undefined.
 
   size_t appended = 0;
@@ -479,6 +480,10 @@
 template <typename C>
 inline void Cord::AppendImpl(C&& src) {
   auto constexpr method = CordzUpdateTracker::kAppendCord;
+
+  contents_.MaybeRemoveEmptyCrcNode();
+  if (src.empty()) return;
+
   if (empty()) {
     // Since destination is empty, we can avoid allocating a node,
     if (src.contents_.is_tree()) {
@@ -591,6 +596,9 @@
 template void Cord::Append(std::string&& src);
 
 void Cord::Prepend(const Cord& src) {
+  contents_.MaybeRemoveEmptyCrcNode();
+  if (src.empty()) return;
+
   CordRep* src_tree = src.contents_.tree();
   if (src_tree != nullptr) {
     CordRep::Ref(src_tree);
@@ -605,7 +613,9 @@
 }
 
 void Cord::PrependArray(absl::string_view src, MethodIdentifier method) {
+  contents_.MaybeRemoveEmptyCrcNode();
   if (src.empty()) return;  // memcpy(_, nullptr, 0) is undefined.
+
   if (!contents_.is_tree()) {
     size_t cur_size = contents_.inline_size();
     if (cur_size + src.size() <= InlineRep::kMaxInline) {
@@ -665,6 +675,7 @@
   ABSL_INTERNAL_CHECK(n <= size(),
                       absl::StrCat("Requested prefix size ", n,
                                    " exceeds Cord's size ", size()));
+  contents_.MaybeRemoveEmptyCrcNode();
   CordRep* tree = contents_.tree();
   if (tree == nullptr) {
     contents_.remove_prefix(n);
@@ -695,6 +706,7 @@
   ABSL_INTERNAL_CHECK(n <= size(),
                       absl::StrCat("Requested suffix size ", n,
                                    " exceeds Cord's size ", size()));
+  contents_.MaybeRemoveEmptyCrcNode();
   CordRep* tree = contents_.tree();
   if (tree == nullptr) {
     contents_.reduce_size(n);
@@ -844,9 +856,11 @@
 
 void Cord::SetExpectedChecksum(uint32_t crc) {
   auto constexpr method = CordzUpdateTracker::kSetExpectedChecksum;
-  if (empty()) return;
-
-  if (!contents_.is_tree()) {
+  if (empty()) {
+    contents_.MaybeRemoveEmptyCrcNode();
+    CordRep* rep = CordRepCrc::New(nullptr, crc);
+    contents_.EmplaceTree(rep, method);
+  } else if (!contents_.is_tree()) {
     CordRep* rep = contents_.MakeFlatWithExtraCapacity(0);
     rep = CordRepCrc::New(rep, crc);
     contents_.EmplaceTree(rep, method);
@@ -929,6 +943,7 @@
 }
 
 inline absl::string_view Cord::GetFirstChunk(const Cord& c) {
+  if (c.empty()) return {};
   return c.contents_.FindFlatStartPiece();
 }
 inline absl::string_view Cord::GetFirstChunk(absl::string_view sv) {
@@ -1166,6 +1181,10 @@
 
 /* static */ bool Cord::GetFlatAux(CordRep* rep, absl::string_view* fragment) {
   assert(rep != nullptr);
+  if (rep->length == 0) {
+    *fragment = absl::string_view();
+    return true;
+  }
   rep = cord_internal::SkipCrcNode(rep);
   if (rep->IsFlat()) {
     *fragment = absl::string_view(rep->flat()->Data(), rep->length);
@@ -1197,6 +1216,7 @@
     absl::cord_internal::CordRep* rep,
     absl::FunctionRef<void(absl::string_view)> callback) {
   assert(rep != nullptr);
+  if (rep->length == 0) return;
   rep = cord_internal::SkipCrcNode(rep);
 
   if (rep->IsBtree()) {
@@ -1230,7 +1250,11 @@
     if (include_data) *os << static_cast<void*>(rep);
     *os << "]";
     *os << " " << std::setw(indent) << "";
-    if (rep->IsCrc()) {
+    bool leaf = false;
+    if (rep == nullptr) {
+      *os << "NULL\n";
+      leaf = true;
+    } else if (rep->IsCrc()) {
       *os << "CRC crc=" << rep->crc()->crc << "\n";
       indent += kIndentStep;
       rep = rep->crc()->child;
@@ -1239,6 +1263,7 @@
       indent += kIndentStep;
       rep = rep->substring()->child;
     } else {  // Leaf or ring
+      leaf = true;
       if (rep->IsExternal()) {
         *os << "EXTERNAL [";
         if (include_data)
@@ -1252,6 +1277,8 @@
       } else {
         CordRepBtree::Dump(rep, /*label=*/ "", include_data, *os);
       }
+    }
+    if (leaf) {
       if (stack.empty()) break;
       rep = stack.back();
       stack.pop_back();
@@ -1297,11 +1324,14 @@
                               node->substring()->child->length,
                           ReportError(root, node));
     } else if (node->IsCrc()) {
-      ABSL_INTERNAL_CHECK(node->crc()->child != nullptr,
-                          ReportError(root, node));
-      ABSL_INTERNAL_CHECK(node->crc()->length == node->crc()->child->length,
-                          ReportError(root, node));
-      worklist.push_back(node->crc()->child);
+      ABSL_INTERNAL_CHECK(
+          node->crc()->child != nullptr || node->crc()->length == 0,
+          ReportError(root, node));
+      if (node->crc()->child != nullptr) {
+        ABSL_INTERNAL_CHECK(node->crc()->length == node->crc()->child->length,
+                            ReportError(root, node));
+        worklist.push_back(node->crc()->child);
+      }
     }
   } while (!worklist.empty());
   return true;
diff --git a/third_party/abseil-cpp/absl/strings/cord.h b/third_party/abseil-cpp/absl/strings/cord.h
index 88e1c85..6e3da89e 100644
--- a/third_party/abseil-cpp/absl/strings/cord.h
+++ b/third_party/abseil-cpp/absl/strings/cord.h
@@ -926,6 +926,13 @@
     void set_inline_size(size_t size) { data_.set_inline_size(size); }
     size_t inline_size() const { return data_.inline_size(); }
 
+    // Empty cords that carry a checksum have a CordRepCrc node with a null
+    // child node. The code can avoid lots of special cases where it would
+    // otherwise transition from tree to inline storage if we just remove the
+    // CordRepCrc node before mutations. Must never be called inside a
+    // CordzUpdateScope since it untracks the cordz info.
+    void MaybeRemoveEmptyCrcNode();
+
     cord_internal::InlineData data_;
   };
   InlineRep contents_;
@@ -1236,6 +1243,18 @@
   cord_internal::SmallMemmove(dst, data_.as_chars(), n);
 }
 
+inline void Cord::InlineRep::MaybeRemoveEmptyCrcNode() {
+  CordRep* rep = tree();
+  if (rep == nullptr || ABSL_PREDICT_TRUE(rep->length > 0)) {
+    return;
+  }
+  assert(rep->IsCrc());
+  assert(rep->crc()->child == nullptr);
+  CordzInfo::MaybeUntrackCord(cordz_info());
+  CordRep::Unref(rep);
+  ResetToEmpty();
+}
+
 constexpr inline Cord::Cord() noexcept {}
 
 inline Cord::Cord(absl::string_view src)
@@ -1285,7 +1304,7 @@
   return contents_.size();
 }
 
-inline bool Cord::empty() const { return contents_.empty(); }
+inline bool Cord::empty() const { return size() == 0; }
 
 inline size_t Cord::EstimatedMemoryUsage(
     CordMemoryAccounting accounting_method) const {
@@ -1411,7 +1430,11 @@
 inline Cord::ChunkIterator::ChunkIterator(const Cord* cord) {
   if (CordRep* tree = cord->contents_.tree()) {
     bytes_remaining_ = tree->length;
-    InitTree(tree);
+    if (ABSL_PREDICT_TRUE(bytes_remaining_ != 0)) {
+      InitTree(tree);
+    } else {
+      current_chunk_ = {};
+    }
   } else {
     bytes_remaining_ = cord->contents_.inline_size();
     current_chunk_ = {cord->contents_.data(), bytes_remaining_};
@@ -1580,7 +1603,7 @@
   if (rep == nullptr) {
     callback(absl::string_view(contents_.data(), contents_.size()));
   } else {
-    return ForEachChunkAux(rep, callback);
+    ForEachChunkAux(rep, callback);
   }
 }
 
diff --git a/third_party/abseil-cpp/absl/strings/cord_test.cc b/third_party/abseil-cpp/absl/strings/cord_test.cc
index 1fc4be6e..a4fa8955 100644
--- a/third_party/abseil-cpp/absl/strings/cord_test.cc
+++ b/third_party/abseil-cpp/absl/strings/cord_test.cc
@@ -1988,6 +1988,12 @@
 
 // Tests that Append() works ok when handed a self reference
 TEST_P(CordTest, AppendSelf) {
+  // Test the empty case.
+  absl::Cord empty;
+  MaybeHarden(empty);
+  empty.Append(empty);
+  ASSERT_EQ(empty, "");
+
   // We run the test until data is ~16K
   // This guarantees it covers small, medium and large data.
   std::string control_data = "Abc";
@@ -2712,7 +2718,7 @@
 
 // clang-format off
 // This array is constant-initialized in conformant compilers.
-CordMutator cord_mutators[] ={
+CordMutator cord_mutators[] = {
   {"clear", [](absl::Cord& c) { c.Clear(); }},
   {"overwrite", [](absl::Cord& c) { c = "overwritten"; }},
   {
@@ -2742,6 +2748,25 @@
     [](absl::Cord& c) { c.RemoveSuffix(c.size() / 2); }
   },
   {
+    "append empty string",
+    [](absl::Cord& c) { c.Append(""); },
+    [](absl::Cord& c) { }
+  },
+  {
+    "append empty cord",
+    [](absl::Cord& c) { c.Append(absl::Cord()); },
+    [](absl::Cord& c) { }
+  },
+  {
+    "append empty checksummed cord",
+    [](absl::Cord& c) {
+      absl::Cord to_append;
+      to_append.SetExpectedChecksum(999);
+      c.Append(to_append);
+    },
+    [](absl::Cord& c) { }
+  },
+  {
     "prepend string",
     [](absl::Cord& c) { c.Prepend("9876543210"); },
     [](absl::Cord& c) { c.RemovePrefix(10); }
@@ -2763,12 +2788,33 @@
     [](absl::Cord& c) { c.RemovePrefix(10); }
   },
   {
+    "prepend empty string",
+    [](absl::Cord& c) { c.Prepend(""); },
+    [](absl::Cord& c) { }
+  },
+  {
+    "prepend empty cord",
+    [](absl::Cord& c) { c.Prepend(absl::Cord()); },
+    [](absl::Cord& c) { }
+  },
+  {
+    "prepend empty checksummed cord",
+    [](absl::Cord& c) {
+      absl::Cord to_prepend;
+      to_prepend.SetExpectedChecksum(999);
+      c.Prepend(to_prepend);
+    },
+    [](absl::Cord& c) { }
+  },
+  {
     "prepend self",
     [](absl::Cord& c) { c.Prepend(c); },
     [](absl::Cord& c) { c.RemovePrefix(c.size() / 2); }
   },
-  {"remove prefix", [](absl::Cord& c) { c.RemovePrefix(2); }},
-  {"remove suffix", [](absl::Cord& c) { c.RemoveSuffix(2); }},
+  {"remove prefix", [](absl::Cord& c) { c.RemovePrefix(c.size() / 2); }},
+  {"remove suffix", [](absl::Cord& c) { c.RemoveSuffix(c.size() / 2); }},
+  {"remove 0-prefix", [](absl::Cord& c) { c.RemovePrefix(0); }},
+  {"remove 0-suffix", [](absl::Cord& c) { c.RemoveSuffix(0); }},
   {"subcord", [](absl::Cord& c) { c = c.Subcord(1, c.size() - 2); }},
   {
     "swap inline",
@@ -2810,6 +2856,12 @@
       EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
       EXPECT_EQ(c1, base_value);
 
+      // Test that setting an expected checksum again doesn't crash or leak
+      // memory.
+      c1.SetExpectedChecksum(12345);
+      EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
+      EXPECT_EQ(c1, base_value);
+
       // CRC persists through copies, assignments, and moves:
       absl::Cord c1_copy_construct = c1;
       EXPECT_EQ(c1_copy_construct.ExpectedChecksum().value_or(0), 12345);
@@ -2834,6 +2886,13 @@
         c2.SetExpectedChecksum(24680);
 
         mutator.Mutate(c2);
+
+        if (c1 == c2) {
+          // Not a mutation (for example, appending the empty string).
+          // Whether the checksum is removed is not defined.
+          continue;
+        }
+
         EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
 
         if (mutator.CanUndo()) {
@@ -2903,3 +2962,98 @@
     }
   }
 }
+
+// Test the special cases encountered with an empty checksummed cord.
+TEST_P(CordTest, ChecksummedEmptyCord) {
+  absl::Cord c1;
+  EXPECT_FALSE(c1.ExpectedChecksum().has_value());
+
+  // Setting an expected checksum works.
+  c1.SetExpectedChecksum(12345);
+  EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
+  EXPECT_EQ(c1, "");
+  EXPECT_TRUE(c1.empty());
+
+  // Test that setting an expected checksum again doesn't crash or leak memory.
+  c1.SetExpectedChecksum(12345);
+  EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
+  EXPECT_EQ(c1, "");
+  EXPECT_TRUE(c1.empty());
+
+  // CRC persists through copies, assignments, and moves:
+  absl::Cord c1_copy_construct = c1;
+  EXPECT_EQ(c1_copy_construct.ExpectedChecksum().value_or(0), 12345);
+
+  absl::Cord c1_copy_assign;
+  c1_copy_assign = c1;
+  EXPECT_EQ(c1_copy_assign.ExpectedChecksum().value_or(0), 12345);
+
+  absl::Cord c1_move(std::move(c1_copy_assign));
+  EXPECT_EQ(c1_move.ExpectedChecksum().value_or(0), 12345);
+
+  EXPECT_EQ(c1.ExpectedChecksum().value_or(0), 12345);
+
+  // A CRC Cord compares equal to its non-CRC value.
+  EXPECT_EQ(c1, absl::Cord());
+
+  for (const CordMutator& mutator : cord_mutators) {
+    SCOPED_TRACE(mutator.Name());
+
+    // Exercise mutating an empty checksummed cord to catch crashes and exercise
+    // memory sanitizers.
+    absl::Cord c2;
+    c2.SetExpectedChecksum(24680);
+    mutator.Mutate(c2);
+
+    if (c2.empty()) {
+      // Not a mutation
+      continue;
+    }
+    EXPECT_EQ(c2.ExpectedChecksum(), absl::nullopt);
+
+    if (mutator.CanUndo()) {
+      mutator.Undo(c2);
+    }
+  }
+
+  absl::Cord c3;
+  c3.SetExpectedChecksum(999);
+  const absl::Cord& cc3 = c3;
+
+  // Test that all cord reading operations function in the face of an
+  // expected checksum.
+  EXPECT_TRUE(cc3.StartsWith(""));
+  EXPECT_TRUE(cc3.EndsWith(""));
+  EXPECT_TRUE(cc3.empty());
+  EXPECT_EQ(cc3, "");
+  EXPECT_EQ(cc3, absl::Cord());
+  EXPECT_EQ(cc3.size(), 0);
+  EXPECT_EQ(cc3.Compare(absl::Cord()), 0);
+  EXPECT_EQ(cc3.Compare(c1), 0);
+  EXPECT_EQ(cc3.Compare(cc3), 0);
+  EXPECT_EQ(cc3.Compare(""), 0);
+  EXPECT_EQ(cc3.Compare("wxyz"), -1);
+  EXPECT_EQ(cc3.Compare(absl::Cord("wxyz")), -1);
+  EXPECT_EQ(absl::Cord("wxyz").Compare(cc3), 1);
+  EXPECT_EQ(std::string(cc3), "");
+
+  std::string dest;
+  absl::CopyCordToString(cc3, &dest);
+  EXPECT_EQ(dest, "");
+
+  for (absl::string_view chunk : cc3.Chunks()) {  // NOLINT(unreachable loop)
+    static_cast<void>(chunk);
+    GTEST_FAIL() << "no chunks expected";
+  }
+  EXPECT_TRUE(cc3.chunk_begin() == cc3.chunk_end());
+
+  for (char ch : cc3.Chars()) {  // NOLINT(unreachable loop)
+    static_cast<void>(ch);
+    GTEST_FAIL() << "no chars expected";
+  }
+  EXPECT_TRUE(cc3.char_begin() == cc3.char_end());
+
+  EXPECT_EQ(cc3.TryFlat(), "");
+  EXPECT_EQ(absl::HashOf(c3), absl::HashOf(absl::Cord()));
+  EXPECT_EQ(absl::HashOf(c3), absl::HashOf(absl::string_view()));
+}
diff --git a/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc b/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc
index ee14035..7d7273e 100644
--- a/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc
+++ b/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc
@@ -25,8 +25,7 @@
 namespace cord_internal {
 
 CordRepCrc* CordRepCrc::New(CordRep* child, uint32_t crc) {
-  assert(child != nullptr);
-  if (child->IsCrc()) {
+  if (child != nullptr && child->IsCrc()) {
     if (child->refcount.IsOne()) {
       child->crc()->crc = crc;
       return child->crc();
@@ -37,7 +36,7 @@
     CordRep::Unref(old);
   }
   auto* new_cordrep = new CordRepCrc;
-  new_cordrep->length = child->length;
+  new_cordrep->length = child != nullptr ? child->length : 0;
   new_cordrep->tag = cord_internal::CRC;
   new_cordrep->child = child;
   new_cordrep->crc = crc;
@@ -45,7 +44,9 @@
 }
 
 void CordRepCrc::Destroy(CordRepCrc* node) {
-  CordRep::Unref(node->child);
+  if (node->child != nullptr) {
+    CordRep::Unref(node->child);
+  }
   delete node;
 }
 
diff --git a/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h b/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h
index 5294b0d..455a1127d 100644
--- a/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h
+++ b/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h
@@ -40,7 +40,7 @@
   // If the specified `child` is itself a CordRepCrc node, then this method
   // either replaces the existing node, or directly updates the crc value in it
   // depending on the node being shared or not, i.e.: refcount.IsOne().
-  // `child` must not be null. Never returns null.
+  // `child` must only be null if the Cord is empty. Never returns null.
   static CordRepCrc* New(CordRep* child, uint32_t crc);
 
   // Destroys (deletes) the provided node. `node` must not be null.
diff --git a/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc b/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc
index d73ea7b3..42a9110 100644
--- a/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc
+++ b/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc_test.cc
@@ -27,14 +27,11 @@
 
 using ::absl::cordrep_testing::MakeFlat;
 using ::testing::Eq;
+using ::testing::IsNull;
 using ::testing::Ne;
 
 #if !defined(NDEBUG) && GTEST_HAS_DEATH_TEST
 
-TEST(CordRepCrc, NewWithNullPtr) {
-  EXPECT_DEATH(CordRepCrc::New(nullptr, 0), "");
-}
-
 TEST(CordRepCrc, RemoveCrcWithNullptr) {
   EXPECT_DEATH(RemoveCrcNode(nullptr), "");
 }
@@ -82,6 +79,16 @@
   CordRep::Unref(new_crc);
 }
 
+TEST(CordRepCrc, NewEmpty) {
+  CordRepCrc* crc = CordRepCrc::New(nullptr, 12345);
+  EXPECT_TRUE(crc->refcount.IsOne());
+  EXPECT_THAT(crc->child, IsNull());
+  EXPECT_THAT(crc->length, Eq(0u));
+  EXPECT_THAT(crc->crc, Eq(12345u));
+  EXPECT_TRUE(crc->refcount.IsOne());
+  CordRepCrc::Destroy(crc);
+}
+
 TEST(CordRepCrc, RemoveCrcNotCrc) {
   CordRep* rep = cordrep_testing::MakeFlat("Hello world");
   CordRep* nocrc = RemoveCrcNode(rep);
diff --git a/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc b/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc
index 7cc23acd..a084568f 100644
--- a/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc
+++ b/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc
@@ -31,8 +31,8 @@
 // detected.
 // When the distance is larger than cutoff, or one of the strings has more
 // than MAX_SIZE=100 characters, the code returns min(MAX_SIZE, cutoff) + 1.
-size_t CappedDamerauLevenshteinDistance(absl::string_view s1,
-                                        absl::string_view s2, uint8_t cutoff) {
+uint8_t CappedDamerauLevenshteinDistance(absl::string_view s1,
+                                         absl::string_view s2, uint8_t cutoff) {
   const uint8_t MAX_SIZE = 100;
   const uint8_t _cutoff = std::min(MAX_SIZE, cutoff);
   const uint8_t cutoff_plus_1 = static_cast<uint8_t>(_cutoff + 1);
@@ -42,7 +42,7 @@
     return cutoff_plus_1;
 
   if (s1.empty())
-    return std::min(static_cast<size_t>(cutoff_plus_1), s2.size());
+    return static_cast<uint8_t>(s2.size());
 
   // Lower diagonal bound: y = x - lower_diag
   const uint8_t lower_diag =
diff --git a/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h b/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h
index b9bb6fe..1a96842 100644
--- a/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h
+++ b/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h
@@ -25,8 +25,8 @@
 namespace strings_internal {
 // Calculate DamerauLevenshtein distance between two strings.
 // When the distance is larger than cutoff, the code just returns cutoff + 1.
-size_t CappedDamerauLevenshteinDistance(absl::string_view s1,
-                                        absl::string_view s2, uint8_t cutoff);
+uint8_t CappedDamerauLevenshteinDistance(absl::string_view s1,
+                                         absl::string_view s2, uint8_t cutoff);
 
 }  // namespace strings_internal
 ABSL_NAMESPACE_END
diff --git a/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc b/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc
index 45cb5bd9..a342b7db 100644
--- a/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc
+++ b/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_test.cc
@@ -24,76 +24,76 @@
 using absl::strings_internal::CappedDamerauLevenshteinDistance;
 
 TEST(Distance, TestDistances) {
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("ab", "ab", 6), 0u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("a", "b", 6), 1u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("ca", "abc", 6), 3u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "ad", 6), 2u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "cadb", 6), 4u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "bdac", 6), 4u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("ab", "ab", 0), 0u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("", "", 0), 0u);
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("ab", "ab", 6), uint8_t{0});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("a", "b", 6), uint8_t{1});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("ca", "abc", 6), uint8_t{3});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "ad", 6), uint8_t{2});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "cadb", 6), uint8_t{4});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "bdac", 6), uint8_t{4});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("ab", "ab", 0), uint8_t{0});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("", "", 0), uint8_t{0});
   // combinations for 3-character strings:
   // 1, 2, 3 removals, insertions or replacements and transpositions
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", "abc", 6), 0u);
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", "abc", 6), uint8_t{0});
   for (auto res :
        {"", "ca", "efg", "ea", "ce", "ceb", "eca", "cae", "cea", "bea"}) {
-    EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", res, 6), 3u);
-    EXPECT_THAT(CappedDamerauLevenshteinDistance(res, "abc", 6), 3u);
+    EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", res, 6), uint8_t{3});
+    EXPECT_THAT(CappedDamerauLevenshteinDistance(res, "abc", 6), uint8_t{3});
   }
   for (auto res :
        {"a",   "b",   "c",   "ba",  "cb",  "bca", "cab", "cba", "ace",
         "efc", "ebf", "aef", "ae",  "be",  "eb",  "ec",  "ecb", "bec",
         "bce", "cbe", "ace", "eac", "aeb", "bae", "eab", "eba"}) {
-    EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", res, 6), 2u);
-    EXPECT_THAT(CappedDamerauLevenshteinDistance(res, "abc", 6), 2u);
+    EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", res, 6), uint8_t{2});
+    EXPECT_THAT(CappedDamerauLevenshteinDistance(res, "abc", 6), uint8_t{2});
   }
   for (auto res : {"ab", "ac", "bc", "acb", "bac", "ebc", "aec", "abe"}) {
-    EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", res, 6), 1u);
-    EXPECT_THAT(CappedDamerauLevenshteinDistance(res, "abc", 6), 1u);
+    EXPECT_THAT(CappedDamerauLevenshteinDistance("abc", res, 6), uint8_t{1});
+    EXPECT_THAT(CappedDamerauLevenshteinDistance(res, "abc", 6), uint8_t{1});
   }
 }
 
 TEST(Distance, TestCutoff) {
   // Returing cutoff + 1 if the value is larger than cutoff or string longer
   // than MAX_SIZE.
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "a", 3), 3u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "a", 2), 3u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "a", 1), 2u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcdefg", "a", 2), 3u);
-  EXPECT_THAT(CappedDamerauLevenshteinDistance("a", "abcde", 2), 3u);
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "a", 3), uint8_t{3});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "a", 2), uint8_t{3});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcd", "a", 1), uint8_t{2});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("abcdefg", "a", 2), uint8_t{3});
+  EXPECT_THAT(CappedDamerauLevenshteinDistance("a", "abcde", 2), uint8_t{3});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(102, 'a'),
                                                std::string(102, 'a'), 105),
-              101u);
+              uint8_t{101});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(100, 'a'),
                                                std::string(100, 'a'), 100),
-              0u);
+              uint8_t{0});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(100, 'a'),
                                                std::string(100, 'b'), 100),
-              100u);
+              uint8_t{100});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(100, 'a'),
                                                std::string(99, 'a'), 2),
-              1u);
+              uint8_t{1});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(100, 'a'),
                                                std::string(101, 'a'), 2),
-              3u);
+              uint8_t{3});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(100, 'a'),
                                                std::string(101, 'a'), 2),
-              3u);
+              uint8_t{3});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(UINT8_MAX + 1, 'a'),
                                                std::string(UINT8_MAX + 1, 'b'),
                                                UINT8_MAX),
-              101u);
+              uint8_t{101});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(UINT8_MAX - 1, 'a'),
                                                std::string(UINT8_MAX - 1, 'b'),
                                                UINT8_MAX),
-              101u);
+              uint8_t{101});
   EXPECT_THAT(
       CappedDamerauLevenshteinDistance(std::string(UINT8_MAX, 'a'),
                                        std::string(UINT8_MAX, 'b'), UINT8_MAX),
-      101u);
+      uint8_t{101});
   EXPECT_THAT(CappedDamerauLevenshteinDistance(std::string(UINT8_MAX - 1, 'a'),
                                                std::string(UINT8_MAX - 1, 'a'),
                                                UINT8_MAX),
-              101u);
+              uint8_t{101});
 }
 }  // namespace
diff --git a/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc b/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc
new file mode 100644
index 0000000..7c6995ab
--- /dev/null
+++ b/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc
@@ -0,0 +1,28 @@
+// Copyright 2022 The Abseil Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "absl/strings/internal/stringify_sink.h"
+namespace absl {
+ABSL_NAMESPACE_BEGIN
+namespace strings_internal {
+
+void StringifySink::Append(size_t count, char ch) { buffer_.append(count, ch); }
+
+void StringifySink::Append(string_view v) {
+  buffer_.append(v.data(), v.size());
+}
+
+}  // namespace strings_internal
+ABSL_NAMESPACE_END
+}  // namespace absl
diff --git a/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h b/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h
index a83f70e45..5e326a0 100644
--- a/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h
+++ b/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h
@@ -31,8 +31,6 @@
 
   void Append(string_view v);
 
-  bool PutPaddedString(string_view v, int width, int precision, bool left);
-
   // Support `absl::Format(&sink, format, args...)`.
   friend void AbslFormatFlush(StringifySink* sink, absl::string_view v) {
     sink->Append(v);
diff --git a/third_party/abseil-cpp/absl/strings/str_cat.cc b/third_party/abseil-cpp/absl/strings/str_cat.cc
index 6981347ac..e5cb6d8 100644
--- a/third_party/abseil-cpp/absl/strings/str_cat.cc
+++ b/third_party/abseil-cpp/absl/strings/str_cat.cc
@@ -30,39 +30,6 @@
 namespace absl {
 ABSL_NAMESPACE_BEGIN
 
-namespace strings_internal {
-void StringifySink::Append(size_t count, char ch) { buffer_.append(count, ch); }
-
-void StringifySink::Append(string_view v) {
-  buffer_.append(v.data(), v.size());
-}
-
-bool StringifySink::PutPaddedString(string_view v, int width, int precision,
-                                    bool left) {
-  size_t space_remaining = 0;
-
-  if (width >= 0) space_remaining = static_cast<size_t>(width);
-
-  size_t n = v.size();
-
-  if (precision >= 0) n = (std::min)(n, static_cast<size_t>(precision));
-
-  string_view shown(v.data(), n);
-
-  if (shown.size() < space_remaining) {
-    space_remaining = space_remaining - shown.size();
-  } else {
-    space_remaining = 0;
-  }
-
-  if (!left) Append(space_remaining, ' ');
-  Append(shown);
-  if (left) Append(space_remaining, ' ');
-  return true;
-}
-
-}  // namespace strings_internal
-
 AlphaNum::AlphaNum(Hex hex) {
   static_assert(numbers_internal::kFastToBufferSize >= 32,
                 "This function only works when output buffer >= 32 bytes long");
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc b/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc
index 8966f7a..787426f 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc
@@ -502,9 +502,9 @@
   // encoded zoneinfo. The ttisstd/ttisgmt indicators only apply when
   // interpreting a POSIX spec that does not include start/end rules, and
   // that isn't the case here (see "zic -p").
-  bp += (8 + 4) * hdr.leapcnt;  // leap-time + TAI-UTC
-  bp += 1 * hdr.ttisstdcnt;     // UTC/local indicators
-  bp += 1 * hdr.ttisutcnt;      // standard/wall indicators
+  bp += (time_len + 4) * hdr.leapcnt;  // leap-time + TAI-UTC
+  bp += 1 * hdr.ttisstdcnt;            // UTC/local indicators
+  bp += 1 * hdr.ttisutcnt;             // standard/wall indicators
   assert(bp == tbuf.data() + tbuf.size());
 
   future_spec_.clear();
@@ -533,8 +533,8 @@
 
   // Trim redundant transitions. zic may have added these to work around
   // differences between the glibc and reference implementations (see
-  // zic.c:dontmerge) and the Qt library (see zic.c:WORK_AROUND_QTBUG_53071).
-  // For us, they just get in the way when we do future_spec_ extension.
+  // zic.c:dontmerge) or to avoid bugs in old readers. For us, they just
+  // get in the way when we do future_spec_ extension.
   while (hdr.timecnt > 1) {
     if (!EquivTransitions(transitions_[hdr.timecnt - 1].type_index,
                           transitions_[hdr.timecnt - 2].type_index)) {
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc b/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc
index 5ab5a59e..b818c213 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc
@@ -66,41 +66,41 @@
 extern ZoneInfoSourceFactory default_factory;
 ZoneInfoSourceFactory default_factory = DefaultFactory;
 #if defined(_M_IX86) || defined(_M_ARM)
-#pragma comment(                                                                                                         \
-    linker,                                                                                                              \
-    "/alternatename:?zone_info_source_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                    \
-    "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                 \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
-    "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
-    "@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
-    "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
-    "@@ZA=?default_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                                       \
-    "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                 \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
-    "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
-    "@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
-    "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
-    "@@ZA")
+#pragma comment(                                                                                                                 \
+        linker,                                                                                                                  \
+            "/alternatename:?zone_info_source_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                    \
+            "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                 \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
+            "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
+            "@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
+            "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
+            "@@ZA=?default_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                                       \
+            "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                 \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
+            "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
+            "@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                   \
+            "@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
+            "@@ZA")
 #elif defined(_M_IA_64) || defined(_M_AMD64) || defined(_M_ARM64)
-#pragma comment(                                                                                                          \
-    linker,                                                                                                               \
-    "/alternatename:?zone_info_source_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                     \
-    "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                  \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
-    "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
-    "@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
-    "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
-    "@@ZEA=?default_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                                       \
-    "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                  \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
-    "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
-    "@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
-    "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
-    "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
-    "@@ZEA")
+#pragma comment(                                                                                                                  \
+        linker,                                                                                                                   \
+            "/alternatename:?zone_info_source_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                     \
+            "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                  \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
+            "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
+            "@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
+            "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
+            "@@ZEA=?default_factory@cctz_extension@time_internal@" ABSL_INTERNAL_MANGLED_NS                                       \
+            "@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                  \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
+            "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@" ABSL_INTERNAL_MANGLED_BACKREFERENCE      \
+            "@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                   \
+            "@@U?$default_delete@VZoneInfoSource@cctz@time_internal@" ABSL_INTERNAL_MANGLED_NS                                    \
+            "@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@" ABSL_INTERNAL_MANGLED_BACKREFERENCE \
+            "@@ZEA")
 #else
 #error Unsupported MSVC platform
 #endif  // _M_<PLATFORM>
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version
index 13ad873..5c8fbb47 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/version
@@ -1 +1 @@
-2022e
+2022f
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas
index 179937f..48faea2 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Bahia_Banderas
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua
index b331737..5e0a54f0 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Chihuahua
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan
index 6b41102..97d4d36 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mazatlan
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida
index d3b0ca12..e5de113 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Merida
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City
index 6542c9c5..80a415c 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Mexico_City
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey
index dea9e3f..a5822e2c 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Monterrey
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon
index b9f67a9..fe6be8e 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Nipigon
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga
index 2ee585c..560b8674 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ojinaga
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River
index d6ddda4..7e646d18 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Rainy_River
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay
index fcb0328..fe6be8e 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Thunder_Bay
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur
index 6b41102..97d4d36 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaSur
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General
index 6542c9c5..80a415c 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/General
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji
index 8b2dd52..610b850 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Pacific/Fiji
Binary files differ
diff --git a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab
index cf9cf20..75372e3 100644
--- a/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab
+++ b/third_party/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab
@@ -102,12 +102,9 @@
 CA	+4606-06447	America/Moncton	Atlantic - New Brunswick
 CA	+5320-06025	America/Goose_Bay	Atlantic - Labrador (most areas)
 CA,BS	+4339-07923	America/Toronto	Eastern - ON, QC (most areas), Bahamas
-CA	+4901-08816	America/Nipigon	Eastern - ON, QC (no DST 1967-73)
-CA	+4823-08915	America/Thunder_Bay	Eastern - ON (Thunder Bay)
 CA	+6344-06828	America/Iqaluit	Eastern - NU (most east areas)
 CA	+6608-06544	America/Pangnirtung	Eastern - NU (Pangnirtung)
 CA	+4953-09709	America/Winnipeg	Central - ON (west); Manitoba
-CA	+4843-09434	America/Rainy_River	Central - ON (Rainy R, Ft Frances)
 CA	+744144-0944945	America/Resolute	Central - NU (Resolute)
 CA	+624900-0920459	America/Rankin_Inlet	Central - NU (central)
 CA	+5024-10439	America/Regina	CST - SK (most areas)
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg.def b/third_party/abseil-cpp/symbols_arm64_dbg.def
index cc3b020..5b56ac5 100644
--- a/third_party/abseil-cpp/symbols_arm64_dbg.def
+++ b/third_party/abseil-cpp/symbols_arm64_dbg.def
@@ -1625,7 +1625,7 @@
     ?CallVoidPtrFunction@Condition@absl@@CA_NPEBV12@@Z
     ?CancelledError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?Capacity@CordRepFlat@cord_internal@absl@@QEBA_KXZ
-    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YA_KVstring_view@2@0E@Z
+    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAEVstring_view@2@0E@Z
     ?CatPieces@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@Cr@std@@V?$allocator@D@23@@Cr@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?Ceil@absl@@YA?AVDuration@1@V21@0@Z
     ?CheckInvariants@GraphCycles@synchronization_internal@absl@@QEBA_NXZ
@@ -2134,6 +2134,7 @@
     ?MaskEmptyOrDeleted@GroupAArch64Impl@container_internal@absl@@QEBA?AV?$NonIterableBitMask@_K$07$02@23@XZ
     ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@AEBA_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z
     ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SA_KXZ
+    ?MaybeRemoveEmptyCrcNode@InlineRep@Cord@absl@@AEAAXXZ
     ?MaybeTrackCordImpl@CordzInfo@cord_internal@absl@@CAXAEAVInlineData@23@AEBV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?MergeTrees@CordRepBtree@cord_internal@absl@@CAPEAV123@PEAV123@0@Z
     ?Min@string_view@absl@@CA_K_K0@Z
@@ -2244,7 +2245,6 @@
     ?PushDead@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAXPEAUHashtablezInfo@container_internal@3@@Z
     ?PushNew@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAXPEAUHashtablezInfo@container_internal@3@@Z
     ?PutPaddedString@FormatSinkImpl@str_format_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
-    ?PutPaddedString@StringifySink@strings_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
     ?PutTwoDigits@numbers_internal@absl@@YAX_KPEAD@Z
     ?RandomSeed@container_internal@absl@@YA_KXZ
     ?RawLog@raw_log_internal@absl@@YAXW4LogSeverity@2@PEBDH1ZZ
@@ -3055,7 +3055,6 @@
     ?empty@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@Cr@std@@@Cr@std@@QEBA_NXZ
     ?empty@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@Cr@std@@@Cr@std@@QEBA_NXZ
     ?empty@Cord@absl@@QEBA_NXZ
-    ?empty@InlineRep@Cord@absl@@QEBA_NXZ
     ?empty@string_view@absl@@QEBA_NXZ
     ?end@?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@Cr@std@@@absl@@QEAAPEAUPayload@status_internal@2@XZ
     ?end@?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@Cr@std@@@absl@@QEBAPEBUPayload@status_internal@2@XZ
diff --git a/third_party/abseil-cpp/symbols_arm64_rel.def b/third_party/abseil-cpp/symbols_arm64_rel.def
index db590c7..9b995d4 100644
--- a/third_party/abseil-cpp/symbols_arm64_rel.def
+++ b/third_party/abseil-cpp/symbols_arm64_rel.def
@@ -143,6 +143,7 @@
     ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z
     ??0Condition@absl@@QEAA@PEB_N@Z
     ??0Cord@absl@@AEAA@Vstring_view@1@W4MethodIdentifier@CordzUpdateTracker@cord_internal@1@@Z
+    ??0Cord@absl@@QEAA@AEBV01@@Z
     ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
     ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ
@@ -314,7 +315,7 @@
     ?CalculateBase64EscapedLenInternal@strings_internal@absl@@YA_K_K_N@Z
     ?CallVoidPtrFunction@Condition@absl@@CA_NPEBV12@@Z
     ?CancelledError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
-    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YA_KVstring_view@2@0E@Z
+    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAEVstring_view@2@0E@Z
     ?CatPieces@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@Cr@std@@V?$allocator@D@23@@Cr@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?Ceil@absl@@YA?AVDuration@1@V21@0@Z
     ?CheckInvariants@GraphCycles@synchronization_internal@absl@@QEBA_NXZ
@@ -682,7 +683,6 @@
     ?Ptr@GraphCycles@synchronization_internal@absl@@QEAAPEAXUGraphId@23@@Z
     ?PushDead@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAXPEAUHashtablezInfo@container_internal@3@@Z
     ?PutPaddedString@FormatSinkImpl@str_format_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
-    ?PutPaddedString@StringifySink@strings_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
     ?RawLog@raw_log_internal@absl@@YAXW4LogSeverity@2@PEBDH1ZZ
     ?RawLoggingFullySupported@raw_log_internal@absl@@YA_NXZ
     ?Read@CordRepBtreeNavigator@cord_internal@absl@@QEAA?AUReadResult@123@_K0@Z
diff --git a/third_party/abseil-cpp/symbols_x64_dbg.def b/third_party/abseil-cpp/symbols_x64_dbg.def
index 58f73f724..86b8cd5 100644
--- a/third_party/abseil-cpp/symbols_x64_dbg.def
+++ b/third_party/abseil-cpp/symbols_x64_dbg.def
@@ -1624,7 +1624,7 @@
     ?CallVoidPtrFunction@Condition@absl@@CA_NPEBV12@@Z
     ?CancelledError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?Capacity@CordRepFlat@cord_internal@absl@@QEBA_KXZ
-    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YA_KVstring_view@2@0E@Z
+    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAEVstring_view@2@0E@Z
     ?CatPieces@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@Cr@std@@V?$allocator@D@23@@Cr@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?Ceil@absl@@YA?AVDuration@1@V21@0@Z
     ?CheckInvariants@GraphCycles@synchronization_internal@absl@@QEBA_NXZ
@@ -2133,6 +2133,7 @@
     ?MaskEmptyOrDeleted@GroupSse2Impl@container_internal@absl@@QEBA?AV?$NonIterableBitMask@I$0BA@$0A@@23@XZ
     ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@AEBA_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z
     ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SA_KXZ
+    ?MaybeRemoveEmptyCrcNode@InlineRep@Cord@absl@@AEAAXXZ
     ?MaybeTrackCordImpl@CordzInfo@cord_internal@absl@@CAXAEAVInlineData@23@AEBV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?MergeTrees@CordRepBtree@cord_internal@absl@@CAPEAV123@PEAV123@0@Z
     ?Min@string_view@absl@@CA_K_K0@Z
@@ -2243,7 +2244,6 @@
     ?PushDead@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAXPEAUHashtablezInfo@container_internal@3@@Z
     ?PushNew@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAXPEAUHashtablezInfo@container_internal@3@@Z
     ?PutPaddedString@FormatSinkImpl@str_format_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
-    ?PutPaddedString@StringifySink@strings_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
     ?PutTwoDigits@numbers_internal@absl@@YAX_KPEAD@Z
     ?RandomSeed@container_internal@absl@@YA_KXZ
     ?RawLog@raw_log_internal@absl@@YAXW4LogSeverity@2@PEBDH1ZZ
@@ -3053,7 +3053,6 @@
     ?empty@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@Cr@std@@@Cr@std@@QEBA_NXZ
     ?empty@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@Cr@std@@@Cr@std@@QEBA_NXZ
     ?empty@Cord@absl@@QEBA_NXZ
-    ?empty@InlineRep@Cord@absl@@QEBA_NXZ
     ?empty@string_view@absl@@QEBA_NXZ
     ?end@?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@Cr@std@@@absl@@QEAAPEAUPayload@status_internal@2@XZ
     ?end@?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@Cr@std@@@absl@@QEBAPEBUPayload@status_internal@2@XZ
diff --git a/third_party/abseil-cpp/symbols_x64_rel.def b/third_party/abseil-cpp/symbols_x64_rel.def
index 274b833a..6ec40349 100644
--- a/third_party/abseil-cpp/symbols_x64_rel.def
+++ b/third_party/abseil-cpp/symbols_x64_rel.def
@@ -139,6 +139,7 @@
     ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z
     ??0Condition@absl@@QEAA@PEB_N@Z
     ??0Cord@absl@@AEAA@Vstring_view@1@W4MethodIdentifier@CordzUpdateTracker@cord_internal@1@@Z
+    ??0Cord@absl@@QEAA@AEBV01@@Z
     ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
     ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ
@@ -311,7 +312,7 @@
     ?CalculateBase64EscapedLenInternal@strings_internal@absl@@YA_K_K_N@Z
     ?CallVoidPtrFunction@Condition@absl@@CA_NPEBV12@@Z
     ?CancelledError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
-    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YA_KVstring_view@2@0E@Z
+    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAEVstring_view@2@0E@Z
     ?CatPieces@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@Cr@std@@V?$allocator@D@23@@Cr@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?Ceil@absl@@YA?AVDuration@1@V21@0@Z
     ?CheckInvariants@GraphCycles@synchronization_internal@absl@@QEBA_NXZ
@@ -679,7 +680,6 @@
     ?Ptr@GraphCycles@synchronization_internal@absl@@QEAAPEAXUGraphId@23@@Z
     ?PushDead@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAXPEAUHashtablezInfo@container_internal@3@@Z
     ?PutPaddedString@FormatSinkImpl@str_format_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
-    ?PutPaddedString@StringifySink@strings_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
     ?RawLog@raw_log_internal@absl@@YAXW4LogSeverity@2@PEBDH1ZZ
     ?RawLoggingFullySupported@raw_log_internal@absl@@YA_NXZ
     ?Read@CordRepBtreeNavigator@cord_internal@absl@@QEAA?AUReadResult@123@_K0@Z
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan.def b/third_party/abseil-cpp/symbols_x64_rel_asan.def
index a9e2731..246ae40a 100644
--- a/third_party/abseil-cpp/symbols_x64_rel_asan.def
+++ b/third_party/abseil-cpp/symbols_x64_rel_asan.def
@@ -144,6 +144,7 @@
     ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z
     ??0Condition@absl@@QEAA@PEB_N@Z
     ??0Cord@absl@@AEAA@Vstring_view@1@W4MethodIdentifier@CordzUpdateTracker@cord_internal@1@@Z
+    ??0Cord@absl@@QEAA@AEBV01@@Z
     ??0CordzHandle@cord_internal@absl@@IEAA@_N@Z
     ??0CordzInfo@cord_internal@absl@@AEAA@PEAUCordRep@12@PEBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ
@@ -320,7 +321,7 @@
     ?CalculateBase64EscapedLenInternal@strings_internal@absl@@YA_K_K_N@Z
     ?CallVoidPtrFunction@Condition@absl@@CA_NPEBV12@@Z
     ?CancelledError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
-    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YA_KVstring_view@2@0E@Z
+    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAEVstring_view@2@0E@Z
     ?CatPieces@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@Cr@std@@V?$allocator@D@23@@Cr@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?Ceil@absl@@YA?AVDuration@1@V21@0@Z
     ?CheckInvariants@GraphCycles@synchronization_internal@absl@@QEBA_NXZ
@@ -688,7 +689,6 @@
     ?Ptr@GraphCycles@synchronization_internal@absl@@QEAAPEAXUGraphId@23@@Z
     ?PushDead@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AEAAXPEAUHashtablezInfo@container_internal@3@@Z
     ?PutPaddedString@FormatSinkImpl@str_format_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
-    ?PutPaddedString@StringifySink@strings_internal@absl@@QEAA_NVstring_view@3@HH_N@Z
     ?RawLog@raw_log_internal@absl@@YAXW4LogSeverity@2@PEBDH1ZZ
     ?RawLoggingFullySupported@raw_log_internal@absl@@YA_NXZ
     ?Read@CordRepBtreeNavigator@cord_internal@absl@@QEAA?AUReadResult@123@_K0@Z
diff --git a/third_party/abseil-cpp/symbols_x86_dbg.def b/third_party/abseil-cpp/symbols_x86_dbg.def
index 7a753b13..04a6a175 100644
--- a/third_party/abseil-cpp/symbols_x86_dbg.def
+++ b/third_party/abseil-cpp/symbols_x86_dbg.def
@@ -1614,7 +1614,7 @@
     ?CallVoidPtrFunction@Condition@absl@@CA_NPBV12@@Z
     ?CancelledError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
     ?Capacity@CordRepFlat@cord_internal@absl@@QBEIXZ
-    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAIVstring_view@2@0E@Z
+    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAEVstring_view@2@0E@Z
     ?CatPieces@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@Cr@std@@V?$allocator@D@23@@Cr@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?Ceil@absl@@YA?AVDuration@1@V21@0@Z
     ?CheckInvariants@GraphCycles@synchronization_internal@absl@@QBE_NXZ
@@ -2123,6 +2123,7 @@
     ?MaskEmptyOrDeleted@GroupSse2Impl@container_internal@absl@@QBE?AV?$NonIterableBitMask@I$0BA@$0A@@23@XZ
     ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@ABE_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z
     ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SAIXZ
+    ?MaybeRemoveEmptyCrcNode@InlineRep@Cord@absl@@AAEXXZ
     ?MaybeTrackCordImpl@CordzInfo@cord_internal@absl@@CAXAAVInlineData@23@ABV423@W4MethodIdentifier@CordzUpdateTracker@23@@Z
     ?MergeTrees@CordRepBtree@cord_internal@absl@@CAPAV123@PAV123@0@Z
     ?Min@string_view@absl@@CAIII@Z
@@ -2233,7 +2234,6 @@
     ?PushDead@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AAEXPAUHashtablezInfo@container_internal@3@@Z
     ?PushNew@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AAEXPAUHashtablezInfo@container_internal@3@@Z
     ?PutPaddedString@FormatSinkImpl@str_format_internal@absl@@QAE_NVstring_view@3@HH_N@Z
-    ?PutPaddedString@StringifySink@strings_internal@absl@@QAE_NVstring_view@3@HH_N@Z
     ?PutTwoDigits@numbers_internal@absl@@YAXIPAD@Z
     ?RandomSeed@container_internal@absl@@YAIXZ
     ?RawLog@raw_log_internal@absl@@YAXW4LogSeverity@2@PBDH1ZZ
@@ -3043,7 +3043,6 @@
     ?empty@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@Cr@std@@@Cr@std@@QBE_NXZ
     ?empty@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@Cr@std@@@Cr@std@@QBE_NXZ
     ?empty@Cord@absl@@QBE_NXZ
-    ?empty@InlineRep@Cord@absl@@QBE_NXZ
     ?empty@string_view@absl@@QBE_NXZ
     ?end@?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@Cr@std@@@absl@@QAEPAUPayload@status_internal@2@XZ
     ?end@?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@Cr@std@@@absl@@QBEPBUPayload@status_internal@2@XZ
diff --git a/third_party/abseil-cpp/symbols_x86_rel.def b/third_party/abseil-cpp/symbols_x86_rel.def
index 2e7b799..9003f28 100644
--- a/third_party/abseil-cpp/symbols_x86_rel.def
+++ b/third_party/abseil-cpp/symbols_x86_rel.def
@@ -140,6 +140,7 @@
     ??0Condition@absl@@QAE@P6A_NPAX@Z0@Z
     ??0Condition@absl@@QAE@PB_N@Z
     ??0Cord@absl@@AAE@Vstring_view@1@W4MethodIdentifier@CordzUpdateTracker@cord_internal@1@@Z
+    ??0Cord@absl@@QAE@ABV01@@Z
     ??0CordzHandle@cord_internal@absl@@IAE@_N@Z
     ??0CordzInfo@cord_internal@absl@@AAE@PAUCordRep@12@PBV012@W4MethodIdentifier@CordzUpdateTracker@12@@Z
     ??0GraphCycles@synchronization_internal@absl@@QAE@XZ
@@ -308,7 +309,7 @@
     ?CalculateBase64EscapedLenInternal@strings_internal@absl@@YAII_N@Z
     ?CallVoidPtrFunction@Condition@absl@@CA_NPBV12@@Z
     ?CancelledError@absl@@YA?AVStatus@1@Vstring_view@1@@Z
-    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAIVstring_view@2@0E@Z
+    ?CappedDamerauLevenshteinDistance@strings_internal@absl@@YAEVstring_view@2@0E@Z
     ?CatPieces@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@Cr@std@@V?$allocator@D@23@@Cr@std@@V?$initializer_list@Vstring_view@absl@@@5@@Z
     ?Ceil@absl@@YA?AVDuration@1@V21@0@Z
     ?CheckInvariants@GraphCycles@synchronization_internal@absl@@QBE_NXZ
@@ -677,7 +678,6 @@
     ?Ptr@GraphCycles@synchronization_internal@absl@@QAEPAXUGraphId@23@@Z
     ?PushDead@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@AAEXPAUHashtablezInfo@container_internal@3@@Z
     ?PutPaddedString@FormatSinkImpl@str_format_internal@absl@@QAE_NVstring_view@3@HH_N@Z
-    ?PutPaddedString@StringifySink@strings_internal@absl@@QAE_NVstring_view@3@HH_N@Z
     ?RawLog@raw_log_internal@absl@@YAXW4LogSeverity@2@PBDH1ZZ
     ?RawLoggingFullySupported@raw_log_internal@absl@@YA_NXZ
     ?Read@CordRepBtreeNavigator@cord_internal@absl@@QAE?AUReadResult@123@II@Z
diff --git a/third_party/blink/common/web_package/web_package_request_matcher.cc b/third_party/blink/common/web_package/web_package_request_matcher.cc
index e2c8e4f4..3a2f4d5 100644
--- a/third_party/blink/common/web_package/web_package_request_matcher.cc
+++ b/third_party/blink/common/web_package/web_package_request_matcher.cc
@@ -235,8 +235,7 @@
                               const std::string& preferred_lang,
                               std::vector<std::string>* output) {
     if (preferred_lang == "*") {
-      std::copy(available_values.begin(), available_values.end(),
-                std::back_inserter(*output));
+      base::ranges::copy(available_values, std::back_inserter(*output));
       return;
     }
 
diff --git a/third_party/blink/public/strings/translations/blink_strings_af.xtb b/third_party/blink/public/strings/translations/blink_strings_af.xtb
index 226aa252..e16ac9d3 100644
--- a/third_party/blink/public/strings/translations/blink_strings_af.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_af.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">Wys volgende maand</translation>
 <translation id="5164977714490026579">Waarde moet groter as of gelyk aan <ph name="MINIMUM" /> wees.</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">terug na opsies</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">Nie gemerk nie. In groep, opsie <ph name="INDEX" /> van <ph name="COUNT" /></translation>
 <translation id="5307600278924710095">Voer asseblief 'n deel gevolg deur "<ph name="ATSIGN" />" in. "<ph name="INVALIDADDRESS" />" is onvolledig.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bs.xtb b/third_party/blink/public/strings/translations/blink_strings_bs.xtb
index e399ccd..7fff2a9 100644
--- a/third_party/blink/public/strings/translations/blink_strings_bs.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_bs.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">Prikaz sljedećeg mjeseca</translation>
 <translation id="5164977714490026579">Vrijednost mora biti veća od ili jednaka <ph name="MINIMUM" />.</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">natrag na opcije</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">Neoznačeno. <ph name="INDEX" />. opcija od <ph name="COUNT" /> u grupi</translation>
 <translation id="5307600278924710095">Unesite dio adrese ispred znaka "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" nije potpuna e-adresa.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_el.xtb b/third_party/blink/public/strings/translations/blink_strings_el.xtb
index d2a3165..94b07fe 100644
--- a/third_party/blink/public/strings/translations/blink_strings_el.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_el.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">Εμφάνιση επόμενου μήνα</translation>
 <translation id="5164977714490026579">Η τιμή πρέπει να είναι μεγαλύτερη ή ίση του <ph name="MINIMUM" />.</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">επιστροφή στις επιλογές</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">Μη επιλεγμένο. Σε ομάδα, επιλογή <ph name="INDEX" /> από <ph name="COUNT" /></translation>
 <translation id="5307600278924710095">Καταχωρίστε το τμήμα της διεύθυνσης πριν το σύμβολο "<ph name="ATSIGN" />". Η διεύθυνση "<ph name="INVALIDADDRESS" />" δεν είναι πλήρης.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb b/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb
index aecab21..ba37bb4 100644
--- a/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_fr-CA.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">Afficher le mois suivant</translation>
 <translation id="5164977714490026579">La valeur doit être supérieure ou égale à <ph name="MINIMUM" />.</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">retour aux options</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> Po</translation>
 <translation id="5272594226096532950">Non coché. Dans le groupe, option <ph name="INDEX" /> de <ph name="COUNT" /></translation>
 <translation id="5307600278924710095">Veuillez entrer la partie manquante avant le caractère « <ph name="ATSIGN" /> ». L'adresse « <ph name="INVALIDADDRESS" /> » est incomplète.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hr.xtb b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
index 88f615c..3c39665 100644
--- a/third_party/blink/public/strings/translations/blink_strings_hr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">Prikaži sljedeći mjesec</translation>
 <translation id="5164977714490026579">Vrijednost mora biti <ph name="MINIMUM" /> ili veća.</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">natrag na opcije</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">Nije označeno. Opcija <ph name="INDEX" /> od <ph name="COUNT" /> u grupi</translation>
 <translation id="5307600278924710095">Unesite dio adrese ispred znaka "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" nije potpuna e-adresa.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_km.xtb b/third_party/blink/public/strings/translations/blink_strings_km.xtb
index 49cbeda2..da7da30 100644
--- a/third_party/blink/public/strings/translations/blink_strings_km.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_km.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">បង្ហាញខែបន្ទាប់</translation>
 <translation id="5164977714490026579">តម្លៃត្រូវតែធំជាង ឬស្មើនឹង <ph name="MINIMUM" />។</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">ត្រឡប់​ទៅជម្រើស</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">មិន​បាន​ធីក។ នៅក្នុងក្រុម ជម្រើសទី <ph name="INDEX" /> នៃ <ph name="COUNT" /></translation>
 <translation id="5307600278924710095">សូមបញ្ចូលផ្នែកមួយនៅខាងមុខ '<ph name="ATSIGN" />'។ '<ph name="INVALIDADDRESS" />' មិនពេញលេញទេ។</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lo.xtb b/third_party/blink/public/strings/translations/blink_strings_lo.xtb
index 3c40111..f691658c 100644
--- a/third_party/blink/public/strings/translations/blink_strings_lo.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_lo.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">ສະ​ແດງ​ເດືອນ​ຕໍ່​ໄປ</translation>
 <translation id="5164977714490026579">ຄ່າຕ້ອງໃຫຍ່ກ່ວາ ຫຼືເທົ່າກັບ <ph name="MINIMUM" />.</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">ກັບໄປຫາຕົວເລືອກ</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">ບໍ່ໄດ້ເລືອກເທື່ອ. ໃນກຸ່ມ, ຕົວເລືອກທີ <ph name="INDEX" /> ຈາກທັງໝົດ <ph name="COUNT" /></translation>
 <translation id="5307600278924710095">ກະ​ລຸ​ນາ​ໃສ່​ພາກ​ສ່ວນໜຶ່ງ​ຕາມມາ​ດ້ວຍ '<ph name="ATSIGN" />'. '<ph name="INVALIDADDRESS" />' ບໍ່ສົມບູນ.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
index 75de547..e2e81a6 100644
--- a/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_pt-BR.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">Mostrar próximo mês</translation>
 <translation id="5164977714490026579">O valor deve ser maior ou igual a <ph name="MINIMUM" />.</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">voltar para as opções</translation>
 <translation id="520299402983819650"><ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">Desmarcado. No grupo, opção <ph name="INDEX" /> de <ph name="COUNT" /></translation>
 <translation id="5307600278924710095">Insira uma parte seguida por "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" está incompleto.</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ur.xtb b/third_party/blink/public/strings/translations/blink_strings_ur.xtb
index 8509d71..aa31bc6 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ur.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ur.xtb
@@ -79,6 +79,7 @@
 <translation id="5117590920725113268">اگلا مہینہ دکھائیں</translation>
 <translation id="5164977714490026579">قدر <ph name="MINIMUM" /> سے زیادہ یا اس کے برابر ہونا ضروری ہے۔</translation>
 <translation id="5196716972587102051">2</translation>
+<translation id="5199514351668672591">اختیارات پر واپس جائیں</translation>
 <translation id="520299402983819650">‎<ph name="QUANTITY" /> PB</translation>
 <translation id="5272594226096532950">نشان زد نہیں کیا گیا۔ گروپ میں، <ph name="COUNT" /> میں سے <ph name="INDEX" /> اختیار</translation>
 <translation id="5307600278924710095">براہ کرم '<ph name="ATSIGN" />' کے بعد ایک حصہ درج کریں۔ '<ph name="INVALIDADDRESS" />' نامکمل ہے۔</translation>
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
index a42f24ff..c8baad9 100644
--- a/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
+++ b/third_party/blink/renderer/bindings/core/v8/serialization/serialized_script_value.cc
@@ -34,6 +34,7 @@
 
 #include "base/numerics/checked_math.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/ranges/algorithm.h"
 #include "base/sys_byteorder.h"
 #include "third_party/blink/public/web/web_serialized_script_value_version.h"
 #include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
@@ -215,7 +216,7 @@
     return Create();
 
   DataBufferPtr data_buffer = AllocateBuffer(data.size());
-  std::copy(data.begin(), data.end(), data_buffer.get());
+  base::ranges::copy(data, data_buffer.get());
   SwapWiredDataIfNeeded(data_buffer.get(), data.size());
 
   return base::AdoptRef(
@@ -230,8 +231,7 @@
   DataBufferPtr data_buffer = AllocateBuffer(buffer->size());
   size_t offset = 0;
   for (const auto& span : *buffer) {
-    std::copy(span.data(), span.data() + span.size(),
-              data_buffer.get() + offset);
+    base::ranges::copy(span, data_buffer.get() + offset);
     offset += span.size();
   }
   SwapWiredDataIfNeeded(data_buffer.get(), buffer->size());
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/trailer_writer.cc b/third_party/blink/renderer/bindings/core/v8/serialization/trailer_writer.cc
index 32cf1b6..ca7f678 100644
--- a/third_party/blink/renderer/bindings/core/v8/serialization/trailer_writer.cc
+++ b/third_party/blink/renderer/bindings/core/v8/serialization/trailer_writer.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/bindings/core/v8/serialization/trailer_writer.h"
 
 #include "base/feature_list.h"
+#include "base/ranges/algorithm.h"
 #include "base/sys_byteorder.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/renderer/bindings/core/v8/serialization/serialization_tag.h"
@@ -32,9 +33,8 @@
     trailer.Grow(start + 1 + sizeof(uint32_t) + num_exposed);
     trailer[start] = kTrailerRequiresInterfacesTag;
     memcpy(&trailer[start + 1], &num_exposed_enc, sizeof(uint32_t));
-    std::copy(requires_exposed_interfaces_.begin(),
-              requires_exposed_interfaces_.end(),
-              &trailer[start + 1 + sizeof(uint32_t)]);
+    base::ranges::copy(requires_exposed_interfaces_,
+                       &trailer[start + 1 + sizeof(uint32_t)]);
   }
   return trailer;
 }
diff --git a/third_party/blink/renderer/build/scripts/templates/fields/monotonic_flag.tmpl b/third_party/blink/renderer/build/scripts/templates/fields/monotonic_flag.tmpl
index d02d296..017d539 100644
--- a/third_party/blink/renderer/build/scripts/templates/fields/monotonic_flag.tmpl
+++ b/third_party/blink/renderer/build/scripts/templates/fields/monotonic_flag.tmpl
@@ -4,9 +4,11 @@
 
 {% macro decl_public_methods(field) %}
 {{base.decl_getter_method(field)}}
+{% if not field.readonly or field.mutable %}
 void {{field.setter_method_name}}() {{print_if(field.mutable, "const ")}}{
   {{set_if_changed(field, encode(field, "true"))|indent(2)}}
 }
+{% endif %}
 {% endmacro %}
 
 {% macro decl_protected_methods(field) -%}
diff --git a/third_party/blink/renderer/core/css/css_color_mix_value.cc b/third_party/blink/renderer/core/css/css_color_mix_value.cc
index 5c929c5..27304628 100644
--- a/third_party/blink/renderer/core/css/css_color_mix_value.cc
+++ b/third_party/blink/renderer/core/css/css_color_mix_value.cc
@@ -61,7 +61,7 @@
   // eagerly resolved (https://github.com/w3c/csswg-drafts/issues/6168)
   // Color keywords should be handled similarly.
   StringBuilder result;
-  result.Append("color-mix(");
+  result.Append("color-mix(in ");
   result.Append(Color::ColorInterpolationSpaceToString(
       color_interpolation_space_, hue_interpolation_method_));
   result.Append(", ");
diff --git a/third_party/blink/renderer/core/css/parser/css_lazy_parsing_test.cc b/third_party/blink/renderer/core/css/parser/css_lazy_parsing_test.cc
index 1b6341c..0e296850 100644
--- a/third_party/blink/renderer/core/css/parser/css_lazy_parsing_test.cc
+++ b/third_party/blink/renderer/core/css/parser/css_lazy_parsing_test.cc
@@ -135,12 +135,12 @@
       kHTMLStandardMode, SecureContextMode::kInsecureContext);
   auto* style_sheet = MakeGarbageCollected<StyleSheetContents>(context);
 
-  String sheet_text = "body { & div { color: red; } }";
+  String sheet_text = "body { & div { color: red; } color: green; }";
   CSSParser::ParseSheet(context, style_sheet, sheet_text,
                         CSSDeferPropertyParsing::kYes);
   StyleRule* rule = RuleAt(style_sheet, 0);
   EXPECT_TRUE(HasParsedProperties(rule));
-  rule->Properties();
+  EXPECT_EQ("color: green;", rule->Properties().AsText());
   EXPECT_TRUE(HasParsedProperties(rule));
 }
 
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
index 28c16cdc..f489996 100644
--- a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
+++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
@@ -1523,16 +1523,16 @@
     if (RuntimeEnabledFeatures::CSSNestingEnabled() &&
         MayContainNestedRules(lazy_state_->SheetText(), block_start_offset,
                               block_length)) {
-      CSSTokenizer tokenizer(lazy_state_->SheetText(), block_start_offset);
+      CSSTokenizer tokenizer(lazy_state_->SheetText(), block_start_offset + 1);
       CSSParserTokenStream block_stream(tokenizer);
-      return ConsumeStyleRuleContents(std::move(selector_vector), block_stream);
+      return ConsumeStyleRuleContents(selector_vector, block_stream);
     }
 
     return StyleRule::Create(selector_vector,
                              MakeGarbageCollected<CSSLazyPropertyParserImpl>(
                                  block_start_offset, lazy_state_));
   }
-  return ConsumeStyleRuleContents(std::move(selector_vector), stream);
+  return ConsumeStyleRuleContents(selector_vector, stream);
 }
 
 StyleRule* CSSParserImpl::ConsumeStyleRuleContents(
diff --git a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
index 6416bb53..519ca88 100644
--- a/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
+++ b/third_party/blink/renderer/core/css/parser/css_selector_parser.cc
@@ -645,13 +645,14 @@
     //
     // We need to temporarily mark the end of the selector list, for the benefit
     // of SelectorListIsNestContaining().
-    reset_vector.AddedElements().back().SetLastInSelectorList(true);
+    wtf_size_t last_index = output_.size() - 1;
+    output_[last_index].SetLastInSelectorList(true);
     if (!SelectorListIsNestContaining(reset_vector.AddedElements().data())) {
       output_.back().SetRelation(CSSSelector::kDescendant);
       output_.push_back(
           CSSSelector(parent_rule_for_nesting_, /*is_implicit=*/true));
     }
-    reset_vector.AddedElements().back().SetLastInSelectorList(false);
+    output_[last_index].SetLastInSelectorList(false);
   }
 
   MarkAsEntireComplexSelector(reset_vector.AddedElements());
diff --git a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
index bf61225..6818ee21 100644
--- a/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
+++ b/third_party/blink/renderer/core/css/properties/css_parsing_utils.cc
@@ -74,7 +74,6 @@
 #include "third_party/blink/renderer/core/svg/svg_path_utilities.h"
 #include "third_party/blink/renderer/platform/animation/timing_function.h"
 #include "third_party/blink/renderer/platform/fonts/font_selection_types.h"
-#include "third_party/blink/renderer/platform/geometry/length.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_initiator_type_names.h"
@@ -1753,12 +1752,17 @@
 
   CSSValue* color1 =
       ConsumeColor(args, context, false /* Accept quirky colors */);
-  if (!color1)
-    return nullptr;
   CSSPrimitiveValue* p1 =
       ConsumePercent(args, context, CSSPrimitiveValue::ValueRange::kAll);
-  // Reject negative values, but not negative calc() values.
-  if (p1 && p1->IsNumericLiteralValue() && p1->GetDoubleValue() < 0.0)
+  // Color can come after the percentage
+  if (!color1) {
+    color1 = ConsumeColor(args, context, false /* Accept quirky colors */);
+    if (!color1)
+      return nullptr;
+  }
+  // Reject negative values and values > 100%, but not calc() values.
+  if (p1 && p1->IsNumericLiteralValue() &&
+      (p1->GetDoubleValue() < 0.0 || p1->GetDoubleValue() > 100.0))
     return nullptr;
 
   if (!ConsumeCommaIncludingWhitespace(args))
@@ -1766,11 +1770,17 @@
 
   CSSValue* color2 =
       ConsumeColor(args, context, false /* Accept quirky colors */);
-  if (!color2)
-    return nullptr;
   CSSPrimitiveValue* p2 =
       ConsumePercent(args, context, CSSPrimitiveValue::ValueRange::kAll);
-  if (p2 && p2->IsNumericLiteralValue() && p2->GetDoubleValue() < 0.0)
+  // Color can come after the percentage
+  if (!color2) {
+    color2 = ConsumeColor(args, context, false /* Accept quirky colors */);
+    if (!color2)
+      return nullptr;
+  }
+  // Reject negative values and values > 100%, but not calc() values.
+  if (p2 && p2->IsNumericLiteralValue() &&
+      (p2->GetDoubleValue() < 0.0 || p2->GetDoubleValue() > 100.0))
     return nullptr;
 
   // If both values are literally zero (and not calc()) reject at parse time
diff --git a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
index 15b80c0..8cc4f5f 100644
--- a/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
+++ b/third_party/blink/renderer/core/css/properties/longhands/longhands_custom.cc
@@ -2278,7 +2278,7 @@
       if (const auto* function_value =
               DynamicTo<CSSFunctionValue>(item.Get())) {
         DCHECK_EQ(function_value->FunctionType(), CSSValueID::kAttr);
-        state.Style()->SetHasAttrContent();
+        builder.SetHasAttrContent();
         // TODO: Can a namespace be specified for an attr(foo)?
         QualifiedName attr(
             g_null_atom,
@@ -2653,28 +2653,31 @@
 }
 
 void Display::ApplyInitial(StyleResolverState& state) const {
-  state.Style()->SetDisplay(ComputedStyleInitialValues::InitialDisplay());
-  state.Style()->SetDisplayLayoutCustomName(
+  ComputedStyleBuilder& builder = state.StyleBuilder();
+  builder.SetDisplay(ComputedStyleInitialValues::InitialDisplay());
+  builder.SetDisplayLayoutCustomName(
       ComputedStyleInitialValues::InitialDisplayLayoutCustomName());
 }
 
 void Display::ApplyInherit(StyleResolverState& state) const {
-  state.Style()->SetDisplay(state.ParentStyle()->Display());
-  state.Style()->SetDisplayLayoutCustomName(
+  ComputedStyleBuilder& builder = state.StyleBuilder();
+  builder.SetDisplay(state.ParentStyle()->Display());
+  builder.SetDisplayLayoutCustomName(
       state.ParentStyle()->DisplayLayoutCustomName());
 }
 
 void Display::ApplyValue(StyleResolverState& state,
                          const CSSValue& value) const {
+  ComputedStyleBuilder& builder = state.StyleBuilder();
   if (auto* identifier_value = DynamicTo<CSSIdentifierValue>(value)) {
-    state.Style()->SetDisplay(identifier_value->ConvertTo<EDisplay>());
-    state.Style()->SetDisplayLayoutCustomName(
+    builder.SetDisplay(identifier_value->ConvertTo<EDisplay>());
+    builder.SetDisplayLayoutCustomName(
         ComputedStyleInitialValues::InitialDisplayLayoutCustomName());
     return;
   }
 
   if (value.IsValueList()) {
-    state.Style()->SetDisplayLayoutCustomName(
+    builder.SetDisplayLayoutCustomName(
         ComputedStyleInitialValues::InitialDisplayLayoutCustomName());
     const CSSValueList& display_pair = To<CSSValueList>(value);
     DCHECK_EQ(display_pair.length(), 2u);
@@ -2685,9 +2688,9 @@
     // TODO(crbug.com/995106): should apply to more than just math.
     DCHECK(inside.GetValueID() == CSSValueID::kMath);
     if (outside.GetValueID() == CSSValueID::kBlock)
-      state.Style()->SetDisplay(EDisplay::kBlockMath);
+      builder.SetDisplay(EDisplay::kBlockMath);
     else
-      state.Style()->SetDisplay(EDisplay::kMath);
+      builder.SetDisplay(EDisplay::kMath);
     return;
   }
 
@@ -2697,8 +2700,8 @@
   EDisplay display = layout_function_value.IsInline()
                          ? EDisplay::kInlineLayoutCustom
                          : EDisplay::kLayoutCustom;
-  state.Style()->SetDisplay(display);
-  state.Style()->SetDisplayLayoutCustomName(layout_function_value.GetName());
+  builder.SetDisplay(display);
+  builder.SetDisplayLayoutCustomName(layout_function_value.GetName());
 }
 
 const CSSValue* DominantBaseline::CSSValueFromComputedStyleInternal(
diff --git a/third_party/blink/renderer/core/css/resolver/matched_properties_cache_test.cc b/third_party/blink/renderer/core/css/resolver/matched_properties_cache_test.cc
index 3e49204..5f8fa48 100644
--- a/third_party/blink/renderer/core/css/resolver/matched_properties_cache_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/matched_properties_cache_test.cc
@@ -270,15 +270,17 @@
 
   auto parent_a = CreateStyle();
   auto parent_b = CreateStyle();
-  auto style_a = CreateStyle();
-  auto style_b = CreateStyle();
   parent_a->SetVariableData("--x", CreateVariableData("1px"), true);
   parent_b->SetVariableData("--x", CreateVariableData("2px"), true);
-  style_a->SetHasVariableReferenceFromNonInheritedProperty();
-  style_b->SetHasVariableReferenceFromNonInheritedProperty();
+
+  auto style_builder_a = CreateStyleBuilder();
+  auto style_builder_b = CreateStyleBuilder();
+  style_builder_a.SetHasVariableReferenceFromNonInheritedProperty();
+  style_builder_b.SetHasVariableReferenceFromNonInheritedProperty();
+  auto style_a = style_builder_a.TakeStyle();
+  auto style_b = style_builder_b.TakeStyle();
 
   TestKey key("top:var(--x)", 1, GetDocument());
-
   cache.Add(key, *style_a, *parent_a);
   EXPECT_TRUE(cache.Find(key, *style_a, *parent_a));
   EXPECT_TRUE(cache.Find(key, *style_b, *parent_a));
@@ -290,10 +292,13 @@
 
   auto parent_a = CreateStyle();
   auto parent_b = CreateStyle();
-  auto style_a = CreateStyle();
-  auto style_b = CreateStyle();
-  style_a->SetHasVariableReferenceFromNonInheritedProperty();
-  style_b->SetHasVariableReferenceFromNonInheritedProperty();
+
+  auto style_builder_a = CreateStyleBuilder();
+  auto style_builder_b = CreateStyleBuilder();
+  style_builder_a.SetHasVariableReferenceFromNonInheritedProperty();
+  style_builder_b.SetHasVariableReferenceFromNonInheritedProperty();
+  auto style_a = style_builder_a.TakeStyle();
+  auto style_b = style_builder_b.TakeStyle();
 
   TestKey key("top:var(--x)", 1, GetDocument());
 
diff --git a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
index 8348da06..4aeb8268 100644
--- a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
@@ -366,12 +366,13 @@
   LayoutNGTextCombine::AssertStyleIsValid(style);
 }
 
-static void AdjustStyleForFirstLetter(ComputedStyle& style) {
+static void AdjustStyleForFirstLetter(ComputedStyleBuilder& builder) {
+  const ComputedStyle& style = *builder.InternalStyle();
   if (style.StyleType() != kPseudoIdFirstLetter)
     return;
 
   // Force inline display (except for floating first-letters).
-  style.SetDisplay(style.IsFloating() ? EDisplay::kBlock : EDisplay::kInline);
+  builder.SetDisplay(style.IsFloating() ? EDisplay::kBlock : EDisplay::kInline);
 }
 
 static void AdjustStyleForMarker(ComputedStyle& style,
@@ -399,7 +400,7 @@
     setter.SetInlineEnd(Length::Fixed(margins.second));
   } else {
     // Outside list markers should generate a block container.
-    style.SetDisplay(EDisplay::kInlineBlock);
+    builder.SetDisplay(EDisplay::kInlineBlock);
 
     // Do not break inside the marker, and honor the trailing spaces.
     builder.SetWhiteSpace(EWhiteSpace::kPre);
@@ -422,7 +423,7 @@
 
   if (auto* image = DynamicTo<HTMLImageElement>(element)) {
     if (image->IsCollapsed() || style.Display() == EDisplay::kContents)
-      style.SetDisplay(EDisplay::kNone);
+      builder.SetDisplay(EDisplay::kNone);
     return;
   }
 
@@ -448,7 +449,7 @@
 
   if (IsA<HTMLFrameElementBase>(element)) {
     if (style.Display() == EDisplay::kContents) {
-      style.SetDisplay(EDisplay::kNone);
+      builder.SetDisplay(EDisplay::kNone);
       return;
     }
     return;
@@ -467,16 +468,16 @@
       switch (DisplayOutside(style.Display())) {
         case EDisplay::kInline:
         case EDisplay::kContents:
-          style.SetDisplay(EDisplay::kInlineBlock);
+          builder.SetDisplay(EDisplay::kInlineBlock);
           break;
         case EDisplay::kBlock:
-          style.SetDisplay(EDisplay::kBlock);
+          builder.SetDisplay(EDisplay::kBlock);
           break;
         case EDisplay::kNone:
           break;
         default:
           NOTREACHED();
-          style.SetDisplay(EDisplay::kInlineBlock);
+          builder.SetDisplay(EDisplay::kInlineBlock);
           break;
       }
     }
@@ -499,7 +500,7 @@
     // fieldset. However, Blink determines the rendered legend during layout
     // instead of during layout object creation, and also generally makes
     // assumptions that the computed display value is the one to use.
-    style.SetDisplay(EquivalentBlockDisplay(style.Display()));
+    builder.SetDisplay(EquivalentBlockDisplay(style.Display()));
     return;
   }
 
@@ -519,7 +520,7 @@
                              ? EOverflow::kAuto
                              : style.OverflowY());
     if (style.Display() == EDisplay::kContents)
-      style.SetDisplay(EDisplay::kNone);
+      builder.SetDisplay(EDisplay::kNone);
     return;
   }
 
@@ -527,7 +528,7 @@
     style.SetRequiresAcceleratedCompositingForExternalReasons(
         html_plugin_element->ShouldAccelerate());
     if (style.Display() == EDisplay::kContents)
-      style.SetDisplay(EDisplay::kNone);
+      builder.SetDisplay(EDisplay::kNone);
     return;
   }
 
@@ -544,7 +545,7 @@
         IsA<HTMLCanvasElement>(element) || IsA<HTMLMediaElement>(element) ||
         IsA<HTMLInputElement>(element) || IsA<HTMLTextAreaElement>(element) ||
         IsA<HTMLSelectElement>(element)) {
-      style.SetDisplay(EDisplay::kNone);
+      builder.SetDisplay(EDisplay::kNone);
     }
   }
 
@@ -613,7 +614,7 @@
   if (layout_parent_style.BlockifiesChildren() && !HostIsInputFile(element)) {
     style.SetIsInBlockifyingDisplay();
     if (style.Display() != EDisplay::kContents) {
-      style.SetDisplay(EquivalentBlockDisplay(style.Display()));
+      builder.SetDisplay(EquivalentBlockDisplay(style.Display()));
       if (!style.HasOutOfFlowPosition())
         style.SetIsFlexOrGridOrCustomItem();
     }
@@ -629,7 +630,7 @@
   if (style.Display() == EDisplay::kInline &&
       style.StyleType() == kPseudoIdNone &&
       style.GetWritingMode() != layout_parent_style.GetWritingMode())
-    style.SetDisplay(EDisplay::kInlineBlock);
+    builder.SetDisplay(EDisplay::kInlineBlock);
 
   // writing-mode does not apply to table row groups, table column groups, table
   // rows, and table columns.
@@ -873,7 +874,7 @@
         // See crbug.com/1240701 for more details.
         // https://fullscreen.spec.whatwg.org/#new-stacking-layer
         // If its specified display property is contents, it computes to block.
-        style.SetDisplay(EDisplay::kBlock);
+        builder.SetDisplay(EDisplay::kBlock);
       }
     }
 
@@ -881,24 +882,24 @@
     // element need block-like outside display.
     if (style.Display() != EDisplay::kContents &&
         (style.HasOutOfFlowPosition() || style.IsFloating()))
-      style.SetDisplay(EquivalentBlockDisplay(style.Display()));
+      builder.SetDisplay(EquivalentBlockDisplay(style.Display()));
 
     if (is_document_element)
-      style.SetDisplay(EquivalentBlockDisplay(style.Display()));
+      builder.SetDisplay(EquivalentBlockDisplay(style.Display()));
 
     // math display values on non-MathML elements compute to flow display
     // values.
     if ((!element || !is_mathml_element) &&
         style.IsDisplayMathBox(style.Display())) {
       DCHECK(RuntimeEnabledFeatures::MathMLCoreEnabled());
-      style.SetDisplay(style.Display() == EDisplay::kBlockMath
-                           ? EDisplay::kBlock
-                           : EDisplay::kInline);
+      builder.SetDisplay(style.Display() == EDisplay::kBlockMath
+                             ? EDisplay::kBlock
+                             : EDisplay::kInline);
     }
 
     // We don't adjust the first letter style earlier because we may change the
     // display setting in AdjustStyleForHTMLElement() above.
-    AdjustStyleForFirstLetter(style);
+    AdjustStyleForFirstLetter(builder);
     AdjustStyleForMarker(style, builder, parent_style, state.GetElement());
 
     AdjustStyleForDisplay(style, builder, layout_parent_style, element,
@@ -907,7 +908,7 @@
     // If this is a child of a LayoutNGCustom, we need the name of the parent
     // layout function for invalidation purposes.
     if (layout_parent_style.IsDisplayLayoutCustomBox()) {
-      style.SetDisplayLayoutCustomParentName(
+      builder.SetDisplayLayoutCustomParentName(
           layout_parent_style.DisplayLayoutCustomName());
     }
 
@@ -917,7 +918,7 @@
     if (is_document_element && is_in_main_frame && style.HasBackdropFilter())
       builder.MutableBackdropFilter().clear();
   } else {
-    AdjustStyleForFirstLetter(style);
+    AdjustStyleForFirstLetter(builder);
   }
 
   // Make sure our z-index value is only applied if the object is positioned.
@@ -998,14 +999,14 @@
       // "hoisted". For other elements display:contents behaves as display:none.
       //
       // [1] https://drafts.csswg.org/css-display/#unbox-svg
-      style.SetDisplay(EDisplay::kNone);
+      builder.SetDisplay(EDisplay::kNone);
     }
 
     // SVG text layout code expects us to be a block-level style element.
     if ((IsA<SVGForeignObjectElement>(*element) ||
          IsA<SVGTextElement>(*element)) &&
         style.IsDisplayInlineType())
-      style.SetDisplay(EDisplay::kBlock);
+      builder.SetDisplay(EDisplay::kBlock);
 
     // Columns don't apply to svg text elements.
     if (IsA<SVGTextElement>(*element))
@@ -1028,7 +1029,7 @@
   } else if (is_mathml_element) {
     if (style.Display() == EDisplay::kContents) {
       // https://drafts.csswg.org/css-display/#unbox-mathml
-      style.SetDisplay(EDisplay::kNone);
+      builder.SetDisplay(EDisplay::kNone);
     }
 
     if (style.GetWritingMode() != WritingMode::kHorizontalTb) {
@@ -1096,7 +1097,7 @@
     // compatible with the block fragmentation implementation being used.
     if (style.SpecifiesColumns() ||
         (element && element->GetDocument().Printing()))
-      style.SetInsideFragmentationContextWithNondeterministicEngine(true);
+      builder.SetInsideFragmentationContextWithNondeterministicEngine(true);
   }
 }
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/style_builder.cc b/third_party/blink/renderer/core/css/resolver/style_builder.cc
index 8893ca0..3b83e32 100644
--- a/third_party/blink/renderer/core/css/resolver/style_builder.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_builder.cc
@@ -106,7 +106,7 @@
 
   bool is_inherited_for_unset = state.IsInheritedForUnset(property);
   if (is_inherit && !is_inherited_for_unset) {
-    state.Style()->SetHasExplicitInheritance();
+    state.StyleBuilder().SetHasExplicitInheritance();
     state.ParentStyle()->SetChildHasExplicitInheritance();
   } else if (value.IsUnsetValue()) {
     DCHECK(!is_inherit && !is_initial);
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
index 5fbe774..74e2a089 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -812,7 +812,7 @@
   if (HasLineHeightDependency(To<CustomProperty>(property), data.get()))
     resolver.DetectCycle(GetCSSPropertyLineHeight());
 
-  state_.Style()->SetHasVariableDeclaration();
+  state_.StyleBuilder().SetHasVariableDeclaration();
 
   if (resolver.InCycle())
     return CSSCyclicVariableValue::Create();
@@ -1172,8 +1172,8 @@
 
 void StyleCascade::MarkHasVariableReference(const CSSProperty& property) {
   if (!property.IsInherited())
-    state_.Style()->SetHasVariableReferenceFromNonInheritedProperty();
-  state_.Style()->SetHasVariableReference();
+    state_.StyleBuilder().SetHasVariableReferenceFromNonInheritedProperty();
+  state_.StyleBuilder().SetHasVariableReference();
 }
 
 const Document& StyleCascade::GetDocument() const {
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
index 5096443..ac5e1208 100644
--- a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
@@ -2530,7 +2530,7 @@
     )HTML");
 
   TestCascade cascade(GetDocument());
-  cascade.State().Style()->SetInsideLink(EInsideLink::kInsideVisitedLink);
+  cascade.State().StyleBuilder().SetInsideLink(EInsideLink::kInsideVisitedLink);
 
   cascade.Add(ParseDeclarationBlock("background-color:red !important"),
               CascadeOrigin::kAuthor, CSSSelector::kMatchVisited);
@@ -2546,11 +2546,15 @@
 
   auto style = cascade.TakeStyle();
 
-  style->SetInsideLink(EInsideLink::kInsideVisitedLink);
+  ComputedStyleBuilder builder(*style);
+  builder.SetInsideLink(EInsideLink::kInsideVisitedLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color(255, 0, 0),
             style->VisitedDependentColor(GetCSSPropertyBackgroundColor()));
 
-  style->SetInsideLink(EInsideLink::kNotInsideLink);
+  builder = ComputedStyleBuilder(*style);
+  builder.SetInsideLink(EInsideLink::kNotInsideLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color(150, 150, 150),
             style->VisitedDependentColor(GetCSSPropertyBackgroundColor()));
 }
@@ -2574,11 +2578,15 @@
 
   auto style = cascade.TakeStyle();
 
-  style->SetInsideLink(EInsideLink::kInsideVisitedLink);
+  ComputedStyleBuilder builder(*style);
+  builder.SetInsideLink(EInsideLink::kInsideVisitedLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color(150, 150, 150),
             style->VisitedDependentColor(GetCSSPropertyColor()));
 
-  style->SetInsideLink(EInsideLink::kNotInsideLink);
+  builder = ComputedStyleBuilder(*style);
+  builder.SetInsideLink(EInsideLink::kNotInsideLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color(150, 150, 150),
             style->VisitedDependentColor(GetCSSPropertyColor()));
 }
@@ -3076,7 +3084,7 @@
   cascade.Add("color:green", CascadeOrigin::kAuthor);
   cascade.Add("color:red", CascadeOrigin::kAuthor, CSSSelector::kMatchVisited);
 
-  cascade.State().Style()->SetInsideLink(EInsideLink::kInsideVisitedLink);
+  cascade.State().StyleBuilder().SetInsideLink(EInsideLink::kInsideVisitedLink);
   cascade.Apply();
 
   EXPECT_EQ("rgb(0, 128, 0)", cascade.ComputedValue("color"));
@@ -3094,7 +3102,7 @@
   cascade.Add("outline-color:green", CascadeOrigin::kAuthor,
               CSSSelector::kMatchLink);
 
-  cascade.State().Style()->SetInsideLink(EInsideLink::kInsideVisitedLink);
+  cascade.State().StyleBuilder().SetInsideLink(EInsideLink::kInsideVisitedLink);
   cascade.Apply();
 
   EXPECT_EQ("rgb(0, 128, 0)", cascade.ComputedValue("outline-color"));
@@ -3426,11 +3434,15 @@
 
   auto style = cascade.TakeStyle();
 
-  style->SetInsideLink(EInsideLink::kInsideVisitedLink);
+  ComputedStyleBuilder builder(*style);
+  builder.SetInsideLink(EInsideLink::kInsideVisitedLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color(255, 0, 0),
             style->VisitedDependentColor(GetCSSPropertyColor()));
 
-  style->SetInsideLink(EInsideLink::kNotInsideLink);
+  builder = ComputedStyleBuilder(*style);
+  builder.SetInsideLink(EInsideLink::kNotInsideLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color(255, 0, 0),
             style->VisitedDependentColor(GetCSSPropertyColor()));
 }
@@ -3454,10 +3466,14 @@
 
   auto style = cascade.TakeStyle();
 
-  style->SetInsideLink(EInsideLink::kInsideVisitedLink);
+  ComputedStyleBuilder builder(*style);
+  builder.SetInsideLink(EInsideLink::kInsideVisitedLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color::kWhite, style->VisitedDependentColor(GetCSSPropertyColor()));
 
-  style->SetInsideLink(EInsideLink::kNotInsideLink);
+  builder = ComputedStyleBuilder(*style);
+  builder.SetInsideLink(EInsideLink::kNotInsideLink);
+  style = builder.TakeStyle();
   EXPECT_EQ(Color::kWhite, style->VisitedDependentColor(GetCSSPropertyColor()));
 }
 
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
index 6099df2..70ee140 100644
--- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -1072,7 +1072,7 @@
       state.Style()->SetIsEnsuredOutsideFlatTree();
     }
   }
-  state.Style()->SetStyleType(style_request.pseudo_id);
+  state.StyleBuilder().SetStyleType(style_request.pseudo_id);
   state.Style()->SetPseudoArgument(style_request.pseudo_argument);
 
   // For highlight inheritance, propagate link visitedness, forced-colors
@@ -1080,8 +1080,8 @@
   // ‘text-shadow’) from the originating element, even if we have no parent
   // highlight ComputedStyle we can inherit from.
   if (UsesHighlightPseudoInheritance(style_request.pseudo_id)) {
-    state.Style()->SetInsideLink(state.ElementLinkState());
-    state.Style()->SetInForcedColorsMode(
+    state.StyleBuilder().SetInsideLink(state.ElementLinkState());
+    state.StyleBuilder().SetInForcedColorsMode(
         style_request.originating_element_style->InForcedColorsMode());
     state.StyleBuilder().SetForcedColorAdjust(
         style_request.originating_element_style->ForcedColorAdjust());
@@ -1091,7 +1091,7 @@
   }
 
   if (!style_request.IsPseudoStyleRequest() && element.IsLink()) {
-    state.Style()->SetIsLink();
+    state.StyleBuilder().SetIsLink();
     EInsideLink link_state = state.ElementLinkState();
     if (link_state != EInsideLink::kNotInsideLink) {
       bool force_visited = false;
@@ -1100,7 +1100,7 @@
       if (force_visited)
         link_state = EInsideLink::kInsideVisitedLink;
     }
-    state.Style()->SetInsideLink(link_state);
+    state.StyleBuilder().SetInsideLink(link_state);
   }
 }
 
@@ -1336,7 +1336,7 @@
   ApplyCallbackSelectors(state);
 
   // Cache our original display.
-  state.Style()->SetOriginalDisplay(state.Style()->Display());
+  state.StyleBuilder().SetOriginalDisplay(state.Style()->Display());
 
   StyleAdjuster::AdjustComputedStyle(
       state, style_request.IsPseudoStyleRequest() ? nullptr : element);
@@ -1383,7 +1383,7 @@
     state.SetStyle(ComputedStyle::Clone(*animation_base_computed_style));
     state.StyleRef().SetBaseData(
         scoped_refptr<StyleBaseData>(GetBaseData(state)));
-    state.Style()->SetStyleType(style_request.pseudo_id);
+    state.StyleBuilder().SetStyleType(style_request.pseudo_id);
     if (!state.ParentStyle()) {
       state.SetParentStyle(InitialStyleForElement());
       state.SetLayoutParentStyle(state.ParentStyle());
@@ -1418,9 +1418,10 @@
     // but will (generally) not unset them, so reset them before
     // computation.
     state.StyleRef().SetIsStackingContextWithoutContainment(false);
-    state.StyleRef().SetInsideFragmentationContextWithNondeterministicEngine(
-        state.ParentStyle()
-            ->InsideFragmentationContextWithNondeterministicEngine());
+    state.StyleBuilder()
+        .SetInsideFragmentationContextWithNondeterministicEngine(
+            state.ParentStyle()
+                ->InsideFragmentationContextWithNondeterministicEngine());
 
     StyleAdjuster::AdjustComputedStyle(
         state, style_request.IsPseudoStyleRequest() ? nullptr : element);
@@ -1443,7 +1444,7 @@
     // children or not. We'd be doing too much work in such cases, but still
     // maintain correctness.
     if (incremental_style->HasExplicitInheritance()) {
-      state.StyleRef().SetHasExplicitInheritance();
+      state.StyleBuilder().SetHasExplicitInheritance();
     }
 
     // Similarly, if a style went from using viewport units to not,
@@ -1910,7 +1911,7 @@
 
       // Unfortunately the 'link status' is treated like an inherited property.
       // We need to explicitly restore it.
-      state.Style()->SetInsideLink(link_status);
+      state.StyleBuilder().SetInsideLink(link_status);
 
       is_inherited_cache_hit = true;
     }
@@ -2553,12 +2554,13 @@
 
   // Set up our initial style properties based on either the `default_font` or
   // `parent_style`.
-  scoped_refptr<ComputedStyle> style = CreateComputedStyle();
+  ComputedStyleBuilder builder = CreateComputedStyleBuilder();
+  ComputedStyle* style = builder.MutableInternalStyle();
   if (default_font)
     style->SetFontDescription(*default_font);
   else  // parent_style
     style->InheritFrom(*parent_style);
-  style->SetDisplay(is_text_run ? EDisplay::kInline : EDisplay::kBlock);
+  builder.SetDisplay(is_text_run ? EDisplay::kInline : EDisplay::kBlock);
 
   // Apply any properties in the `css_property_value_set`.
   if (css_property_value_set) {
@@ -2580,7 +2582,7 @@
     StyleAdjuster::AdjustComputedStyle(state, nullptr);
   }
 
-  return style;
+  return builder.TakeStyle();
 }
 
 static Font ComputeInitialLetterFont(const ComputedStyle& style,
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 0ca0e23..f669b90 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -3999,17 +3999,20 @@
 
 bool Element::TryToSkipHighlightPseudos(const ComputedStyle* old_style,
                                         ComputedStyle& new_style) const {
-  // If we are a root element (our parent is a Document or ShadowRoot), we need
-  // to recalc if there are or were any non-UA highlight rules (regardless of
-  // whether or not they are non-universal). Otherwise we only need to recalc
-  // once for the UA highlight rules, since those won’t change. They could, if
-  // we ever changed the UA stylesheet dynamically, but we won’t.
+  // If we are a root element (our parent is a Document or ShadowRoot), we can
+  // skip highlight recalc if there neither are nor were any non-UA highlight
+  // rules (regardless of whether or not they are non-universal), and the root’s
+  // effective zoom (‘zoom’ × page zoom × device scale factor) did not change.
+  // In that case, we only need to calculate highlight styles once, because our
+  // UA styles only use type selectors and we never change them dynamically.
   if (parentNode() == ContainingTreeScope().RootNode()) {
     if (new_style.HasNonUaHighlightPseudoStyles())
       return false;
-    if (old_style && old_style->HasNonUaHighlightPseudoStyles())
-      return false;
     if (old_style) {
+      if (old_style->HasNonUaHighlightPseudoStyles())
+        return false;
+      if (old_style->EffectiveZoom() != new_style.EffectiveZoom())
+        return false;
       // Neither the new style nor the old style has any non-UA highlight rules,
       // so they will be equal. Let’s reuse the old styles for all highlights.
       new_style.SetHighlightData(old_style->HighlightData());
@@ -6506,8 +6509,11 @@
     scoped_refptr<ComputedStyle> result =
         GetDocument().GetStyleResolver().ResolveStyle(
             target, style_recalc_context, first_line_inherited_request);
-    if (result)
-      result->SetStyleType(kPseudoIdFirstLineInherited);
+    if (result) {
+      ComputedStyleBuilder builder(*result);
+      builder.SetStyleType(kPseudoIdFirstLineInherited);
+      result = builder.TakeStyle();
+    }
     return result;
   }
 
diff --git a/third_party/blink/renderer/core/dom/pseudo_element.cc b/third_party/blink/renderer/core/dom/pseudo_element.cc
index 17cf3706..5e34dc645 100644
--- a/third_party/blink/renderer/core/dom/pseudo_element.cc
+++ b/third_party/blink/renderer/core/dom/pseudo_element.cc
@@ -217,7 +217,7 @@
   builder.MutableInternalStyle()->InheritFrom(style);
   builder.SetContent(style.GetContentData());
   builder.SetDisplay(EDisplay::kInline);
-  builder.MutableInternalStyle()->SetStyleType(pseudo_id_);
+  builder.SetStyleType(pseudo_id_);
   return builder.TakeStyle();
 }
 
diff --git a/third_party/blink/renderer/core/editing/markers/sorted_document_marker_list_editor.cc b/third_party/blink/renderer/core/editing/markers/sorted_document_marker_list_editor.cc
index c28eec1..742e2076 100644
--- a/third_party/blink/renderer/core/editing/markers/sorted_document_marker_list_editor.cc
+++ b/third_party/blink/renderer/core/editing/markers/sorted_document_marker_list_editor.cc
@@ -4,6 +4,8 @@
 
 #include "third_party/blink/renderer/core/editing/markers/sorted_document_marker_list_editor.h"
 
+#include <algorithm>
+
 #include "base/numerics/safe_conversions.h"
 #include "third_party/blink/renderer/core/editing/markers/spell_check_marker_list_impl.h"
 
diff --git a/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc b/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc
index 29097aa7..1f2c17a 100644
--- a/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc
+++ b/third_party/blink/renderer/core/html/forms/text_control_inner_elements.cc
@@ -153,7 +153,7 @@
       To<HTMLFormControlElement>(host)->IsDisabledOrReadOnly()
           ? EUserModify::kReadOnly
           : EUserModify::kReadWritePlaintextOnly);
-  text_block_style->SetDisplay(EDisplay::kBlock);
+  text_block_style_builder.SetDisplay(EDisplay::kBlock);
   text_block_style_builder.SetHasLineIfEmpty(true);
   text_block_style->SetShouldIgnoreOverflowPropertyForInlineBlockBaseline();
 
@@ -191,15 +191,16 @@
     text_block_style_builder.SetOverflowX(EOverflow::kScroll);
     // overflow-y:visible doesn't work because overflow-x:scroll makes a layer.
     text_block_style_builder.SetOverflowY(EOverflow::kScroll);
-    scoped_refptr<ComputedStyle> no_scrollbar_style =
-        GetDocument().GetStyleResolver().CreateComputedStyle();
-    no_scrollbar_style->SetStyleType(kPseudoIdScrollbar);
-    no_scrollbar_style->SetDisplay(EDisplay::kNone);
+    ComputedStyleBuilder no_scrollbar_style_builder =
+        GetDocument().GetStyleResolver().CreateComputedStyleBuilder();
+    no_scrollbar_style_builder.SetStyleType(kPseudoIdScrollbar);
+    no_scrollbar_style_builder.SetDisplay(EDisplay::kNone);
     text_block_style->AddCachedPseudoElementStyle(
-        no_scrollbar_style, kPseudoIdScrollbar, g_null_atom);
+        no_scrollbar_style_builder.TakeStyle(), kPseudoIdScrollbar,
+        g_null_atom);
     text_block_style->SetHasPseudoElementStyle(kPseudoIdScrollbar);
 
-    text_block_style->SetDisplay(EDisplay::kFlowRoot);
+    text_block_style_builder.SetDisplay(EDisplay::kFlowRoot);
     if (parentNode()->IsShadowRoot())
       text_block_style_builder.SetAlignSelfBlockCenter(true);
   }
diff --git a/third_party/blink/renderer/core/html/parser/html_construction_site.cc b/third_party/blink/renderer/core/html/parser/html_construction_site.cc
index 41d6f85..8e93562 100644
--- a/third_party/blink/renderer/core/html/parser/html_construction_site.cc
+++ b/third_party/blink/renderer/core/html/parser/html_construction_site.cc
@@ -132,8 +132,8 @@
   return std::min(current_position + *length_limit, string_length);
 }
 
-static inline bool IsAllWhitespace(const String& string) {
-  return string.IsAllSpecialCharacters<IsHTMLSpace<UChar>>();
+static inline bool IsAllWhitespace(const StringView& string_view) {
+  return string_view.IsAllSpecialCharacters<IsHTMLSpace<UChar>>();
 }
 
 static inline void Insert(HTMLConstructionSiteTask& task) {
@@ -301,14 +301,17 @@
       // case, just keep the entire string.
       break_index = string.length();
     }
-    String substring =
-        string.Substring(current_position, break_index - current_position);
+    StringView substring_view =
+        string.SubstringView(current_position, break_index - current_position);
+    String substring = g_empty_string;
     // Strings composed entirely of whitespace are likely to be repeated. Turn
     // them into AtomicString so we share a single string for each.
     if (pending_text_.whitespace_mode == kAllWhitespace ||
         (pending_text_.whitespace_mode == kWhitespaceUnknown &&
-         IsAllWhitespace(substring))) {
-      substring = AtomicString(substring).GetString();
+         IsAllWhitespace(substring_view))) {
+      substring = substring_view.ToAtomicString().GetString();
+    } else {
+      substring = substring_view.ToString();
     }
 
     DCHECK_GT(break_index, current_position);
diff --git a/third_party/blink/renderer/core/html/shadow/progress_shadow_element.cc b/third_party/blink/renderer/core/html/shadow/progress_shadow_element.cc
index 7cd7a66..1b20124 100644
--- a/third_party/blink/renderer/core/html/shadow/progress_shadow_element.cc
+++ b/third_party/blink/renderer/core/html/shadow/progress_shadow_element.cc
@@ -50,8 +50,11 @@
       OriginalStyleForLayoutObject(style_recalc_context);
   const ComputedStyle* progress_style = ProgressElement()->GetComputedStyle();
   DCHECK(progress_style);
-  if (progress_style->HasEffectiveAppearance())
-    style->SetDisplay(EDisplay::kNone);
+  if (progress_style->HasEffectiveAppearance()) {
+    ComputedStyleBuilder builder(*style);
+    builder.SetDisplay(EDisplay::kNone);
+    style = builder.TakeStyle();
+  }
   return style;
 }
 
diff --git a/third_party/blink/renderer/core/layout/layout_block.cc b/third_party/blink/renderer/core/layout/layout_block.cc
index 1dd2ec83..218cf10 100644
--- a/third_party/blink/renderer/core/layout/layout_block.cc
+++ b/third_party/blink/renderer/core/layout/layout_block.cc
@@ -1121,7 +1121,7 @@
     // It is parent blocks job to add positioned child to positioned objects
     // list of its containing block.
     // Parent layout needs to be invalidated to ensure this happens.
-    positioned_object->MarkParentForOutOfFlowPositionedChange();
+    positioned_object->MarkParentForSpannerOrOutOfFlowPositionedChange();
     return true;
   };
 
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc
index b42faba..7463fe5 100644
--- a/third_party/blink/renderer/core/layout/layout_object.cc
+++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -1527,6 +1527,10 @@
 // LayoutNG "bubbles" up the static-position inside the NGLayoutResult.
 // See: |NGLayoutResult::OutOfFlowPositionedDescendants()|.
 //
+// Column spanners also have a bubbling mechanism, and therefore also need to
+// mark ancestors between the element itself and the containing block (the
+// multicol container).
+//
 // Whenever an OOF-positioned object is added/removed we need to invalidate
 // layout for all the layout objects which may have stored a NGLayoutResult
 // with this object contained in that list.
@@ -1537,7 +1541,7 @@
 //  - For the adding case, if the OOF-positioned doesn't require a
 //    static-position, simply insert the object up the NGLayoutResult chain with
 //    an invalid static-position.
-void LayoutObject::MarkParentForOutOfFlowPositionedChange() {
+void LayoutObject::MarkParentForSpannerOrOutOfFlowPositionedChange() {
   NOT_DESTROYED();
 #if DCHECK_IS_ON()
   DCHECK(!IsSetNeedsLayoutForbidden());
@@ -1551,6 +1555,9 @@
   // As OOF-positioned objects are represented as an object replacement
   // character in the inline items list. We need to ensure we collect the
   // inline items again to either collect or drop the OOF-positioned object.
+  //
+  // Note that this isn't necessary if we're dealing with a column spanner here,
+  // but in order to keep things simple, we'll make no difference.
   object->SetNeedsCollectInlines();
 
   const LayoutBlock* containing_block = ContainingBlock();
@@ -1559,7 +1566,8 @@
     object = object->Parent();
   }
   // Finally mark the parent block for layout. This will mark everything which
-  // has an OOF-positioned object in a NGLayoutResult as needing layout.
+  // has an OOF-positioned object or column spanner in a NGLayoutResult as
+  // needing layout.
   if (object)
     object->SetChildNeedsLayout();
 }
@@ -3058,7 +3066,10 @@
     if (old_style->HasOutOfFlowPosition() != style_->HasOutOfFlowPosition()) {
       SetScrollAnchorDisablingStyleChangedOnAncestor();
       if (RuntimeEnabledFeatures::LayoutNGEnabled())
-        MarkParentForOutOfFlowPositionedChange();
+        MarkParentForSpannerOrOutOfFlowPositionedChange();
+    } else if (old_style->GetColumnSpan() != style_->GetColumnSpan() &&
+               RuntimeEnabledFeatures::LayoutNGEnabled()) {
+      MarkParentForSpannerOrOutOfFlowPositionedChange();
     }
 
     // If the object already needs layout, then setNeedsLayout won't do
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h
index 35b6381..2caf40ed 100644
--- a/third_party/blink/renderer/core/layout/layout_object.h
+++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -2106,7 +2106,7 @@
 
   void MarkContainerChainForLayout(bool schedule_relayout = true,
                                    SubtreeLayoutScope* = nullptr);
-  void MarkParentForOutOfFlowPositionedChange();
+  void MarkParentForSpannerOrOutOfFlowPositionedChange();
   void SetNeedsLayout(LayoutInvalidationReasonForTracing,
                       MarkingBehavior = kMarkContainerChain,
                       SubtreeLayoutScope* = nullptr);
diff --git a/third_party/blink/renderer/core/layout/layout_object_child_list.cc b/third_party/blink/renderer/core/layout/layout_object_child_list.cc
index 0456de7..b840acb6 100644
--- a/third_party/blink/renderer/core/layout/layout_object_child_list.cc
+++ b/third_party/blink/renderer/core/layout/layout_object_child_list.cc
@@ -106,9 +106,10 @@
     if (notify_layout_object && old_child->EverHadLayout()) {
       old_child->SetNeedsLayoutAndIntrinsicWidthsRecalc(
           layout_invalidation_reason::kRemovedFromLayout);
-      if (old_child->IsOutOfFlowPositioned() &&
+      if ((old_child->IsOutOfFlowPositioned() ||
+           old_child->IsColumnSpanAll()) &&
           RuntimeEnabledFeatures::LayoutNGEnabled())
-        old_child->MarkParentForOutOfFlowPositionedChange();
+        old_child->MarkParentForSpannerOrOutOfFlowPositionedChange();
     }
     InvalidatePaintOnRemoval(*old_child);
   }
@@ -243,9 +244,9 @@
 
   new_child->SetNeedsLayoutAndIntrinsicWidthsRecalc(
       layout_invalidation_reason::kAddedToLayout);
-  if (new_child->IsOutOfFlowPositioned() &&
+  if ((new_child->IsOutOfFlowPositioned() || new_child->IsColumnSpanAll()) &&
       RuntimeEnabledFeatures::LayoutNGEnabled())
-    new_child->MarkParentForOutOfFlowPositionedChange();
+    new_child->MarkParentForSpannerOrOutOfFlowPositionedChange();
   new_child->SetShouldDoFullPaintInvalidation(
       PaintInvalidationReason::kAppeared);
   new_child->AddSubtreePaintPropertyUpdateReason(
diff --git a/third_party/blink/renderer/core/layout/layout_table_cell_test.cc b/third_party/blink/renderer/core/layout/layout_table_cell_test.cc
index ba95226..0c3a02fb 100644
--- a/third_party/blink/renderer/core/layout/layout_table_cell_test.cc
+++ b/third_party/blink/renderer/core/layout/layout_table_cell_test.cc
@@ -39,10 +39,11 @@
 
   void SetUp() override {
     RenderingTest::SetUp();
-    auto style = GetDocument().GetStyleResolver().CreateComputedStyle();
-    style->SetDisplay(EDisplay::kTableCell);
-    cell_ = LayoutTableCell::CreateAnonymous(&GetDocument(), std::move(style),
-                                             LegacyLayout::kAuto);
+    auto builder =
+        GetDocument().GetStyleResolver().CreateComputedStyleBuilder();
+    builder.SetDisplay(EDisplay::kTableCell);
+    cell_ = LayoutTableCell::CreateAnonymous(
+        &GetDocument(), builder.TakeStyle(), LegacyLayout::kAuto);
   }
 
   void TearDown() override {
diff --git a/third_party/blink/renderer/core/layout/layout_theme.cc b/third_party/blink/renderer/core/layout/layout_theme.cc
index ca131cb..f1955d3 100644
--- a/third_party/blink/renderer/core/layout/layout_theme.cc
+++ b/third_party/blink/renderer/core/layout/layout_theme.cc
@@ -244,10 +244,10 @@
       style.Display() == EDisplay::kTableColumn ||
       style.Display() == EDisplay::kTableCell ||
       style.Display() == EDisplay::kTableCaption)
-    style.SetDisplay(EDisplay::kInlineBlock);
+    builder.SetDisplay(EDisplay::kInlineBlock);
   else if (style.Display() == EDisplay::kListItem ||
            style.Display() == EDisplay::kTable)
-    style.SetDisplay(EDisplay::kBlock);
+    builder.SetDisplay(EDisplay::kBlock);
 
   ControlPart part = AdjustAppearanceWithAuthorStyle(
       AdjustAppearanceWithElementType(style, element), style);
diff --git a/third_party/blink/renderer/core/layout/ng/exclusions/ng_exclusion_space.cc b/third_party/blink/renderer/core/layout/ng/exclusions/ng_exclusion_space.cc
index 57b4bd5..744f614 100644
--- a/third_party/blink/renderer/core/layout/ng/exclusions/ng_exclusion_space.cc
+++ b/third_party/blink/renderer/core/layout/ng/exclusions/ng_exclusion_space.cc
@@ -4,6 +4,8 @@
 
 #include "third_party/blink/renderer/core/layout/ng/exclusions/ng_exclusion_space.h"
 
+#include <algorithm>
+
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/blink/renderer/core/layout/ng/exclusions/ng_exclusion.h"
 #include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
diff --git a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
index 151bb56..694611b 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_block_layout_algorithm.cc
@@ -662,6 +662,12 @@
         // comes before it.
         container_builder_.AddBreakBeforeChild(child, kBreakAppealPerfect,
                                                /* is_forced_break */ true);
+
+        // We're not ready to go back and lay out the spanner yet (see above),
+        // so we don't set a spanner path, but since we did find a spanner, make
+        // a note of it. This will make sure that we resolve our BFC block-
+        // offset, so that we don't incorrectly appear to be self-collapsing.
+        container_builder_.SetHasColumnSpanner(true);
         break;
       }
 
@@ -1970,6 +1976,9 @@
     }
 
     DCHECK_EQ(layout_result->Status(), NGLayoutResult::kSuccess);
+
+    // We stored this in a local variable, so it better not have changed.
+    DCHECK_EQ(layout_result->IsSelfCollapsing(), is_self_collapsing);
   }
 
   const absl::optional<LayoutUnit> line_box_bfc_block_offset =
diff --git a/third_party/blink/renderer/core/paint/text_decoration_info.cc b/third_party/blink/renderer/core/paint/text_decoration_info.cc
index ebb3d5c..5c159c4 100644
--- a/third_party/blink/renderer/core/paint/text_decoration_info.cc
+++ b/third_party/blink/renderer/core/paint/text_decoration_info.cc
@@ -131,6 +131,7 @@
 
 struct WavyParams {
   float resolved_thickness;
+  float effective_zoom;
   bool spelling_grammar;
   Color color;
   DISALLOW_NEW();
@@ -147,7 +148,7 @@
   // height of the curve is based on this distance. Increases the curve's height
   // as strokeThickness increases to make the curve look better.
   if (params.spelling_grammar)
-    return 5;
+    return 5 * params.effective_zoom;
 
   return 3.5 * WavyDecorationSizing(params);
 }
@@ -157,7 +158,7 @@
   // points and end point (p2) along the axis of the decoration. Makes the curve
   // wider as strokeThickness increases to make the curve look better.
   if (params.spelling_grammar)
-    return 3;
+    return 3 * params.effective_zoom;
 
   return 2.5 * WavyDecorationSizing(params);
 }
@@ -527,6 +528,16 @@
               paint_underline_offset);
 }
 
+bool TextDecorationInfo::ShouldAntialias() const {
+#if BUILDFLAG(IS_MAC)
+  if (line_data_.line == TextDecorationLine::kSpellingError ||
+      line_data_.line == TextDecorationLine::kGrammarError) {
+    return true;
+  }
+#endif
+  return antialias_;
+}
+
 ETextDecorationStyle TextDecorationInfo::DecorationStyle() const {
   if (IsSpellingOrGrammarError()) {
 #if BUILDFLAG(IS_MAC)
@@ -573,9 +584,9 @@
   if (HasSpellingOrGrammerError()) {
     // Spelling and grammar error thickness doesn't depend on the font size.
 #if BUILDFLAG(IS_MAC)
-    return 2.f;
+    return 2.f * decorating_box_style_->EffectiveZoom();
 #else
-    return 1.f;
+    return 1.f * decorating_box_style_->EffectiveZoom();
 #endif
   }
 
@@ -631,6 +642,8 @@
   DEFINE_STATIC_LOCAL(absl::optional<WavyCache>, wavy_cache, (absl::nullopt));
 
   if (wavy_cache && wavy_cache->key.resolved_thickness == ResolvedThickness() &&
+      wavy_cache->key.effective_zoom ==
+          decorating_box_style_->EffectiveZoom() &&
       wavy_cache->key.spelling_grammar == IsSpellingOrGrammarError() &&
       wavy_cache->key.color == LineColor()) {
     pattern_rect = wavy_cache->pattern_rect;
@@ -638,8 +651,8 @@
     return;
   }
 
-  WavyParams params{ResolvedThickness(), IsSpellingOrGrammarError(),
-                    LineColor()};
+  WavyParams params{ResolvedThickness(), decorating_box_style_->EffectiveZoom(),
+                    IsSpellingOrGrammarError(), LineColor()};
   Path stroke_path = PrepareWavyStrokePath(params);
   pattern_rect = ComputeWavyPatternRect(params, stroke_path);
   tile_record = PrepareWavyTileRecord(params, stroke_path, pattern_rect);
diff --git a/third_party/blink/renderer/core/paint/text_decoration_info.h b/third_party/blink/renderer/core/paint/text_decoration_info.h
index 9d0923c..cc2d3ed 100644
--- a/third_party/blink/renderer/core/paint/text_decoration_info.h
+++ b/third_party/blink/renderer/core/paint/text_decoration_info.h
@@ -116,7 +116,6 @@
   // It can be different from NGFragmentItem::SvgScalingFactor() if the
   // text works as a resource.
   float ScalingFactor() const { return scaling_factor_; }
-  bool ShouldAntialias() const { return antialias_; }
   float InkSkipClipUpper(float bounds_upper) const {
     return -TargetAscent() + bounds_upper - local_origin_.top.ToFloat();
   }
@@ -139,6 +138,7 @@
   // SetLineData must be called before using the remaining methods.
   gfx::PointF StartPoint() const;
   float DoubleOffset() const;
+  bool ShouldAntialias() const;
 
   // Compute bounds for the given line and the current decoration.
   gfx::RectF Bounds() const;
diff --git a/third_party/blink/renderer/core/style/computed_style.h b/third_party/blink/renderer/core/style/computed_style.h
index 1fb2355e..acbddbe5 100644
--- a/third_party/blink/renderer/core/style/computed_style.h
+++ b/third_party/blink/renderer/core/style/computed_style.h
@@ -423,11 +423,6 @@
                                IsAtShadowBoundary = kNotAtShadowBoundary);
   void CopyNonInheritedFromCached(const ComputedStyle&);
 
-  PseudoId StyleType() const {
-    return static_cast<PseudoId>(StyleTypeInternal());
-  }
-  void SetStyleType(PseudoId style_type) { SetStyleTypeInternal(style_type); }
-
   CORE_EXPORT const ComputedStyle* GetCachedPseudoElementStyle(
       PseudoId,
       const AtomicString& pseudo_argument = g_null_atom) const;
diff --git a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5 b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
index a845909a..0289009 100644
--- a/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
+++ b/third_party/blink/renderer/core/style/computed_style_extra_fields.json5
@@ -33,6 +33,7 @@
       default_value: "false",
       custom_copy: true,
       custom_compare: true,
+      readonly: true,
     },
     {
       name: "Display",
@@ -47,6 +48,7 @@
         "layout-custom", "inline-layout-custom", "math", "block math"
       ],
       default_value: "inline",
+      readonly: true,
     },
     {
       name: "DisplayLayoutCustomName",
@@ -55,6 +57,7 @@
       type_name: "AtomicString",
       include_paths: ["third_party/blink/renderer/platform/wtf/text/atomic_string.h"],
       default_value: "g_null_atom",
+      readonly: true,
     },
     {
       name: "DisplayLayoutCustomParentName",
@@ -63,6 +66,7 @@
       type_name: "AtomicString",
       include_paths: ["third_party/blink/renderer/platform/wtf/text/atomic_string.h"],
       default_value: "g_null_atom",
+      readonly: true,
     },
     {
       name: "OriginalDisplay",
@@ -77,6 +81,7 @@
         "layout-custom", "inline-layout-custom", "math", "block math"
       ],
       default_value: "inline",
+      readonly: true,
     },
     {
       name: "InsideLink",
@@ -84,6 +89,7 @@
       default_value: "not-inside-link",
       keywords: ["not-inside-link", "inside-unvisited-link", "inside-visited-link"],
       inherited: true,
+      readonly: true,
     },
     {
       name: "InForcedColorsMode",
@@ -92,6 +98,7 @@
       default_value: "false",
       type_name: "bool",
       inherited: true,
+      readonly: true,
     },
     // Whether we're inside (or at) a block fragmentation context that may
     // switch between legacy and NG layout, depending on the contents.
@@ -103,6 +110,7 @@
       default_value: "false",
       type_name: "bool",
       inherited: true,
+      readonly: true,
     },
     // Style has content property with attr() values.
     {
@@ -111,6 +119,7 @@
       default_value: "false",
       custom_copy: true,
       custom_compare: true,
+      readonly: true,
     },
     // Whether this style is affected by these pseudo-classes.
     {
@@ -148,6 +157,7 @@
       default_value: "false",
       custom_copy: true,
       custom_compare: true,
+      readonly: true,
     },
     // A property references a variable that needs to be resolved
     {
@@ -155,6 +165,7 @@
       field_template: "monotonic_flag",
       default_value: "false",
       custom_compare: true,
+      readonly: true,
     },
     // A property which value consists of a custom property declaration.
     {
@@ -162,6 +173,7 @@
       field_template: "monotonic_flag",
       default_value: "false",
       custom_compare: true,
+      readonly: true,
     },
     // Set on parent style when a child explicitly inherits a
     // non-inherited property
@@ -172,12 +184,14 @@
       custom_copy: true,
       custom_compare: true,
       mutable: true,
+      readonly: true,
     },
     // Explicitly inherits a non-inherited property
     {
       name: "HasExplicitInheritance",
       field_template: "monotonic_flag",
       default_value: "false",
+      readonly: true,
     },
     // These are set if we used viewport or rem units when resolving a length.
     {
@@ -227,6 +241,7 @@
       field_template: "monotonic_flag",
       default_value: "false",
       custom_compare: true,
+      readonly: true,
     },
     // These properties only have generated storage, and their methods are handwritten in ComputedStyle.
     {
@@ -234,10 +249,10 @@
       field_template: "primitive",
       field_size: 6,
       default_value: "PseudoId::kPseudoIdNone",
-      type_name: "unsigned",
+      type_name: "PseudoId",
       custom_copy: true,
       custom_compare: true,
-      computed_style_custom_functions: ["getter", "setter"],
+      readonly: true,
     },
     {
       name: "PseudoBits",
diff --git a/third_party/blink/renderer/core/style/computed_style_test.cc b/third_party/blink/renderer/core/style/computed_style_test.cc
index 792203549..82016df 100644
--- a/third_party/blink/renderer/core/style/computed_style_test.cc
+++ b/third_party/blink/renderer/core/style/computed_style_test.cc
@@ -575,61 +575,75 @@
   css_test_helpers::RegisterProperty(dummy->GetDocument(), "--x", "<length>",
                                      "0px", true);
 
-  scoped_refptr<ComputedStyle> old_style = CreateComputedStyle();
-  scoped_refptr<ComputedStyle> new_style = CreateComputedStyle();
+  ComputedStyleBuilder old_builder = CreateComputedStyleBuilder();
+  ComputedStyleBuilder new_builder = CreateComputedStyleBuilder();
 
   using UnitType = CSSPrimitiveValue::UnitType;
 
   const auto* value1 = CSSNumericLiteralValue::Create(1.0, UnitType::kPixels);
   const auto* value2 = CSSNumericLiteralValue::Create(2.0, UnitType::kPixels);
 
+  scoped_refptr<const ComputedStyle> old_style = old_builder.TakeStyle();
+  scoped_refptr<const ComputedStyle> new_style = new_builder.TakeStyle();
   EXPECT_FALSE(old_style->HasVariableDeclaration());
   EXPECT_FALSE(old_style->HasVariableReference());
   EXPECT_FALSE(new_style->HasVariableReference());
   EXPECT_FALSE(new_style->HasVariableDeclaration());
 
   // Removed variable
-  old_style->SetVariableValue("--x", value1, true);
+  old_builder = CreateComputedStyleBuilder();
+  old_builder.MutableInternalStyle()->SetVariableValue("--x", value1, true);
+  old_style = old_builder.TakeStyle();
   EXPECT_EQ(ComputedStyle::Difference::kIndependentInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
 
-  old_style = CreateComputedStyle();
-  new_style = CreateComputedStyle();
+  old_builder = CreateComputedStyleBuilder();
+  new_builder = CreateComputedStyleBuilder();
 
   // Added a new variable
-  new_style->SetVariableValue("--x", value2, true);
+  new_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  old_style = old_builder.TakeStyle();
+  new_style = new_builder.TakeStyle();
   EXPECT_EQ(ComputedStyle::Difference::kIndependentInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
 
   // Change value of variable
-  old_style->SetVariableValue("--x", value1, true);
-  new_style->SetVariableValue("--x", value2, true);
-  new_style->SetHasVariableReference();
+  old_builder = CreateComputedStyleBuilder();
+  new_builder = ComputedStyleBuilder(*new_style);
+  old_builder.MutableInternalStyle()->SetVariableValue("--x", value1, true);
+  new_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  new_builder.SetHasVariableReference();
+  old_style = old_builder.TakeStyle();
+  new_style = new_builder.TakeStyle();
   EXPECT_FALSE(new_style->HasVariableDeclaration());
   EXPECT_TRUE(new_style->HasVariableReference());
   EXPECT_EQ(ComputedStyle::Difference::kIndependentInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
 
-  old_style = CreateComputedStyle();
-  new_style = CreateComputedStyle();
+  old_builder = CreateComputedStyleBuilder();
+  new_builder = CreateComputedStyleBuilder();
 
   // New styles with variable declaration don't force style recalc
-  old_style->SetVariableValue("--x", value1, true);
-  new_style->SetVariableValue("--x", value2, true);
-  new_style->SetHasVariableDeclaration();
+  old_builder.MutableInternalStyle()->SetVariableValue("--x", value1, true);
+  new_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  new_builder.SetHasVariableDeclaration();
+  old_style = old_builder.TakeStyle();
+  new_style = new_builder.TakeStyle();
   EXPECT_TRUE(new_style->HasVariableDeclaration());
   EXPECT_FALSE(new_style->HasVariableReference());
   EXPECT_EQ(ComputedStyle::Difference::kIndependentInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
 
-  old_style = CreateComputedStyle();
-  new_style = CreateComputedStyle();
+  old_builder = CreateComputedStyleBuilder();
+  new_builder = CreateComputedStyleBuilder();
 
   // New styles with variable reference don't force style recalc
-  old_style->SetVariableValue("--x", value1, true);
-  new_style->SetVariableValue("--x", value2, true);
-  new_style->SetHasVariableDeclaration();
-  new_style->SetHasVariableReference();
+  old_builder.MutableInternalStyle()->SetVariableValue("--x", value1, true);
+  new_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  new_builder.SetHasVariableDeclaration();
+  new_builder.SetHasVariableReference();
+  old_style = old_builder.TakeStyle();
+  new_style = new_builder.TakeStyle();
   EXPECT_TRUE(new_style->HasVariableDeclaration());
   EXPECT_TRUE(new_style->HasVariableReference());
   EXPECT_EQ(ComputedStyle::Difference::kIndependentInherited,
@@ -641,14 +655,16 @@
   css_test_helpers::RegisterProperty(dummy->GetDocument(), "--x", "<length>",
                                      "0px", true);
 
-  scoped_refptr<ComputedStyle> old_style = CreateComputedStyle();
-  scoped_refptr<ComputedStyle> new_style = CreateComputedStyle();
+  ComputedStyleBuilder old_builder = CreateComputedStyleBuilder();
+  ComputedStyleBuilder new_builder = CreateComputedStyleBuilder();
 
   using UnitType = CSSPrimitiveValue::UnitType;
 
   const auto* value1 = CSSNumericLiteralValue::Create(1.0, UnitType::kPixels);
   const auto* value2 = CSSNumericLiteralValue::Create(2.0, UnitType::kPixels);
 
+  scoped_refptr<const ComputedStyle> old_style = old_builder.TakeStyle();
+  scoped_refptr<const ComputedStyle> new_style = new_builder.TakeStyle();
   EXPECT_FALSE(old_style->HasVariableDeclaration());
   EXPECT_FALSE(old_style->HasVariableReference());
   EXPECT_FALSE(new_style->HasVariableReference());
@@ -656,43 +672,51 @@
 
   // Removed variable value
   // Old styles with variable reference force style recalc
-  old_style->SetHasVariableReference();
-  old_style->SetVariableValue("--x", value2, true);
+  old_builder = CreateComputedStyleBuilder();
+  old_builder.SetHasVariableReference();
+  old_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  old_style = old_builder.TakeStyle();
   EXPECT_TRUE(old_style->HasVariableReference());
   EXPECT_EQ(ComputedStyle::Difference::kInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
 
-  old_style = CreateComputedStyle();
-  new_style = CreateComputedStyle();
+  old_builder = CreateComputedStyleBuilder();
+  new_builder = CreateComputedStyleBuilder();
 
   // New variable value
   // Old styles with variable declaration force style recalc
-  old_style->SetHasVariableDeclaration();
-  new_style->SetVariableValue("--x", value2, true);
+  old_builder.SetHasVariableDeclaration();
+  new_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  old_style = old_builder.TakeStyle();
+  new_style = new_builder.TakeStyle();
   EXPECT_TRUE(old_style->HasVariableDeclaration());
   EXPECT_EQ(ComputedStyle::Difference::kInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
 
-  old_style = CreateComputedStyle();
-  new_style = CreateComputedStyle();
+  old_builder = CreateComputedStyleBuilder();
+  new_builder = CreateComputedStyleBuilder();
 
   // Change variable value
   // Old styles with variable declaration force style recalc
-  old_style->SetVariableValue("--x", value1, true);
-  new_style->SetVariableValue("--x", value2, true);
-  old_style->SetHasVariableDeclaration();
+  old_builder.MutableInternalStyle()->SetVariableValue("--x", value1, true);
+  new_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  old_builder.SetHasVariableDeclaration();
+  old_style = old_builder.TakeStyle();
+  new_style = new_builder.TakeStyle();
   EXPECT_TRUE(old_style->HasVariableDeclaration());
   EXPECT_EQ(ComputedStyle::Difference::kInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
 
-  old_style = CreateComputedStyle();
-  new_style = CreateComputedStyle();
+  old_builder = CreateComputedStyleBuilder();
+  new_builder = CreateComputedStyleBuilder();
 
   // Change variable value
   // Old styles with variable reference force style recalc
-  old_style->SetVariableValue("--x", value1, true);
-  new_style->SetVariableValue("--x", value2, true);
-  old_style->SetHasVariableReference();
+  old_builder.MutableInternalStyle()->SetVariableValue("--x", value1, true);
+  new_builder.MutableInternalStyle()->SetVariableValue("--x", value2, true);
+  old_builder.SetHasVariableReference();
+  old_style = old_builder.TakeStyle();
+  new_style = new_builder.TakeStyle();
   EXPECT_TRUE(old_style->HasVariableReference());
   EXPECT_EQ(ComputedStyle::Difference::kInherited,
             ComputedStyle::ComputeDifference(old_style.get(), new_style.get()));
diff --git a/third_party/blink/renderer/core/svg/svg_transform.cc b/third_party/blink/renderer/core/svg/svg_transform.cc
index c2ffa58..bb0d3769 100644
--- a/third_party/blink/renderer/core/svg/svg_transform.cc
+++ b/third_party/blink/renderer/core/svg/svg_transform.cc
@@ -26,27 +26,17 @@
 
 namespace blink {
 
-SVGTransform::SVGTransform()
-    : transform_type_(SVGTransformType::kUnknown), angle_(0) {}
+SVGTransform::SVGTransform() : transform_type_(SVGTransformType::kUnknown) {}
 
 SVGTransform::SVGTransform(SVGTransformType transform_type,
                            ConstructionMode mode)
-    : transform_type_(transform_type), angle_(0) {
+    : transform_type_(transform_type) {
   if (mode == kConstructZeroTransform)
     matrix_ = AffineTransform(0, 0, 0, 0, 0, 0);
 }
 
 SVGTransform::SVGTransform(const AffineTransform& matrix)
-    : transform_type_(SVGTransformType::kMatrix), angle_(0), matrix_(matrix) {}
-
-SVGTransform::SVGTransform(SVGTransformType transform_type,
-                           float angle,
-                           const gfx::PointF& center,
-                           const AffineTransform& matrix)
-    : transform_type_(transform_type),
-      angle_(angle),
-      center_(center),
-      matrix_(matrix) {}
+    : SVGTransform(SVGTransformType::kMatrix, 0, gfx::PointF(), matrix) {}
 
 SVGTransform::~SVGTransform() = default;
 
diff --git a/third_party/blink/renderer/core/svg/svg_transform.h b/third_party/blink/renderer/core/svg/svg_transform.h
index 37ca158..66c8cd9 100644
--- a/third_party/blink/renderer/core/svg/svg_transform.h
+++ b/third_party/blink/renderer/core/svg/svg_transform.h
@@ -58,10 +58,14 @@
   explicit SVGTransform(SVGTransformType,
                         ConstructionMode = kConstructIdentityTransform);
   explicit SVGTransform(const AffineTransform&);
-  SVGTransform(SVGTransformType,
-               float,
-               const gfx::PointF&,
-               const AffineTransform&);
+  SVGTransform(SVGTransformType transform_type,
+               float angle,
+               const gfx::PointF& center,
+               const AffineTransform& matrix)
+      : transform_type_(transform_type),
+        angle_(angle),
+        center_(center),
+        matrix_(matrix) {}
   ~SVGTransform() override;
 
   SVGTransform* Clone() const;
@@ -108,7 +112,7 @@
 
  private:
   SVGTransformType transform_type_;
-  float angle_;
+  float angle_ = 0;
   gfx::PointF center_;
   AffineTransform matrix_;
 };
diff --git a/third_party/blink/renderer/core/svg/svg_transform_list.cc b/third_party/blink/renderer/core/svg/svg_transform_list.cc
index 861d38e..557432c 100644
--- a/third_party/blink/renderer/core/svg/svg_transform_list.cc
+++ b/third_party/blink/renderer/core/svg/svg_transform_list.cc
@@ -69,30 +69,28 @@
 
 using TransformArguments = Vector<float, kMaxTransformArguments>;
 
-SVGTransform* SkewXTransformValue(float angle) {
-  return MakeGarbageCollected<SVGTransform>(SVGTransformType::kSkewx, angle,
-                                            gfx::PointF(),
-                                            AffineTransform::MakeSkewX(angle));
+using SVGTransformData = std::tuple<float, gfx::PointF, AffineTransform>;
+
+SVGTransformData SkewXTransformValue(float angle) {
+  return {angle, gfx::PointF(), AffineTransform::MakeSkewX(angle)};
 }
-SVGTransform* SkewYTransformValue(float angle) {
-  return MakeGarbageCollected<SVGTransform>(SVGTransformType::kSkewy, angle,
-                                            gfx::PointF(),
-                                            AffineTransform::MakeSkewY(angle));
+SVGTransformData SkewYTransformValue(float angle) {
+  return {angle, gfx::PointF(), AffineTransform::MakeSkewY(angle)};
 }
-SVGTransform* ScaleTransformValue(float sx, float sy) {
-  return MakeGarbageCollected<SVGTransform>(
-      SVGTransformType::kScale, 0, gfx::PointF(),
-      AffineTransform::MakeScaleNonUniform(sx, sy));
+SVGTransformData ScaleTransformValue(float sx, float sy) {
+  return {0, gfx::PointF(), AffineTransform::MakeScaleNonUniform(sx, sy)};
 }
-SVGTransform* TranslateTransformValue(float tx, float ty) {
-  return MakeGarbageCollected<SVGTransform>(
-      SVGTransformType::kTranslate, 0, gfx::PointF(),
-      AffineTransform::Translation(tx, ty));
+SVGTransformData TranslateTransformValue(float tx, float ty) {
+  return {0, gfx::PointF(), AffineTransform::Translation(tx, ty)};
 }
-SVGTransform* RotateTransformValue(float angle, float cx, float cy) {
-  return MakeGarbageCollected<SVGTransform>(
-      SVGTransformType::kRotate, angle, gfx::PointF(cx, cy),
-      AffineTransform::MakeRotationAroundPoint(angle, cx, cy));
+SVGTransformData RotateTransformValue(float angle, float cx, float cy) {
+  return {angle, gfx::PointF(cx, cy),
+          AffineTransform::MakeRotationAroundPoint(angle, cx, cy)};
+}
+SVGTransformData MatrixTransformValue(const TransformArguments& arguments) {
+  return {0, gfx::PointF(),
+          AffineTransform(arguments[0], arguments[1], arguments[2],
+                          arguments[3], arguments[4], arguments[5])};
 }
 
 template <typename CharType>
@@ -134,8 +132,8 @@
   return SVGParseStatus::kNoError;
 }
 
-SVGTransform* CreateTransformFromValues(SVGTransformType type,
-                                        const TransformArguments& arguments) {
+SVGTransformData TransformDataFromValues(SVGTransformType type,
+                                         const TransformArguments& arguments) {
   switch (type) {
     case SVGTransformType::kSkewx:
       return SkewXTransformValue(arguments[0]);
@@ -156,16 +154,19 @@
         return RotateTransformValue(arguments[0], 0, 0);
       return RotateTransformValue(arguments[0], arguments[1], arguments[2]);
     case SVGTransformType::kMatrix:
-      return MakeGarbageCollected<SVGTransform>(
-          AffineTransform(arguments[0], arguments[1], arguments[2],
-                          arguments[3], arguments[4], arguments[5]));
-    case SVGTransformType::kUnknown: {
+      return MatrixTransformValue(arguments);
+    case SVGTransformType::kUnknown:
       NOTREACHED();
-      return MakeGarbageCollected<SVGTransform>();
-    }
+      return ScaleTransformValue(1, 1);
   }
 }
 
+SVGTransform* CreateTransformFromValues(SVGTransformType type,
+                                        const TransformArguments& arguments) {
+  const auto [angle, center, matrix] = TransformDataFromValues(type, arguments);
+  return MakeGarbageCollected<SVGTransform>(type, angle, center, matrix);
+}
+
 }  // namespace
 
 SVGTransformList::SVGTransformList() = default;
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_html.cc b/third_party/blink/renderer/core/trustedtypes/trusted_html.cc
index 988c6a4..458a747 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_html.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_html.cc
@@ -4,6 +4,12 @@
 
 #include "third_party/blink/renderer/core/trustedtypes/trusted_html.h"
 
+#include "third_party/blink/renderer/core/dom/document_fragment.h"
+#include "third_party/blink/renderer/core/frame/local_dom_window.h"
+#include "third_party/blink/renderer/core/html/html_template_element.h"
+#include "third_party/blink/renderer/core/trustedtypes/trusted_types_util.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+
 namespace blink {
 
 TrustedHTML::TrustedHTML(String html) : html_(std::move(html)) {}
@@ -12,4 +18,33 @@
   return html_;
 }
 
+TrustedHTML* TrustedHTML::fromLiteral(ScriptState* script_state,
+                                      const ScriptValue& templateLiteral,
+                                      ExceptionState& exception_state) {
+  String literal = GetTrustedTypesLiteral(templateLiteral, script_state);
+  if (literal.IsNull()) {
+    exception_state.ThrowTypeError("Can't fromLiteral a non-literal.");
+    return nullptr;
+  }
+
+  LocalDOMWindow* window = LocalDOMWindow::From(script_state);
+  if (!window) {
+    exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
+                                      "Cannot find current DOM window.");
+    return nullptr;
+  }
+
+  // TrustedHTML::fromLiteral requires additional normalization that the other
+  // trusted types do not. We want to parse the literal as if it were a
+  // HTMLTemplateElement content. Ref: Step 4 of
+  // https://w3c.github.io/webappsec-trusted-types/dist/spec/#create-a-trusted-type-from-literal-algorithm
+  HTMLTemplateElement* template_element =
+      MakeGarbageCollected<HTMLTemplateElement>(*window->document());
+  DCHECK(template_element->content());
+  template_element->content()->ParseHTML(
+      literal, template_element, ParserContentPolicy::kAllowScriptingContent);
+
+  return MakeGarbageCollected<TrustedHTML>(template_element->innerHTML());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_html.h b/third_party/blink/renderer/core/trustedtypes/trusted_html.h
index 9bc57c8a..5010c205 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_html.h
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_html.h
@@ -10,6 +10,8 @@
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
+class ScriptValue;
+class ExceptionState;
 
 class CORE_EXPORT TrustedHTML final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
@@ -20,6 +22,9 @@
   // TrustedHTML.idl
   const String& toString() const;
   const String& toJSON() const { return toString(); }
+  static TrustedHTML* fromLiteral(ScriptState* script_state,
+                                  const ScriptValue& templateString,
+                                  ExceptionState& exception_state);
 
  private:
   const String html_;
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_html.idl b/third_party/blink/renderer/core/trustedtypes/trusted_html.idl
index fe9de38..dd23ccfe 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_html.idl
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_html.idl
@@ -11,5 +11,7 @@
 ] interface TrustedHTML {
     stringifier;
     DOMString toJSON();
+    [RaisesException, CallWith=ScriptState, RuntimeEnabled=TrustedTypesFromLiteral]
+ static TrustedHTML fromLiteral(any templateLiteral);
 };
 
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_script.cc b/third_party/blink/renderer/core/trustedtypes/trusted_script.cc
index 1efdc00..59cac3b 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_script.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_script.cc
@@ -4,6 +4,9 @@
 
 #include "third_party/blink/renderer/core/trustedtypes/trusted_script.h"
 
+#include "third_party/blink/renderer/core/trustedtypes/trusted_types_util.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+
 namespace blink {
 
 TrustedScript::TrustedScript(String script) : script_(std::move(script)) {}
@@ -12,4 +15,15 @@
   return script_;
 }
 
+TrustedScript* TrustedScript::fromLiteral(ScriptState* script_state,
+                                          const ScriptValue& templateLiteral,
+                                          ExceptionState& exception_state) {
+  String literal = GetTrustedTypesLiteral(templateLiteral, script_state);
+  if (literal.IsNull()) {
+    exception_state.ThrowTypeError("Can't fromLiteral a non-literal.");
+    return nullptr;
+  }
+  return MakeGarbageCollected<TrustedScript>(literal);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_script.h b/third_party/blink/renderer/core/trustedtypes/trusted_script.h
index 594a90d..dfe070e0 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_script.h
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_script.h
@@ -10,6 +10,8 @@
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
+class ScriptValue;
+class ExceptionState;
 
 class CORE_EXPORT TrustedScript final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
@@ -20,6 +22,9 @@
   // TrustedScript.idl
   const String& toString() const;
   const String& toJSON() const { return toString(); }
+  static TrustedScript* fromLiteral(ScriptState* script_state,
+                                    const ScriptValue& templateString,
+                                    ExceptionState& exception_state);
 
  private:
   const String script_;
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_script.idl b/third_party/blink/renderer/core/trustedtypes/trusted_script.idl
index 4d6fd57..6df5004e 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_script.idl
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_script.idl
@@ -12,4 +12,6 @@
 ] interface TrustedScript {
     stringifier;
     DOMString toJSON();
+    [RaisesException, CallWith=ScriptState, RuntimeEnabled=TrustedTypesFromLiteral]
+ static TrustedScript fromLiteral(any templateLiteral);
 };
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_script_url.cc b/third_party/blink/renderer/core/trustedtypes/trusted_script_url.cc
index 6a24db7..38dd910 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_script_url.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_script_url.cc
@@ -4,6 +4,9 @@
 
 #include "third_party/blink/renderer/core/trustedtypes/trusted_script_url.h"
 
+#include "third_party/blink/renderer/core/trustedtypes/trusted_types_util.h"
+#include "third_party/blink/renderer/platform/bindings/exception_state.h"
+
 namespace blink {
 
 TrustedScriptURL::TrustedScriptURL(String url) : url_(std::move(url)) {}
@@ -12,4 +15,16 @@
   return url_;
 }
 
+TrustedScriptURL* TrustedScriptURL::fromLiteral(
+    ScriptState* script_state,
+    const ScriptValue& templateLiteral,
+    ExceptionState& exception_state) {
+  String literal = GetTrustedTypesLiteral(templateLiteral, script_state);
+  if (literal.IsNull()) {
+    exception_state.ThrowTypeError("Can't fromLiteral a non-literal.");
+    return nullptr;
+  }
+  return MakeGarbageCollected<TrustedScriptURL>(literal);
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_script_url.h b/third_party/blink/renderer/core/trustedtypes/trusted_script_url.h
index 38fa93b..e8a4d886 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_script_url.h
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_script_url.h
@@ -10,6 +10,8 @@
 #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
+class ScriptValue;
+class ExceptionState;
 
 class CORE_EXPORT TrustedScriptURL final : public ScriptWrappable {
   DEFINE_WRAPPERTYPEINFO();
@@ -20,6 +22,9 @@
   // TrustedScriptURL.idl
   const String& toString() const;
   const String& toJSON() const { return toString(); }
+  static TrustedScriptURL* fromLiteral(ScriptState* script_state,
+                                       const ScriptValue& templateString,
+                                       ExceptionState& exception_state);
 
  private:
   const String url_;
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_script_url.idl b/third_party/blink/renderer/core/trustedtypes/trusted_script_url.idl
index f90b0d8..c4bcfeb 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_script_url.idl
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_script_url.idl
@@ -11,4 +11,5 @@
 ] interface TrustedScriptURL {
     stringifier;
     USVString toJSON();
+    [RaisesException, CallWith=ScriptState, RuntimeEnabled=TrustedTypesFromLiteral] static TrustedScriptURL fromLiteral(any templateLiteral);
 };
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 eac2534..10a55a0 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.cc
@@ -603,4 +603,37 @@
              q_name.LocalName());
 }
 
+String GetTrustedTypesLiteral(const ScriptValue& script_value,
+                              ScriptState* script_state) {
+  DCHECK(script_state);
+  // TrustedTypes fromLiteral requires several checks, which are steps 1-3
+  // in the "create a trusted type from literal algorithm". Ref:
+  // https://w3c.github.io/webappsec-trusted-types/dist/spec/#create-a-trusted-type-from-literal-algorithm
+
+  // The core functionality here are the checks that we, indeed, have a
+  // literal object. The key work is done by
+  // v8::Context::HasTemplateLiteralObject, but we will additionally check that
+  // we have an object, with a real (non-inherited) property 0 (but not 1),
+  // whose value is a string.
+  v8::Local<v8::Context> context = script_state->GetContext();
+  v8::Local<v8::Value> value = script_value.V8ValueFor(script_state);
+  if (!context.IsEmpty() && !value.IsEmpty() &&
+      context->HasTemplateLiteralObject(value) && value->IsObject()) {
+    v8::Local<v8::Object> value_as_object = v8::Local<v8::Object>::Cast(value);
+    v8::Local<v8::Value> first_value;
+    if (value_as_object->HasRealIndexedProperty(context, 0).FromMaybe(false) &&
+        !value_as_object->HasRealIndexedProperty(context, 1).FromMaybe(false) &&
+        value_as_object->Get(context, 0).ToLocal(&first_value) &&
+        first_value->IsString()) {
+      v8::Local<v8::String> first_value_as_string =
+          v8::Local<v8::String>::Cast(first_value);
+      return ToCoreString(first_value_as_string);
+    }
+  }
+
+  // Fall-through: Some of the required conditions didn't hold. Return a
+  // null-string.
+  return String();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h
index 19505228..1f6c5c5 100644
--- a/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h
+++ b/third_party/blink/renderer/core/trustedtypes/trusted_types_util.h
@@ -15,6 +15,8 @@
 class ExceptionState;
 class ExecutionContext;
 class QualifiedName;
+class ScriptValue;
+class ScriptState;
 class V8UnionStringOrTrustedScript;
 class V8UnionStringTreatNullAsEmptyStringOrTrustedScript;
 
@@ -98,6 +100,15 @@
 // event handlers.
 bool IsTrustedTypesEventHandlerAttribute(const QualifiedName&);
 
+// Return a string, if the passed-in script value is a literal. With "literal"
+// meaning it passes the checks for TrustedType's fromLiteral definition.
+//
+// If an error occurs, this will return a null-String.
+//
+// Spec:
+// https://w3c.github.io/webappsec-trusted-types/dist/spec/#check-templatedness-algorithm
+String GetTrustedTypesLiteral(const ScriptValue&, ScriptState*);
+
 }  // namespace blink
 
 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_TRUSTEDTYPES_TRUSTED_TYPES_UTIL_H_
diff --git a/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc b/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc
index a18a7c2a..5aa8928 100644
--- a/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc
+++ b/third_party/blink/renderer/modules/accessibility/ax_menu_list.cc
@@ -60,26 +60,23 @@
 }
 
 void AXMenuList::Detach() {
-  // Detach() calls ClearChildren(), but AXMenuList::ClearChildren()
-  // detaches the grandchild options, not the child option.
-  AXLayoutObject::Detach();
+  // The default implementation of Detach() calls ClearChildren(), but
+  // that is not enough. The popup child needs to be specially removed
+  // from the AXObjectCache.
   DCHECK_LE(children_.size(), 1U);
 
   // Clear the popup.
   if (children_.size()) {
     children_[0]->DetachFromParent();
-    // Unfortunately, the popup will be left hanging around until
-    // AXObjectCacheImpl() is reset. We cannot remove it here because
-    // this can be called while AXObjectCacheImpl() is detaching all objects,
-    // and the hash map of objects does not allow similtaneous iteration and
+    // Do not call Remove() while AXObjectCacheImpl() is detaching all objects,
+    // because the hash map of objects does not allow simultaneous iteration and
     // removal of objects.
-    // TODO(accessibility) Consider something like this, or something that
-    // marks the object for imminent diposal.
-    // if (!AXObjectCache().IsDisposing()
-    //   children_[0]->AXObjectCache().Remove(children_[0]);
-    children_[0]->Detach();
+    if (!AXObjectCache().HasBeenDisposed())
+      children_[0]->AXObjectCache().Remove(children_[0]);
     children_.clear();
   }
+
+  AXLayoutObject::Detach();
 }
 
 void AXMenuList::SetNeedsToUpdateChildren() const {
diff --git a/third_party/blink/renderer/modules/accessibility/testing/accessibility_selection_test.cc b/third_party/blink/renderer/modules/accessibility/testing/accessibility_selection_test.cc
index f3446b5..e7ebcce 100644
--- a/third_party/blink/renderer/modules/accessibility/testing/accessibility_selection_test.cc
+++ b/third_party/blink/renderer/modules/accessibility/testing/accessibility_selection_test.cc
@@ -4,10 +4,10 @@
 
 #include "third_party/blink/renderer/modules/accessibility/testing/accessibility_selection_test.h"
 
-#include <algorithm>
 #include <iterator>
 
 #include "base/memory/scoped_refptr.h"
+#include "base/ranges/algorithm.h"
 #include "third_party/blink/public/platform/file_path_conversion.h"
 #include "third_party/blink/renderer/core/dom/character_data.h"
 #include "third_party/blink/renderer/core/dom/container_node.h"
@@ -405,10 +405,9 @@
 
   const String test_file = test_path + String::FromUTF8(kTestFileSuffix);
   scoped_refptr<SharedBuffer> test_file_buffer = test::ReadFromFile(test_file);
-  auto test_file_chars = test_file_buffer->CopyAs<Vector<char>>();
   std::string test_file_contents;
-  std::copy(test_file_chars.begin(), test_file_chars.end(),
-            std::back_inserter(test_file_contents));
+  base::ranges::copy(test_file_buffer->CopyAs<Vector<char>>(),
+                     std::back_inserter(test_file_contents));
   ASSERT_FALSE(test_file_contents.empty())
       << "Test file cannot be empty.\n"
       << test_file.Utf8()
@@ -418,10 +417,9 @@
       test_path +
       String::FromUTF8(suffix.empty() ? kAXTestExpectationSuffix : suffix);
   scoped_refptr<SharedBuffer> ax_file_buffer = test::ReadFromFile(ax_file);
-  auto ax_file_chars = ax_file_buffer->CopyAs<Vector<char>>();
   std::string ax_file_contents;
-  std::copy(ax_file_chars.begin(), ax_file_chars.end(),
-            std::back_inserter(ax_file_contents));
+  base::ranges::copy(ax_file_buffer->CopyAs<Vector<char>>(),
+                     std::back_inserter(ax_file_contents));
   ASSERT_FALSE(ax_file_contents.empty())
       << "Expectations file cannot be empty.\n"
       << ax_file.Utf8()
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
index e8fb2de..533207a 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.cc
@@ -1290,8 +1290,7 @@
   stroke_data.SetLineJoin(GetState().GetLineJoin());
   stroke_data.SetMiterLimit(GetState().MiterLimit());
   Vector<float> line_dash(GetState().LineDash().size());
-  std::copy(GetState().LineDash().begin(), GetState().LineDash().end(),
-            line_dash.begin());
+  base::ranges::copy(GetState().LineDash(), line_dash.begin());
   stroke_data.SetLineDash(line_dash, GetState().LineDashOffset());
   return path.StrokeContains(transformed_point, stroke_data, ctm);
 }
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc
index f935a874..eb96b03 100644
--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc
+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.cc
@@ -5,7 +5,9 @@
 #include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h"
 
 #include <memory>
+
 #include "base/metrics/histogram_functions.h"
+#include "base/ranges/algorithm.h"
 #include "third_party/blink/renderer/core/css/css_numeric_literal_value.h"
 #include "third_party/blink/renderer/core/css/css_to_length_conversion_data.h"
 #include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
@@ -225,7 +227,7 @@
     stroke_flags_.setPathEffect(nullptr);
   } else {
     Vector<float> line_dash(line_dash_.size());
-    std::copy(line_dash_.begin(), line_dash_.end(), line_dash.begin());
+    base::ranges::copy(line_dash_, line_dash.begin());
     stroke_flags_.setPathEffect(SkDashPathEffect::Make(
         line_dash.data(), line_dash.size(), line_dash_offset_));
   }
diff --git a/third_party/blink/renderer/modules/exported/web_ax_object.cc b/third_party/blink/renderer/modules/exported/web_ax_object.cc
index 5c83c87..dbf4d96 100644
--- a/third_party/blink/renderer/modules/exported/web_ax_object.cc
+++ b/third_party/blink/renderer/modules/exported/web_ax_object.cc
@@ -30,6 +30,7 @@
 
 #include "third_party/blink/public/web/web_ax_object.h"
 
+#include "base/ranges/algorithm.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/web/web_document.h"
@@ -622,8 +623,7 @@
 
   AXObject::AXObjectVector radio_buttons = private_->RadioButtonsInGroup();
   WebVector<WebAXObject> web_radio_buttons(radio_buttons.size());
-  std::copy(radio_buttons.begin(), radio_buttons.end(),
-            web_radio_buttons.begin());
+  base::ranges::copy(radio_buttons, web_radio_buttons.begin());
   return web_radio_buttons;
 }
 
@@ -806,7 +806,7 @@
 
   out_name_objects.reserve(name_objects.size());
   out_name_objects.resize(name_objects.size());
-  std::copy(name_objects.begin(), name_objects.end(), out_name_objects.begin());
+  base::ranges::copy(name_objects, out_name_objects.begin());
 
   return result;
 }
@@ -835,8 +835,7 @@
 
   out_description_objects.reserve(description_objects.size());
   out_description_objects.resize(description_objects.size());
-  std::copy(description_objects.begin(), description_objects.end(),
-            out_description_objects.begin());
+  base::ranges::copy(description_objects, out_description_objects.begin());
 
   return result;
 }
@@ -989,7 +988,7 @@
   private_->RowHeaders(headers);
   row_header_elements.reserve(headers.size());
   row_header_elements.resize(headers.size());
-  std::copy(headers.begin(), headers.end(), row_header_elements.begin());
+  base::ranges::copy(headers, row_header_elements.begin());
 }
 
 unsigned WebAXObject::ColumnIndex() const {
@@ -1024,7 +1023,7 @@
   private_->ColumnHeaders(headers);
   column_header_elements.reserve(headers.size());
   column_header_elements.resize(headers.size());
-  std::copy(headers.begin(), headers.end(), column_header_elements.begin());
+  base::ranges::copy(headers, column_header_elements.begin());
 }
 
 unsigned WebAXObject::CellColumnIndex() const {
diff --git a/third_party/blink/renderer/modules/formatted_text/formatted_text.cc b/third_party/blink/renderer/modules/formatted_text/formatted_text.cc
index 7658fb24..8c63833 100644
--- a/third_party/blink/renderer/modules/formatted_text/formatted_text.cc
+++ b/third_party/blink/renderer/modules/formatted_text/formatted_text.cc
@@ -37,11 +37,11 @@
   // block flow. In the future we should handle execution_context's from worker
   // threads that do not have a document.
   auto* document = To<LocalDOMWindow>(execution_context)->document();
-  scoped_refptr<ComputedStyle> style =
-      document->GetStyleResolver().CreateComputedStyle();
-  style->SetDisplay(EDisplay::kBlock);
-  block_ =
-      LayoutBlockFlow::CreateAnonymous(document, style, LegacyLayout::kAuto);
+  ComputedStyleBuilder builder =
+      document->GetStyleResolver().CreateComputedStyleBuilder();
+  builder.SetDisplay(EDisplay::kBlock);
+  block_ = LayoutBlockFlow::CreateAnonymous(document, builder.TakeStyle(),
+                                            LegacyLayout::kAuto);
   block_->SetIsLayoutNGObjectForFormattedText(true);
 }
 
diff --git a/third_party/blink/renderer/modules/formatted_text/formatted_text_run.cc b/third_party/blink/renderer/modules/formatted_text/formatted_text_run.cc
index 4af97ca..d15143f1 100644
--- a/third_party/blink/renderer/modules/formatted_text/formatted_text_run.cc
+++ b/third_party/blink/renderer/modules/formatted_text/formatted_text_run.cc
@@ -17,11 +17,11 @@
   // text. In the future we should handle execution_context's from worker
   // threads that do not have a document.
   auto* document = To<LocalDOMWindow>(execution_context)->document();
-  scoped_refptr<ComputedStyle> style =
-      document->GetStyleResolver().CreateComputedStyle();
-  style->SetDisplay(EDisplay::kInline);
+  ComputedStyleBuilder builder =
+      document->GetStyleResolver().CreateComputedStyleBuilder();
+  builder.SetDisplay(EDisplay::kInline);
   layout_text_ = LayoutText::CreateAnonymousForFormattedText(
-      *document, std::move(style), text.Impl(), LegacyLayout::kAuto);
+      *document, builder.TakeStyle(), text.Impl(), LegacyLayout::kAuto);
   layout_text_->SetIsLayoutNGObjectForFormattedText(true);
 }
 
diff --git a/third_party/blink/renderer/modules/mediastream/media_devices.cc b/third_party/blink/renderer/modules/mediastream/media_devices.cc
index c97883e..8462818 100644
--- a/third_party/blink/renderer/modules/mediastream/media_devices.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_devices.cc
@@ -860,8 +860,7 @@
 
   DCHECK(!capture_controller ||
          RuntimeEnabledFeatures::ConditionalFocusEnabled(context));
-  if (RuntimeEnabledFeatures::ConditionalFocusEnabled(context) &&
-      capture_controller) {
+  if (capture_controller) {
     capture_controller->FinalizeFocusDecision();
   }
 
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.cc b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.cc
index 3756433..756a03f 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.cc
@@ -8,6 +8,7 @@
 #include <cmath>
 #include <utility>
 
+#include "base/feature_list.h"
 #include "media/base/limits.h"
 #include "media/base/video_types.h"
 #include "third_party/blink/public/common/mediastream/media_stream_controls.h"
@@ -47,6 +48,12 @@
 using BoolSet = media_constraints::DiscreteSet<bool>;
 using DoubleRangeSet = media_constraints::NumericRangeSet<double>;
 
+// If enabled, the minimum frame rate is a small positive value.
+// If disabled, the minimum frame rate is zero.
+BASE_FEATURE(kMinScreenCastFrameRateIsMoreThanZero,
+             "MinScreenCastFrameRateIsMoreThanZero",
+             base::FEATURE_ENABLED_BY_DEFAULT);
+
 constexpr double kMinScreenCastAspectRatio =
     static_cast<double>(kMinScreenCastDimension) /
     static_cast<double>(kMaxScreenCastDimension);
@@ -69,7 +76,7 @@
                                     kMaxScreenCastDimension),
         frame_rate_set_(
             DoubleRangeSet::FromConstraint(constraint_set.frame_rate,
-                                           0.0,
+                                           MinScreenCastFrameRate(),
                                            kMaxScreenCastFrameRate)),
         device_id_set_(media_constraints::StringSetFromConstraint(
             constraint_set.device_id)),
@@ -385,6 +392,13 @@
 
 }  // namespace
 
+double MinScreenCastFrameRate() {
+  if (base::FeatureList::IsEnabled(kMinScreenCastFrameRateIsMoreThanZero)) {
+    return 0.01;
+  }
+  return 0;
+}
+
 VideoCaptureSettings SelectSettingsVideoContentCapture(
     const MediaConstraints& constraints,
     mojom::MediaStreamType stream_type,
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.h b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.h
index 4b0a403..92e88b9c 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.h
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content.h
@@ -21,6 +21,8 @@
 MODULES_EXPORT extern const double kMaxScreenCastFrameRate;
 MODULES_EXPORT extern const double kDefaultScreenCastFrameRate;
 
+MODULES_EXPORT double MinScreenCastFrameRate();
+
 // This function performs source, source-settings and track-settings selection
 // for content video capture based on the given |constraints|.
 VideoCaptureSettings MODULES_EXPORT
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content_test.cc
index 2d6c8c20..169ffe41 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_video_content_test.cc
@@ -1335,7 +1335,7 @@
 
   // MinFrameRate less than the minimum allowed.
   {
-    const double kMinFrameRate = -0.01;
+    const double kMinFrameRate = MinScreenCastFrameRate() - 0.01;
     constraint_factory_.basic().frame_rate.SetMin(kMinFrameRate);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
@@ -1350,7 +1350,7 @@
 
   // MinFrameRate equal to the minimum allowed.
   {
-    const double kMinFrameRate = 0.0;
+    const double kMinFrameRate = MinScreenCastFrameRate();
     constraint_factory_.basic().frame_rate.SetMin(kMinFrameRate);
     auto result = SelectSettings();
     EXPECT_TRUE(result.HasValue());
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
index 6f2e94a..bd0d58b 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
+++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
@@ -252,8 +252,7 @@
 template <typename T>
 std::vector<T> ToStdVector(const Vector<T>& format_vector) {
   std::vector<T> formats;
-  std::copy(format_vector.begin(), format_vector.end(),
-            std::back_inserter(formats));
+  base::ranges::copy(format_vector, std::back_inserter(formats));
   return formats;
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
index 38790706..090716b 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -446,6 +446,23 @@
                                            "The peer connection is closed."));
     return promise;
   }
+
+  if (with_track && kind_ != with_track->kind()) {
+    ExceptionState exception_state(script_state->GetIsolate(),
+                                   ExceptionState::kExecutionContext,
+                                   "RTCRtpSender", "replaceTrack");
+    exception_state.ThrowTypeError("Track kind does not match Sender kind");
+    resolver->Reject(exception_state);
+    return promise;
+  }
+
+  if (transceiver_ && transceiver_->stopped()) {
+    resolver->Reject(MakeGarbageCollected<DOMException>(
+        DOMExceptionCode::kInvalidStateError,
+        "replaceTrack cannot be called on a stopped sender"));
+    return promise;
+  }
+
   MediaStreamComponent* component = nullptr;
   if (with_track) {
     pc_->RegisterTrack(with_track);
diff --git a/third_party/blink/renderer/platform/audio/vector_math_test.cc b/third_party/blink/renderer/platform/audio/vector_math_test.cc
index 3dd367f..9b52599 100644
--- a/third_party/blink/renderer/platform/audio/vector_math_test.cc
+++ b/third_party/blink/renderer/platform/audio/vector_math_test.cc
@@ -401,7 +401,7 @@
       expected_dest[i] = dest_source[i] + scale * source[i];
     }
     for (auto& dest : GetSecondaryVectors(GetDestination(1u), source)) {
-      std::copy(dest_source.begin(), dest_source.end(), dest.begin());
+      base::ranges::copy(dest_source, dest.begin());
       Vsma(source.p(), source.stride(), &scale, dest.p(), dest.stride(),
            source.size());
       // Different optimizations may use different precisions for intermediate
diff --git a/third_party/blink/renderer/platform/blob/blob_bytes_provider_test.cc b/third_party/blink/renderer/platform/blob/blob_bytes_provider_test.cc
index 6d0c80a..4dd1f7ce 100644
--- a/third_party/blink/renderer/platform/blob/blob_bytes_provider_test.cc
+++ b/third_party/blink/renderer/platform/blob/blob_bytes_provider_test.cc
@@ -4,13 +4,13 @@
 
 #include "third_party/blink/renderer/platform/blob/blob_bytes_provider.h"
 
-#include <algorithm>
 #include <memory>
 #include <utility>
 
 #include "base/bind.h"
 #include "base/files/file.h"
 #include "base/files/file_util.h"
+#include "base/ranges/algorithm.h"
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
@@ -223,8 +223,7 @@
                   expected_data.size()));
   }
 
-  std::copy(sliced_data_.begin(), sliced_data_.end(),
-            expected_data.begin() + file_offset);
+  base::ranges::copy(sliced_data_, expected_data.begin() + file_offset);
 
   test_provider_->RequestAsFile(
       test.offset, test.size,
diff --git a/third_party/blink/renderer/platform/exported/video_capture/web_video_capture_impl_manager.cc b/third_party/blink/renderer/platform/exported/video_capture/web_video_capture_impl_manager.cc
index b72a424..866b777 100644
--- a/third_party/blink/renderer/platform/exported/video_capture/web_video_capture_impl_manager.cc
+++ b/third_party/blink/renderer/platform/exported/video_capture/web_video_capture_impl_manager.cc
@@ -20,8 +20,6 @@
 
 #include "third_party/blink/public/platform/modules/video_capture/web_video_capture_impl_manager.h"
 
-#include <algorithm>
-
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/callback_helpers.h"
@@ -45,8 +43,7 @@
 media::VideoCaptureFormats ToVideoCaptureFormats(
     const Vector<media::VideoCaptureFormat>& format_vector) {
   media::VideoCaptureFormats formats;
-  std::copy(format_vector.begin(), format_vector.end(),
-            std::back_inserter(formats));
+  base::ranges::copy(format_vector, std::back_inserter(formats));
   return formats;
 }
 
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shape_result_bloberizer.cc b/third_party/blink/renderer/platform/fonts/shaping/shape_result_bloberizer.cc
index 69a153a9..0bb039a3 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/shape_result_bloberizer.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/shape_result_bloberizer.cc
@@ -196,16 +196,15 @@
     DVLOG(4) << "  CommitPendingRun indexes: "
              << base::make_span(pending_utf8_character_indexes_);
     DCHECK_EQ(pending_utf8_character_indexes_.size(), run_size);
-    std::copy(pending_utf8_character_indexes_.begin(),
-              pending_utf8_character_indexes_.end(), buffer.clusters);
-    std::copy(pending_utf8_.begin(), pending_utf8_.end(), buffer.utf8text);
+    base::ranges::copy(pending_utf8_character_indexes_, buffer.clusters);
+    base::ranges::copy(pending_utf8_, buffer.utf8text);
 
     pending_utf8_.Shrink(0);
     pending_utf8_character_indexes_.Shrink(0);
   }
 
-  std::copy(pending_glyphs_.begin(), pending_glyphs_.end(), buffer.glyphs);
-  std::copy(pending_offsets_.begin(), pending_offsets_.end(), buffer.pos);
+  base::ranges::copy(pending_glyphs_, buffer.glyphs);
+  base::ranges::copy(pending_offsets_, buffer.pos);
   pending_glyphs_.Shrink(0);
   pending_offsets_.Shrink(0);
 }
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h b/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h
index 0753b7e..f3ed885 100644
--- a/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h
+++ b/third_party/blink/renderer/platform/fonts/shaping/shape_result_inline_headers.h
@@ -34,6 +34,7 @@
 
 #include <hb.h>
 
+#include <algorithm>
 #include <memory>
 #include <type_traits>
 
diff --git a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc
index 91f9b8e6..2fad54e9 100644
--- a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc
+++ b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.cc
@@ -12,8 +12,8 @@
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/graphics/paint/paint_record.h"
 #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h"
+#include "third_party/blink/renderer/platform/scheduler/public/non_main_thread.h"
 #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h"
-#include "third_party/blink/renderer/platform/scheduler/public/thread.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_base.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_copier_std.h"
 #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h"
@@ -80,7 +80,7 @@
   ongoing_jobs_ = std::move(worklet_job_map);
 
   scoped_refptr<base::SingleThreadTaskRunner> runner =
-      Thread::Current()->GetDeprecatedTaskRunner();
+      GetCompositorTaskRunner();
   WTF::CrossThreadClosure on_done = CrossThreadBindRepeating(
       [](base::WeakPtr<PaintWorkletPaintDispatcher> dispatcher,
          scoped_refptr<base::SingleThreadTaskRunner> runner) {
@@ -146,4 +146,11 @@
   std::move(on_async_paint_complete_).Run(std::move(ongoing_jobs_));
 }
 
+scoped_refptr<base::SingleThreadTaskRunner>
+PaintWorkletPaintDispatcher::GetCompositorTaskRunner() {
+  DCHECK(Thread::CompositorThread());
+  DCHECK(Thread::CompositorThread()->IsCurrentThread());
+  return Thread::CompositorThread()->GetTaskRunner();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.h b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.h
index f933e83..cc24940 100644
--- a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.h
+++ b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher.h
@@ -42,6 +42,7 @@
   PaintWorkletPaintDispatcher(const PaintWorkletPaintDispatcher&) = delete;
   PaintWorkletPaintDispatcher& operator=(const PaintWorkletPaintDispatcher&) =
       delete;
+  virtual ~PaintWorkletPaintDispatcher() = default;
 
   // Dispatches a set of paint class instances - each represented by a
   // PaintWorkletInput - to the appropriate PaintWorklet threads, asynchronously
@@ -84,6 +85,9 @@
     return painter_map_;
   }
 
+ protected:
+  virtual scoped_refptr<base::SingleThreadTaskRunner> GetCompositorTaskRunner();
+
  private:
   // Called when results are available for the previous call to
   // |DispatchWorklets|.
diff --git a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc
index 330a18e2..c728b8b7 100644
--- a/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc
+++ b/third_party/blink/renderer/platform/graphics/paint_worklet_paint_dispatcher_test.cc
@@ -9,6 +9,7 @@
 #include "cc/paint/paint_worklet_job.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
 #include "third_party/blink/renderer/platform/scheduler/public/non_main_thread.h"
 #include "third_party/blink/renderer/platform/scheduler/public/thread_type.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
@@ -88,10 +89,21 @@
                                      animated_property_values);
   return input_ptr;
 }
+
+class PaintWorkletPaintDispatcherMainThread
+    : public PaintWorkletPaintDispatcher {
+ protected:
+  scoped_refptr<base::SingleThreadTaskRunner> GetCompositorTaskRunner()
+      override {
+    // There is no compositor thread in testing, so return the current thread.
+    return scheduler::GetSingleThreadTaskRunnerForTesting();
+  }
+};
+
 }  // namespace
 
 TEST_F(PaintWorkletPaintDispatcherAsyncTest, DispatchedWorkletIsPainted) {
-  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcher>();
+  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcherMainThread>();
 
   const int worklet_id = 4;
   MockPaintWorkletPainter* mock_painter =
@@ -118,7 +130,7 @@
 }
 
 TEST_F(PaintWorkletPaintDispatcherAsyncTest, DispatchCompletesWithNoPainters) {
-  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcher>();
+  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcherMainThread>();
 
   cc::PaintWorkletJobMap job_map;
   AddPaintWorkletInputToMap(job_map, /*worklet_id=*/2);
@@ -134,7 +146,7 @@
 }
 
 TEST_F(PaintWorkletPaintDispatcherAsyncTest, DispatchHandlesEmptyInput) {
-  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcher>();
+  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcherMainThread>();
 
   const int worklet_id = 4;
   auto* mock_painter =
@@ -155,7 +167,7 @@
 }
 
 TEST_F(PaintWorkletPaintDispatcherAsyncTest, DispatchSelectsCorrectPainter) {
-  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcher>();
+  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcherMainThread>();
 
   const int first_worklet_id = 2;
   auto* first_mock_painter =
@@ -191,7 +203,7 @@
 }
 
 TEST_F(PaintWorkletPaintDispatcherAsyncTest, DispatchIgnoresNonMatchingInput) {
-  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcher>();
+  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcherMainThread>();
 
   const int worklet_id = 2;
   auto* mock_painter =
@@ -217,7 +229,7 @@
 
 TEST_F(PaintWorkletPaintDispatcherAsyncTest,
        DispatchCorrectlyAssignsInputsToMultiplePainters) {
-  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcher>();
+  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcherMainThread>();
 
   const int first_worklet_id = 5;
   auto* first_mock_painter =
@@ -252,7 +264,7 @@
 
 TEST_F(PaintWorkletPaintDispatcherAsyncTest,
        HasOngoingDispatchIsTrackedCorrectly) {
-  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcher>();
+  auto dispatcher = std::make_unique<PaintWorkletPaintDispatcherMainThread>();
 
   const int first_worklet_id = 2;
   auto* first_mock_painter =
diff --git a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
index 75818ba..2985e36 100644
--- a/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
+++ b/third_party/blink/renderer/platform/image-decoders/avif/avif_image_decoder.cc
@@ -16,6 +16,7 @@
 #include "base/logging.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/ranges/algorithm.h"
 #include "base/timer/elapsed_timer.h"
 #include "build/build_config.h"
 #include "cc/base/math_util.h"
@@ -1124,8 +1125,7 @@
         premultiply_alpha, media::PaintCanvasVideoRenderer::kFilterBilinear);
 
     if (save_top_row) {
-      std::copy(previous_last_decoded_row_.begin(),
-                previous_last_decoded_row_.end(), rgba_8888);
+      base::ranges::copy(previous_last_decoded_row_, rgba_8888);
     }
     return true;
   }
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
index c9ede04..6656065 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.cc
@@ -42,6 +42,14 @@
   return kSendToScannerParam.Get();
 }
 
+// Returns the maximum data size to process in TakeData(). Returning 0 means
+// process all the data available.
+size_t GetMaxDataToProcessPerTask() {
+  static const base::FeatureParam<int> kMaxDataToProcessParam{
+      &features::kThreadedBodyLoader, "max-data-to-process", 0};
+  return kMaxDataToProcessParam.Get();
+}
+
 // A chunk of data read by the OffThreadBodyReader. This will be created on a
 // background thread and processed on the main thread.
 struct DataChunk {
@@ -132,10 +140,26 @@
     DCHECK(reader_task_runner_->RunsTasksInCurrentSequence());
   }
 
-  std::vector<DataChunk> TakeData() {
+  std::vector<DataChunk> TakeData(size_t max_data_to_process) {
     DCHECK(IsMainThread());
     base::AutoLock lock(lock_);
-    return std::move(data_chunks_);
+    if (max_data_to_process == 0)
+      return std::move(data_chunks_);
+
+    std::vector<DataChunk> data;
+    size_t data_processed = 0;
+    while (!data_chunks_.empty() && data_processed < max_data_to_process) {
+      data.emplace_back(std::move(data_chunks_.front()));
+      data_processed += data.back().encoded_data_size;
+      data_chunks_.erase(data_chunks_.begin());
+    }
+    if (!data_chunks_.empty()) {
+      PostCrossThreadTask(
+          *main_thread_task_runner_, FROM_HERE,
+          CrossThreadBindOnce(&NavigationBodyLoader::ProcessOffThreadData,
+                              body_loader_));
+    }
+    return data;
   }
 
   void StoreProcessBackgroundDataCallback(Client* client) {
@@ -312,7 +336,8 @@
           std::move(resource_load_info_notifier_wrapper)),
       original_url_(original_url),
       should_send_directly_to_preload_scanner_(
-          ShouldSendDirectlyToPreloadScanner()) {}
+          ShouldSendDirectlyToPreloadScanner()),
+      max_data_to_process_per_task_(GetMaxDataToProcessPerTask()) {}
 
 NavigationBodyLoader::~NavigationBodyLoader() {
   if (!has_received_completion_ || !has_seen_end_of_data_) {
@@ -449,7 +474,8 @@
     return;
   }
 
-  auto chunks = off_thread_body_reader_->TakeData();
+  auto chunks =
+      off_thread_body_reader_->TakeData(max_data_to_process_per_task_);
   auto weak_self = weak_factory_.GetWeakPtr();
   for (const auto& chunk : chunks) {
     client_->DecodedBodyDataReceived(
@@ -467,10 +493,10 @@
       break;
     }
   }
-  NotifyCompletionIfAppropriate();
-
   if (weak_self && should_send_directly_to_preload_scanner_)
     off_thread_body_reader_->StoreProcessBackgroundDataCallback(client_);
+
+  NotifyCompletionIfAppropriate();
 }
 
 void NavigationBodyLoader::ReadFromDataPipe() {
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.h b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.h
index a100fce..76cc323 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.h
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader.h
@@ -193,6 +193,7 @@
       std::unique_ptr<OffThreadBodyReader, OffThreadBodyReaderDeleter>;
   OffThreadBodyReaderPtr off_thread_body_reader_;
   bool should_send_directly_to_preload_scanner_ = false;
+  size_t max_data_to_process_per_task_ = 0;
 
   base::WeakPtrFactory<NavigationBodyLoader> weak_factory_{this};
 };
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader_unittest.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader_unittest.cc
index e18fde5..0a368de 100644
--- a/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader_unittest.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/navigation_body_loader_unittest.cc
@@ -15,6 +15,7 @@
 #include "net/test/cert_test_util.h"
 #include "services/network/public/cpp/url_loader_completion_status.h"
 #include "services/network/public/mojom/fetch_api.mojom.h"
+#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/navigation/navigation_params.h"
@@ -33,6 +34,8 @@
 
 namespace {
 
+using ::testing::ElementsAre;
+
 class UppercaseDecoder : public BodyTextDecoder {
   String Decode(const char* data, size_t length) override {
     return String(data, length).UpperASCII();
@@ -103,6 +106,12 @@
     ASSERT_EQ(buffer.size(), size);
   }
 
+  void WriteAndFlush(const std::string& buffer) {
+    Write(buffer);
+    To<NavigationBodyLoader>(loader_.get())
+        ->FlushOffThreadBodyReaderForTesting();
+  }
+
   void Complete(int net_error) {
     client_remote_->OnComplete(network::URLLoaderCompletionStatus(net_error));
     base::RunLoop().RunUntilIdle();
@@ -257,8 +266,7 @@
   StartLoadingInBackground();
   // First flush data to the off thread reader. The background data callback
   // should not see this since it is not set yet.
-  Write("hello");
-  To<NavigationBodyLoader>(loader_.get())->FlushOffThreadBodyReaderForTesting();
+  WriteAndFlush("hello");
 
   String background_data = "";
   process_background_data_callback_ = CrossThreadBindRepeating(
@@ -508,6 +516,95 @@
             WebString::FromUTF8(second_redirect_url.spec()));
 }
 
+// A loader client which keeps track of chunks of data that are received in a
+// single PostTask.
+class ChunkingLoaderClient : public WebNavigationBodyLoader::Client {
+ public:
+  void BodyDataReceived(base::span<const char> data) override { NOTREACHED(); }
+  void DecodedBodyDataReceived(const WebString& data,
+                               const WebEncodingData& encoding_data,
+                               base::span<const char> encoded_data) override {
+    scheduler::GetSingleThreadTaskRunnerForTesting()->PostTask(
+        FROM_HERE, base::BindOnce(&ChunkingLoaderClient::CreateNewChunk,
+                                  base::Unretained(this)));
+    chunks_.back() += data.Ascii();
+  }
+  void BodyLoadingFinished(base::TimeTicks completion_time,
+                           int64_t total_encoded_data_length,
+                           int64_t total_encoded_body_length,
+                           int64_t total_decoded_body_length,
+                           bool should_report_corb_blocking,
+                           const absl::optional<WebURLError>& error) override {
+    scheduler::GetSingleThreadTaskRunnerForTesting()->PostTask(
+        FROM_HERE, run_loop_.QuitClosure());
+  }
+
+  void CreateNewChunk() {
+    if (!chunks_.back().empty())
+      chunks_.push_back("");
+  }
+
+  std::vector<std::string> TakeChunks() {
+    run_loop_.Run();
+    return std::move(chunks_);
+  }
+
+ private:
+  base::RunLoop run_loop_;
+  std::vector<std::string> chunks_{""};
+};
+
+TEST_F(NavigationBodyLoaderTest, MaxDataSize1) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kThreadedBodyLoader, {{"max-data-to-process", "1"}});
+  CreateBodyLoader();
+  StartLoadingInBackground();
+  for (const char* s : {"a", "b", "c", "d", "e", "f", "g", "h"})
+    WriteAndFlush(std::string(s));
+
+  ChunkingLoaderClient client;
+  loader_->StartLoadingBody(&client);
+  Complete(net::OK);
+  writer_.reset();
+  // First chunk is doubled since we can't catch the first PostTask.
+  EXPECT_THAT(client.TakeChunks(),
+              ElementsAre("AB", "C", "D", "E", "F", "G", "H", ""));
+}
+
+TEST_F(NavigationBodyLoaderTest, MaxDataSize2) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kThreadedBodyLoader, {{"max-data-to-process", "2"}});
+  CreateBodyLoader();
+  StartLoadingInBackground();
+  for (const char* s : {"a", "b", "c", "d", "e", "f", "g", "h"})
+    WriteAndFlush(std::string(s));
+
+  ChunkingLoaderClient client;
+  loader_->StartLoadingBody(&client);
+  Complete(net::OK);
+  writer_.reset();
+  // First chunk is doubled since we can't catch the first PostTask.
+  EXPECT_THAT(client.TakeChunks(), ElementsAre("ABCD", "EF", "GH", ""));
+}
+
+TEST_F(NavigationBodyLoaderTest, MaxDataSizeAll) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeatureWithParameters(
+      features::kThreadedBodyLoader, {{"max-data-to-process", "0"}});
+  CreateBodyLoader();
+  StartLoadingInBackground();
+  for (const char* s : {"a", "b", "c", "d", "e", "f", "g", "h"})
+    WriteAndFlush(std::string(s));
+
+  ChunkingLoaderClient client;
+  loader_->StartLoadingBody(&client);
+  Complete(net::OK);
+  writer_.reset();
+  EXPECT_THAT(client.TakeChunks(), ElementsAre("ABCDEFGH", ""));
+}
+
 }  // namespace
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/media/web_media_player_impl.cc b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
index 83f51e76..c809454 100644
--- a/third_party/blink/renderer/platform/media/web_media_player_impl.cc
+++ b/third_party/blink/renderer/platform/media/web_media_player_impl.cc
@@ -47,6 +47,7 @@
 #include "media/base/media_switches.h"
 #include "media/base/media_url_demuxer.h"
 #include "media/base/memory_dump_provider_proxy.h"
+#include "media/base/renderer.h"
 #include "media/base/routing_token_callback.h"
 #include "media/base/supported_types.h"
 #include "media/base/text_renderer.h"
diff --git a/third_party/blink/renderer/platform/mojo/drag_mojom_traits.cc b/third_party/blink/renderer/platform/mojo/drag_mojom_traits.cc
index 67db737..22b51b36 100644
--- a/third_party/blink/renderer/platform/mojo/drag_mojom_traits.cc
+++ b/third_party/blink/renderer/platform/mojo/drag_mojom_traits.cc
@@ -4,7 +4,9 @@
 
 #include "third_party/blink/renderer/platform/mojo/drag_mojom_traits.h"
 
+#include <algorithm>
 #include <string>
+
 #include "base/check.h"
 #include "base/containers/span.h"
 #include "base/files/file_path.h"
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index 0f41740..e8e3e6b 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -2749,6 +2749,10 @@
       status: "experimental",
     },
     {
+      name: "TrustedTypesFromLiteral",
+      status: "experimental",
+    },
+    {
       name: "TrustedTypesUseCodeLike",
       status: "experimental",
     },
diff --git a/third_party/blink/renderer/platform/text/bidi_resolver_test.cc b/third_party/blink/renderer/platform/text/bidi_resolver_test.cc
index c2a4c80..ca054c6 100644
--- a/third_party/blink/renderer/platform/text/bidi_resolver_test.cc
+++ b/third_party/blink/renderer/platform/text/bidi_resolver_test.cc
@@ -33,6 +33,7 @@
 #include <fstream>
 
 #include "base/logging.h"
+#include "base/ranges/algorithm.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/text/bidi_test_harness.h"
 #include "third_party/blink/renderer/platform/text/text_run_iterator.h"
@@ -161,11 +162,9 @@
   std::ostringstream diff;
   diff << "actual: ";
   // This is the magical way to print a vector to a stream, clear, right?
-  std::copy(actual.begin(), actual.end(),
-            std::ostream_iterator<int>(diff, " "));
+  base::ranges::copy(actual, std::ostream_iterator<int>(diff, " "));
   diff << " expected: ";
-  std::copy(expected.begin(), expected.end(),
-            std::ostream_iterator<int>(diff, " "));
+  base::ranges::copy(expected, std::ostream_iterator<int>(diff, " "));
   return diff.str();
 }
 
diff --git a/third_party/blink/renderer/platform/transforms/transformation_matrix.h b/third_party/blink/renderer/platform/transforms/transformation_matrix.h
index 6de9c5c..97dc7f5 100644
--- a/third_party/blink/renderer/platform/transforms/transformation_matrix.h
+++ b/third_party/blink/renderer/platform/transforms/transformation_matrix.h
@@ -28,6 +28,7 @@
 
 #include <string.h>  // for memcpy
 
+#include <algorithm>
 #include <cmath>
 #include <limits>
 #include <memory>
diff --git a/third_party/blink/renderer/platform/wtf/text/string_builder.cc b/third_party/blink/renderer/platform/wtf/text/string_builder.cc
index 2f6b619..83fcec9 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_builder.cc
+++ b/third_party/blink/renderer/platform/wtf/text/string_builder.cc
@@ -72,6 +72,17 @@
   return String(Characters16() + start, length);
 }
 
+StringView StringBuilder::SubstringView(unsigned start, unsigned length) const {
+  if (start >= length_)
+    return StringView();
+  if (!string_.IsNull())
+    return StringView(string_, start, length);
+  length = std::min(length, length_ - start);
+  if (is_8bit_)
+    return StringView(Characters8() + start, length);
+  return StringView(Characters16() + start, length);
+}
+
 void StringBuilder::Swap(StringBuilder& builder) {
   absl::optional<Buffer8> buffer8;
   absl::optional<Buffer16> buffer16;
diff --git a/third_party/blink/renderer/platform/wtf/text/string_builder.h b/third_party/blink/renderer/platform/wtf/text/string_builder.h
index 0444040..a7a5f19 100644
--- a/third_party/blink/renderer/platform/wtf/text/string_builder.h
+++ b/third_party/blink/renderer/platform/wtf/text/string_builder.h
@@ -167,6 +167,7 @@
   String ToString();
   AtomicString ToAtomicString();
   String Substring(unsigned start, unsigned length) const;
+  StringView SubstringView(unsigned start, unsigned length) const;
 
   operator StringView() const {
     if (Is8Bit()) {
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index bf253ed..f3e89e1 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -11,6 +11,7 @@
 # Tests that fail in legacy but pass in NG
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Crash ]
 crbug.com/626703 external/wpt/dom/events/scrolling/scrollend-event-handler-content-attributes.html [ Timeout ]
 crbug.com/626703 external/wpt/screen-orientation/active-lock.html [ Timeout ]
 crbug.com/626703 external/wpt/css/selectors/media/media-loading-state.html [ Timeout ]
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
index b1ca617..461ffde 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
+++ b/third_party/blink/web_tests/FlagExpectations/disable-site-isolation-trials
@@ -82,6 +82,7 @@
 crbug.com/1209233 external/wpt/html/cross-origin-opener-policy/reporting/navigation-reporting/reporting-redirect-with-same-origin-allow-popups.https.html [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Crash ]
 crbug.com/626703 external/wpt/dom/events/scrolling/scrollend-event-handler-content-attributes.html [ Timeout ]
 crbug.com/626703 external/wpt/screen-orientation/active-lock.html [ Timeout ]
 crbug.com/626703 external/wpt/css/selectors/media/media-loading-state.html [ Timeout ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 6d51c4e..248b6de9 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -192,13 +192,6 @@
 crbug.com/881555 external/wpt/css/css-position/sticky/position-sticky-fixed-ancestor-iframe.html [ Failure ]
 crbug.com/881555 external/wpt/css/css-position/sticky/position-sticky-fixed-ancestor.html [ Failure ]
 
-# These tests block fixes done in V8. The tests run on the V8 bots as well.
-crbug.com/v8/12227 external/wpt/wasm/jsapi/interface.any.html [ Failure Pass ]
-crbug.com/v8/12227 external/wpt/wasm/jsapi/interface.any.worker.html [ Failure Pass ]
-crbug.com/v8/12227 external/wpt/wasm/jsapi/idlharness.any.html [ Failure Pass ]
-crbug.com/v8/12227 external/wpt/wasm/jsapi/idlharness.any.worker.html [ Failure Pass ]
-
-
 # --- Skia roll test suppressions
 
 crbug.com/1354678 compositing/reflections/nested-reflection-transformed.html [ Failure Pass ]
@@ -1428,6 +1421,15 @@
 crbug.com/882385 external/wpt/css/css-contain/quote-scoping-004.html [ Failure ]
 crbug.com/1315275 external/wpt/css/css-contain/content-visibility/content-visibility-canvas.html [ Failure ]
 crbug.com/1315275 external/wpt/css/css-contain/content-visibility/content-visibility-video.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-060.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-061.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-062.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-063.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-065.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-066.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-067.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-083.html [ Failure ]
+crbug.com/1378892 external/wpt/css/css-contain/content-visibility/content-visibility-084.html [ Failure ]
 
 # [css-align]
 
@@ -1620,6 +1622,7 @@
 crbug.com/1219875 external/wpt/css/css-fonts/font-size-adjust-009.html [ Failure ]
 crbug.com/1219875 external/wpt/css/css-fonts/font-size-adjust-010.html [ Failure ]
 crbug.com/1219875 external/wpt/css/css-fonts/font-size-adjust-011.html [ Failure ]
+crbug.com/1219875 external/wpt/css/css-fonts/font-size-adjust-012.html [ Failure ]
 crbug.com/716567 external/wpt/css/css-fonts/font-variant-alternates-02.html [ Failure ]
 crbug.com/716567 external/wpt/css/css-fonts/font-variant-alternates-03.html [ Failure ]
 crbug.com/716567 external/wpt/css/css-fonts/font-variant-alternates-04.html [ Failure ]
@@ -2480,6 +2483,9 @@
 crbug.com/1325518 [ Win ] external/wpt/cookie-store/cookieStore_set_arguments.https.any.html [ Failure Pass ]
 crbug.com/1325538 [ Win ] external/wpt/cookie-store/cookieStore_set_arguments.https.any.serviceworker.html [ Failure Pass ]
 
+# Flakiness reported by Findit. Need investigation.
+crbug.com/1357760 external/wpt/resource-timing/no-entries-for-cross-origin-css-fetched-memory-cache.sub.html [ Failure Pass ]
+
 # On all platforms media tests don't currently use gpu-accelerated (proprietary)
 # codecs, so no benefit to running them again with gpu acceleration enabled.
 crbug.com/555703 virtual/media-gpu-accelerated/* [ Skip ]
@@ -3368,30 +3374,19 @@
 crbug.com/626703 [ Win ] virtual/partitioned-cookies/http/tests/inspector-protocol/network/disabled-cache-navigation.js [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 [ Linux ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Failure Crash ]
+crbug.com/626703 [ Mac11 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Failure Crash ]
+crbug.com/626703 [ Mac11-arm64 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Failure Crash ]
+crbug.com/626703 [ Mac12 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Failure Crash ]
+crbug.com/626703 [ Mac12-arm64 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Failure Crash ]
+crbug.com/626703 [ Win11 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Failure Crash ]
+crbug.com/626703 [ Mac10.15 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Crash ]
+crbug.com/626703 [ Win10.20h2 ] external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html [ Timeout Crash ]
+crbug.com/626703 [ Mac10.15 ] virtual/pending-beacon/external/wpt/pending-beacon/pending_post_beacon-cors.tentative.https.window.html [ Timeout ]
 crbug.com/626703 [ Mac11 ] virtual/pending-beacon/external/wpt/pending-beacon/pending_beacon-sendonhidden.tentative.https.window.html [ Timeout ]
 crbug.com/626703 [ Mac11 ] virtual/pending-beacon/external/wpt/pending-beacon/pending_post_beacon-cors.tentative.https.window.html [ Timeout ]
-crbug.com/626703 external/wpt/dom/events/scrolling/scrollend-event-handler-content-attributes.html [ Timeout ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-060.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-061.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-062.html [ Failure ]
-crbug.com/626703 crbug.com/1380449 external/wpt/css/css-contain/content-visibility/content-visibility-063.html [ Crash Failure ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-065.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-066.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-067.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-083.html [ Failure ]
-crbug.com/626703 external/wpt/css/css-contain/content-visibility/content-visibility-084.html [ Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-060.html [ Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-061.html [ Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-062.html [ Failure ]
-crbug.com/626703 crbug.com/1380449 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-063.html [ Crash Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-065.html [ Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-066.html [ Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-067.html [ Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-083.html [ Failure ]
-crbug.com/626703 virtual/offsetparent-old-behavior/external/wpt/css/css-contain/content-visibility/content-visibility-084.html [ Failure ]
 crbug.com/626703 external/wpt/screen-orientation/active-lock.html [ Timeout ]
 crbug.com/626703 [ Win11 ] external/wpt/screen-orientation/fullscreen-interactions.html [ Failure Timeout ]
-crbug.com/626703 external/wpt/css/css-fonts/font-size-adjust-012.html [ Failure ]
 crbug.com/626703 external/wpt/fetch/cross-origin-resource-policy/script-loads.html [ Timeout ]
 crbug.com/626703 external/wpt/fetch/metadata/generated/element-script.https.sub.html [ Timeout ]
 crbug.com/626703 external/wpt/fetch/metadata/generated/element-script.sub.html [ Timeout ]
@@ -3493,20 +3488,6 @@
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/websockets/interfaces/WebSocket/send/009.html?wpt_flags=h2 [ Timeout ]
 crbug.com/626703 [ Mac10.15 ] external/wpt/pointerevents/pointerevent_pointercapture_in_frame.html?pen [ Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/fetch/private-network-access/fetch.window.html [ Timeout ]
-crbug.com/626703 [ Linux ] external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac10.15 ] external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac11 ] external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac11-arm64 ] external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac12 ] external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac12-arm64 ] external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Win ] external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Linux ] virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac10.15 ] virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac11 ] virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac11-arm64 ] virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac12 ] virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Mac12-arm64 ] virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
-crbug.com/626703 [ Win ] virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
 crbug.com/626703 [ Win11 ] external/wpt/mediacapture-streams/MediaDevices-enumerateDevices-per-origin-ids.sub.https.html [ Failure Timeout ]
 crbug.com/626703 [ Win11 ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/MediaDevices-enumerateDevices-per-origin-ids.sub.https.html [ Failure Timeout ]
 crbug.com/626703 [ Mac11-arm64 ] external/wpt/webrtc/RTCPeerConnection-videoDetectorTest.html [ Failure Timeout ]
@@ -3576,12 +3557,6 @@
 crbug.com/626703 external/wpt/geolocation-API/enabled-by-feature-policy-attribute.https.sub.html [ Timeout ]
 crbug.com/626703 external/wpt/geolocation-API/enabled-by-feature-policy.https.sub.html [ Timeout ]
 crbug.com/626703 external/wpt/geolocation-API/enabled-on-self-origin-by-feature-policy.https.sub.html [ Timeout ]
-crbug.com/626703 external/wpt/wasm/webapi/esm-integration/exported-names.tentative.html [ Timeout ]
-crbug.com/626703 external/wpt/wasm/webapi/esm-integration/js-wasm-cycle.tentative.html [ Timeout ]
-crbug.com/626703 external/wpt/wasm/webapi/esm-integration/wasm-import-wasm-export.tentative.html [ Timeout ]
-crbug.com/626703 external/wpt/wasm/webapi/esm-integration/wasm-js-cycle.tentative.html [ Timeout ]
-crbug.com/626703 external/wpt/wasm/webapi/esm-integration/worker-import.tentative.html [ Timeout ]
-crbug.com/626703 external/wpt/wasm/webapi/esm-integration/worker.tentative.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/resource-timing/object-not-found-adds-entry.html [ Timeout ]
 crbug.com/626703 external/wpt/webrtc/RTCConfiguration-iceTransportPolicy.html [ Skip Timeout ]
 crbug.com/626703 [ Win10.20h2 ] external/wpt/webrtc/RTCDataChannel-bufferedAmount.html [ Crash ]
@@ -4011,6 +3986,7 @@
 
 crbug.com/1088280 [ Mac ] external/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html [ Failure Timeout ]
 crbug.com/1088280 [ Win ] external/wpt/dom/events/scrolling/scrollend-event-for-user-scroll.html [ Failure Timeout ]
+crbug.com/1088280 external/wpt/dom/events/scrolling/scrollend-event-handler-content-attributes.html [ Timeout ]
 
 # Implement text-decoration correctly for vertical text
 crbug.com/1133806 external/wpt/css/css-text-decor/text-decoration-thickness-vertical-002.html [ Failure ]
@@ -4131,8 +4107,14 @@
 # Added 2016-12-12
 crbug.com/610835 http/tests/security/XFrameOptions/x-frame-options-deny-multiple-clients.html [ Failure Pass ]
 
+crbug.com/874302 external/wpt/wasm/serialization/module/broadcastchannel-success-and-failure.html [ Timeout ]
+crbug.com/874302 external/wpt/wasm/serialization/module/broadcastchannel-success.html [ Timeout ]
+
 crbug.com/892212 http/tests/wasm/wasm_remote_postMessage_test.https.html [ Failure Pass Timeout ]
 
+crbug.com/1380554 external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ Timeout ]
+crbug.com/1380554 virtual/wasm-csp/external/wpt/content-security-policy/wasm-unsafe-eval/postMessage-wasm-module.html [ 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.
 
@@ -4203,9 +4185,6 @@
 # crbug.com/1194557 annotation as soon as crbug.com/1270207 has been fixed.
 crbug.com/1270207 virtual/portals/http/tests/devtools/portals/portals-sources-activate.js [ Skip ]
 
-crbug.com/874302 external/wpt/wasm/serialization/module/broadcastchannel-success-and-failure.html [ Timeout ]
-crbug.com/874302 external/wpt/wasm/serialization/module/broadcastchannel-success.html [ Timeout ]
-
 crbug.com/831509 external/wpt/service-workers/service-worker/skip-waiting-installed.https.html [ Failure Pass ]
 
 # Fullscreen tests are failed because of consuming user activation on fullscreen
@@ -7712,6 +7691,14 @@
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/W3C/video/readyState/readyState_during_loadeddata.html [ Skip ]
 crbug.com/1362106 [ Win ] virtual/media-foundation-for-clear-dcomp/media/W3C/video/readyState/readyState_during_playing.html [ Skip ]
 
+# WebAssembly ESM integration is not yet implemented.
+crbug.com/1380485 external/wpt/wasm/webapi/esm-integration/exported-names.tentative.html [ Skip ]
+crbug.com/1380485 external/wpt/wasm/webapi/esm-integration/js-wasm-cycle.tentative.html [ Skip ]
+crbug.com/1380485 external/wpt/wasm/webapi/esm-integration/wasm-import-wasm-export.tentative.html [ Skip ]
+crbug.com/1380485 external/wpt/wasm/webapi/esm-integration/wasm-js-cycle.tentative.html [ Skip ]
+crbug.com/1380485 external/wpt/wasm/webapi/esm-integration/worker-import.tentative.html [ Skip ]
+crbug.com/1380485 external/wpt/wasm/webapi/esm-integration/worker.tentative.html [ Skip ]
+
 # Sheriff 2022-10-19
 crbug.com/1376307 [ Fuchsia ] tables/mozilla_expected_failures/bugs/bug1055-2.html [ Failure ]
 
@@ -7731,6 +7718,9 @@
 crbug.com/1376854 http/tests/devtools/elements/accessibility/autocomplete-attribute.js [ Skip ]
 crbug.com/1376854 http/tests/devtools/elements/styles-3/style-autocomplete.js [ Skip ]
 
+# WebRTC: temporarily disabled to allow new WebRTC stats to roll.
+crbug.com/webrtc/14619 external/wpt/webrtc-stats/supported-stats.html [ Failure Pass ]
+
 # Sheriff 2022-10-20
 crbug.com/1376822 [ Win11 ] external/wpt/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-intrinsic-width-height.html [ Failure ]
 crbug.com/1376495 http/tests/devtools/runtime/evaluate-timeout.js [ Failure Pass ]
@@ -7746,3 +7736,7 @@
 
 # Investigate the flake.
 crbug.com/1371395 external/wpt/performance-timeline/not-restored-reasons/performance-navigation-timing-same-origin-bfcache.window.html [ Failure Pass ]
+
+# Sheriff 2022-11-02
+crbug.com/1380762 [ Mac12-arm64 ] wpt_internal/webcodecs/avc_encoder_config.https.any.html [ Failure ]
+crbug.com/1380762 [ Mac12-arm64 ] wpt_internal/webcodecs/avc_encoder_config.https.any.worker.html [ Failure ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index b389b3c7..a53fe00 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1385,5 +1385,11 @@
       "external/wpt/web-nfc"
     ],
     "args": ["--disable-features=AbortSignalHandleBasedRemoval"]
+  },
+  {
+    "prefix": "devtools-tab-target",
+    "platforms": ["Linux", "Mac", "Win"],
+    "bases": ["http/tests/devtools/extensions", "http/tests/devtools/tracing"],
+    "args": ["--content-shell-devtools-tab-target"]
   }
 ]
diff --git a/third_party/blink/web_tests/WebDriverExpectations b/third_party/blink/web_tests/WebDriverExpectations
index 0f7a068..99adab3e5 100644
--- a/third_party/blink/web_tests/WebDriverExpectations
+++ b/third_party/blink/web_tests/WebDriverExpectations
@@ -88,6 +88,40 @@
 crbug.com/1167321 [ Linux ] external/wpt/webdriver/tests/find_element_from_shadow_root/find.py>>test_find_element[xpath-//a] [ Failure ]
 
 # ====== New tests from wpt-importer added here ======
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/element_click/click.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/element_click/click.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/element_send_keys/send_keys.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/element_send_keys/send_keys.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_async_script/execute_async.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_async_script/execute_async.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_async_script/execute_async.py>>test_no_such_element_with_invalid_value [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_script/execute.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_script/execute.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_script/execute.py>>test_no_such_element_with_invalid_value [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_computed_label/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_computed_label/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_computed_role/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_computed_role/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_attribute/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_attribute/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_css_value/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_css_value/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_property/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_property/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_rect/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_rect/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_shadow_root/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_shadow_root/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_tag_name/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_tag_name/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_text/get.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/get_element_text/get.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/is_element_enabled/enabled.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/is_element_enabled/enabled.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/is_element_selected/selected.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/is_element_selected/selected.py>>test_no_such_element_from_other_window_handle [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/take_element_screenshot/screenshot.py>>test_no_such_element_from_other_frame [ Failure ]
+crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/take_element_screenshot/screenshot.py>>test_no_such_element_from_other_window_handle [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_async_script/node.py>>test_document_as_object [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_async_script/node.py>>test_element_reference[frame] [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/execute_async_script/node.py>>test_element_reference[window] [ Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
index b7338d3..a9eb8780 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -327,6 +327,15 @@
       ]
      ]
     },
+    "css-anchor-position": {
+     "anchor-scroll-no-overflow-crash.html": [
+      "d8fa3821cf5660f7f382bf8aee10c9ddd625b4c1",
+      [
+       null,
+       {}
+      ]
+     ]
+    },
     "css-animations": {
      "CSSAnimation-getKeyframes-crash.html": [
       "72eb5e88195e0181c9ac74b81122809d2173fc5e",
@@ -99413,12 +99422,12 @@
       ]
      ],
      "contain-size-grid-005.html": [
-      "4e4b681a731e8e8822595c2f22f91deff4f9b214",
+      "bd750d2f54d7c6ddf018883d3cd6e0d1ec85c449",
       [
        null,
        [
         [
-         "/css/css-contain/contain-size-grid-005-ref.html",
+         "/css/css-contain/reference/contain-size-grid-005-ref.html",
          "=="
         ]
        ],
@@ -130927,7 +130936,7 @@
      ],
      "gradient": {
       "css-color-4-colors-default-to-oklab-gradient.html": [
-       "c34521cbf2a7109bac0ddf34d7a8de439ab36fe8",
+       "5be18ac30ff461779c5e441ced2b7f23cbf38a04",
        [
         null,
         [
@@ -130943,7 +130952,7 @@
            [
             [
              1,
-             2
+             8
             ],
             [
              0,
@@ -131246,7 +131255,7 @@
        ]
       ],
       "oklab-gradient.html": [
-       "b520cbef126876113ac61cb29d912ba304004af1",
+       "71230ef5997c27144d683477a712811987ed56e4",
        [
         null,
         [
@@ -131262,7 +131271,7 @@
            [
             [
              1,
-             2
+             8
             ],
             [
              0,
@@ -131304,7 +131313,7 @@
        ]
       ],
       "srgb-linear-gradient.html": [
-       "fa2dd1a7a325668213643b4a09268017ec160060",
+       "0869f3dfbfa7871b0bf50b9b5b3901140dd63129",
        [
         null,
         [
@@ -131320,7 +131329,7 @@
            [
             [
              1,
-             2
+             8
             ],
             [
              0,
@@ -131333,7 +131342,7 @@
        ]
       ],
       "xyz-gradient.html": [
-       "fc7c9c470b97210e6074cd2d660a9c82cd661d82",
+       "f760f148cd26484aa6983caa61924c821240505f",
        [
         null,
         [
@@ -131349,7 +131358,7 @@
            [
             [
              1,
-             2
+             8
             ],
             [
              0,
@@ -261410,6 +261419,10 @@
        "3c31bf5077d73ac258f4a96bb6b4f5e95802f184",
        []
       ],
+      "intercept_service_worker.js": [
+       "773e38fd21b023b8314f732b6d1893ab6c65a3cd",
+       []
+      ],
       "keys.py": [
        "6b7d67e21e7eea7927a40ab094847b7224d49985",
        []
@@ -261434,6 +261447,10 @@
        "d4f1efff6a74c7636f60cba35b4eff010fccfd29",
        []
       ],
+      "simple.html": [
+       "d62419ce8a0ac12a85f5b8e595a874714b038b44",
+       []
+      ],
       "token.py": [
        "2f5e807b6e0d344a761ecca4784684047c2ec777",
        []
@@ -272267,7 +272284,7 @@
        []
       ],
       "color-valid-color-mix-function-expected.txt": [
-       "b261cc4adf057f319814ffe3f627687f6532ae94",
+       "9f5087498977ee58932672f8e701518541328ee3",
        []
       ],
       "color-valid-relative-color-expected.txt": [
@@ -272893,10 +272910,6 @@
       "995c45197fde976b8930e98f7ea859e9bd3bebb9",
       []
      ],
-     "contain-size-grid-005-ref.html": [
-      "b2fdf4b887692798c73a1a27c4c0c76150ee08c1",
-      []
-     ],
      "contain-size-inline-block-001-ref.html": [
       "92a6c7de5ee4fdc19be842955fc413f36097cc4b",
       []
@@ -273450,6 +273463,10 @@
        "cf4f8076650928dfd0cefc18665ef1e8ab52d7b6",
        []
       ],
+      "contain-size-grid-005-ref.html": [
+       "b2fdf4b887692798c73a1a27c4c0c76150ee08c1",
+       []
+      ],
       "contain-size-monolithic-001-ref.html": [
        "2e8f1ba70aae799b64d0917b1a5e3b70c595ac69",
        []
@@ -286451,12 +286468,12 @@
         "9e52fd9b84ba9f16cdfba6fa1df67f17521c2ff5",
         []
        ],
-       "srgb-gradient.png": [
-        "1fc6660919a637c684be84236af5f1cf4bc07eaf",
+       "red-green-gradient-linear-colorspace.png": [
+        "e379a5df3e1b290befdde5d655ff9741839277fa",
         []
        ],
-       "srgb-linear-gradient.png": [
-        "e379a5df3e1b290befdde5d655ff9741839277fa",
+       "srgb-gradient.png": [
+        "1fc6660919a637c684be84236af5f1cf4bc07eaf",
         []
        ],
        "xyz-gradient.png": [
@@ -346738,10 +346755,6 @@
      "1fc6dd5522acbaea255f0d13c18ba4ab0a683fda",
      []
     ],
-    "offsetParent-across-shadow-boundaries-expected.txt": [
-     "9b46c721b94ae2f38049d8d7d3d5bf73ffec3f9a",
-     []
-    ],
     "reference": {
      "empty.html": [
       "0e76edd65b7baf5316fc9d0c4da59a3502e4c27a",
@@ -351533,7 +351546,7 @@
      []
     ],
     "disabled-by-permissions-policy.https.sub.html.headers": [
-     "f84ca89164e17920a58d8b7dac5ec8e04c50c215",
+     "83f5a343faf985e64f6a400cc0ecb2791fe39460",
      []
     ],
     "feature-policy-listed-expected.txt": [
@@ -351548,6 +351561,10 @@
      "manual-helper.js": [
       "15bb17936e4479f7338b7cefbaa87522a2a02df4",
       []
+     ],
+     "post-message.html": [
+      "30134e2901fdfa3c104b5837e982f02a31e9e512",
+      []
      ]
     },
     "share-sharePromise-internal-slot.https-expected.txt": [
@@ -390915,7 +390932,7 @@
      ]
     ],
     "fedcm-network-requests.https.html": [
-     "46065eb929ffea5d0a9386da1664d1ce1270e4d5",
+     "2d1d72d21597feedab7bd737b236c5126f68c669",
      [
       null,
       {}
@@ -395158,7 +395175,7 @@
        ]
       ],
       "color-valid-color-mix-function.html": [
-       "b1027a6604deb449c53d7c299e5032adf4b02d86",
+       "76209b1a93e1c31c9c4f677c3f68ca99a7b9e840",
        [
         null,
         {}
@@ -395431,6 +395448,13 @@
        {}
       ]
      ],
+     "contain-size-grid-006.html": [
+      "7bfbac1c6c7fb0bc0f97957a402981193dbd1585",
+      [
+       null,
+       {}
+      ]
+     ],
      "contain-size-multicol-as-flex-item.html": [
       "19aa12262f9a7dc35f3682b1f7baa3c12949a906",
       [
@@ -403707,7 +403731,7 @@
      ],
      "parsing": {
       "gradient-interpolation-method-computed.html": [
-       "050fb43e7c30932153658070eb8806d70ce2ddca",
+       "9593a59777a5792332ba07d6cf4687eed09a0747",
        [
         null,
         {}
@@ -403721,7 +403745,7 @@
        ]
       ],
       "gradient-interpolation-method-valid.html": [
-       "d71d8da28482bed2bfa8ef99fcdee7761eceee1c",
+       "a5ae5c0dd985b4eabac7a1c56df779625998029d",
        [
         null,
         {}
@@ -413890,7 +413914,7 @@
       ]
      ],
      "toggle-activation.tentative.html": [
-      "c013314b3fbc80231e30f257fb9ced403b691318",
+      "20064605668da8dde7e847408360fb92fbf3b7b9",
       [
        null,
        {}
@@ -415940,6 +415964,20 @@
          {}
         ]
        ],
+       "animation-delay-end.tentative.html": [
+        "79b9f946174eaf5dcbd39556f7010d6d74ea96c9",
+        [
+         null,
+         {}
+        ]
+       ],
+       "animation-delay-start.tentative.html": [
+        "2fba4d8e514471d540c17a384ab6803a4142155a",
+        [
+         null,
+         {}
+        ]
+       ],
        "animation-delay.html": [
         "91ee95ec1d5b9dcfb19fea16ea58a2caedb4d046",
         [
@@ -421230,6 +421268,13 @@
        {}
       ]
      ],
+     "offsetTop-offsetLeft-nested-offsetParents.html": [
+      "e9446708d35ef243789892da585ed9990ad4cec4",
+      [
+       null,
+       {}
+      ]
+     ],
      "offsetTopLeft-border-box.html": [
       "8cabf6478f7afc158617914776548db528c3a7f5",
       [
@@ -422014,6 +422059,13 @@
        {}
       ]
      ],
+     "DOMMatrix-invert-invertible.html": [
+      "3e7c73ad2bb36512212fb94a84cfc6b3100d34ce",
+      [
+       null,
+       {}
+      ]
+     ],
      "DOMMatrix-invert-non-invertible.html": [
       "b3295321e0cf551d7d37b609d3a47932a84da35e",
       [
@@ -554699,6 +554751,13 @@
       {}
      ]
     ],
+    "offsetTop-offsetLeft-across-shadow-boundaries.html": [
+     "5d7c7b80533bc30ebae6167e2b37b3d12eceea2a",
+     [
+      null,
+      {}
+     ]
+    ],
     "scroll-to-the-fragment-in-shadow-tree.html": [
      "b4ecc16a67daeb1160523e10cca057d0c9582d5c",
      [
@@ -575555,6 +575614,13 @@
       {}
      ]
     ],
+    "disabled-by-permissions-policy-cross-origin.https.sub.html": [
+     "b13f7e0539f6652c7b82edee5c5f746fbf8fe727",
+     [
+      null,
+      {}
+     ]
+    ],
     "disabled-by-permissions-policy.https.sub.html": [
      "e9ea903965032e4165beb31ef3311bc22f95f249",
      [
@@ -617575,14 +617641,14 @@
        ]
       ],
       "srgb-linear-gradient-expected.html": [
-       "b3984d7432d50e7235048ddb5396b5d1cae8c9af",
+       "34f660f6f02d07c6440f4790f966806113fca0dd",
        [
         null,
         {}
        ]
       ],
       "xyz-gradient-expected.html": [
-       "0411ccff8c1be3e8d475b23900856c6d2a746504",
+       "a435bbfd5888414d5f199c2a49daf7138ca1c4d5",
        [
         null,
         {}
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/README.md b/third_party/blink/web_tests/external/wpt/credential-management/support/README.md
index 6fb064c..a6d33ff 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/README.md
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/README.md
@@ -45,7 +45,7 @@
   import {fedcm_mojo_mock_test} from './support/fedcm-mojojs-helper.js';
 
   fedcm_mojo_mock_test(async (t, mock) => {
-    mock.returnToken("a_token");
+    mock.returnToken("https://idp.test/fedcm.json", "a_token");
     assert_equals("a_token", await navigator.credentials.get(options));
   }, "Successfully obtaining a token using mock.");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
index 53257099..030fddb 100644
--- a/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
+++ b/third_party/blink/web_tests/external/wpt/credential-management/support/fedcm-mock.js
@@ -14,6 +14,7 @@
     }
     this.interceptor_.start();
     this.token_ = null;
+    this.selected_identity_provider_config_url_ = null;
     this.status_ = RequestTokenStatus.kError;
     this.logoutRpsStatus_ = LogoutRpsStatus.kError;
     this.returnPending_ = false;
@@ -21,8 +22,9 @@
   }
 
   // Causes the subsequent `navigator.credentials.get()` to resolve with the token.
-  returnToken(token) {
+  returnToken(selected_identity_provider_config_url, token) {
     this.status_ = RequestTokenStatus.kSuccess;
+    this.selected_identity_provider_config_url_ = selected_identity_provider_config_url;
     this.token_ = token;
     this.returnPending_ = false;
   }
@@ -32,6 +34,7 @@
     if (error == "Success")
       throw new Error("Success is not a valid error");
     this.status_ = toMojoTokenStatus(error);
+    this.selected_identity_provider_config_url_ = null;
     this.token_ = null;
     this.returnPending_ = false;
   }
@@ -50,7 +53,10 @@
   }
 
   // Implements
-  //   RequestToken(url.mojom.Url provider, string id_request) => (RequestTokenStatus status, string? token);
+  //   RequestToken(url.mojom.Url provider, string id_request) =>
+  //                    (RequestTokenStatus status,
+  //                      url.mojom.Url? selected_identity_provider_config_url,
+  //                      string? token);
   async requestToken(provider, idRequest) {
     if (this.returnPending_) {
       this.pendingPromise_ = new Promise((resolve, reject) => {
@@ -60,6 +66,7 @@
     }
     return Promise.resolve({
       status: this.status_,
+      selected_identity_provider_config_url: this.selected_identity_provider_config_url_,
       token: this.token_
     });
   }
@@ -67,6 +74,7 @@
   async cancelTokenRequest() {
     this.pendingPromiseResolve_({
       status: toMojoTokenStatus("ErrorCanceled"),
+      selected_identity_provider_config_url: null,
       token: null
     });
     this.pendingPromiseResolve_ = null;
@@ -80,6 +88,7 @@
 
   async reset() {
     this.token_ = null;
+    this.selected_identity_provider_config_url_ = null;
     this.status_ = RequestTokenStatus.kError;
     this.logoutRpsStatus_ = LogoutRpsStatus.kError;
     this.receiver_.$.close();
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function-expected.txt
index 2a53815..07700e6e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-computed-color-mix-function-expected.txt
@@ -1,68 +1,68 @@
 This is a testharness.js-based test.
-Found 474 tests; 22 PASS, 452 FAIL, 0 TIMEOUT, 0 NOTRUN.
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))' assert_equals: expected "rgb(84, 92, 61)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))' assert_equals: expected "rgb(112, 106, 67)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))' assert_true: 'color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))' assert_true: 'color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)' assert_equals: expected "rgb(61, 73, 54)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)' assert_equals: expected "rgb(112, 106, 67)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)' assert_equals: expected "rgb(112, 106, 67)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)' assert_equals: expected "rgba(112, 106, 67, 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))'
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))' assert_equals: expected "rgba(95, 105, 65, 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))' assert_equals: expected "rgba(108, 103, 66, 0.85)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))' assert_true: 'color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))' assert_true: 'color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)' assert_equals: expected "rgba(68, 84, 59, 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)' assert_equals: expected "rgba(121, 114, 69, 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)' assert_equals: expected "rgba(121, 114, 69, 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)' assert_equals: expected "rgba(121, 114, 69, 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))'
-FAIL Property color value 'color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl specified hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl specified hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl specified hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl specified hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl specified hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl specified hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(none none none), hsl(none none none))' assert_equals: expected "rgb(0, 0, 0)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))' assert_equals: expected "rgb(224, 204, 184)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))' assert_equals: expected "rgb(82, 122, 82)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))' assert_equals: expected "rgb(168, 184, 122)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))' assert_equals: expected "rgb(112, 122, 82)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))' assert_equals: expected "rgb(173, 153, 133)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))' assert_equals: expected "rgb(143, 143, 61)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))' assert_equals: expected "rgba(143, 143, 61, 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))' assert_equals: expected "rgba(143, 143, 61, 0)" but got "rgb(128, 128, 128)"
+Found 474 tests; 25 PASS, 449 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))' assert_equals: expected "rgb(84, 92, 61)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))' assert_equals: expected "rgb(112, 106, 67)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))' assert_equals: expected "rgb(112, 106, 67)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))' assert_equals: expected "rgb(61, 73, 54)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)' assert_equals: expected "rgb(61, 73, 54)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)' assert_equals: expected "rgb(112, 106, 67)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)' assert_equals: expected "rgb(112, 106, 67)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)' assert_equals: expected "rgba(112, 106, 67, 0.5)" but got "rgba(46, 56, 46, 0.5)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))' assert_equals: expected "rgb(133, 102, 71)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))' assert_equals: expected "rgba(95, 105, 65, 0.6)" but got "rgba(46, 56, 46, 0.4)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))' assert_equals: expected "rgba(108, 103, 66, 0.85)" but got "rgb(46, 56, 46)"
+FAIL Property color value 'color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))' assert_equals: expected "rgba(121, 114, 69, 0.7)" but got "rgba(46, 56, 46, 0.4)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))' assert_equals: expected "rgba(68, 84, 59, 0.5)" but got "rgba(46, 56, 46, 0.4)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)' assert_equals: expected "rgba(68, 84, 59, 0.5)" but got "rgba(46, 56, 46, 0.4)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)' assert_equals: expected "rgba(121, 114, 69, 0.7)" but got "rgba(46, 56, 46, 0.4)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)' assert_equals: expected "rgba(121, 114, 69, 0.7)" but got "rgba(46, 56, 46, 0.4)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)' assert_equals: expected "rgba(121, 114, 69, 0.35)" but got "rgba(46, 56, 46, 0.2)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))' assert_equals: expected "rgba(133, 102, 71, 0.8)" but got "rgba(46, 56, 46, 0.4)"
+FAIL Property color value 'color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(191, 149, 64)"
+FAIL Property color value 'color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(191, 191, 64)"
+FAIL Property color value 'color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(191, 170, 64)"
+FAIL Property color value 'color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(191, 64, 128)"
+FAIL Property color value 'color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(191, 106, 64)"
+FAIL Property color value 'color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(191, 64, 149)"
+FAIL Property color value 'color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(191, 149, 64)"
+FAIL Property color value 'color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(191, 191, 64)"
+FAIL Property color value 'color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(191, 170, 64)"
+FAIL Property color value 'color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(191, 64, 128)"
+FAIL Property color value 'color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(191, 106, 64)"
+FAIL Property color value 'color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(191, 64, 149)"
+FAIL Property color value 'color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(191, 149, 64)"
+FAIL Property color value 'color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(191, 191, 64)"
+FAIL Property color value 'color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(191, 170, 64)"
+FAIL Property color value 'color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(191, 64, 128)"
+FAIL Property color value 'color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(191, 106, 64)"
+FAIL Property color value 'color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(191, 64, 149)"
+FAIL Property color value 'color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(191, 149, 64)"
+FAIL Property color value 'color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(191, 191, 64)"
+FAIL Property color value 'color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(191, 170, 64)"
+FAIL Property color value 'color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(191, 64, 128)"
+FAIL Property color value 'color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(191, 106, 64)"
+FAIL Property color value 'color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(191, 64, 149)"
+FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_equals: expected "rgb(64, 85, 191)" but got "rgb(191, 149, 64)"
+FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_equals: expected "rgb(191, 170, 64)" but got "rgb(191, 191, 64)"
+FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_equals: expected "rgb(191, 85, 64)" but got "rgb(191, 170, 64)"
+FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_equals: expected "rgb(64, 170, 191)" but got "rgb(191, 64, 128)"
+FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_equals: expected "rgb(191, 64, 85)" but got "rgb(191, 106, 64)"
+FAIL Property color value 'color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_equals: expected "rgb(64, 191, 170)" but got "rgb(191, 64, 149)"
+FAIL Property color value 'color-mix(in hsl specified hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' assert_true: 'color-mix(in hsl specified hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hsl specified hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' assert_true: 'color-mix(in hsl specified hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hsl specified hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' assert_true: 'color-mix(in hsl specified hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hsl specified hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' assert_true: 'color-mix(in hsl specified hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hsl specified hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' assert_true: 'color-mix(in hsl specified hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hsl specified hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' assert_true: 'color-mix(in hsl specified hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))' is a supported value for color. expected true got false
+PASS Property color value 'color-mix(in hsl, hsl(none none none), hsl(none none none))'
+FAIL Property color value 'color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))' assert_equals: expected "rgb(224, 204, 184)" but got "rgb(0, 0, 0)"
+PASS Property color value 'color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))'
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))' assert_equals: expected "rgb(168, 184, 122)" but got "rgb(0, 0, 0)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))' assert_equals: expected "rgb(112, 122, 82)" but got "rgb(82, 122, 82)"
+FAIL Property color value 'color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))' assert_equals: expected "rgb(173, 153, 133)" but got "rgb(122, 82, 82)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))' assert_equals: expected "rgb(143, 143, 61)" but got "rgba(61, 143, 61, 0)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))' assert_equals: expected "rgba(143, 143, 61, 0.5)" but got "rgba(61, 143, 61, 0)"
+FAIL Property color value 'color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))' assert_equals: expected "rgba(143, 143, 61, 0)" but got "rgba(61, 143, 61, 0)"
 FAIL Property color value 'color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(0, 249, 66)" but got "color(display-p3 0 1 0)"
 FAIL Property color value 'color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(255, 255, 255)" but got "lab(100 104.3 -50.9)"
 FAIL Property color value 'color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(42, 0, 34)" but got "lab(0 104.3 -50.9)"
@@ -72,69 +72,69 @@
 FAIL Property color value 'color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(0, 0, 0)" but got "oklab(0 0.365 -0.16)"
 FAIL Property color value 'color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(255, 255, 255)" but got "oklch(100 0.399 336.3)"
 FAIL Property color value 'color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(0, 0, 0)" but got "oklch(0 0.399 336.3)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))' assert_equals: expected "rgb(147, 179, 52)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))' assert_equals: expected "rgb(166, 153, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))' assert_true: 'color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))' assert_true: 'color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)' assert_equals: expected "rgb(96, 191, 39)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)' assert_equals: expected "rgb(166, 153, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)' assert_equals: expected "rgb(166, 153, 64)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)' assert_equals: expected "rgba(166, 153, 64, 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))'
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))' assert_equals: expected "rgba(143, 170, 60, 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))' assert_equals: expected "rgba(160, 149, 70, 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))' assert_true: 'color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))' assert_true: 'color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)' assert_equals: expected "rgba(98, 184, 46, 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)' assert_equals: expected "rgba(160, 149, 70, 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)' assert_equals: expected "rgba(160, 149, 70, 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)' assert_equals: expected "rgba(160, 149, 70, 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))'
-FAIL Property color value 'color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb specified hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb specified hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb specified hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb specified hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb specified hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb specified hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(none none none), hwb(none none none))' assert_equals: expected "rgb(255, 0, 0)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))' assert_equals: expected "rgb(153, 115, 77)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))' assert_equals: expected "rgb(26, 204, 26)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))' assert_equals: expected "rgb(128, 153, 51)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))' assert_equals: expected "rgb(166, 204, 51)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))' assert_equals: expected "rgb(179, 102, 26)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))' assert_equals: expected "rgb(147, 179, 51)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))' assert_equals: expected "rgba(147, 179, 51, 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))' assert_equals: expected "rgba(147, 179, 51, 0)" but got "rgb(128, 128, 128)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))' assert_equals: expected "rgb(147, 179, 52)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))' assert_equals: expected "rgb(166, 153, 64)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))' assert_equals: expected "rgb(166, 153, 64)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))' assert_equals: expected "rgb(96, 191, 39)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)' assert_equals: expected "rgb(96, 191, 39)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)' assert_equals: expected "rgb(166, 153, 64)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)' assert_equals: expected "rgb(166, 153, 64)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)' assert_equals: expected "rgba(166, 153, 64, 0.5)" but got "rgba(26, 204, 26, 0.5)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))' assert_equals: expected "rgb(153, 115, 77)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))' assert_equals: expected "rgba(143, 170, 60, 0.6)" but got "rgba(26, 204, 26, 0.4)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))' assert_equals: expected "rgba(160, 149, 70, 0.7)" but got "rgba(26, 204, 26, 0.4)"
+FAIL Property color value 'color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))' assert_equals: expected "rgba(160, 149, 70, 0.7)" but got "rgba(26, 204, 26, 0.4)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))' assert_equals: expected "rgba(95, 193, 37, 0.95)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)' assert_equals: expected "rgba(98, 184, 46, 0.5)" but got "rgba(26, 204, 26, 0.4)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)' assert_equals: expected "rgba(160, 149, 70, 0.7)" but got "rgba(26, 204, 26, 0.4)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)' assert_equals: expected "rgba(160, 149, 70, 0.7)" but got "rgba(26, 204, 26, 0.4)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)' assert_equals: expected "rgba(160, 149, 70, 0.35)" but got "rgba(26, 204, 26, 0.2)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))' assert_equals: expected "rgba(153, 115, 77, 0.8)" but got "rgba(26, 204, 26, 0.4)"
+FAIL Property color value 'color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(153, 128, 77)"
+FAIL Property color value 'color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(153, 153, 77)"
+FAIL Property color value 'color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(153, 140, 77)"
+FAIL Property color value 'color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(153, 77, 115)"
+FAIL Property color value 'color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(153, 102, 77)"
+FAIL Property color value 'color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(153, 77, 127)"
+FAIL Property color value 'color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(153, 128, 77)"
+FAIL Property color value 'color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(153, 153, 77)"
+FAIL Property color value 'color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(153, 140, 77)"
+FAIL Property color value 'color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(153, 77, 115)"
+FAIL Property color value 'color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(153, 102, 77)"
+FAIL Property color value 'color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(153, 77, 127)"
+FAIL Property color value 'color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(153, 128, 77)"
+FAIL Property color value 'color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(153, 153, 77)"
+FAIL Property color value 'color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(153, 140, 77)"
+FAIL Property color value 'color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(153, 77, 115)"
+FAIL Property color value 'color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(153, 102, 77)"
+FAIL Property color value 'color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(153, 77, 127)"
+FAIL Property color value 'color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(153, 128, 77)"
+FAIL Property color value 'color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(153, 153, 77)"
+FAIL Property color value 'color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(153, 140, 77)"
+FAIL Property color value 'color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(153, 77, 115)"
+FAIL Property color value 'color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(153, 102, 77)"
+FAIL Property color value 'color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(153, 77, 127)"
+FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_equals: expected "rgb(77, 89, 153)" but got "rgb(153, 128, 77)"
+FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_equals: expected "rgb(153, 140, 77)" but got "rgb(153, 153, 77)"
+FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_equals: expected "rgb(153, 89, 77)" but got "rgb(153, 140, 77)"
+FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_equals: expected "rgb(77, 140, 153)" but got "rgb(153, 77, 115)"
+FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_equals: expected "rgb(153, 77, 89)" but got "rgb(153, 102, 77)"
+FAIL Property color value 'color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_equals: expected "rgb(77, 153, 140)" but got "rgb(153, 77, 127)"
+FAIL Property color value 'color-mix(in hwb specified hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' assert_true: 'color-mix(in hwb specified hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hwb specified hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' assert_true: 'color-mix(in hwb specified hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hwb specified hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' assert_true: 'color-mix(in hwb specified hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hwb specified hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' assert_true: 'color-mix(in hwb specified hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hwb specified hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' assert_true: 'color-mix(in hwb specified hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in hwb specified hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' assert_true: 'color-mix(in hwb specified hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))' is a supported value for color. expected true got false
+PASS Property color value 'color-mix(in hwb, hwb(none none none), hwb(none none none))'
+FAIL Property color value 'color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))' assert_equals: expected "rgb(153, 115, 77)" but got "rgb(255, 0, 0)"
+PASS Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))'
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))' assert_equals: expected "rgb(128, 153, 51)" but got "rgb(26, 255, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))' assert_equals: expected "rgb(166, 204, 51)" but got "rgb(26, 204, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))' assert_equals: expected "rgb(179, 102, 26)" but got "rgb(204, 26, 26)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))' assert_equals: expected "rgb(147, 179, 51)" but got "rgba(26, 204, 26, 0)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))' assert_equals: expected "rgba(147, 179, 51, 0.5)" but got "rgba(26, 204, 26, 0)"
+FAIL Property color value 'color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))' assert_equals: expected "rgba(147, 179, 51, 0)" but got "rgba(26, 204, 26, 0)"
 FAIL Property color value 'color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(0, 249, 66)" but got "color(display-p3 0 1 0)"
 FAIL Property color value 'color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(255, 255, 255)" but got "lab(100 104.3 -50.9)"
 FAIL Property color value 'color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(42, 0, 34)" but got "lab(0 104.3 -50.9)"
@@ -144,335 +144,335 @@
 FAIL Property color value 'color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(0, 0, 0)" but got "oklab(0 0.365 -0.16)"
 FAIL Property color value 'color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(255, 255, 255)" but got "oklch(100 0.399 336.3)"
 FAIL Property color value 'color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)' assert_equals: expected "rgb(0, 0, 0)" but got "oklch(0 0.399 336.3)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg))' assert_equals: expected "lch(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg))' assert_equals: expected "lch(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))' assert_true: 'color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))' assert_true: 'color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg) 25%)' assert_equals: expected "lch(20 30 40)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg) 75%)' assert_equals: expected "lch(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 30%, lch(50 60 70deg) 90%)' assert_equals: expected "lch(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 12.5%, lch(50 60 70deg) 37.5%)' assert_equals: expected "lch(40 50 60 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in lch, lch(10 20 30deg) 0%, lch(50 60 70deg))'
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8))' assert_equals: expected "lch(36.666664 46.666664 50 / 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8))' assert_equals: expected "lch(44.285713 54.285717 60 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))' assert_true: 'color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))' assert_true: 'color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8) 25%)' assert_equals: expected "lch(26 36 40 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8) 75%)' assert_equals: expected "lch(44.285713 54.285717 60 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 30%, lch(50 60 70deg / .8) 90%)' assert_equals: expected "lch(44.285713 54.285717 60 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 12.5%, lch(50 60 70deg / .8) 37.5%)' assert_equals: expected "lch(44.285713 54.285717 60 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 0%, lch(50 60 70deg / .8))'
-FAIL Property color value 'color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(none none none), lch(none none none))' assert_equals: expected "lch(none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(none none none), lch(50 60 70deg))' assert_equals: expected "lch(50 60 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(none none none))' assert_equals: expected "lch(10 20 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 none), lch(50 60 70deg))' assert_equals: expected "lch(30 40 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(50 60 none))' assert_equals: expected "lch(30 40 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))' assert_equals: expected "lch(50 20 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))' assert_equals: expected "lch(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))' assert_equals: expected "lch(30 40 50 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))' assert_equals: expected "lch(30 40 50 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 70deg))' assert_equals: expected "oklch(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 25%, oklch(50 60 70deg))' assert_equals: expected "oklch(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, 25% oklch(10 20 30deg), oklch(50 60 70deg))' assert_true: 'color-mix(in oklch, 25% oklch(10 20 30deg), oklch(50 60 70deg))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), 25% oklch(50 60 70deg))' assert_true: 'color-mix(in oklch, oklch(10 20 30deg), 25% oklch(50 60 70deg))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 70deg) 25%)' assert_equals: expected "oklch(20 30 40)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 25%, oklch(50 60 70deg) 75%)' assert_equals: expected "oklch(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 30%, oklch(50 60 70deg) 90%)' assert_equals: expected "oklch(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 12.5%, oklch(50 60 70deg) 37.5%)' assert_equals: expected "oklch(40 50 60 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in oklch, oklch(10 20 30deg) 0%, oklch(50 60 70deg))'
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4), oklch(50 60 70deg / .8))' assert_equals: expected "oklch(36.666664 46.666664 50 / 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 25%, oklch(50 60 70deg / .8))' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, 25% oklch(10 20 30deg / .4), oklch(50 60 70deg / .8))' assert_true: 'color-mix(in oklch, 25% oklch(10 20 30deg / .4), oklch(50 60 70deg / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4), 25% oklch(50 60 70deg / .8))' assert_true: 'color-mix(in oklch, oklch(10 20 30deg / .4), 25% oklch(50 60 70deg / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4), oklch(50 60 70deg / .8) 25%)' assert_equals: expected "oklch(26 36 40 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 25%, oklch(50 60 70deg / .8) 75%)' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 30%, oklch(50 60 70deg / .8) 90%)' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 12.5%, oklch(50 60 70deg / .8) 37.5%)' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 0%, oklch(50 60 70deg / .8))'
-FAIL Property color value 'color-mix(in oklch, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 230)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 10)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 350)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 190)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 170)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(none none none), oklch(none none none))' assert_equals: expected "oklch(none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(none none none), oklch(50 60 70deg))' assert_equals: expected "oklch(50 60 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(none none none))' assert_equals: expected "oklch(10 20 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 none), oklch(50 60 70deg))' assert_equals: expected "oklch(30 40 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 none))' assert_equals: expected "oklch(30 40 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(none 20 30deg), oklch(50 none 70deg))' assert_equals: expected "oklch(50 20 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg))' assert_equals: expected "oklch(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg / 0.5))' assert_equals: expected "oklch(30 40 50 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg / none))' assert_equals: expected "oklch(30 40 50 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(50 60 70))' assert_equals: expected "lab(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))' assert_equals: expected "lab(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))' assert_true: 'color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))' assert_true: 'color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(50 60 70) 25%)' assert_equals: expected "lab(20 30 40)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70) 75%)' assert_equals: expected "lab(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)' assert_equals: expected "lab(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)' assert_equals: expected "lab(40 50 60 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))'
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8))' assert_equals: expected "lab(36.666664 46.666664 56.666664 / 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8))' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))' assert_true: 'color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))' assert_true: 'color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8) 25%)' assert_equals: expected "lab(26 36 46 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8) 75%)' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 30%, lab(50 60 70 / .8) 90%)' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 12.5%, lab(50 60 70 / .8) 37.5%)' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in lab, lab(10 20 30 / .4) 0%, lab(50 60 70 / .8))'
-FAIL Property color value 'color-mix(in lab, lab(none none none), lab(none none none))' assert_equals: expected "lab(none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(none none none), lab(50 60 70))' assert_equals: expected "lab(50 60 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(none none none))' assert_equals: expected "lab(10 20 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 none), lab(50 60 70))' assert_equals: expected "lab(30 40 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(50 60 none))' assert_equals: expected "lab(30 40 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(none 20 30), lab(50 none 70))' assert_equals: expected "lab(50 20 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))' assert_equals: expected "lab(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))' assert_equals: expected "lab(30 40 50 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))' assert_equals: expected "lab(30 40 50 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(50 60 70))' assert_equals: expected "oklab(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 25%, oklab(50 60 70))' assert_equals: expected "oklab(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, 25% oklab(10 20 30), oklab(50 60 70))' assert_true: 'color-mix(in oklab, 25% oklab(10 20 30), oklab(50 60 70))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), 25% oklab(50 60 70))' assert_true: 'color-mix(in oklab, oklab(10 20 30), 25% oklab(50 60 70))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(50 60 70) 25%)' assert_equals: expected "oklab(20 30 40)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 25%, oklab(50 60 70) 75%)' assert_equals: expected "oklab(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 30%, oklab(50 60 70) 90%)' assert_equals: expected "oklab(40 50 60)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 12.5%, oklab(50 60 70) 37.5%)' assert_equals: expected "oklab(40 50 60 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in oklab, oklab(10 20 30) 0%, oklab(50 60 70))'
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4), oklab(50 60 70 / .8))' assert_equals: expected "oklab(36.666664 46.666664 56.666664 / 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 25%, oklab(50 60 70 / .8))' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, 25% oklab(10 20 30 / .4), oklab(50 60 70 / .8))' assert_true: 'color-mix(in oklab, 25% oklab(10 20 30 / .4), oklab(50 60 70 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4), 25% oklab(50 60 70 / .8))' assert_true: 'color-mix(in oklab, oklab(10 20 30 / .4), 25% oklab(50 60 70 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4), oklab(50 60 70 / .8) 25%)' assert_equals: expected "oklab(26 36 46 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 25%, oklab(50 60 70 / .8) 75%)' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 30%, oklab(50 60 70 / .8) 90%)' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 12.5%, oklab(50 60 70 / .8) 37.5%)' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 0%, oklab(50 60 70 / .8))'
-FAIL Property color value 'color-mix(in oklab, oklab(none none none), oklab(none none none))' assert_equals: expected "oklab(none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(none none none), oklab(50 60 70))' assert_equals: expected "oklab(50 60 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(none none none))' assert_equals: expected "oklab(10 20 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 none), oklab(50 60 70))' assert_equals: expected "oklab(30 40 70)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(50 60 none))' assert_equals: expected "oklab(30 40 30)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(none 20 30), oklab(50 none 70))' assert_equals: expected "oklab(50 20 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70))' assert_equals: expected "oklab(30 40 50)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70 / 0.5))' assert_equals: expected "oklab(30 40 50 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70 / none))' assert_equals: expected "oklab(30 40 50 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7))' assert_equals: expected "color(srgb 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7))' assert_equals: expected "color(srgb 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, 25% color(srgb .1 .2 .3), color(srgb .5 .6 .7))' assert_true: 'color-mix(in srgb, 25% color(srgb .1 .2 .3), color(srgb .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7) 25%)' assert_equals: expected "color(srgb 0.2 0.3 0.4)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), 25% color(srgb .5 .6 .7))' assert_true: 'color-mix(in srgb, color(srgb .1 .2 .3), 25% color(srgb .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7) 75%)' assert_equals: expected "color(srgb 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 30%, color(srgb .5 .6 .7) 90%)' assert_equals: expected "color(srgb 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 12.5%, color(srgb .5 .6 .7) 37.5%)' assert_equals: expected "color(srgb 0.4 0.5 0.6 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg))' assert_equals: expected "lch(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg))' assert_equals: expected "lch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))' assert_equals: expected "lch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))' assert_equals: expected "lch(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg) 25%)' assert_equals: expected "lch(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg) 75%)' assert_equals: expected "lch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 30%, lch(50 60 70deg) 90%)' assert_equals: expected "lch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 12.5%, lch(50 60 70deg) 37.5%)' assert_equals: expected "lch(40 50 60 / 0.5)" but got "color(srgb 40 50 60 / 0.5)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg) 0%, lch(50 60 70deg))' assert_equals: expected "lch(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8))' assert_equals: expected "lch(36.666664 46.666664 50 / 0.6)" but got "color(srgb 36.6667 46.6667 83.3333 / 0.6)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8))' assert_equals: expected "lch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))' assert_equals: expected "lch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))' assert_equals: expected "lch(26 36 40 / 0.5)" but got "color(srgb 26 36 80 / 0.5)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8) 25%)' assert_equals: expected "lch(26 36 40 / 0.5)" but got "color(srgb 26 36 80 / 0.5)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8) 75%)' assert_equals: expected "lch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 30%, lch(50 60 70deg / .8) 90%)' assert_equals: expected "lch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 12.5%, lch(50 60 70deg / .8) 37.5%)' assert_equals: expected "lch(44.285713 54.285717 60 / 0.35)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.35)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / .4) 0%, lch(50 60 70deg / .8))' assert_equals: expected "lch(50 60 70 / 0.8)" but got "color(srgb 50 60 87.5 / 0.8)"
+FAIL Property color value 'color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in lch, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in lch, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in lch, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in lch, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in lch, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in lch shorter hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 230)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 230)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 190)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 190)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 170)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in lch longer hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 170)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 50)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 230)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 190)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 10)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 170)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in lch increasing hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 350)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 40deg), lch(100 0 60deg))' assert_equals: expected "lch(100 0 230)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 60deg), lch(100 0 40deg))' assert_equals: expected "lch(100 0 50)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 50deg), lch(100 0 330deg))' assert_equals: expected "lch(100 0 10)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 330deg), lch(100 0 50deg))' assert_equals: expected "lch(100 0 190)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 20deg), lch(100 0 320deg))' assert_equals: expected "lch(100 0 350)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in lch decreasing hue, lch(100 0 320deg), lch(100 0 20deg))' assert_equals: expected "lch(100 0 170)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 40deg), lch(100 0 60deg))' assert_true: 'color-mix(in lch specified hue, lch(100 0 40deg), lch(100 0 60deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 60deg), lch(100 0 40deg))' assert_true: 'color-mix(in lch specified hue, lch(100 0 60deg), lch(100 0 40deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 50deg), lch(100 0 330deg))' assert_true: 'color-mix(in lch specified hue, lch(100 0 50deg), lch(100 0 330deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 330deg), lch(100 0 50deg))' assert_true: 'color-mix(in lch specified hue, lch(100 0 330deg), lch(100 0 50deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 20deg), lch(100 0 320deg))' assert_true: 'color-mix(in lch specified hue, lch(100 0 20deg), lch(100 0 320deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in lch specified hue, lch(100 0 320deg), lch(100 0 20deg))' assert_true: 'color-mix(in lch specified hue, lch(100 0 320deg), lch(100 0 20deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in lch, lch(none none none), lch(none none none))' assert_equals: expected "lch(none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in lch, lch(none none none), lch(50 60 70deg))' assert_equals: expected "lch(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(none none none))' assert_equals: expected "lch(10 20 30)" but got "color(srgb 10 20 30)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 none), lch(50 60 70deg))' assert_equals: expected "lch(30 40 70)" but got "color(srgb 30 40 70)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg), lch(50 60 none))' assert_equals: expected "lch(30 40 30)" but got "color(srgb 30 40 30)"
+FAIL Property color value 'color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))' assert_equals: expected "lch(50 20 50)" but got "color(srgb 50 20 50)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))' assert_equals: expected "lch(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))' assert_equals: expected "lch(30 40 50 / 0.5)" but got "color(srgb 23.3333 33.3333 66.6667 / 0.75)"
+FAIL Property color value 'color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))' assert_equals: expected "lch(30 40 50 / none)" but got "color(srgb 30 40 50 / none)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 70deg))' assert_equals: expected "oklch(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 25%, oklch(50 60 70deg))' assert_equals: expected "oklch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklch, 25% oklch(10 20 30deg), oklch(50 60 70deg))' assert_equals: expected "oklch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), 25% oklch(50 60 70deg))' assert_equals: expected "oklch(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 70deg) 25%)' assert_equals: expected "oklch(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 25%, oklch(50 60 70deg) 75%)' assert_equals: expected "oklch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 30%, oklch(50 60 70deg) 90%)' assert_equals: expected "oklch(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 12.5%, oklch(50 60 70deg) 37.5%)' assert_equals: expected "oklch(40 50 60 / 0.5)" but got "color(srgb 40 50 60 / 0.5)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg) 0%, oklch(50 60 70deg))' assert_equals: expected "oklch(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4), oklch(50 60 70deg / .8))' assert_equals: expected "oklch(36.666664 46.666664 50 / 0.6)" but got "color(srgb 36.6667 46.6667 83.3333 / 0.6)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 25%, oklch(50 60 70deg / .8))' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in oklch, 25% oklch(10 20 30deg / .4), oklch(50 60 70deg / .8))' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4), 25% oklch(50 60 70deg / .8))' assert_equals: expected "oklch(26 36 40 / 0.5)" but got "color(srgb 26 36 80 / 0.5)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4), oklch(50 60 70deg / .8) 25%)' assert_equals: expected "oklch(26 36 40 / 0.5)" but got "color(srgb 26 36 80 / 0.5)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 25%, oklch(50 60 70deg / .8) 75%)' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 30%, oklch(50 60 70deg / .8) 90%)' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.7)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.7)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 12.5%, oklch(50 60 70deg / .8) 37.5%)' assert_equals: expected "oklch(44.285713 54.285717 60 / 0.35)" but got "color(srgb 44.2857 54.2857 85.7143 / 0.35)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / .4) 0%, oklch(50 60 70deg / .8))' assert_equals: expected "oklch(50 60 70 / 0.8)" but got "color(srgb 50 60 87.5 / 0.8)"
+FAIL Property color value 'color-mix(in oklch, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in oklch, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in oklch, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in oklch, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in oklch, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in oklch, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 50)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 10)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in oklch shorter hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 350)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 230)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 230)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 190)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 190)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 170)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in oklch longer hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 170)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 50)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 230)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 190)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 10)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 170)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in oklch increasing hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 350)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_equals: expected "oklch(100 0 230)" but got "color(srgb 100 0 50)"
+FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_equals: expected "oklch(100 0 50)" but got "color(srgb 100 0 230)"
+FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_equals: expected "oklch(100 0 10)" but got "color(srgb 100 0 190)"
+FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_equals: expected "oklch(100 0 190)" but got "color(srgb 100 0 10)"
+FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_equals: expected "oklch(100 0 350)" but got "color(srgb 100 0 170)"
+FAIL Property color value 'color-mix(in oklch decreasing hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_equals: expected "oklch(100 0 170)" but got "color(srgb 100 0 350)"
+FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 40deg), oklch(100 0 60deg))' assert_true: 'color-mix(in oklch specified hue, oklch(100 0 40deg), oklch(100 0 60deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 60deg), oklch(100 0 40deg))' assert_true: 'color-mix(in oklch specified hue, oklch(100 0 60deg), oklch(100 0 40deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 50deg), oklch(100 0 330deg))' assert_true: 'color-mix(in oklch specified hue, oklch(100 0 50deg), oklch(100 0 330deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 330deg), oklch(100 0 50deg))' assert_true: 'color-mix(in oklch specified hue, oklch(100 0 330deg), oklch(100 0 50deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 20deg), oklch(100 0 320deg))' assert_true: 'color-mix(in oklch specified hue, oklch(100 0 20deg), oklch(100 0 320deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in oklch specified hue, oklch(100 0 320deg), oklch(100 0 20deg))' assert_true: 'color-mix(in oklch specified hue, oklch(100 0 320deg), oklch(100 0 20deg))' is a supported value for color. expected true got false
+FAIL Property color value 'color-mix(in oklch, oklch(none none none), oklch(none none none))' assert_equals: expected "oklch(none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in oklch, oklch(none none none), oklch(50 60 70deg))' assert_equals: expected "oklch(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(none none none))' assert_equals: expected "oklch(10 20 30)" but got "color(srgb 10 20 30)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 none), oklch(50 60 70deg))' assert_equals: expected "oklch(30 40 70)" but got "color(srgb 30 40 70)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 none))' assert_equals: expected "oklch(30 40 30)" but got "color(srgb 30 40 30)"
+FAIL Property color value 'color-mix(in oklch, oklch(none 20 30deg), oklch(50 none 70deg))' assert_equals: expected "oklch(50 20 50)" but got "color(srgb 50 20 50)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg))' assert_equals: expected "oklch(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg / 0.5))' assert_equals: expected "oklch(30 40 50 / 0.5)" but got "color(srgb 23.3333 33.3333 66.6667 / 0.75)"
+FAIL Property color value 'color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg / none))' assert_equals: expected "oklch(30 40 50 / none)" but got "color(srgb 30 40 50 / none)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(50 60 70))' assert_equals: expected "lab(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))' assert_equals: expected "lab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))' assert_equals: expected "lab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))' assert_equals: expected "lab(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(50 60 70) 25%)' assert_equals: expected "lab(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70) 75%)' assert_equals: expected "lab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)' assert_equals: expected "lab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)' assert_equals: expected "lab(40 50 60 / 0.5)" but got "color(srgb 40 50 60 / 0.5)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))' assert_equals: expected "lab(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8))' assert_equals: expected "lab(36.666664 46.666664 56.666664 / 0.6)" but got "color(srgb 36.6667 46.6667 56.6667 / 0.6)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8))' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))' assert_equals: expected "lab(26 36 46 / 0.5)" but got "color(srgb 26 36 46 / 0.5)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8) 25%)' assert_equals: expected "lab(26 36 46 / 0.5)" but got "color(srgb 26 36 46 / 0.5)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8) 75%)' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 30%, lab(50 60 70 / .8) 90%)' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 12.5%, lab(50 60 70 / .8) 37.5%)' assert_equals: expected "lab(44.285713 54.285717 64.28571 / 0.35)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.35)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / .4) 0%, lab(50 60 70 / .8))' assert_equals: expected "lab(50 60 70 / 0.8)" but got "color(srgb 50 60 70 / 0.8)"
+FAIL Property color value 'color-mix(in lab, lab(none none none), lab(none none none))' assert_equals: expected "lab(none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in lab, lab(none none none), lab(50 60 70))' assert_equals: expected "lab(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(none none none))' assert_equals: expected "lab(10 20 30)" but got "color(srgb 10 20 30)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 none), lab(50 60 70))' assert_equals: expected "lab(30 40 70)" but got "color(srgb 30 40 70)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30), lab(50 60 none))' assert_equals: expected "lab(30 40 30)" but got "color(srgb 30 40 30)"
+FAIL Property color value 'color-mix(in lab, lab(none 20 30), lab(50 none 70))' assert_equals: expected "lab(50 20 50)" but got "color(srgb 50 20 50)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))' assert_equals: expected "lab(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))' assert_equals: expected "lab(30 40 50 / 0.5)" but got "color(srgb 23.3333 33.3333 43.3333 / 0.75)"
+FAIL Property color value 'color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))' assert_equals: expected "lab(30 40 50 / none)" but got "color(srgb 30 40 50 / none)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(50 60 70))' assert_equals: expected "oklab(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 25%, oklab(50 60 70))' assert_equals: expected "oklab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklab, 25% oklab(10 20 30), oklab(50 60 70))' assert_equals: expected "oklab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), 25% oklab(50 60 70))' assert_equals: expected "oklab(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(50 60 70) 25%)' assert_equals: expected "oklab(20 30 40)" but got "color(srgb 20 30 40)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 25%, oklab(50 60 70) 75%)' assert_equals: expected "oklab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 30%, oklab(50 60 70) 90%)' assert_equals: expected "oklab(40 50 60)" but got "color(srgb 40 50 60)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 12.5%, oklab(50 60 70) 37.5%)' assert_equals: expected "oklab(40 50 60 / 0.5)" but got "color(srgb 40 50 60 / 0.5)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30) 0%, oklab(50 60 70))' assert_equals: expected "oklab(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4), oklab(50 60 70 / .8))' assert_equals: expected "oklab(36.666664 46.666664 56.666664 / 0.6)" but got "color(srgb 36.6667 46.6667 56.6667 / 0.6)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 25%, oklab(50 60 70 / .8))' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in oklab, 25% oklab(10 20 30 / .4), oklab(50 60 70 / .8))' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4), 25% oklab(50 60 70 / .8))' assert_equals: expected "oklab(26 36 46 / 0.5)" but got "color(srgb 26 36 46 / 0.5)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4), oklab(50 60 70 / .8) 25%)' assert_equals: expected "oklab(26 36 46 / 0.5)" but got "color(srgb 26 36 46 / 0.5)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 25%, oklab(50 60 70 / .8) 75%)' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 30%, oklab(50 60 70 / .8) 90%)' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.7)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 12.5%, oklab(50 60 70 / .8) 37.5%)' assert_equals: expected "oklab(44.285713 54.285717 64.28571 / 0.35)" but got "color(srgb 44.2857 54.2857 64.2857 / 0.35)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / .4) 0%, oklab(50 60 70 / .8))' assert_equals: expected "oklab(50 60 70 / 0.8)" but got "color(srgb 50 60 70 / 0.8)"
+FAIL Property color value 'color-mix(in oklab, oklab(none none none), oklab(none none none))' assert_equals: expected "oklab(none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in oklab, oklab(none none none), oklab(50 60 70))' assert_equals: expected "oklab(50 60 70)" but got "color(srgb 50 60 70)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(none none none))' assert_equals: expected "oklab(10 20 30)" but got "color(srgb 10 20 30)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 none), oklab(50 60 70))' assert_equals: expected "oklab(30 40 70)" but got "color(srgb 30 40 70)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30), oklab(50 60 none))' assert_equals: expected "oklab(30 40 30)" but got "color(srgb 30 40 30)"
+FAIL Property color value 'color-mix(in oklab, oklab(none 20 30), oklab(50 none 70))' assert_equals: expected "oklab(50 20 50)" but got "color(srgb 50 20 50)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70))' assert_equals: expected "oklab(30 40 50)" but got "color(srgb 30 40 50)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70 / 0.5))' assert_equals: expected "oklab(30 40 50 / 0.5)" but got "color(srgb 23.3333 33.3333 43.3333 / 0.75)"
+FAIL Property color value 'color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70 / none))' assert_equals: expected "oklab(30 40 50 / none)" but got "color(srgb 30 40 50 / none)"
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7))'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7))'
+PASS Property color value 'color-mix(in srgb, 25% color(srgb .1 .2 .3), color(srgb .5 .6 .7))'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7) 25%)'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), 25% color(srgb .5 .6 .7))'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7) 75%)'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 30%, color(srgb .5 .6 .7) 90%)'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 12.5%, color(srgb .5 .6 .7) 37.5%)'
 PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3) 0%, color(srgb .5 .6 .7))'
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .5), color(srgb .5 .6 .7 / .8))' assert_equals: expected "color(srgb 0.3461539 0.4461539 0.5461539 / 0.65)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8))' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, 25% color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8))' assert_true: 'color-mix(in srgb, 25% color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8) 25%)' assert_equals: expected "color(srgb 0.26000002 0.36 0.46 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4), 25% color(srgb .5 .6 .7 / .8))' assert_true: 'color-mix(in srgb, color(srgb .1 .2 .3 / .4), 25% color(srgb .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8) 75%)' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 30%, color(srgb .5 .6 .7 / .8) 90%)' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 12.5%, color(srgb .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .5), color(srgb .5 .6 .7 / .8))' assert_equals: expected "color(srgb 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color(srgb 0.346154 0.446154 0.546154 / 0.65)"
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8))' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb, 25% color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8))' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8) 25%)' assert_equals: expected "color(srgb 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4), 25% color(srgb .5 .6 .7 / .8))' assert_equals: expected "color(srgb 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8) 75%)' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 30%, color(srgb .5 .6 .7 / .8) 90%)' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 12.5%, color(srgb .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.35)"
 PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / .4) 0%, color(srgb .5 .6 .7 / .8))'
-FAIL Property color value 'color-mix(in srgb, color(srgb 2 3 4 / 5), color(srgb 4 6 8 / 10))' assert_equals: expected "color(srgb 3 4.5 6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb -2 -3 -4), color(srgb -4 -6 -8))' assert_equals: expected "color(srgb -3 -4.5 -6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb -2 -3 -4 / -5), color(srgb -4 -6 -8 / -10))' assert_equals: expected "color(srgb 0 0 0 / 0)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb none none none), color(srgb none none none))' assert_equals: expected "color(srgb none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb none none none), color(srgb .5 .6 .7))' assert_equals: expected "color(srgb 0.5 0.6 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb none none none))' assert_equals: expected "color(srgb 0.1 0.2 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 none), color(srgb .5 .6 .7))' assert_equals: expected "color(srgb 0.3 0.4 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 none))' assert_equals: expected "color(srgb 0.3 0.4 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb none .2 .3), color(srgb .5 none .7))' assert_equals: expected "color(srgb 0.5 0.2 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7))' assert_equals: expected "color(srgb 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7 / 0.5))' assert_equals: expected "color(srgb 0.3 0.4 0.5 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7 / none))' assert_equals: expected "color(srgb 0.3 0.4 0.5 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))' assert_true: 'color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7) 25%)' assert_equals: expected "color(srgb-linear 0.2 0.3 0.4)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), 25% color(srgb-linear .5 .6 .7))' assert_true: 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), 25% color(srgb-linear .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7) 75%)' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 30%, color(srgb-linear .5 .6 .7) 90%)' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 12.5%, color(srgb-linear .5 .6 .7) 37.5%)' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 0%, color(srgb-linear .5 .6 .7))'
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .5), color(srgb-linear .5 .6 .7 / .8))' assert_equals: expected "color(srgb-linear 0.3461539 0.4461539 0.5461539 / 0.65)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8))' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8))' assert_true: 'color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8) 25%)' assert_equals: expected "color(srgb-linear 0.26000002 0.36 0.46 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), 25% color(srgb-linear .5 .6 .7 / .8))' assert_true: 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), 25% color(srgb-linear .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8) 75%)' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 30%, color(srgb-linear .5 .6 .7 / .8) 90%)' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 12.5%, color(srgb-linear .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 0%, color(srgb-linear .5 .6 .7 / .8))'
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear 2 3 4 / 5), color(srgb-linear 4 6 8 / 10))' assert_equals: expected "color(srgb-linear 3 4.5 6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear -2 -3 -4), color(srgb-linear -4 -6 -8))' assert_equals: expected "color(srgb-linear -3 -4.5 -6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear -2 -3 -4 / -5), color(srgb-linear -4 -6 -8 / -10))' assert_equals: expected "color(srgb-linear 0 0 0 / 0)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear none none none), color(srgb-linear none none none))' assert_equals: expected "color(srgb-linear none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear none none none), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.5 0.6 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear none none none))' assert_equals: expected "color(srgb-linear 0.1 0.2 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 none), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 none))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear none .2 .3), color(srgb-linear .5 none .7))' assert_equals: expected "color(srgb-linear 0.5 0.2 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7 / 0.5))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7 / none))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, 25% color(xyz .1 .2 .3), color(xyz .5 .6 .7))' assert_true: 'color-mix(in xyz, 25% color(xyz .1 .2 .3), color(xyz .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7) 25%)' assert_equals: expected "color(xyz-d65 0.2 0.3 0.4)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), 25% color(xyz .5 .6 .7))' assert_true: 'color-mix(in xyz, color(xyz .1 .2 .3), 25% color(xyz .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7) 75%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 30%, color(xyz .5 .6 .7) 90%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 12.5%, color(xyz .5 .6 .7) 37.5%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 0%, color(xyz .5 .6 .7))'
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .5), color(xyz .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.3461539 0.4461539 0.5461539 / 0.65)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, 25% color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8))' assert_true: 'color-mix(in xyz, 25% color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8) 25%)' assert_equals: expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4), 25% color(xyz .5 .6 .7 / .8))' assert_true: 'color-mix(in xyz, color(xyz .1 .2 .3 / .4), 25% color(xyz .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8) 75%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 30%, color(xyz .5 .6 .7 / .8) 90%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 12.5%, color(xyz .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 0%, color(xyz .5 .6 .7 / .8))'
-FAIL Property color value 'color-mix(in xyz, color(xyz 2 3 4 / 5), color(xyz 4 6 8 / 10))' assert_equals: expected "color(xyz-d65 3 4.5 6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz -2 -3 -4), color(xyz -4 -6 -8))' assert_equals: expected "color(xyz-d65 -3 -4.5 -6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz -2 -3 -4 / -5), color(xyz -4 -6 -8 / -10))' assert_equals: expected "color(xyz-d65 0 0 0 / 0)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz none none none), color(xyz none none none))' assert_equals: expected "color(xyz-d65 none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz none none none), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz none none none))' assert_equals: expected "color(xyz-d65 0.1 0.2 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 none), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz none .2 .3), color(xyz .5 none .7))' assert_equals: expected "color(xyz-d65 0.5 0.2 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7 / 0.5))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7 / none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))' assert_true: 'color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7) 25%)' assert_equals: expected "color(xyz-d50 0.2 0.3 0.4)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), 25% color(xyz-d50 .5 .6 .7))' assert_true: 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), 25% color(xyz-d50 .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7) 75%)' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 30%, color(xyz-d50 .5 .6 .7) 90%)' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 12.5%, color(xyz-d50 .5 .6 .7) 37.5%)' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 0%, color(xyz-d50 .5 .6 .7))'
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .5), color(xyz-d50 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d50 0.3461539 0.4461539 0.5461539 / 0.65)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8))' assert_true: 'color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8) 25%)' assert_equals: expected "color(xyz-d50 0.26000002 0.36 0.46 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), 25% color(xyz-d50 .5 .6 .7 / .8))' assert_true: 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), 25% color(xyz-d50 .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8) 75%)' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 30%, color(xyz-d50 .5 .6 .7 / .8) 90%)' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 12.5%, color(xyz-d50 .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 0%, color(xyz-d50 .5 .6 .7 / .8))'
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 2 3 4 / 5), color(xyz-d50 4 6 8 / 10))' assert_equals: expected "color(xyz-d50 3 4.5 6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 -2 -3 -4), color(xyz-d50 -4 -6 -8))' assert_equals: expected "color(xyz-d50 -3 -4.5 -6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 -2 -3 -4 / -5), color(xyz-d50 -4 -6 -8 / -10))' assert_equals: expected "color(xyz-d50 0 0 0 / 0)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 none none none), color(xyz-d50 none none none))' assert_equals: expected "color(xyz-d50 none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 none none none), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.5 0.6 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 none none none))' assert_equals: expected "color(xyz-d50 0.1 0.2 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 none), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 none))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 none .2 .3), color(xyz-d50 .5 none .7))' assert_equals: expected "color(xyz-d50 0.5 0.2 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7 / 0.5))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7 / none))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5 / none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))' assert_true: 'color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7) 25%)' assert_equals: expected "color(xyz-d65 0.2 0.3 0.4)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), 25% color(xyz-d65 .5 .6 .7))' assert_true: 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), 25% color(xyz-d65 .5 .6 .7))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7) 75%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 30%, color(xyz-d65 .5 .6 .7) 90%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 12.5%, color(xyz-d65 .5 .6 .7) 37.5%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6 / 0.5)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 0%, color(xyz-d65 .5 .6 .7))'
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .5), color(xyz-d65 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.3461539 0.4461539 0.5461539 / 0.65)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8))' assert_true: 'color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8) 25%)' assert_equals: expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), 25% color(xyz-d65 .5 .6 .7 / .8))' assert_true: 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), 25% color(xyz-d65 .5 .6 .7 / .8))' is a supported value for color. expected true got false
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8) 75%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 30%, color(xyz-d65 .5 .6 .7 / .8) 90%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 12.5%, color(xyz-d65 .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.35)" but got "rgba(128, 128, 128, 0.5)"
-PASS Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 0%, color(xyz-d65 .5 .6 .7 / .8))'
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 2 3 4 / 5), color(xyz-d65 4 6 8 / 10))' assert_equals: expected "color(xyz-d65 3 4.5 6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 -2 -3 -4), color(xyz-d65 -4 -6 -8))' assert_equals: expected "color(xyz-d65 -3 -4.5 -6)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 -2 -3 -4 / -5), color(xyz-d65 -4 -6 -8 / -10))' assert_equals: expected "color(xyz-d65 0 0 0 / 0)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 none none none), color(xyz-d65 none none none))' assert_equals: expected "color(xyz-d65 none none none)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 none none none), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 none none none))' assert_equals: expected "color(xyz-d65 0.1 0.2 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 none), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.7)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.3)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 none .2 .3), color(xyz-d65 .5 none .7))' assert_equals: expected "color(xyz-d65 0.5 0.2 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7 / 0.5))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / 0.5)" but got "rgb(128, 128, 128)"
-FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7 / none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / none)" but got "rgb(128, 128, 128)"
+PASS Property color value 'color-mix(in srgb, color(srgb 2 3 4 / 5), color(srgb 4 6 8 / 10))'
+PASS Property color value 'color-mix(in srgb, color(srgb -2 -3 -4), color(srgb -4 -6 -8))'
+PASS Property color value 'color-mix(in srgb, color(srgb -2 -3 -4 / -5), color(srgb -4 -6 -8 / -10))'
+PASS Property color value 'color-mix(in srgb, color(srgb none none none), color(srgb none none none))'
+PASS Property color value 'color-mix(in srgb, color(srgb none none none), color(srgb .5 .6 .7))'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb none none none))'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 none), color(srgb .5 .6 .7))'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 none))'
+PASS Property color value 'color-mix(in srgb, color(srgb none .2 .3), color(srgb .5 none .7))'
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7))'
+FAIL Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7 / 0.5))' assert_equals: expected "color(srgb 0.3 0.4 0.5 / 0.5)" but got "color(srgb 0.233333 0.333333 0.433333 / 0.75)"
+PASS Property color value 'color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7 / none))'
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7) 25%)' assert_equals: expected "color(srgb-linear 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), 25% color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7) 75%)' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 30%, color(srgb-linear .5 .6 .7) 90%)' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 12.5%, color(srgb-linear .5 .6 .7) 37.5%)' assert_equals: expected "color(srgb-linear 0.4 0.5 0.6 / 0.5)" but got "color(srgb 0.4 0.5 0.6 / 0.5)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 0%, color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .5), color(srgb-linear .5 .6 .7 / .8))' assert_equals: expected "color(srgb-linear 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color(srgb 0.346154 0.446154 0.546154 / 0.65)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8))' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8))' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8) 25%)' assert_equals: expected "color(srgb-linear 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), 25% color(srgb-linear .5 .6 .7 / .8))' assert_equals: expected "color(srgb-linear 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8) 75%)' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 30%, color(srgb-linear .5 .6 .7 / .8) 90%)' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 12.5%, color(srgb-linear .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.35)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 0%, color(srgb-linear .5 .6 .7 / .8))' assert_equals: expected "color(srgb-linear 0.5 0.6 0.7 / 0.8)" but got "color(srgb 0.5 0.6 0.7 / 0.8)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear 2 3 4 / 5), color(srgb-linear 4 6 8 / 10))' assert_equals: expected "color(srgb-linear 3 4.5 6)" but got "color(srgb 3 4.5 6)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear -2 -3 -4), color(srgb-linear -4 -6 -8))' assert_equals: expected "color(srgb-linear -3 -4.5 -6)" but got "color(srgb -3 -4.5 -6)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear -2 -3 -4 / -5), color(srgb-linear -4 -6 -8 / -10))' assert_equals: expected "color(srgb-linear 0 0 0 / 0)" but got "color(srgb 0 0 0 / 0)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear none none none), color(srgb-linear none none none))' assert_equals: expected "color(srgb-linear none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear none none none), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear none none none))' assert_equals: expected "color(srgb-linear 0.1 0.2 0.3)" but got "color(srgb 0.1 0.2 0.3)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 none), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.7)" but got "color(srgb 0.3 0.4 0.7)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 none))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.3)" but got "color(srgb 0.3 0.4 0.3)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear none .2 .3), color(srgb-linear .5 none .7))' assert_equals: expected "color(srgb-linear 0.5 0.2 0.5)" but got "color(srgb 0.5 0.2 0.5)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7 / 0.5))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5 / 0.5)" but got "color(srgb 0.233333 0.333333 0.433333 / 0.75)"
+FAIL Property color value 'color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7 / none))' assert_equals: expected "color(srgb-linear 0.3 0.4 0.5 / none)" but got "color(srgb 0.3 0.4 0.5 / none)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz, 25% color(xyz .1 .2 .3), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7) 25%)' assert_equals: expected "color(xyz-d65 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), 25% color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7) 75%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 30%, color(xyz .5 .6 .7) 90%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 12.5%, color(xyz .5 .6 .7) 37.5%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6 / 0.5)" but got "color(srgb 0.4 0.5 0.6 / 0.5)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3) 0%, color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .5), color(xyz .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color(srgb 0.346154 0.446154 0.546154 / 0.65)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz, 25% color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8) 25%)' assert_equals: expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4), 25% color(xyz .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8) 75%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 30%, color(xyz .5 .6 .7 / .8) 90%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 12.5%, color(xyz .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.35)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / .4) 0%, color(xyz .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7 / 0.8)" but got "color(srgb 0.5 0.6 0.7 / 0.8)"
+FAIL Property color value 'color-mix(in xyz, color(xyz 2 3 4 / 5), color(xyz 4 6 8 / 10))' assert_equals: expected "color(xyz-d65 3 4.5 6)" but got "color(srgb 3 4.5 6)"
+FAIL Property color value 'color-mix(in xyz, color(xyz -2 -3 -4), color(xyz -4 -6 -8))' assert_equals: expected "color(xyz-d65 -3 -4.5 -6)" but got "color(srgb -3 -4.5 -6)"
+FAIL Property color value 'color-mix(in xyz, color(xyz -2 -3 -4 / -5), color(xyz -4 -6 -8 / -10))' assert_equals: expected "color(xyz-d65 0 0 0 / 0)" but got "color(srgb 0 0 0 / 0)"
+FAIL Property color value 'color-mix(in xyz, color(xyz none none none), color(xyz none none none))' assert_equals: expected "color(xyz-d65 none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in xyz, color(xyz none none none), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz none none none))' assert_equals: expected "color(xyz-d65 0.1 0.2 0.3)" but got "color(srgb 0.1 0.2 0.3)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 none), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.7)" but got "color(srgb 0.3 0.4 0.7)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.3)" but got "color(srgb 0.3 0.4 0.3)"
+FAIL Property color value 'color-mix(in xyz, color(xyz none .2 .3), color(xyz .5 none .7))' assert_equals: expected "color(xyz-d65 0.5 0.2 0.5)" but got "color(srgb 0.5 0.2 0.5)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7 / 0.5))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / 0.5)" but got "color(srgb 0.233333 0.333333 0.433333 / 0.75)"
+FAIL Property color value 'color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7 / none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / none)" but got "color(srgb 0.3 0.4 0.5 / none)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7) 25%)' assert_equals: expected "color(xyz-d50 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), 25% color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7) 75%)' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 30%, color(xyz-d50 .5 .6 .7) 90%)' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 12.5%, color(xyz-d50 .5 .6 .7) 37.5%)' assert_equals: expected "color(xyz-d50 0.4 0.5 0.6 / 0.5)" but got "color(srgb 0.4 0.5 0.6 / 0.5)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 0%, color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .5), color(xyz-d50 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d50 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color(srgb 0.346154 0.446154 0.546154 / 0.65)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8) 25%)' assert_equals: expected "color(xyz-d50 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), 25% color(xyz-d50 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d50 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8) 75%)' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 30%, color(xyz-d50 .5 .6 .7 / .8) 90%)' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 12.5%, color(xyz-d50 .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.35)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 0%, color(xyz-d50 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d50 0.5 0.6 0.7 / 0.8)" but got "color(srgb 0.5 0.6 0.7 / 0.8)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 2 3 4 / 5), color(xyz-d50 4 6 8 / 10))' assert_equals: expected "color(xyz-d50 3 4.5 6)" but got "color(srgb 3 4.5 6)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 -2 -3 -4), color(xyz-d50 -4 -6 -8))' assert_equals: expected "color(xyz-d50 -3 -4.5 -6)" but got "color(srgb -3 -4.5 -6)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 -2 -3 -4 / -5), color(xyz-d50 -4 -6 -8 / -10))' assert_equals: expected "color(xyz-d50 0 0 0 / 0)" but got "color(srgb 0 0 0 / 0)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 none none none), color(xyz-d50 none none none))' assert_equals: expected "color(xyz-d50 none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 none none none), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 none none none))' assert_equals: expected "color(xyz-d50 0.1 0.2 0.3)" but got "color(srgb 0.1 0.2 0.3)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 none), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.7)" but got "color(srgb 0.3 0.4 0.7)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 none))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.3)" but got "color(srgb 0.3 0.4 0.3)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 none .2 .3), color(xyz-d50 .5 none .7))' assert_equals: expected "color(xyz-d50 0.5 0.2 0.5)" but got "color(srgb 0.5 0.2 0.5)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7 / 0.5))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5 / 0.5)" but got "color(srgb 0.233333 0.333333 0.433333 / 0.75)"
+FAIL Property color value 'color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7 / none))' assert_equals: expected "color(xyz-d50 0.3 0.4 0.5 / none)" but got "color(srgb 0.3 0.4 0.5 / none)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7) 25%)' assert_equals: expected "color(xyz-d65 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), 25% color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.2 0.3 0.4)" but got "color(srgb 0.2 0.3 0.4)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7) 75%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 30%, color(xyz-d65 .5 .6 .7) 90%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6)" but got "color(srgb 0.4 0.5 0.6)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 12.5%, color(xyz-d65 .5 .6 .7) 37.5%)' assert_equals: expected "color(xyz-d65 0.4 0.5 0.6 / 0.5)" but got "color(srgb 0.4 0.5 0.6 / 0.5)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 0%, color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .5), color(xyz-d65 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color(srgb 0.346154 0.446154 0.546154 / 0.65)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8) 25%)' assert_equals: expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), 25% color(xyz-d65 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "color(srgb 0.26 0.36 0.46 / 0.5)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8) 75%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 30%, color(xyz-d65 .5 .6 .7 / .8) 90%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.7)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 12.5%, color(xyz-d65 .5 .6 .7 / .8) 37.5%)' assert_equals: expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color(srgb 0.442857 0.542857 0.642857 / 0.35)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 0%, color(xyz-d65 .5 .6 .7 / .8))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7 / 0.8)" but got "color(srgb 0.5 0.6 0.7 / 0.8)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 2 3 4 / 5), color(xyz-d65 4 6 8 / 10))' assert_equals: expected "color(xyz-d65 3 4.5 6)" but got "color(srgb 3 4.5 6)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 -2 -3 -4), color(xyz-d65 -4 -6 -8))' assert_equals: expected "color(xyz-d65 -3 -4.5 -6)" but got "color(srgb -3 -4.5 -6)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 -2 -3 -4 / -5), color(xyz-d65 -4 -6 -8 / -10))' assert_equals: expected "color(xyz-d65 0 0 0 / 0)" but got "color(srgb 0 0 0 / 0)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 none none none), color(xyz-d65 none none none))' assert_equals: expected "color(xyz-d65 none none none)" but got "color(srgb none none none)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 none none none), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.5 0.6 0.7)" but got "color(srgb 0.5 0.6 0.7)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 none none none))' assert_equals: expected "color(xyz-d65 0.1 0.2 0.3)" but got "color(srgb 0.1 0.2 0.3)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 none), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.7)" but got "color(srgb 0.3 0.4 0.7)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.3)" but got "color(srgb 0.3 0.4 0.3)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 none .2 .3), color(xyz-d65 .5 none .7))' assert_equals: expected "color(xyz-d65 0.5 0.2 0.5)" but got "color(srgb 0.5 0.2 0.5)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5)" but got "color(srgb 0.3 0.4 0.5)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7 / 0.5))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / 0.5)" but got "color(srgb 0.233333 0.333333 0.433333 / 0.75)"
+FAIL Property color value 'color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7 / none))' assert_equals: expected "color(xyz-d65 0.3 0.4 0.5 / none)" but got "color(srgb 0.3 0.4 0.5 / none)"
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-invalid-color-mix-function-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-invalid-color-mix-function-expected.txt
deleted file mode 100644
index 5635c3e..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-invalid-color-mix-function-expected.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-This is a testharness.js-based test.
-Found 129 tests; 109 PASS, 20 FAIL, 0 TIMEOUT, 0 NOTRUN.
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) -10%, hsl(30deg 30% 40%))" should not set the property value
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 150%, hsl(30deg 30% 40%))" should not set the property value assert_equals: expected "" but got "color-mix(hsl, rgb(46, 56, 46) 150%, rgb(133, 102, 71))"
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% 40%) -10%, hsl(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% 40%) 150%, hsl(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% 40%) 0%, hsl(30deg 30% 40% 80%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl hue, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl shorter, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl foo, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(hsl(120deg 10% 20%), hsl(30deg 30% 40%), in hsl)" should not set the property value
-PASS e.style['color'] = "color-mix(hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) -10%, hwb(30deg 30% 40%))" should not set the property value
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 150%, hwb(30deg 30% 40%))" should not set the property value assert_equals: expected "" but got "color-mix(hwb, rgb(26, 204, 26) 150%, rgb(153, 115, 77))"
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% 40%) -10%, hwb(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% 40%) 150%, hwb(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% 40%) 0%, hwb(30deg 30% 40% 80%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb hue, hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb shorter, hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb foo, hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(hwb(120deg 10% 20%), hwb(30deg 30% 40%), in hwb)" should not set the property value
-PASS e.style['color'] = "color-mix(hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) -10%, lch(50% 60 70deg))" should not set the property value
-FAIL e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) 150%, lch(50% 60 70deg))" should not set the property value assert_equals: expected "" but got "color-mix(lch, lch(10 20 30) 150%, lch(50 60 70))"
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) 0%, lch(50% 60 70deg) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg / .4) -10%, lch(50% 60 70deg / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in lch, lch(10% 20 30deg / .4) 150%, lch(50% 60 70deg / .8))" should not set the property value assert_equals: expected "" but got "color-mix(lch, lch(10 20 30 / 0.4) 150%, lch(50 60 70 / 0.8))"
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg / .4) 0%, lch(50% 60 70deg / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lch hue, lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch shorter, lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch foo, lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(lch(10% 20 30deg), lch(50% 60 70deg), in lch)" should not set the property value
-PASS e.style['color'] = "color-mix(lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) -10%, oklch(50% 60 70deg))" should not set the property value
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) 150%, oklch(50% 60 70deg))" should not set the property value assert_equals: expected "" but got "color-mix(oklch, oklch(10 20 30) 150%, oklch(50 60 70))"
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) 0%, oklch(50% 60 70deg) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg / .4) -10%, oklch(50% 60 70deg / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg / .4) 150%, oklch(50% 60 70deg / .8))" should not set the property value assert_equals: expected "" but got "color-mix(oklch, oklch(10 20 30 / 0.4) 150%, oklch(50 60 70 / 0.8))"
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg / .4) 0%, oklch(50% 60 70deg / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch hue, oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch shorter, oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch foo, oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(oklch(10% 20 30deg), oklch(50% 60 70deg), in oklch)" should not set the property value
-PASS e.style['color'] = "color-mix(oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30) -10%, lab(50% 60 70))" should not set the property value
-FAIL e.style['color'] = "color-mix(in lab, lab(10% 20 30) 150%, lab(50% 60 70))" should not set the property value assert_equals: expected "" but got "color-mix(lab, lab(10 20 30) 150%, lab(50 60 70))"
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30) 0%, lab(50% 60 70) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30 / .4) -10%, lab(50% 60 70 / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in lab, lab(10% 20 30 / .4) 150%, lab(50% 60 70 / .8))" should not set the property value assert_equals: expected "" but got "color-mix(lab, lab(10 20 30 / 0.4) 150%, lab(50 60 70 / 0.8))"
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30 / .4) 0%, lab(50% 60 70 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lab longer hue, lab(10% 20 30), lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab lab(10% 20 30), lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30) lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(lab(10% 20 30), lab(50% 60 70), in lab)" should not set the property value
-PASS e.style['color'] = "color-mix(lab(10% 20 30), lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) -10%, oklab(50% 60 70))" should not set the property value
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) 150%, oklab(50% 60 70))" should not set the property value assert_equals: expected "" but got "color-mix(oklab, oklab(10 20 30) 150%, oklab(50 60 70))"
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) 0%, oklab(50% 60 70) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30 / .4) -10%, oklab(50% 60 70 / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10% 20 30 / .4) 150%, oklab(50% 60 70 / .8))" should not set the property value assert_equals: expected "" but got "color-mix(oklab, oklab(10 20 30 / 0.4) 150%, oklab(50 60 70 / 0.8))"
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30 / .4) 0%, oklab(50% 60 70 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab longer hue, oklab(10% 20 30), oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab oklab(10% 20 30), oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(oklab(10% 20 30), oklab(50% 60 70), in oklab)" should not set the property value
-PASS e.style['color'] = "color-mix(oklab(10% 20 30), oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) -10%, color(srgb .5 .6 .7))" should not set the property value
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 150%, color(srgb .5 .6 .7))" should not set the property value assert_equals: expected "" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3) 150%, color(srgb 0.5 0.6 0.7))"
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 0%, color(srgb .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) -10%, color(srgb .5 .6 .7 / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 150%, color(srgb .5 .6 .7 / .8))" should not set the property value assert_equals: expected "" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.4) 150%, color(srgb 0.5 0.6 0.7 / 0.8))"
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 0%, color(srgb .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb longer hue, color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb .1 .2 .3), color(srgb .5 .6 .7), in srgb)" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) -10%, color(srgb-linear .5 .6 .7))" should not set the property value
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 150%, color(srgb-linear .5 .6 .7))" should not set the property value assert_equals: expected "" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3) 150%, color(srgb-linear 0.5 0.6 0.7))"
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 0%, color(srgb-linear .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) -10%, color(srgb-linear .5 .6 .7 / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 150%, color(srgb-linear .5 .6 .7 / .8))" should not set the property value assert_equals: expected "" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.4) 150%, color(srgb-linear 0.5 0.6 0.7 / 0.8))"
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 0%, color(srgb-linear .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear longer hue, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7), in srgb-linear)" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) -10%, color(xyz .5 .6 .7))" should not set the property value
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 150%, color(xyz .5 .6 .7))" should not set the property value assert_equals: expected "" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 150%, color(xyz-d65 0.5 0.6 0.7))"
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 0%, color(xyz .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) -10%, color(xyz .5 .6 .7 / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 150%, color(xyz .5 .6 .7 / .8))" should not set the property value assert_equals: expected "" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 150%, color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 0%, color(xyz .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz longer hue, color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz .1 .2 .3), color(xyz .5 .6 .7), in xyz)" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) -10%, color(xyz-d50 .5 .6 .7))" should not set the property value
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 150%, color(xyz-d50 .5 .6 .7))" should not set the property value assert_equals: expected "" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3) 150%, color(xyz-d50 0.5 0.6 0.7))"
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 0%, color(xyz-d50 .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) -10%, color(xyz-d50 .5 .6 .7 / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 150%, color(xyz-d50 .5 .6 .7 / .8))" should not set the property value assert_equals: expected "" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.4) 150%, color(xyz-d50 0.5 0.6 0.7 / 0.8))"
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 0%, color(xyz-d50 .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50 longer hue, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50 color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7), in xyz-d50)" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) -10%, color(xyz-d65 .5 .6 .7))" should not set the property value
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 150%, color(xyz-d65 .5 .6 .7))" should not set the property value assert_equals: expected "" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 150%, color(xyz-d65 0.5 0.6 0.7))"
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 0%, color(xyz-d65 .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) -10%, color(xyz-d65 .5 .6 .7 / .8))" should not set the property value
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 150%, color(xyz-d65 .5 .6 .7 / .8))" should not set the property value assert_equals: expected "" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 150%, color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 0%, color(xyz-d65 .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65 longer hue, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65 color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7), in xyz-d65)" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should not set the property value
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-color-mix-function-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-color-mix-function-expected.txt
deleted file mode 100644
index 9f50874..0000000
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-color-mix-function-expected.txt
+++ /dev/null
@@ -1,454 +0,0 @@
-This is a testharness.js-based test.
-Found 450 tests; 0 PASS, 450 FAIL, 0 TIMEOUT, 0 NOTRUN.
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(84, 92, 61)" but got "color-mix(hsl, rgb(46, 56, 46), rgb(133, 102, 71))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(112, 106, 67)" but got "color-mix(hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71))"
-FAIL e.style['color'] = "color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)" should set the property value assert_equals: serialization should be canonical expected "rgb(61, 73, 54)" but got "color-mix(hsl, rgb(46, 56, 46), rgb(133, 102, 71) 25%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)" should set the property value assert_equals: serialization should be canonical expected "rgb(112, 106, 67)" but got "color-mix(hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71) 75%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)" should set the property value assert_equals: serialization should be canonical expected "rgb(112, 106, 67)" but got "color-mix(hsl, rgb(46, 56, 46) 30%, rgb(133, 102, 71) 90%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "rgba(112, 106, 67, 0.5)" but got "color-mix(hsl, rgb(46, 56, 46) 12.5%, rgb(133, 102, 71) 37.5%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(133, 102, 71)" but got "color-mix(hsl, rgb(46, 56, 46) 0%, rgb(133, 102, 71))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))" should set the property value assert_equals: serialization should be canonical expected "rgba(95, 105, 65, 0.6)" but got "color-mix(hsl, rgba(46, 56, 46, 0.4), rgba(133, 102, 71, 0.8))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))" should set the property value assert_equals: serialization should be canonical expected "rgba(108, 103, 66, 0.85)" but got "color-mix(hsl, rgb(46, 56, 46) 25%, rgba(133, 102, 71, 0.8))"
-FAIL e.style['color'] = "color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "rgba(68, 84, 59, 0.5)" but got "color-mix(hsl, rgba(46, 56, 46, 0.4), rgba(133, 102, 71, 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "rgba(121, 114, 69, 0.7)" but got "color-mix(hsl, rgba(46, 56, 46, 0.4) 25%, rgba(133, 102, 71, 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "rgba(121, 114, 69, 0.7)" but got "color-mix(hsl, rgba(46, 56, 46, 0.4) 30%, rgba(133, 102, 71, 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "rgba(121, 114, 69, 0.35)" but got "color-mix(hsl, rgba(46, 56, 46, 0.4) 12.5%, rgba(133, 102, 71, 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))" should set the property value assert_equals: serialization should be canonical expected "rgba(133, 102, 71, 0.8)" but got "color-mix(hsl, rgba(46, 56, 46, 0.4) 0%, rgba(133, 102, 71, 0.8))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 170, 64)" but got "color-mix(hsl, rgb(191, 149, 64), rgb(191, 191, 64))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 170, 64)" but got "color-mix(hsl, rgb(191, 191, 64), rgb(191, 149, 64))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 85, 64)" but got "color-mix(hsl, rgb(191, 170, 64), rgb(191, 64, 128))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 85, 64)" but got "color-mix(hsl, rgb(191, 64, 128), rgb(191, 170, 64))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 64, 85)" but got "color-mix(hsl, rgb(191, 106, 64), rgb(191, 64, 149))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 64, 85)" but got "color-mix(hsl, rgb(191, 64, 149), rgb(191, 106, 64))"
-FAIL e.style['color'] = "color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 170, 64)" but got "color-mix(hsl, rgb(191, 149, 64), rgb(191, 191, 64))"
-FAIL e.style['color'] = "color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 170, 64)" but got "color-mix(hsl, rgb(191, 191, 64), rgb(191, 149, 64))"
-FAIL e.style['color'] = "color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 85, 64)" but got "color-mix(hsl, rgb(191, 170, 64), rgb(191, 64, 128))"
-FAIL e.style['color'] = "color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 85, 64)" but got "color-mix(hsl, rgb(191, 64, 128), rgb(191, 170, 64))"
-FAIL e.style['color'] = "color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 64, 85)" but got "color-mix(hsl, rgb(191, 106, 64), rgb(191, 64, 149))"
-FAIL e.style['color'] = "color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 64, 85)" but got "color-mix(hsl, rgb(191, 64, 149), rgb(191, 106, 64))"
-FAIL e.style['color'] = "color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 85, 191)" but got "color-mix(hsl longer hue, rgb(191, 149, 64), rgb(191, 191, 64))"
-FAIL e.style['color'] = "color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 85, 191)" but got "color-mix(hsl longer hue, rgb(191, 191, 64), rgb(191, 149, 64))"
-FAIL e.style['color'] = "color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 170, 191)" but got "color-mix(hsl longer hue, rgb(191, 170, 64), rgb(191, 64, 128))"
-FAIL e.style['color'] = "color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 170, 191)" but got "color-mix(hsl longer hue, rgb(191, 64, 128), rgb(191, 170, 64))"
-FAIL e.style['color'] = "color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 191, 170)" but got "color-mix(hsl longer hue, rgb(191, 106, 64), rgb(191, 64, 149))"
-FAIL e.style['color'] = "color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 191, 170)" but got "color-mix(hsl longer hue, rgb(191, 64, 149), rgb(191, 106, 64))"
-FAIL e.style['color'] = "color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 170, 64)" but got "color-mix(hsl increasing hue, rgb(191, 149, 64), rgb(191, 191, 64))"
-FAIL e.style['color'] = "color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 85, 191)" but got "color-mix(hsl increasing hue, rgb(191, 191, 64), rgb(191, 149, 64))"
-FAIL e.style['color'] = "color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 170, 191)" but got "color-mix(hsl increasing hue, rgb(191, 170, 64), rgb(191, 64, 128))"
-FAIL e.style['color'] = "color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 85, 64)" but got "color-mix(hsl increasing hue, rgb(191, 64, 128), rgb(191, 170, 64))"
-FAIL e.style['color'] = "color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 191, 170)" but got "color-mix(hsl increasing hue, rgb(191, 106, 64), rgb(191, 64, 149))"
-FAIL e.style['color'] = "color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 64, 85)" but got "color-mix(hsl increasing hue, rgb(191, 64, 149), rgb(191, 106, 64))"
-FAIL e.style['color'] = "color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 85, 191)" but got "color-mix(hsl decreasing hue, rgb(191, 149, 64), rgb(191, 191, 64))"
-FAIL e.style['color'] = "color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 170, 64)" but got "color-mix(hsl decreasing hue, rgb(191, 191, 64), rgb(191, 149, 64))"
-FAIL e.style['color'] = "color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 85, 64)" but got "color-mix(hsl decreasing hue, rgb(191, 170, 64), rgb(191, 64, 128))"
-FAIL e.style['color'] = "color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 170, 191)" but got "color-mix(hsl decreasing hue, rgb(191, 64, 128), rgb(191, 170, 64))"
-FAIL e.style['color'] = "color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(191, 64, 85)" but got "color-mix(hsl decreasing hue, rgb(191, 106, 64), rgb(191, 64, 149))"
-FAIL e.style['color'] = "color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))" should set the property value assert_equals: serialization should be canonical expected "rgb(64, 191, 170)" but got "color-mix(hsl decreasing hue, rgb(191, 64, 149), rgb(191, 106, 64))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(none none none), hsl(none none none))" should set the property value assert_equals: serialization should be canonical expected "rgb(0, 0, 0)" but got "color-mix(hsl, rgb(0, 0, 0), rgb(0, 0, 0))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))" should set the property value assert_equals: serialization should be canonical expected "rgb(224, 204, 184)" but got "color-mix(hsl, rgb(0, 0, 0), rgb(224, 204, 184))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))" should set the property value assert_equals: serialization should be canonical expected "rgb(82, 122, 82)" but got "color-mix(hsl, rgb(82, 122, 82), rgb(0, 0, 0))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))" should set the property value assert_equals: serialization should be canonical expected "rgb(168, 184, 122)" but got "color-mix(hsl, rgb(0, 0, 0), rgb(194, 153, 112))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))" should set the property value assert_equals: serialization should be canonical expected "rgb(112, 122, 82)" but got "color-mix(hsl, rgb(82, 122, 82), rgb(0, 0, 0))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))" should set the property value assert_equals: serialization should be canonical expected "rgb(173, 153, 133)" but got "color-mix(hsl, rgb(122, 82, 82), rgb(204, 204, 204))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(143, 143, 61)" but got "color-mix(hsl, rgba(61, 143, 61, 0), rgb(143, 61, 61))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))" should set the property value assert_equals: serialization should be canonical expected "rgba(143, 143, 61, 0.5)" but got "color-mix(hsl, rgba(61, 143, 61, 0), rgba(143, 61, 61, 0.5))"
-FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))" should set the property value assert_equals: serialization should be canonical expected "rgba(143, 143, 61, 0)" but got "color-mix(hsl, rgba(61, 143, 61, 0), rgba(143, 61, 61, 0))"
-FAIL e.style['color'] = "color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(0, 249, 66)" but got "color-mix(hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(42, 0, 34)" but got "color-mix(hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(42, 0, 34)" but got "color-mix(hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(0, 0, 0)" but got "color-mix(hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(0, 0, 0)" but got "color-mix(hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(147, 179, 52)" but got "color-mix(hwb, rgb(26, 204, 26), rgb(153, 115, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(166, 153, 64)" but got "color-mix(hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)" should set the property value assert_equals: serialization should be canonical expected "rgb(96, 191, 39)" but got "color-mix(hwb, rgb(26, 204, 26), rgb(153, 115, 77) 25%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)" should set the property value assert_equals: serialization should be canonical expected "rgb(166, 153, 64)" but got "color-mix(hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77) 75%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)" should set the property value assert_equals: serialization should be canonical expected "rgb(166, 153, 64)" but got "color-mix(hwb, rgb(26, 204, 26) 30%, rgb(153, 115, 77) 90%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "rgba(166, 153, 64, 0.5)" but got "color-mix(hwb, rgb(26, 204, 26) 12.5%, rgb(153, 115, 77) 37.5%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 115, 77)" but got "color-mix(hwb, rgb(26, 204, 26) 0%, rgb(153, 115, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))" should set the property value assert_equals: serialization should be canonical expected "rgba(143, 170, 60, 0.6)" but got "color-mix(hwb, rgba(26, 204, 26, 0.4), rgba(153, 115, 77, 0.8))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))" should set the property value assert_equals: serialization should be canonical expected "rgba(160, 149, 70, 0.7)" but got "color-mix(hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8))"
-FAIL e.style['color'] = "color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "rgba(98, 184, 46, 0.5)" but got "color-mix(hwb, rgba(26, 204, 26, 0.4), rgba(153, 115, 77, 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "rgba(160, 149, 70, 0.7)" but got "color-mix(hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "rgba(160, 149, 70, 0.7)" but got "color-mix(hwb, rgba(26, 204, 26, 0.4) 30%, rgba(153, 115, 77, 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "rgba(160, 149, 70, 0.35)" but got "color-mix(hwb, rgba(26, 204, 26, 0.4) 12.5%, rgba(153, 115, 77, 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))" should set the property value assert_equals: serialization should be canonical expected "rgba(153, 115, 77, 0.8)" but got "color-mix(hwb, rgba(26, 204, 26, 0.4) 0%, rgba(153, 115, 77, 0.8))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 140, 77)" but got "color-mix(hwb, rgb(153, 128, 77), rgb(153, 153, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 140, 77)" but got "color-mix(hwb, rgb(153, 153, 77), rgb(153, 128, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 89, 77)" but got "color-mix(hwb, rgb(153, 140, 77), rgb(153, 77, 115))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 89, 77)" but got "color-mix(hwb, rgb(153, 77, 115), rgb(153, 140, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 77, 89)" but got "color-mix(hwb, rgb(153, 102, 77), rgb(153, 77, 127))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 77, 89)" but got "color-mix(hwb, rgb(153, 77, 127), rgb(153, 102, 77))"
-FAIL e.style['color'] = "color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 140, 77)" but got "color-mix(hwb, rgb(153, 128, 77), rgb(153, 153, 77))"
-FAIL e.style['color'] = "color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 140, 77)" but got "color-mix(hwb, rgb(153, 153, 77), rgb(153, 128, 77))"
-FAIL e.style['color'] = "color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 89, 77)" but got "color-mix(hwb, rgb(153, 140, 77), rgb(153, 77, 115))"
-FAIL e.style['color'] = "color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 89, 77)" but got "color-mix(hwb, rgb(153, 77, 115), rgb(153, 140, 77))"
-FAIL e.style['color'] = "color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 77, 89)" but got "color-mix(hwb, rgb(153, 102, 77), rgb(153, 77, 127))"
-FAIL e.style['color'] = "color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 77, 89)" but got "color-mix(hwb, rgb(153, 77, 127), rgb(153, 102, 77))"
-FAIL e.style['color'] = "color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 89, 153)" but got "color-mix(hwb longer hue, rgb(153, 128, 77), rgb(153, 153, 77))"
-FAIL e.style['color'] = "color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 89, 153)" but got "color-mix(hwb longer hue, rgb(153, 153, 77), rgb(153, 128, 77))"
-FAIL e.style['color'] = "color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 140, 153)" but got "color-mix(hwb longer hue, rgb(153, 140, 77), rgb(153, 77, 115))"
-FAIL e.style['color'] = "color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 140, 153)" but got "color-mix(hwb longer hue, rgb(153, 77, 115), rgb(153, 140, 77))"
-FAIL e.style['color'] = "color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 153, 140)" but got "color-mix(hwb longer hue, rgb(153, 102, 77), rgb(153, 77, 127))"
-FAIL e.style['color'] = "color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 153, 140)" but got "color-mix(hwb longer hue, rgb(153, 77, 127), rgb(153, 102, 77))"
-FAIL e.style['color'] = "color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 140, 77)" but got "color-mix(hwb increasing hue, rgb(153, 128, 77), rgb(153, 153, 77))"
-FAIL e.style['color'] = "color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 89, 153)" but got "color-mix(hwb increasing hue, rgb(153, 153, 77), rgb(153, 128, 77))"
-FAIL e.style['color'] = "color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 140, 153)" but got "color-mix(hwb increasing hue, rgb(153, 140, 77), rgb(153, 77, 115))"
-FAIL e.style['color'] = "color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 89, 77)" but got "color-mix(hwb increasing hue, rgb(153, 77, 115), rgb(153, 140, 77))"
-FAIL e.style['color'] = "color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 153, 140)" but got "color-mix(hwb increasing hue, rgb(153, 102, 77), rgb(153, 77, 127))"
-FAIL e.style['color'] = "color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 77, 89)" but got "color-mix(hwb increasing hue, rgb(153, 77, 127), rgb(153, 102, 77))"
-FAIL e.style['color'] = "color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 89, 153)" but got "color-mix(hwb decreasing hue, rgb(153, 128, 77), rgb(153, 153, 77))"
-FAIL e.style['color'] = "color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 140, 77)" but got "color-mix(hwb decreasing hue, rgb(153, 153, 77), rgb(153, 128, 77))"
-FAIL e.style['color'] = "color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 89, 77)" but got "color-mix(hwb decreasing hue, rgb(153, 140, 77), rgb(153, 77, 115))"
-FAIL e.style['color'] = "color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 140, 153)" but got "color-mix(hwb decreasing hue, rgb(153, 77, 115), rgb(153, 140, 77))"
-FAIL e.style['color'] = "color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 77, 89)" but got "color-mix(hwb decreasing hue, rgb(153, 102, 77), rgb(153, 77, 127))"
-FAIL e.style['color'] = "color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(77, 153, 140)" but got "color-mix(hwb decreasing hue, rgb(153, 77, 127), rgb(153, 102, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(none none none), hwb(none none none))" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 0, 0)" but got "color-mix(hwb, rgb(255, 0, 0), rgb(255, 0, 0))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(153, 115, 77)" but got "color-mix(hwb, rgb(255, 0, 0), rgb(153, 115, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))" should set the property value assert_equals: serialization should be canonical expected "rgb(26, 204, 26)" but got "color-mix(hwb, rgb(26, 204, 26), rgb(255, 0, 0))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(128, 153, 51)" but got "color-mix(hwb, rgb(26, 255, 26), rgb(153, 115, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))" should set the property value assert_equals: serialization should be canonical expected "rgb(166, 204, 51)" but got "color-mix(hwb, rgb(26, 204, 26), rgb(255, 166, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(179, 102, 26)" but got "color-mix(hwb, rgb(204, 26, 26), rgb(153, 77, 0))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))" should set the property value assert_equals: serialization should be canonical expected "rgb(147, 179, 51)" but got "color-mix(hwb, rgba(26, 204, 26, 0), rgb(153, 115, 77))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))" should set the property value assert_equals: serialization should be canonical expected "rgba(147, 179, 51, 0.5)" but got "color-mix(hwb, rgba(26, 204, 26, 0), rgba(153, 115, 77, 0.5))"
-FAIL e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))" should set the property value assert_equals: serialization should be canonical expected "rgba(147, 179, 51, 0)" but got "color-mix(hwb, rgba(26, 204, 26, 0), rgba(153, 115, 77, 0))"
-FAIL e.style['color'] = "color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(0, 249, 66)" but got "color-mix(hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(42, 0, 34)" but got "color-mix(hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(42, 0, 34)" but got "color-mix(hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(0, 0, 0)" but got "color-mix(hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(255, 255, 255)" but got "color-mix(hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)" should set the property value assert_equals: serialization should be canonical expected "rgb(0, 0, 0)" but got "color-mix(hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "lch(30 40 50)" but got "color-mix(lch, lch(10 20 30), lch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "lch(40 50 60)" but got "color-mix(lch, lch(10 20 30) 25%, lch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lch, 25% lch(10 20 30deg), lch(50 60 70deg))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg), 25% lch(50 60 70deg))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg), lch(50 60 70deg) 25%)" should set the property value assert_equals: serialization should be canonical expected "lch(20 30 40)" but got "color-mix(lch, lch(10 20 30), lch(50 60 70) 25%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg) 25%, lch(50 60 70deg) 75%)" should set the property value assert_equals: serialization should be canonical expected "lch(40 50 60)" but got "color-mix(lch, lch(10 20 30) 25%, lch(50 60 70) 75%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg) 30%, lch(50 60 70deg) 90%)" should set the property value assert_equals: serialization should be canonical expected "lch(40 50 60)" but got "color-mix(lch, lch(10 20 30) 30%, lch(50 60 70) 90%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg) 12.5%, lch(50 60 70deg) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "lch(40 50 60 / 0.5)" but got "color-mix(lch, lch(10 20 30) 12.5%, lch(50 60 70) 37.5%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg) 0%, lch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "lch(50 60 70)" but got "color-mix(lch, lch(10 20 30) 0%, lch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8))" should set the property value assert_equals: serialization should be canonical expected "lch(36.666664 46.666664 50 / 0.6)" but got "color-mix(lch, lch(10 20 30 / 0.4), lch(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8))" should set the property value assert_equals: serialization should be canonical expected "lch(44.285713 54.285717 60 / 0.7)" but got "color-mix(lch, lch(10 20 30 / 0.4) 25%, lch(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in lch, 25% lch(10 20 30deg / .4), lch(50 60 70deg / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4), 25% lch(50 60 70deg / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4), lch(50 60 70deg / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "lch(26 36 40 / 0.5)" but got "color-mix(lch, lch(10 20 30 / 0.4), lch(50 60 70 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4) 25%, lch(50 60 70deg / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "lch(44.285713 54.285717 60 / 0.7)" but got "color-mix(lch, lch(10 20 30 / 0.4) 25%, lch(50 60 70 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4) 30%, lch(50 60 70deg / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "lch(44.285713 54.285717 60 / 0.7)" but got "color-mix(lch, lch(10 20 30 / 0.4) 30%, lch(50 60 70 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4) 12.5%, lch(50 60 70deg / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "lch(44.285713 54.285717 60 / 0.35)" but got "color-mix(lch, lch(10 20 30 / 0.4) 12.5%, lch(50 60 70 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / .4) 0%, lch(50 60 70deg / .8))" should set the property value assert_equals: serialization should be canonical expected "lch(50 60 70 / 0.8)" but got "color-mix(lch, lch(10 20 30 / 0.4) 0%, lch(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in lch, lch(100 0 40deg), lch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 50)" but got "color-mix(lch, lch(100 0 40), lch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in lch, lch(100 0 60deg), lch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 50)" but got "color-mix(lch, lch(100 0 60), lch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in lch, lch(100 0 50deg), lch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 10)" but got "color-mix(lch, lch(100 0 50), lch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in lch, lch(100 0 330deg), lch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 10)" but got "color-mix(lch, lch(100 0 330), lch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in lch, lch(100 0 20deg), lch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 350)" but got "color-mix(lch, lch(100 0 20), lch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in lch, lch(100 0 320deg), lch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 350)" but got "color-mix(lch, lch(100 0 320), lch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in lch shorter hue, lch(100 0 40deg), lch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 50)" but got "color-mix(lch, lch(100 0 40), lch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in lch shorter hue, lch(100 0 60deg), lch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 50)" but got "color-mix(lch, lch(100 0 60), lch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in lch shorter hue, lch(100 0 50deg), lch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 10)" but got "color-mix(lch, lch(100 0 50), lch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in lch shorter hue, lch(100 0 330deg), lch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 10)" but got "color-mix(lch, lch(100 0 330), lch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in lch shorter hue, lch(100 0 20deg), lch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 350)" but got "color-mix(lch, lch(100 0 20), lch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in lch shorter hue, lch(100 0 320deg), lch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 350)" but got "color-mix(lch, lch(100 0 320), lch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in lch longer hue, lch(100 0 40deg), lch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 230)" but got "color-mix(lch longer hue, lch(100 0 40), lch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in lch longer hue, lch(100 0 60deg), lch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 230)" but got "color-mix(lch longer hue, lch(100 0 60), lch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in lch longer hue, lch(100 0 50deg), lch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 190)" but got "color-mix(lch longer hue, lch(100 0 50), lch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in lch longer hue, lch(100 0 330deg), lch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 190)" but got "color-mix(lch longer hue, lch(100 0 330), lch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in lch longer hue, lch(100 0 20deg), lch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 170)" but got "color-mix(lch longer hue, lch(100 0 20), lch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in lch longer hue, lch(100 0 320deg), lch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 170)" but got "color-mix(lch longer hue, lch(100 0 320), lch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in lch increasing hue, lch(100 0 40deg), lch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 50)" but got "color-mix(lch increasing hue, lch(100 0 40), lch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in lch increasing hue, lch(100 0 60deg), lch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 230)" but got "color-mix(lch increasing hue, lch(100 0 60), lch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in lch increasing hue, lch(100 0 50deg), lch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 190)" but got "color-mix(lch increasing hue, lch(100 0 50), lch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in lch increasing hue, lch(100 0 330deg), lch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 10)" but got "color-mix(lch increasing hue, lch(100 0 330), lch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in lch increasing hue, lch(100 0 20deg), lch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 170)" but got "color-mix(lch increasing hue, lch(100 0 20), lch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in lch increasing hue, lch(100 0 320deg), lch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 350)" but got "color-mix(lch increasing hue, lch(100 0 320), lch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in lch decreasing hue, lch(100 0 40deg), lch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 230)" but got "color-mix(lch decreasing hue, lch(100 0 40), lch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in lch decreasing hue, lch(100 0 60deg), lch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 50)" but got "color-mix(lch decreasing hue, lch(100 0 60), lch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in lch decreasing hue, lch(100 0 50deg), lch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 10)" but got "color-mix(lch decreasing hue, lch(100 0 50), lch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in lch decreasing hue, lch(100 0 330deg), lch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 190)" but got "color-mix(lch decreasing hue, lch(100 0 330), lch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in lch decreasing hue, lch(100 0 20deg), lch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 350)" but got "color-mix(lch decreasing hue, lch(100 0 20), lch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in lch decreasing hue, lch(100 0 320deg), lch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "lch(100 0 170)" but got "color-mix(lch decreasing hue, lch(100 0 320), lch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in lch, lch(none none none), lch(none none none))" should set the property value assert_equals: serialization should be canonical expected "lch(none none none)" but got "color-mix(lch, lch(none none none), lch(none none none))"
-FAIL e.style['color'] = "color-mix(in lch, lch(none none none), lch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "lch(50 60 70)" but got "color-mix(lch, lch(none none none), lch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg), lch(none none none))" should set the property value assert_equals: serialization should be canonical expected "lch(10 20 30)" but got "color-mix(lch, lch(10 20 30), lch(none none none))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 none), lch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "lch(30 40 70)" but got "color-mix(lch, lch(10 20 none), lch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg), lch(50 60 none))" should set the property value assert_equals: serialization should be canonical expected "lch(30 40 30)" but got "color-mix(lch, lch(10 20 30), lch(50 60 none))"
-FAIL e.style['color'] = "color-mix(in lch, lch(none 20 30deg), lch(50 none 70deg))" should set the property value assert_equals: serialization should be canonical expected "lch(50 20 50)" but got "color-mix(lch, lch(none 20 30), lch(50 none 70))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "lch(30 40 50)" but got "color-mix(lch, lch(10 20 30 / none), lch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / 0.5))" should set the property value assert_equals: serialization should be canonical expected "lch(30 40 50 / 0.5)" but got "color-mix(lch, lch(10 20 30 / none), lch(50 60 70 / 0.5))"
-FAIL e.style['color'] = "color-mix(in lch, lch(10 20 30deg / none), lch(50 60 70deg / none))" should set the property value assert_equals: serialization should be canonical expected "lch(30 40 50 / none)" but got "color-mix(lch, lch(10 20 30 / none), lch(50 60 70 / none))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(30 40 50)" but got "color-mix(oklch, oklch(10 20 30), oklch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg) 25%, oklch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(40 50 60)" but got "color-mix(oklch, oklch(10 20 30) 25%, oklch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklch, 25% oklch(10 20 30deg), oklch(50 60 70deg))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg), 25% oklch(50 60 70deg))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 70deg) 25%)" should set the property value assert_equals: serialization should be canonical expected "oklch(20 30 40)" but got "color-mix(oklch, oklch(10 20 30), oklch(50 60 70) 25%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg) 25%, oklch(50 60 70deg) 75%)" should set the property value assert_equals: serialization should be canonical expected "oklch(40 50 60)" but got "color-mix(oklch, oklch(10 20 30) 25%, oklch(50 60 70) 75%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg) 30%, oklch(50 60 70deg) 90%)" should set the property value assert_equals: serialization should be canonical expected "oklch(40 50 60)" but got "color-mix(oklch, oklch(10 20 30) 30%, oklch(50 60 70) 90%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg) 12.5%, oklch(50 60 70deg) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "oklch(40 50 60 / 0.5)" but got "color-mix(oklch, oklch(10 20 30) 12.5%, oklch(50 60 70) 37.5%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg) 0%, oklch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(50 60 70)" but got "color-mix(oklch, oklch(10 20 30) 0%, oklch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4), oklch(50 60 70deg / .8))" should set the property value assert_equals: serialization should be canonical expected "oklch(36.666664 46.666664 50 / 0.6)" but got "color-mix(oklch, oklch(10 20 30 / 0.4), oklch(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4) 25%, oklch(50 60 70deg / .8))" should set the property value assert_equals: serialization should be canonical expected "oklch(44.285713 54.285717 60 / 0.7)" but got "color-mix(oklch, oklch(10 20 30 / 0.4) 25%, oklch(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in oklch, 25% oklch(10 20 30deg / .4), oklch(50 60 70deg / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4), 25% oklch(50 60 70deg / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4), oklch(50 60 70deg / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "oklch(26 36 40 / 0.5)" but got "color-mix(oklch, oklch(10 20 30 / 0.4), oklch(50 60 70 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4) 25%, oklch(50 60 70deg / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "oklch(44.285713 54.285717 60 / 0.7)" but got "color-mix(oklch, oklch(10 20 30 / 0.4) 25%, oklch(50 60 70 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4) 30%, oklch(50 60 70deg / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "oklch(44.285713 54.285717 60 / 0.7)" but got "color-mix(oklch, oklch(10 20 30 / 0.4) 30%, oklch(50 60 70 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4) 12.5%, oklch(50 60 70deg / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "oklch(44.285713 54.285717 60 / 0.35)" but got "color-mix(oklch, oklch(10 20 30 / 0.4) 12.5%, oklch(50 60 70 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / .4) 0%, oklch(50 60 70deg / .8))" should set the property value assert_equals: serialization should be canonical expected "oklch(50 60 70 / 0.8)" but got "color-mix(oklch, oklch(10 20 30 / 0.4) 0%, oklch(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(100 0 40deg), oklch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 50)" but got "color-mix(oklch, oklch(100 0 40), oklch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(100 0 60deg), oklch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 50)" but got "color-mix(oklch, oklch(100 0 60), oklch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(100 0 50deg), oklch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 10)" but got "color-mix(oklch, oklch(100 0 50), oklch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(100 0 330deg), oklch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 10)" but got "color-mix(oklch, oklch(100 0 330), oklch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(100 0 20deg), oklch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 350)" but got "color-mix(oklch, oklch(100 0 20), oklch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(100 0 320deg), oklch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 350)" but got "color-mix(oklch, oklch(100 0 320), oklch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in oklch shorter hue, oklch(100 0 40deg), oklch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 50)" but got "color-mix(oklch, oklch(100 0 40), oklch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in oklch shorter hue, oklch(100 0 60deg), oklch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 50)" but got "color-mix(oklch, oklch(100 0 60), oklch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in oklch shorter hue, oklch(100 0 50deg), oklch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 10)" but got "color-mix(oklch, oklch(100 0 50), oklch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in oklch shorter hue, oklch(100 0 330deg), oklch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 10)" but got "color-mix(oklch, oklch(100 0 330), oklch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in oklch shorter hue, oklch(100 0 20deg), oklch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 350)" but got "color-mix(oklch, oklch(100 0 20), oklch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in oklch shorter hue, oklch(100 0 320deg), oklch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 350)" but got "color-mix(oklch, oklch(100 0 320), oklch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in oklch longer hue, oklch(100 0 40deg), oklch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 230)" but got "color-mix(oklch longer hue, oklch(100 0 40), oklch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in oklch longer hue, oklch(100 0 60deg), oklch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 230)" but got "color-mix(oklch longer hue, oklch(100 0 60), oklch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in oklch longer hue, oklch(100 0 50deg), oklch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 190)" but got "color-mix(oklch longer hue, oklch(100 0 50), oklch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in oklch longer hue, oklch(100 0 330deg), oklch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 190)" but got "color-mix(oklch longer hue, oklch(100 0 330), oklch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in oklch longer hue, oklch(100 0 20deg), oklch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 170)" but got "color-mix(oklch longer hue, oklch(100 0 20), oklch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in oklch longer hue, oklch(100 0 320deg), oklch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 170)" but got "color-mix(oklch longer hue, oklch(100 0 320), oklch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in oklch increasing hue, oklch(100 0 40deg), oklch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 50)" but got "color-mix(oklch increasing hue, oklch(100 0 40), oklch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in oklch increasing hue, oklch(100 0 60deg), oklch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 230)" but got "color-mix(oklch increasing hue, oklch(100 0 60), oklch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in oklch increasing hue, oklch(100 0 50deg), oklch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 190)" but got "color-mix(oklch increasing hue, oklch(100 0 50), oklch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in oklch increasing hue, oklch(100 0 330deg), oklch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 10)" but got "color-mix(oklch increasing hue, oklch(100 0 330), oklch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in oklch increasing hue, oklch(100 0 20deg), oklch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 170)" but got "color-mix(oklch increasing hue, oklch(100 0 20), oklch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in oklch increasing hue, oklch(100 0 320deg), oklch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 350)" but got "color-mix(oklch increasing hue, oklch(100 0 320), oklch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in oklch decreasing hue, oklch(100 0 40deg), oklch(100 0 60deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 230)" but got "color-mix(oklch decreasing hue, oklch(100 0 40), oklch(100 0 60))"
-FAIL e.style['color'] = "color-mix(in oklch decreasing hue, oklch(100 0 60deg), oklch(100 0 40deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 50)" but got "color-mix(oklch decreasing hue, oklch(100 0 60), oklch(100 0 40))"
-FAIL e.style['color'] = "color-mix(in oklch decreasing hue, oklch(100 0 50deg), oklch(100 0 330deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 10)" but got "color-mix(oklch decreasing hue, oklch(100 0 50), oklch(100 0 330))"
-FAIL e.style['color'] = "color-mix(in oklch decreasing hue, oklch(100 0 330deg), oklch(100 0 50deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 190)" but got "color-mix(oklch decreasing hue, oklch(100 0 330), oklch(100 0 50))"
-FAIL e.style['color'] = "color-mix(in oklch decreasing hue, oklch(100 0 20deg), oklch(100 0 320deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 350)" but got "color-mix(oklch decreasing hue, oklch(100 0 20), oklch(100 0 320))"
-FAIL e.style['color'] = "color-mix(in oklch decreasing hue, oklch(100 0 320deg), oklch(100 0 20deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(100 0 170)" but got "color-mix(oklch decreasing hue, oklch(100 0 320), oklch(100 0 20))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(none none none), oklch(none none none))" should set the property value assert_equals: serialization should be canonical expected "oklch(none none none)" but got "color-mix(oklch, oklch(none none none), oklch(none none none))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(none none none), oklch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(50 60 70)" but got "color-mix(oklch, oklch(none none none), oklch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg), oklch(none none none))" should set the property value assert_equals: serialization should be canonical expected "oklch(10 20 30)" but got "color-mix(oklch, oklch(10 20 30), oklch(none none none))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 none), oklch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(30 40 70)" but got "color-mix(oklch, oklch(10 20 none), oklch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg), oklch(50 60 none))" should set the property value assert_equals: serialization should be canonical expected "oklch(30 40 30)" but got "color-mix(oklch, oklch(10 20 30), oklch(50 60 none))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(none 20 30deg), oklch(50 none 70deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(50 20 50)" but got "color-mix(oklch, oklch(none 20 30), oklch(50 none 70))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg))" should set the property value assert_equals: serialization should be canonical expected "oklch(30 40 50)" but got "color-mix(oklch, oklch(10 20 30 / none), oklch(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg / 0.5))" should set the property value assert_equals: serialization should be canonical expected "oklch(30 40 50 / 0.5)" but got "color-mix(oklch, oklch(10 20 30 / none), oklch(50 60 70 / 0.5))"
-FAIL e.style['color'] = "color-mix(in oklch, oklch(10 20 30deg / none), oklch(50 60 70deg / none))" should set the property value assert_equals: serialization should be canonical expected "oklch(30 40 50 / none)" but got "color-mix(oklch, oklch(10 20 30 / none), oklch(50 60 70 / none))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30), lab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "lab(30 40 50)" but got "color-mix(lab, lab(10 20 30), lab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "lab(40 50 60)" but got "color-mix(lab, lab(10 20 30) 25%, lab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lab, 25% lab(10 20 30), lab(50 60 70))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30), 25% lab(50 60 70))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30), lab(50 60 70) 25%)" should set the property value assert_equals: serialization should be canonical expected "lab(20 30 40)" but got "color-mix(lab, lab(10 20 30), lab(50 60 70) 25%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30) 25%, lab(50 60 70) 75%)" should set the property value assert_equals: serialization should be canonical expected "lab(40 50 60)" but got "color-mix(lab, lab(10 20 30) 25%, lab(50 60 70) 75%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30) 30%, lab(50 60 70) 90%)" should set the property value assert_equals: serialization should be canonical expected "lab(40 50 60)" but got "color-mix(lab, lab(10 20 30) 30%, lab(50 60 70) 90%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "lab(40 50 60 / 0.5)" but got "color-mix(lab, lab(10 20 30) 12.5%, lab(50 60 70) 37.5%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30) 0%, lab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "lab(50 60 70)" but got "color-mix(lab, lab(10 20 30) 0%, lab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8))" should set the property value assert_equals: serialization should be canonical expected "lab(36.666664 46.666664 56.666664 / 0.6)" but got "color-mix(lab, lab(10 20 30 / 0.4), lab(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8))" should set the property value assert_equals: serialization should be canonical expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "color-mix(lab, lab(10 20 30 / 0.4) 25%, lab(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in lab, 25% lab(10 20 30 / .4), lab(50 60 70 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4), 25% lab(50 60 70 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4), lab(50 60 70 / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "lab(26 36 46 / 0.5)" but got "color-mix(lab, lab(10 20 30 / 0.4), lab(50 60 70 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4) 25%, lab(50 60 70 / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "color-mix(lab, lab(10 20 30 / 0.4) 25%, lab(50 60 70 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4) 30%, lab(50 60 70 / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "lab(44.285713 54.285717 64.28571 / 0.7)" but got "color-mix(lab, lab(10 20 30 / 0.4) 30%, lab(50 60 70 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4) 12.5%, lab(50 60 70 / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "lab(44.285713 54.285717 64.28571 / 0.35)" but got "color-mix(lab, lab(10 20 30 / 0.4) 12.5%, lab(50 60 70 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / .4) 0%, lab(50 60 70 / .8))" should set the property value assert_equals: serialization should be canonical expected "lab(50 60 70 / 0.8)" but got "color-mix(lab, lab(10 20 30 / 0.4) 0%, lab(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in lab, lab(none none none), lab(none none none))" should set the property value assert_equals: serialization should be canonical expected "lab(none none none)" but got "color-mix(lab, lab(none none none), lab(none none none))"
-FAIL e.style['color'] = "color-mix(in lab, lab(none none none), lab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "lab(50 60 70)" but got "color-mix(lab, lab(none none none), lab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30), lab(none none none))" should set the property value assert_equals: serialization should be canonical expected "lab(10 20 30)" but got "color-mix(lab, lab(10 20 30), lab(none none none))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 none), lab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "lab(30 40 70)" but got "color-mix(lab, lab(10 20 none), lab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30), lab(50 60 none))" should set the property value assert_equals: serialization should be canonical expected "lab(30 40 30)" but got "color-mix(lab, lab(10 20 30), lab(50 60 none))"
-FAIL e.style['color'] = "color-mix(in lab, lab(none 20 30), lab(50 none 70))" should set the property value assert_equals: serialization should be canonical expected "lab(50 20 50)" but got "color-mix(lab, lab(none 20 30), lab(50 none 70))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / none), lab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "lab(30 40 50)" but got "color-mix(lab, lab(10 20 30 / none), lab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))" should set the property value assert_equals: serialization should be canonical expected "lab(30 40 50 / 0.5)" but got "color-mix(lab, lab(10 20 30 / none), lab(50 60 70 / 0.5))"
-FAIL e.style['color'] = "color-mix(in lab, lab(10 20 30 / none), lab(50 60 70 / none))" should set the property value assert_equals: serialization should be canonical expected "lab(30 40 50 / none)" but got "color-mix(lab, lab(10 20 30 / none), lab(50 60 70 / none))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30), oklab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "oklab(30 40 50)" but got "color-mix(oklab, oklab(10 20 30), oklab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30) 25%, oklab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "oklab(40 50 60)" but got "color-mix(oklab, oklab(10 20 30) 25%, oklab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklab, 25% oklab(10 20 30), oklab(50 60 70))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30), 25% oklab(50 60 70))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30), oklab(50 60 70) 25%)" should set the property value assert_equals: serialization should be canonical expected "oklab(20 30 40)" but got "color-mix(oklab, oklab(10 20 30), oklab(50 60 70) 25%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30) 25%, oklab(50 60 70) 75%)" should set the property value assert_equals: serialization should be canonical expected "oklab(40 50 60)" but got "color-mix(oklab, oklab(10 20 30) 25%, oklab(50 60 70) 75%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30) 30%, oklab(50 60 70) 90%)" should set the property value assert_equals: serialization should be canonical expected "oklab(40 50 60)" but got "color-mix(oklab, oklab(10 20 30) 30%, oklab(50 60 70) 90%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30) 12.5%, oklab(50 60 70) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "oklab(40 50 60 / 0.5)" but got "color-mix(oklab, oklab(10 20 30) 12.5%, oklab(50 60 70) 37.5%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30) 0%, oklab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "oklab(50 60 70)" but got "color-mix(oklab, oklab(10 20 30) 0%, oklab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4), oklab(50 60 70 / .8))" should set the property value assert_equals: serialization should be canonical expected "oklab(36.666664 46.666664 56.666664 / 0.6)" but got "color-mix(oklab, oklab(10 20 30 / 0.4), oklab(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4) 25%, oklab(50 60 70 / .8))" should set the property value assert_equals: serialization should be canonical expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "color-mix(oklab, oklab(10 20 30 / 0.4) 25%, oklab(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in oklab, 25% oklab(10 20 30 / .4), oklab(50 60 70 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4), 25% oklab(50 60 70 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4), oklab(50 60 70 / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "oklab(26 36 46 / 0.5)" but got "color-mix(oklab, oklab(10 20 30 / 0.4), oklab(50 60 70 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4) 25%, oklab(50 60 70 / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "color-mix(oklab, oklab(10 20 30 / 0.4) 25%, oklab(50 60 70 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4) 30%, oklab(50 60 70 / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "oklab(44.285713 54.285717 64.28571 / 0.7)" but got "color-mix(oklab, oklab(10 20 30 / 0.4) 30%, oklab(50 60 70 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4) 12.5%, oklab(50 60 70 / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "oklab(44.285713 54.285717 64.28571 / 0.35)" but got "color-mix(oklab, oklab(10 20 30 / 0.4) 12.5%, oklab(50 60 70 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / .4) 0%, oklab(50 60 70 / .8))" should set the property value assert_equals: serialization should be canonical expected "oklab(50 60 70 / 0.8)" but got "color-mix(oklab, oklab(10 20 30 / 0.4) 0%, oklab(50 60 70 / 0.8))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(none none none), oklab(none none none))" should set the property value assert_equals: serialization should be canonical expected "oklab(none none none)" but got "color-mix(oklab, oklab(none none none), oklab(none none none))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(none none none), oklab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "oklab(50 60 70)" but got "color-mix(oklab, oklab(none none none), oklab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30), oklab(none none none))" should set the property value assert_equals: serialization should be canonical expected "oklab(10 20 30)" but got "color-mix(oklab, oklab(10 20 30), oklab(none none none))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 none), oklab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "oklab(30 40 70)" but got "color-mix(oklab, oklab(10 20 none), oklab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30), oklab(50 60 none))" should set the property value assert_equals: serialization should be canonical expected "oklab(30 40 30)" but got "color-mix(oklab, oklab(10 20 30), oklab(50 60 none))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(none 20 30), oklab(50 none 70))" should set the property value assert_equals: serialization should be canonical expected "oklab(50 20 50)" but got "color-mix(oklab, oklab(none 20 30), oklab(50 none 70))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70))" should set the property value assert_equals: serialization should be canonical expected "oklab(30 40 50)" but got "color-mix(oklab, oklab(10 20 30 / none), oklab(50 60 70))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70 / 0.5))" should set the property value assert_equals: serialization should be canonical expected "oklab(30 40 50 / 0.5)" but got "color-mix(oklab, oklab(10 20 30 / none), oklab(50 60 70 / 0.5))"
-FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70 / none))" should set the property value assert_equals: serialization should be canonical expected "oklab(30 40 50 / none)" but got "color-mix(oklab, oklab(10 20 30 / none), oklab(50 60 70 / none))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.3 0.4 0.5)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3), color(srgb 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.4 0.5 0.6)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3) 25%, color(srgb 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb, 25% color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.2 0.3 0.4)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3), color(srgb 0.5 0.6 0.7) 25%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), 25% color(srgb .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.4 0.5 0.6)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3) 25%, color(srgb 0.5 0.6 0.7) 75%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 30%, color(srgb .5 .6 .7) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.4 0.5 0.6)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3) 30%, color(srgb 0.5 0.6 0.7) 90%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 12.5%, color(srgb .5 .6 .7) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.4 0.5 0.6 / 0.5)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3) 12.5%, color(srgb 0.5 0.6 0.7) 37.5%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 0%, color(srgb .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.5 0.6 0.7)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3) 0%, color(srgb 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .5), color(srgb .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.5), color(srgb 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.4) 25%, color(srgb 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in srgb, 25% color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.26000002 0.36 0.46 / 0.5)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.4), color(srgb 0.5 0.6 0.7 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4), 25% color(srgb .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.4) 25%, color(srgb 0.5 0.6 0.7 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 30%, color(srgb .5 .6 .7 / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.4) 30%, color(srgb 0.5 0.6 0.7 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 12.5%, color(srgb .5 .6 .7 / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.4) 12.5%, color(srgb 0.5 0.6 0.7 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 0%, color(srgb .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.5 0.6 0.7 / 0.8)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / 0.4) 0%, color(srgb 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb 2 3 4 / 5), color(srgb 4 6 8 / 10))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 3 4.5 6)" but got "color-mix(srgb, color(srgb 2 3 4), color(srgb 4 6 8))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb -2 -3 -4), color(srgb -4 -6 -8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb -3 -4.5 -6)" but got "color-mix(srgb, color(srgb -2 -3 -4), color(srgb -4 -6 -8))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb -2 -3 -4 / -5), color(srgb -4 -6 -8 / -10))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0 0 0 / 0)" but got "color-mix(srgb, color(srgb -2 -3 -4 / 0), color(srgb -4 -6 -8 / 0))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb none none none), color(srgb none none none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb none none none)" but got "color-mix(srgb, color(srgb none none none), color(srgb none none none))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb none none none), color(srgb .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.5 0.6 0.7)" but got "color-mix(srgb, color(srgb none none none), color(srgb 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), color(srgb none none none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.1 0.2 0.3)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3), color(srgb none none none))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 none), color(srgb .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.3 0.4 0.7)" but got "color-mix(srgb, color(srgb 0.1 0.2 none), color(srgb 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.3 0.4 0.3)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3), color(srgb 0.5 0.6 none))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb none .2 .3), color(srgb .5 none .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.5 0.2 0.5)" but got "color-mix(srgb, color(srgb none 0.2 0.3), color(srgb 0.5 none 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.3 0.4 0.5)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / none), color(srgb 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7 / 0.5))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.3 0.4 0.5 / 0.5)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / none), color(srgb 0.5 0.6 0.7 / 0.5))"
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7 / none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb 0.3 0.4 0.5 / none)" but got "color-mix(srgb, color(srgb 0.1 0.2 0.3 / none), color(srgb 0.5 0.6 0.7 / none))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.3 0.4 0.5)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3), color(srgb-linear 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.4 0.5 0.6)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3) 25%, color(srgb-linear 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.2 0.3 0.4)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3), color(srgb-linear 0.5 0.6 0.7) 25%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), 25% color(srgb-linear .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.4 0.5 0.6)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3) 25%, color(srgb-linear 0.5 0.6 0.7) 75%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 30%, color(srgb-linear .5 .6 .7) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.4 0.5 0.6)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3) 30%, color(srgb-linear 0.5 0.6 0.7) 90%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 12.5%, color(srgb-linear .5 .6 .7) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.4 0.5 0.6 / 0.5)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3) 12.5%, color(srgb-linear 0.5 0.6 0.7) 37.5%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 0%, color(srgb-linear .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.5 0.6 0.7)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3) 0%, color(srgb-linear 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .5), color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.5), color(srgb-linear 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.4) 25%, color(srgb-linear 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.26000002 0.36 0.46 / 0.5)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.4), color(srgb-linear 0.5 0.6 0.7 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), 25% color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.4) 25%, color(srgb-linear 0.5 0.6 0.7 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 30%, color(srgb-linear .5 .6 .7 / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.4) 30%, color(srgb-linear 0.5 0.6 0.7 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 12.5%, color(srgb-linear .5 .6 .7 / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.4) 12.5%, color(srgb-linear 0.5 0.6 0.7 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 0%, color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.5 0.6 0.7 / 0.8)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / 0.4) 0%, color(srgb-linear 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear 2 3 4 / 5), color(srgb-linear 4 6 8 / 10))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 3 4.5 6)" but got "color-mix(srgb-linear, color(srgb-linear 2 3 4), color(srgb-linear 4 6 8))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear -2 -3 -4), color(srgb-linear -4 -6 -8))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear -3 -4.5 -6)" but got "color-mix(srgb-linear, color(srgb-linear -2 -3 -4), color(srgb-linear -4 -6 -8))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear -2 -3 -4 / -5), color(srgb-linear -4 -6 -8 / -10))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0 0 0 / 0)" but got "color-mix(srgb-linear, color(srgb-linear -2 -3 -4 / 0), color(srgb-linear -4 -6 -8 / 0))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear none none none), color(srgb-linear none none none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear none none none)" but got "color-mix(srgb-linear, color(srgb-linear none none none), color(srgb-linear none none none))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear none none none), color(srgb-linear .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.5 0.6 0.7)" but got "color-mix(srgb-linear, color(srgb-linear none none none), color(srgb-linear 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear none none none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.1 0.2 0.3)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3), color(srgb-linear none none none))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 none), color(srgb-linear .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.3 0.4 0.7)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 none), color(srgb-linear 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.3 0.4 0.3)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3), color(srgb-linear 0.5 0.6 none))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear none .2 .3), color(srgb-linear .5 none .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.5 0.2 0.5)" but got "color-mix(srgb-linear, color(srgb-linear none 0.2 0.3), color(srgb-linear 0.5 none 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.3 0.4 0.5)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / none), color(srgb-linear 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7 / 0.5))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.3 0.4 0.5 / 0.5)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / none), color(srgb-linear 0.5 0.6 0.7 / 0.5))"
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7 / none))" should set the property value assert_equals: serialization should be canonical expected "color(srgb-linear 0.3 0.4 0.5 / none)" but got "color-mix(srgb-linear, color(srgb-linear 0.1 0.2 0.3 / none), color(srgb-linear 0.5 0.6 0.7 / none))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 25%, color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz, 25% color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.2 0.3 0.4)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 0.5 0.6 0.7) 25%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), 25% color(xyz .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 25%, color(xyz-d65 0.5 0.6 0.7) 75%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 30%, color(xyz .5 .6 .7) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 30%, color(xyz-d65 0.5 0.6 0.7) 90%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 12.5%, color(xyz .5 .6 .7) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6 / 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 12.5%, color(xyz-d65 0.5 0.6 0.7) 37.5%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 0%, color(xyz .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.6 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 0%, color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .5), color(xyz .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.5), color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 25%, color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz, 25% color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4), color(xyz-d65 0.5 0.6 0.7 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4), 25% color(xyz .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 25%, color(xyz-d65 0.5 0.6 0.7 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 30%, color(xyz .5 .6 .7 / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 30%, color(xyz-d65 0.5 0.6 0.7 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 12.5%, color(xyz .5 .6 .7 / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 12.5%, color(xyz-d65 0.5 0.6 0.7 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 0%, color(xyz .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.6 0.7 / 0.8)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 0%, color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz 2 3 4 / 5), color(xyz 4 6 8 / 10))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 3 4.5 6)" but got "color-mix(xyz-d65, color(xyz-d65 2 3 4), color(xyz-d65 4 6 8))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz -2 -3 -4), color(xyz -4 -6 -8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 -3 -4.5 -6)" but got "color-mix(xyz-d65, color(xyz-d65 -2 -3 -4), color(xyz-d65 -4 -6 -8))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz -2 -3 -4 / -5), color(xyz -4 -6 -8 / -10))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0 0 0 / 0)" but got "color-mix(xyz-d65, color(xyz-d65 -2 -3 -4 / 0), color(xyz-d65 -4 -6 -8 / 0))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz none none none), color(xyz none none none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 none none none)" but got "color-mix(xyz-d65, color(xyz-d65 none none none), color(xyz-d65 none none none))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz none none none), color(xyz .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.6 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 none none none), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), color(xyz none none none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.1 0.2 0.3)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 none none none))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 none), color(xyz .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 none), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.3)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 0.5 0.6 none))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz none .2 .3), color(xyz .5 none .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.2 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 none 0.2 0.3), color(xyz-d65 0.5 none 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / none), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7 / 0.5))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5 / 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / none), color(xyz-d65 0.5 0.6 0.7 / 0.5))"
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7 / none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5 / none)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / none), color(xyz-d65 0.5 0.6 0.7 / none))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.3 0.4 0.5)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3), color(xyz-d50 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.4 0.5 0.6)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3) 25%, color(xyz-d50 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.2 0.3 0.4)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3), color(xyz-d50 0.5 0.6 0.7) 25%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), 25% color(xyz-d50 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.4 0.5 0.6)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3) 25%, color(xyz-d50 0.5 0.6 0.7) 75%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 30%, color(xyz-d50 .5 .6 .7) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.4 0.5 0.6)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3) 30%, color(xyz-d50 0.5 0.6 0.7) 90%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 12.5%, color(xyz-d50 .5 .6 .7) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.4 0.5 0.6 / 0.5)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3) 12.5%, color(xyz-d50 0.5 0.6 0.7) 37.5%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 0%, color(xyz-d50 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.5 0.6 0.7)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3) 0%, color(xyz-d50 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .5), color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.5), color(xyz-d50 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.4) 25%, color(xyz-d50 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.26000002 0.36 0.46 / 0.5)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.4), color(xyz-d50 0.5 0.6 0.7 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), 25% color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.4) 25%, color(xyz-d50 0.5 0.6 0.7 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 30%, color(xyz-d50 .5 .6 .7 / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.4) 30%, color(xyz-d50 0.5 0.6 0.7 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 12.5%, color(xyz-d50 .5 .6 .7 / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.4) 12.5%, color(xyz-d50 0.5 0.6 0.7 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 0%, color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.5 0.6 0.7 / 0.8)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / 0.4) 0%, color(xyz-d50 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 2 3 4 / 5), color(xyz-d50 4 6 8 / 10))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 3 4.5 6)" but got "color-mix(xyz-d50, color(xyz-d50 2 3 4), color(xyz-d50 4 6 8))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 -2 -3 -4), color(xyz-d50 -4 -6 -8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 -3 -4.5 -6)" but got "color-mix(xyz-d50, color(xyz-d50 -2 -3 -4), color(xyz-d50 -4 -6 -8))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 -2 -3 -4 / -5), color(xyz-d50 -4 -6 -8 / -10))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0 0 0 / 0)" but got "color-mix(xyz-d50, color(xyz-d50 -2 -3 -4 / 0), color(xyz-d50 -4 -6 -8 / 0))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 none none none), color(xyz-d50 none none none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 none none none)" but got "color-mix(xyz-d50, color(xyz-d50 none none none), color(xyz-d50 none none none))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 none none none), color(xyz-d50 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.5 0.6 0.7)" but got "color-mix(xyz-d50, color(xyz-d50 none none none), color(xyz-d50 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 none none none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.1 0.2 0.3)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3), color(xyz-d50 none none none))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 none), color(xyz-d50 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.3 0.4 0.7)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 none), color(xyz-d50 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.3 0.4 0.3)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3), color(xyz-d50 0.5 0.6 none))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 none .2 .3), color(xyz-d50 .5 none .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.5 0.2 0.5)" but got "color-mix(xyz-d50, color(xyz-d50 none 0.2 0.3), color(xyz-d50 0.5 none 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.3 0.4 0.5)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / none), color(xyz-d50 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7 / 0.5))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.3 0.4 0.5 / 0.5)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / none), color(xyz-d50 0.5 0.6 0.7 / 0.5))"
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7 / none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d50 0.3 0.4 0.5 / none)" but got "color-mix(xyz-d50, color(xyz-d50 0.1 0.2 0.3 / none), color(xyz-d50 0.5 0.6 0.7 / none))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 25%, color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.2 0.3 0.4)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 0.5 0.6 0.7) 25%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), 25% color(xyz-d65 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 25%, color(xyz-d65 0.5 0.6 0.7) 75%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 30%, color(xyz-d65 .5 .6 .7) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 30%, color(xyz-d65 0.5 0.6 0.7) 90%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 12.5%, color(xyz-d65 .5 .6 .7) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.4 0.5 0.6 / 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 12.5%, color(xyz-d65 0.5 0.6 0.7) 37.5%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 0%, color(xyz-d65 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.6 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3) 0%, color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .5), color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3461539 0.4461539 0.5461539 / 0.65)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.5), color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 25%, color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8) 25%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.26000002 0.36 0.46 / 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4), color(xyz-d65 0.5 0.6 0.7 / 0.8) 25%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), 25% color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8) 75%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 25%, color(xyz-d65 0.5 0.6 0.7 / 0.8) 75%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 30%, color(xyz-d65 .5 .6 .7 / .8) 90%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 30%, color(xyz-d65 0.5 0.6 0.7 / 0.8) 90%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 12.5%, color(xyz-d65 .5 .6 .7 / .8) 37.5%)" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.44285715 0.54285717 0.64285713 / 0.35)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 12.5%, color(xyz-d65 0.5 0.6 0.7 / 0.8) 37.5%)"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 0%, color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.6 0.7 / 0.8)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / 0.4) 0%, color(xyz-d65 0.5 0.6 0.7 / 0.8))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 2 3 4 / 5), color(xyz-d65 4 6 8 / 10))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 3 4.5 6)" but got "color-mix(xyz-d65, color(xyz-d65 2 3 4), color(xyz-d65 4 6 8))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 -2 -3 -4), color(xyz-d65 -4 -6 -8))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 -3 -4.5 -6)" but got "color-mix(xyz-d65, color(xyz-d65 -2 -3 -4), color(xyz-d65 -4 -6 -8))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 -2 -3 -4 / -5), color(xyz-d65 -4 -6 -8 / -10))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0 0 0 / 0)" but got "color-mix(xyz-d65, color(xyz-d65 -2 -3 -4 / 0), color(xyz-d65 -4 -6 -8 / 0))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 none none none), color(xyz-d65 none none none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 none none none)" but got "color-mix(xyz-d65, color(xyz-d65 none none none), color(xyz-d65 none none none))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 none none none), color(xyz-d65 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.6 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 none none none), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 none none none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.1 0.2 0.3)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 none none none))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 none), color(xyz-d65 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.7)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 none), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.3)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3), color(xyz-d65 0.5 0.6 none))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 none .2 .3), color(xyz-d65 .5 none .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.5 0.2 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 none 0.2 0.3), color(xyz-d65 0.5 none 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / none), color(xyz-d65 0.5 0.6 0.7))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7 / 0.5))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5 / 0.5)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / none), color(xyz-d65 0.5 0.6 0.7 / 0.5))"
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / none), color(xyz-d65 .5 .6 .7 / none))" should set the property value assert_equals: serialization should be canonical expected "color(xyz-d65 0.3 0.4 0.5 / none)" but got "color-mix(xyz-d65, color(xyz-d65 0.1 0.2 0.3 / none), color(xyz-d65 0.5 0.6 0.7 / none))"
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-color-mix-function.html b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-color-mix-function.html
index 76209b1..7751c2c 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-color-mix-function.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-color/parsing/color-valid-color-mix-function.html
@@ -15,305 +15,298 @@
 <body>
 <div id="target"></div>
 <script>
-    function canonicalize(value)
-    {
-        const property = 'color';
-        var div = document.createElement("div");
-        document.body.appendChild(div);
-        div.style.setProperty(property, value);
-        var computedValue = getComputedStyle(div).getPropertyValue(property);
-        document.body.removeChild(div);
-        return computedValue;
-    }
+    // https://github.com/w3c/csswg-drafts/issues/7302: Specified values shouldn't resolve keyword colors or calc values
+    test_valid_value(`color`, `color-mix(in srgb, red, blue)`, `color-mix(in srgb, red, blue)`);
+    test_valid_value(`color`, `color-mix(in hsl, red, blue)`, `color-mix(in hsl, red, blue)`);
+    test_valid_value(`color`, `color-mix(in hsl, red calc(20%), blue)`, `color-mix(in hsl, red calc(20%), blue)`);
+    test_valid_value(`color`, `color-mix(in hsl, red calc(var(--v)*1%), blue)`, `color-mix(in hsl, red calc(var(--v)*1%), blue)`);
+    test_valid_value(`color`, `color-mix(in hsl, currentcolor, blue)`, `color-mix(in hsl, currentcolor, blue)`);
+    test_valid_value(`color`, `color-mix(in hsl, red 60%, blue 40%)`, `color-mix(in hsl, red 60%, blue 40%)`);
+    test_valid_value(`color`, `color-mix(in lch decreasing hue, red, hsl(120, 100%, 50%))`, `color-mix(in lch decreasing hue, red, rgb(0, 255, 0))`);
 
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `rgb(84, 92, 61)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))`, `rgb(112, 106, 67)`);
-    test_valid_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `rgb(112, 106, 67)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))`, `rgb(61, 73, 54)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)`, `rgb(61, 73, 54)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)`, `rgb(112, 106, 67)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)`, `rgb(112, 106, 67)`); // Scale down > 100% sum.
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)`, `rgba(112, 106, 67, 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))`, `rgb(133, 102, 71)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46), rgb(133, 102, 71))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71))`);
+    test_valid_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), 25% hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46), rgb(133, 102, 71) 25%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%) 25%)`, `color-mix(in hsl, rgb(46, 56, 46), rgb(133, 102, 71) 25%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%) 75%)`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgb(133, 102, 71) 75%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 30%, hsl(30deg 30% 40%) 90%)`, `color-mix(in hsl, rgb(46, 56, 46) 30%, rgb(133, 102, 71) 90%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 12.5%, hsl(30deg 30% 40%) 37.5%)`, `color-mix(in hsl, rgb(46, 56, 46) 12.5%, rgb(133, 102, 71) 37.5%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%))`, `color-mix(in hsl, rgb(46, 56, 46) 0%, rgb(133, 102, 71))`);
 
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `rgba(95, 105, 65, 0.6)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))`, `rgba(108, 103, 66, 0.85)`);
-    test_valid_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `rgba(121, 114, 69, 0.7)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))`, `rgba(68, 84, 59, 0.5)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)`, `rgba(68, 84, 59, 0.5)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)`, `rgba(121, 114, 69, 0.7)`);
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)`, `rgba(121, 114, 69, 0.7)`); // Scale down > 100% sum.
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)`, `rgba(121, 114, 69, 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))`, `rgba(133, 102, 71, 0.8)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4), rgba(133, 102, 71, 0.8))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgb(46, 56, 46) 25%, rgba(133, 102, 71, 0.8))`);
+    test_valid_value(`color`, `color-mix(in hsl, 25% hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 25%, rgba(133, 102, 71, 0.8))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), 25% hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4), rgba(133, 102, 71, 0.8) 25%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4), hsl(30deg 30% 40% / .8) 25%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4), rgba(133, 102, 71, 0.8) 25%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 25%, hsl(30deg 30% 40% / .8) 75%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 25%, rgba(133, 102, 71, 0.8) 75%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 30%, hsl(30deg 30% 40% / .8) 90%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 30%, rgba(133, 102, 71, 0.8) 90%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 12.5%, hsl(30deg 30% 40% / .8) 37.5%)`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 12.5%, rgba(133, 102, 71, 0.8) 37.5%)`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 10% 20% / .4) 0%, hsl(30deg 30% 40% / .8))`, `color-mix(in hsl, rgba(46, 56, 46, 0.4) 0%, rgba(133, 102, 71, 0.8))`);
 
-    test_valid_value(`color`, `color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, canonicalize(`hsl(50deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, canonicalize(`hsl(50deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, canonicalize(`hsl(10deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, canonicalize(`hsl(10deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, canonicalize(`hsl(350deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, canonicalize(`hsl(350deg 50% 50%)`));
+    test_valid_value(`color`, `color-mix(in hsl, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl, rgb(191, 149, 64), rgb(191, 191, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl, rgb(191, 191, 64), rgb(191, 149, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl, rgb(191, 170, 64), rgb(191, 64, 128))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 128), rgb(191, 170, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl, rgb(191, 106, 64), rgb(191, 64, 149))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 149), rgb(191, 106, 64))`);
 
-    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, canonicalize(`hsl(50deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, canonicalize(`hsl(50deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, canonicalize(`hsl(10deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, canonicalize(`hsl(10deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, canonicalize(`hsl(350deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, canonicalize(`hsl(350deg 50% 50%)`));
+    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl, rgb(191, 149, 64), rgb(191, 191, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl, rgb(191, 191, 64), rgb(191, 149, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl, rgb(191, 170, 64), rgb(191, 64, 128))`);
+    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 128), rgb(191, 170, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl, rgb(191, 106, 64), rgb(191, 64, 149))`);
+    test_valid_value(`color`, `color-mix(in hsl shorter hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl, rgb(191, 64, 149), rgb(191, 106, 64))`);
 
-    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, canonicalize(`hsl(230deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, canonicalize(`hsl(230deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, canonicalize(`hsl(190deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, canonicalize(`hsl(190deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, canonicalize(`hsl(170deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, canonicalize(`hsl(170deg 50% 50%)`));
+    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 149, 64), rgb(191, 191, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 191, 64), rgb(191, 149, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 170, 64), rgb(191, 64, 128))`);
+    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 64, 128), rgb(191, 170, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 106, 64), rgb(191, 64, 149))`);
+    test_valid_value(`color`, `color-mix(in hsl longer hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl longer hue, rgb(191, 64, 149), rgb(191, 106, 64))`);
 
-    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, canonicalize(`hsl(50deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, canonicalize(`hsl(230deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, canonicalize(`hsl(190deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, canonicalize(`hsl(10deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, canonicalize(`hsl(170deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, canonicalize(`hsl(350deg 50% 50%)`));
+    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 149, 64), rgb(191, 191, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 191, 64), rgb(191, 149, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 170, 64), rgb(191, 64, 128))`);
+    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 64, 128), rgb(191, 170, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 106, 64), rgb(191, 64, 149))`);
+    test_valid_value(`color`, `color-mix(in hsl increasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl increasing hue, rgb(191, 64, 149), rgb(191, 106, 64))`);
 
-    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, canonicalize(`hsl(230deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, canonicalize(`hsl(50deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, canonicalize(`hsl(10deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, canonicalize(`hsl(190deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, canonicalize(`hsl(350deg 50% 50%)`));
-    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, canonicalize(`hsl(170deg 50% 50%)`));
+    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(40deg 50% 50%), hsl(60deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 149, 64), rgb(191, 191, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(60deg 50% 50%), hsl(40deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 191, 64), rgb(191, 149, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(50deg 50% 50%), hsl(330deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 170, 64), rgb(191, 64, 128))`);
+    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(330deg 50% 50%), hsl(50deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 64, 128), rgb(191, 170, 64))`);
+    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(20deg 50% 50%), hsl(320deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 106, 64), rgb(191, 64, 149))`);
+    test_valid_value(`color`, `color-mix(in hsl decreasing hue, hsl(320deg 50% 50%), hsl(20deg 50% 50%))`, `color-mix(in hsl decreasing hue, rgb(191, 64, 149), rgb(191, 106, 64))`);
 
-    test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(none none none))`, canonicalize(`hsl(none none none)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))`, canonicalize(`hsl(30deg 40% 80%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))`, canonicalize(`hsl(120deg 20% 40%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))`, canonicalize(`hsl(75deg 30% 60%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))`, canonicalize(`hsl(75deg 20% 40%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))`, canonicalize(`hsl(30deg 20% 60%)`));
+    test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(none none none))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(0, 0, 0))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(none none none), hsl(30deg 40% 80%))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(224, 204, 184))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(none none none))`, `color-mix(in hsl, rgb(82, 122, 82), rgb(0, 0, 0))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% none), hsl(30deg 40% 60%))`, `color-mix(in hsl, rgb(0, 0, 0), rgb(194, 153, 112))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 20% 40%), hsl(30deg 20% none))`, `color-mix(in hsl, rgb(82, 122, 82), rgb(0, 0, 0))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(none 20% 40%), hsl(30deg none 80%))`, `color-mix(in hsl, rgb(122, 82, 82), rgb(204, 204, 204))`);
 
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))`, canonicalize(`hsl(60deg 40% 40%)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))`, canonicalize(`hsl(60deg 40% 40% / 0.5)`));
-    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))`, canonicalize(`hsl(60deg 40% 40% / none)`));
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40%))`, `color-mix(in hsl, rgba(61, 143, 61, 0), rgb(143, 61, 61))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / 0.5))`, `color-mix(in hsl, rgba(61, 143, 61, 0), rgba(143, 61, 61, 0.5))`);
+    test_valid_value(`color`, `color-mix(in hsl, hsl(120deg 40% 40% / none), hsl(0deg 40% 40% / none))`, `color-mix(in hsl, rgba(61, 143, 61, 0), rgba(143, 61, 61, 0))`);
 
-    test_valid_value(`color`, `color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `rgb(0, 249, 66)`); // Naive clip based mapping would give rgb(0, 255, 0).
-    test_valid_value(`color`, `color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 150, 255).
-    test_valid_value(`color`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `rgb(42, 0, 34)`); // Naive clip based mapping would give rgb(90, 0, 76). NOTE: 0% lightness in Lab/LCH does not automatically correspond with sRGB black,
-    test_valid_value(`color`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 150, 255).
-    test_valid_value(`color`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `rgb(42, 0, 34)`); // Naive clip based mapping would give rgb(90, 0, 76). NOTE: 0% lightness in Lab/LCH does not automatically correspond with sRGB black,
-    test_valid_value(`color`, `color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 92, 255).
-    test_valid_value(`color`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `rgb(0, 0, 0)`); // Naive clip based mapping would give rgb(19, 0, 24).
-    test_valid_value(`color`, `color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 91, 255).
-    test_valid_value(`color`, `color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `rgb(0, 0, 0)`); // Naive clip based mapping would give rgb(20, 0, 24).
+    test_valid_value(`color`, `color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`);
 
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(153, 115, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(153, 115, 77) 25%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)`, `color-mix(in hwb, rgb(26, 204, 26), rgb(153, 115, 77) 25%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)`, `color-mix(in hwb, rgb(26, 204, 26) 25%, rgb(153, 115, 77) 75%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)`, `color-mix(in hwb, rgb(26, 204, 26) 30%, rgb(153, 115, 77) 90%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)`, `color-mix(in hwb, rgb(26, 204, 26) 12.5%, rgb(153, 115, 77) 37.5%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 204, 26) 0%, rgb(153, 115, 77))`);
 
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `rgb(147, 179, 52)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%))`, `rgb(166, 153, 64)`);
-    test_valid_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20%), hwb(30deg 30% 40%))`, `rgb(166, 153, 64)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40%))`, `rgb(96, 191, 39)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% 40%) 25%)`, `rgb(96, 191, 39)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 25%, hwb(30deg 30% 40%) 75%)`, `rgb(166, 153, 64)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 30%, hwb(30deg 30% 40%) 90%)`, `rgb(166, 153, 64)`); // Scale down > 100% sum.
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 12.5%, hwb(30deg 30% 40%) 37.5%)`, `rgba(166, 153, 64, 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%))`, `rgb(153, 115, 77)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4), rgba(153, 115, 77, 0.8))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8))`);
+    test_valid_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgb(26, 204, 26), rgba(153, 115, 77, 0.8) 25%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4), rgba(153, 115, 77, 0.8) 25%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 25%, rgba(153, 115, 77, 0.8) 75%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 30%, rgba(153, 115, 77, 0.8) 90%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 12.5%, rgba(153, 115, 77, 0.8) 37.5%)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))`, `color-mix(in hwb, rgba(26, 204, 26, 0.4) 0%, rgba(153, 115, 77, 0.8))`);
 
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `rgba(143, 170, 60, 0.6)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8))`, `rgba(160, 149, 70, 0.7)`);
-    test_valid_value(`color`, `color-mix(in hwb, 25% hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8))`, `rgba(160, 149, 70, 0.7)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), 25% hwb(30deg 30% 40% / .8))`, `rgba(95, 193, 37, 0.95)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4), hwb(30deg 30% 40% / .8) 25%)`, `rgba(98, 184, 46, 0.5)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 25%, hwb(30deg 30% 40% / .8) 75%)`, `rgba(160, 149, 70, 0.7)`);
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 30%, hwb(30deg 30% 40% / .8) 90%)`, `rgba(160, 149, 70, 0.7)`); // Scale down > 100% sum.
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 12.5%, hwb(30deg 30% 40% / .8) 37.5%)`, `rgba(160, 149, 70, 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / .4) 0%, hwb(30deg 30% 40% / .8))`, `rgba(153, 115, 77, 0.8)`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb, rgb(153, 128, 77), rgb(153, 153, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb, rgb(153, 153, 77), rgb(153, 128, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb, rgb(153, 140, 77), rgb(153, 77, 115))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 115), rgb(153, 140, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb, rgb(153, 102, 77), rgb(153, 77, 127))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 127), rgb(153, 102, 77))`);
 
-    test_valid_value(`color`, `color-mix(in hwb, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, canonicalize(`hwb(50deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, canonicalize(`hwb(50deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, canonicalize(`hwb(10deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, canonicalize(`hwb(10deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, canonicalize(`hwb(350deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, canonicalize(`hwb(350deg 30% 40%)`));
+    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb, rgb(153, 128, 77), rgb(153, 153, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb, rgb(153, 153, 77), rgb(153, 128, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb, rgb(153, 140, 77), rgb(153, 77, 115))`);
+    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 115), rgb(153, 140, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb, rgb(153, 102, 77), rgb(153, 77, 127))`);
+    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb, rgb(153, 77, 127), rgb(153, 102, 77))`);
 
-    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, canonicalize(`hwb(50deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, canonicalize(`hwb(50deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, canonicalize(`hwb(10deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, canonicalize(`hwb(10deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, canonicalize(`hwb(350deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb shorter hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, canonicalize(`hwb(350deg 30% 40%)`));
+    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 128, 77), rgb(153, 153, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 153, 77), rgb(153, 128, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 140, 77), rgb(153, 77, 115))`);
+    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 77, 115), rgb(153, 140, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 102, 77), rgb(153, 77, 127))`);
+    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb longer hue, rgb(153, 77, 127), rgb(153, 102, 77))`);
 
-    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, canonicalize(`hwb(230deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, canonicalize(`hwb(230deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, canonicalize(`hwb(190deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, canonicalize(`hwb(190deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, canonicalize(`hwb(170deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb longer hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, canonicalize(`hwb(170deg 30% 40%)`));
+    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 128, 77), rgb(153, 153, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 153, 77), rgb(153, 128, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 140, 77), rgb(153, 77, 115))`);
+    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 77, 115), rgb(153, 140, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 102, 77), rgb(153, 77, 127))`);
+    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb increasing hue, rgb(153, 77, 127), rgb(153, 102, 77))`);
 
-    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, canonicalize(`hwb(50deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, canonicalize(`hwb(230deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, canonicalize(`hwb(190deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, canonicalize(`hwb(10deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, canonicalize(`hwb(170deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb increasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, canonicalize(`hwb(350deg 30% 40%)`));
+    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 128, 77), rgb(153, 153, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 153, 77), rgb(153, 128, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 140, 77), rgb(153, 77, 115))`);
+    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 77, 115), rgb(153, 140, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 102, 77), rgb(153, 77, 127))`);
+    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, `color-mix(in hwb decreasing hue, rgb(153, 77, 127), rgb(153, 102, 77))`);
 
-    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(40deg 30% 40%), hwb(60deg 30% 40%))`, canonicalize(`hwb(230deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(60deg 30% 40%), hwb(40deg 30% 40%))`, canonicalize(`hwb(50deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(50deg 30% 40%), hwb(330deg 30% 40%))`, canonicalize(`hwb(10deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(330deg 30% 40%), hwb(50deg 30% 40%))`, canonicalize(`hwb(190deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(20deg 30% 40%), hwb(320deg 30% 40%))`, canonicalize(`hwb(350deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb decreasing hue, hwb(320deg 30% 40%), hwb(20deg 30% 40%))`, canonicalize(`hwb(170deg 30% 40%)`));
+    test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(none none none))`, `color-mix(in hwb, rgb(255, 0, 0), rgb(255, 0, 0))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(255, 0, 0), rgb(153, 115, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(255, 0, 0))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgb(26, 255, 26), rgb(153, 115, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))`, `color-mix(in hwb, rgb(26, 204, 26), rgb(255, 166, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))`, `color-mix(in hwb, rgb(204, 26, 26), rgb(153, 77, 0))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))`, `color-mix(in hwb, rgba(26, 204, 26, 0), rgb(153, 115, 77))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))`, `color-mix(in hwb, rgba(26, 204, 26, 0), rgba(153, 115, 77, 0.5))`);
+    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))`, `color-mix(in hwb, rgba(26, 204, 26, 0), rgba(153, 115, 77, 0))`);
 
-    test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(none none none))`, canonicalize(`hwb(none none none)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(none none none), hwb(30deg 30% 40%))`, canonicalize(`hwb(30deg 30% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(none none none))`, canonicalize(`hwb(120deg 10% 20%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% none), hwb(30deg 30% 40%))`, canonicalize(`hwb(75deg 20% 40%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20%), hwb(30deg 30% none))`, canonicalize(`hwb(75deg 20% 20%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(none 10% 20%), hwb(30deg none 40%))`, canonicalize(`hwb(30deg 10% 30%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40%))`, canonicalize(`hwb(75deg 20% 30%)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / 0.5))`, canonicalize(`hwb(75deg 20% 30% / 0.5)`));
-    test_valid_value(`color`, `color-mix(in hwb, hwb(120deg 10% 20% / none), hwb(30deg 30% 40% / none))`, canonicalize(`hwb(75deg 20% 30% / none)`));
-
-    test_valid_value(`color`, `color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `rgb(0, 249, 66)`); // Naive clip based mapping would give rgb(0, 255, 0).
-    test_valid_value(`color`, `color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 150, 255).
-    test_valid_value(`color`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `rgb(42, 0, 34)`); // Naive clip based mapping would give rgb(90, 0, 76). NOTE: 0% lightness in Lab/LCH does not automatically correspond with sRGB black,
-    test_valid_value(`color`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 150, 255).
-    test_valid_value(`color`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `rgb(42, 0, 34)`); // Naive clip based mapping would give rgb(90, 0, 76). NOTE: 0% lightness in Lab/LCH does not automatically correspond with sRGB black,
-    test_valid_value(`color`, `color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 92, 255).
-    test_valid_value(`color`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `rgb(0, 0, 0)`); // Naive clip based mapping would give rgb(19, 0, 24).
-    test_valid_value(`color`, `color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `rgb(255, 255, 255)`); // Naive clip based mapping would give rgb(255, 91, 255).
-    test_valid_value(`color`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `rgb(0, 0, 0)`); // Naive clip based mapping would give rgb(20, 0, 24).
+    test_valid_value(`color`, `color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`);
+    test_valid_value(`color`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`, `color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)`);
 
     for (const colorSpace of [ "lch", "oklch" ]) {
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 70deg))`, `${colorSpace}(30 40 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 25%, ${colorSpace}(50 60 70deg))`, `${colorSpace}(40 50 60)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 70deg))`, `${colorSpace}(40 50 60)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), 25% ${colorSpace}(50 60 70deg))`, `${colorSpace}(20 30 40)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 70deg) 25%)`, `${colorSpace}(20 30 40)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 25%, ${colorSpace}(50 60 70deg) 75%)`, `${colorSpace}(40 50 60)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 30%, ${colorSpace}(50 60 70deg) 90%)`, `${colorSpace}(40 50 60)`); // Scale down > 100% sum.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 12.5%, ${colorSpace}(50 60 70deg) 37.5%)`, `${colorSpace}(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 0%, ${colorSpace}(50 60 70deg))`, `${colorSpace}(50 60 70)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 25%, ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), 25% ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 70deg) 25%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 25%, ${colorSpace}(50 60 70deg) 75%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70) 75%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 30%, ${colorSpace}(50 60 70deg) 90%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 30%, ${colorSpace}(50 60 70) 90%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 12.5%, ${colorSpace}(50 60 70deg) 37.5%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 12.5%, ${colorSpace}(50 60 70) 37.5%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg) 0%, ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 0%, ${colorSpace}(50 60 70))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4), ${colorSpace}(50 60 70deg / .8))`, `${colorSpace}(36.666664 46.666664 50 / 0.6)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 25%, ${colorSpace}(50 60 70deg / .8))`, `${colorSpace}(44.285713 54.285717 60 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30deg / .4), ${colorSpace}(50 60 70deg / .8))`, `${colorSpace}(44.285713 54.285717 60 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4), 25% ${colorSpace}(50 60 70deg / .8))`, `${colorSpace}(26 36 40 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4), ${colorSpace}(50 60 70deg / .8) 25%)`, `${colorSpace}(26 36 40 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 25%, ${colorSpace}(50 60 70deg / .8) 75%)`, `${colorSpace}(44.285713 54.285717 60 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 30%, ${colorSpace}(50 60 70deg / .8) 90%)`, `${colorSpace}(44.285713 54.285717 60 / 0.7)`); // Scale down > 100% sum.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 12.5%, ${colorSpace}(50 60 70deg / .8) 37.5%)`, `${colorSpace}(44.285713 54.285717 60 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 0%, ${colorSpace}(50 60 70deg / .8))`, `${colorSpace}(50 60 70 / 0.8)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4), ${colorSpace}(50 60 70deg / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4), ${colorSpace}(50 60 70 / 0.8))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 25%, ${colorSpace}(50 60 70deg / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 25%, ${colorSpace}(50 60 70 / 0.8))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30deg / .4), ${colorSpace}(50 60 70deg / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 25%, ${colorSpace}(50 60 70 / 0.8))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4), 25% ${colorSpace}(50 60 70deg / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4), ${colorSpace}(50 60 70 / 0.8) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4), ${colorSpace}(50 60 70deg / .8) 25%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4), ${colorSpace}(50 60 70 / 0.8) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 25%, ${colorSpace}(50 60 70deg / .8) 75%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 25%, ${colorSpace}(50 60 70 / 0.8) 75%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 30%, ${colorSpace}(50 60 70deg / .8) 90%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 30%, ${colorSpace}(50 60 70 / 0.8) 90%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 12.5%, ${colorSpace}(50 60 70deg / .8) 37.5%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 12.5%, ${colorSpace}(50 60 70 / 0.8) 37.5%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / .4) 0%, ${colorSpace}(50 60 70deg / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 0%, ${colorSpace}(50 60 70 / 0.8))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `${colorSpace}(100 0 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `${colorSpace}(100 0 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `${colorSpace}(100 0 10)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `${colorSpace}(100 0 10)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `${colorSpace}(100 0 350)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `${colorSpace}(100 0 350)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 40), ${colorSpace}(100 0 60))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 60), ${colorSpace}(100 0 40))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 50), ${colorSpace}(100 0 330))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 330), ${colorSpace}(100 0 50))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 20), ${colorSpace}(100 0 320))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 320), ${colorSpace}(100 0 20))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `${colorSpace}(100 0 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `${colorSpace}(100 0 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `${colorSpace}(100 0 10)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `${colorSpace}(100 0 10)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `${colorSpace}(100 0 350)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `${colorSpace}(100 0 350)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 40), ${colorSpace}(100 0 60))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 60), ${colorSpace}(100 0 40))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 50), ${colorSpace}(100 0 330))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 330), ${colorSpace}(100 0 50))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 20), ${colorSpace}(100 0 320))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} shorter hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(100 0 320), ${colorSpace}(100 0 20))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `${colorSpace}(100 0 230)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `${colorSpace}(100 0 230)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `${colorSpace}(100 0 190)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `${colorSpace}(100 0 190)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `${colorSpace}(100 0 170)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `${colorSpace}(100 0 170)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 40), ${colorSpace}(100 0 60))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 60), ${colorSpace}(100 0 40))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 50), ${colorSpace}(100 0 330))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 330), ${colorSpace}(100 0 50))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 20), ${colorSpace}(100 0 320))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `color-mix(in ${colorSpace} longer hue, ${colorSpace}(100 0 320), ${colorSpace}(100 0 20))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `${colorSpace}(100 0 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `${colorSpace}(100 0 230)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `${colorSpace}(100 0 190)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `${colorSpace}(100 0 10)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `${colorSpace}(100 0 170)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `${colorSpace}(100 0 350)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 40), ${colorSpace}(100 0 60))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 60), ${colorSpace}(100 0 40))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 50), ${colorSpace}(100 0 330))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 330), ${colorSpace}(100 0 50))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 20), ${colorSpace}(100 0 320))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `color-mix(in ${colorSpace} increasing hue, ${colorSpace}(100 0 320), ${colorSpace}(100 0 20))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `${colorSpace}(100 0 230)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `${colorSpace}(100 0 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `${colorSpace}(100 0 10)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `${colorSpace}(100 0 190)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `${colorSpace}(100 0 350)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `${colorSpace}(100 0 170)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 40deg), ${colorSpace}(100 0 60deg))`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 40), ${colorSpace}(100 0 60))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 60deg), ${colorSpace}(100 0 40deg))`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 60), ${colorSpace}(100 0 40))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 50deg), ${colorSpace}(100 0 330deg))`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 50), ${colorSpace}(100 0 330))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 330deg), ${colorSpace}(100 0 50deg))`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 330), ${colorSpace}(100 0 50))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 20deg), ${colorSpace}(100 0 320deg))`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 20), ${colorSpace}(100 0 320))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 320deg), ${colorSpace}(100 0 20deg))`, `color-mix(in ${colorSpace} decreasing hue, ${colorSpace}(100 0 320), ${colorSpace}(100 0 20))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(none none none))`, `${colorSpace}(none none none)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(50 60 70deg))`, `${colorSpace}(50 60 70)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(none none none))`, `${colorSpace}(10 20 30)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 none), ${colorSpace}(50 60 70deg))`, `${colorSpace}(30 40 70)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 none))`, `${colorSpace}(30 40 30)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none 20 30deg), ${colorSpace}(50 none 70deg))`, `${colorSpace}(50 20 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / none), ${colorSpace}(50 60 70deg))`, `${colorSpace}(30 40 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / none), ${colorSpace}(50 60 70deg / 0.5))`, `${colorSpace}(30 40 50 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / none), ${colorSpace}(50 60 70deg / none))`, `${colorSpace}(30 40 50 / none)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(none none none))`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(none none none))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(none none none))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(none none none))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 none), ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 none), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg), ${colorSpace}(50 60 none))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 none))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none 20 30deg), ${colorSpace}(50 none 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(none 20 30), ${colorSpace}(50 none 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / none), ${colorSpace}(50 60 70deg))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / none), ${colorSpace}(50 60 70deg / 0.5))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / 0.5))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30deg / none), ${colorSpace}(50 60 70deg / none))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / none))`);
     }
 
     for (const colorSpace of [ "lab", "oklab" ]) {
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70))`, `${colorSpace}(30 40 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70))`, `${colorSpace}(40 50 60)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30), ${colorSpace}(50 60 70))`, `${colorSpace}(40 50 60)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), 25% ${colorSpace}(50 60 70))`, `${colorSpace}(20 30 40)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70) 25%)`, `${colorSpace}(20 30 40)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70) 75%)`, `${colorSpace}(40 50 60)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 30%, ${colorSpace}(50 60 70) 90%)`, `${colorSpace}(40 50 60)`); // Scale down > 100% sum.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 12.5%, ${colorSpace}(50 60 70) 37.5%)`, `${colorSpace}(40 50 60 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 0%, ${colorSpace}(50 60 70))`, `${colorSpace}(50 60 70)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30), ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), 25% ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70) 25%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 70) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70) 75%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 25%, ${colorSpace}(50 60 70) 75%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 30%, ${colorSpace}(50 60 70) 90%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 30%, ${colorSpace}(50 60 70) 90%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 12.5%, ${colorSpace}(50 60 70) 37.5%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 12.5%, ${colorSpace}(50 60 70) 37.5%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 0%, ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30) 0%, ${colorSpace}(50 60 70))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4), ${colorSpace}(50 60 70 / .8))`, `${colorSpace}(36.666664 46.666664 56.666664 / 0.6)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 25%, ${colorSpace}(50 60 70 / .8))`, `${colorSpace}(44.285713 54.285717 64.28571 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30 / .4), ${colorSpace}(50 60 70 / .8))`, `${colorSpace}(44.285713 54.285717 64.28571 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4), 25% ${colorSpace}(50 60 70 / .8))`, `${colorSpace}(26 36 46 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4), ${colorSpace}(50 60 70 / .8) 25%)`, `${colorSpace}(26 36 46 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 25%, ${colorSpace}(50 60 70 / .8) 75%)`, `${colorSpace}(44.285713 54.285717 64.28571 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 30%, ${colorSpace}(50 60 70 / .8) 90%)`, `${colorSpace}(44.285713 54.285717 64.28571 / 0.7)`); // Scale down > 100% sum.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 12.5%, ${colorSpace}(50 60 70 / .8) 37.5%)`, `${colorSpace}(44.285713 54.285717 64.28571 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 0%, ${colorSpace}(50 60 70 / .8))`, `${colorSpace}(50 60 70 / 0.8)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4), ${colorSpace}(50 60 70 / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4), ${colorSpace}(50 60 70 / 0.8))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 25%, ${colorSpace}(50 60 70 / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 25%, ${colorSpace}(50 60 70 / 0.8))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% ${colorSpace}(10 20 30 / .4), ${colorSpace}(50 60 70 / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 25%, ${colorSpace}(50 60 70 / 0.8))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4), 25% ${colorSpace}(50 60 70 / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4), ${colorSpace}(50 60 70 / 0.8) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4), ${colorSpace}(50 60 70 / .8) 25%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4), ${colorSpace}(50 60 70 / 0.8) 25%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 25%, ${colorSpace}(50 60 70 / .8) 75%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 25%, ${colorSpace}(50 60 70 / 0.8) 75%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 30%, ${colorSpace}(50 60 70 / .8) 90%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 30%, ${colorSpace}(50 60 70 / 0.8) 90%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 12.5%, ${colorSpace}(50 60 70 / .8) 37.5%)`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 12.5%, ${colorSpace}(50 60 70 / 0.8) 37.5%)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / .4) 0%, ${colorSpace}(50 60 70 / .8))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / 0.4) 0%, ${colorSpace}(50 60 70 / 0.8))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(none none none))`, `${colorSpace}(none none none)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(50 60 70))`, `${colorSpace}(50 60 70)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(none none none))`, `${colorSpace}(10 20 30)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 none), ${colorSpace}(50 60 70))`, `${colorSpace}(30 40 70)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 none))`, `${colorSpace}(30 40 30)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none 20 30), ${colorSpace}(50 none 70))`, `${colorSpace}(50 20 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70))`, `${colorSpace}(30 40 50)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / 0.5))`, `${colorSpace}(30 40 50 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / none))`, `${colorSpace}(30 40 50 / none)`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(none none none))`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(none none none))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(none none none), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(none none none))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(none none none))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 none), ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 none), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 none))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30), ${colorSpace}(50 60 none))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(none 20 30), ${colorSpace}(50 none 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(none 20 30), ${colorSpace}(50 none 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / 0.5))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / 0.5))`);
+      test_valid_value(`color`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / none))`, `color-mix(in ${colorSpace}, ${colorSpace}(10 20 30 / none), ${colorSpace}(50 60 70 / none))`);
     }
 
     for (const colorSpace of [ "srgb", "srgb-linear", "xyz", "xyz-d50", "xyz-d65" ]) {
         const resultColorSpace = colorSpace == "xyz" ? "xyz-d65" : colorSpace;
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7) 25%)`, `color(${resultColorSpace} 0.2 0.3 0.4)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), 25% color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.2 0.3 0.4)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7) 75%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 30%, color(${colorSpace} .5 .6 .7) 90%)`, `color(${resultColorSpace} 0.4 0.5 0.6)`); // Scale down > 100% sum.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 12.5%, color(${colorSpace} .5 .6 .7) 37.5%)`, `color(${resultColorSpace} 0.4 0.5 0.6 / 0.5)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 0%, color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} 0.5 0.6 0.7))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 25%, color(${resultColorSpace} 0.5 0.6 0.7))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 .7) 25%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} 0.5 0.6 0.7) 25%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 25%, color(${colorSpace} .5 .6 .7) 75%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 25%, color(${resultColorSpace} 0.5 0.6 0.7) 75%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 30%, color(${colorSpace} .5 .6 .7) 90%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 30%, color(${resultColorSpace} 0.5 0.6 0.7) 90%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 12.5%, color(${colorSpace} .5 .6 .7) 37.5%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 12.5%, color(${resultColorSpace} 0.5 0.6 0.7) 37.5%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3) 0%, color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3) 0%, color(${resultColorSpace} 0.5 0.6 0.7))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .5), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.3461539 0.4461539 0.5461539 / 0.65)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, 25% color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8) 25%)`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), 25% color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.26000002 0.36 0.46 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8) 75%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 30%, color(${colorSpace} .5 .6 .7 / .8) 90%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.7)`); // Scale down > 100% sum.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 12.5%, color(${colorSpace} .5 .6 .7 / .8) 37.5%)`, `color(${resultColorSpace} 0.44285715 0.54285717 0.64285713 / 0.35)`); // Scale up < 100% sum, causes alpha multiplication.
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 0%, color(${colorSpace} .5 .6 .7 / .8))`, `color(${resultColorSpace} 0.5 0.6 0.7 / 0.8)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .5), color(${colorSpace} .5 .6 .7 / .8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.5), color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 25%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4), color(${colorSpace} .5 .6 .7 / .8) 25%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4), color(${resultColorSpace} 0.5 0.6 0.7 / 0.8) 25%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 25%, color(${colorSpace} .5 .6 .7 / .8) 75%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 25%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8) 75%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 30%, color(${colorSpace} .5 .6 .7 / .8) 90%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 30%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8) 90%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 12.5%, color(${colorSpace} .5 .6 .7 / .8) 37.5%)`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 12.5%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8) 37.5%)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / .4) 0%, color(${colorSpace} .5 .6 .7 / .8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / 0.4) 0%, color(${resultColorSpace} 0.5 0.6 0.7 / 0.8))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} 2 3 4 / 5), color(${colorSpace} 4 6 8 / 10))`, `color(${resultColorSpace} 3 4.5 6)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4), color(${colorSpace} -4 -6 -8))`, `color(${resultColorSpace} -3 -4.5 -6)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4 / -5), color(${colorSpace} -4 -6 -8 / -10))`, `color(${resultColorSpace} 0 0 0 / 0)`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} 2 3 4 / 5), color(${colorSpace} 4 6 8 / 10))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 2 3 4), color(${resultColorSpace} 4 6 8))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4), color(${colorSpace} -4 -6 -8))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} -2 -3 -4), color(${resultColorSpace} -4 -6 -8))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} -2 -3 -4 / -5), color(${colorSpace} -4 -6 -8 / -10))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} -2 -3 -4 / 0), color(${resultColorSpace} -4 -6 -8 / 0))`);
 
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} none none none))`, `color(${resultColorSpace} none none none)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.5 0.6 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} none none none))`, `color(${resultColorSpace} 0.1 0.2 0.3)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.7)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 none))`, `color(${resultColorSpace} 0.3 0.4 0.3)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none .2 .3), color(${colorSpace} .5 none .7))`, `color(${resultColorSpace} 0.5 0.2 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7))`, `color(${resultColorSpace} 0.3 0.4 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / 0.5))`, `color(${resultColorSpace} 0.3 0.4 0.5 / 0.5)`);
-        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / none))`, `color(${resultColorSpace} 0.3 0.4 0.5 / none)`);
-    }
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} none none none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} none none none), color(${resultColorSpace} none none none))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none none none), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} none none none), color(${resultColorSpace} 0.5 0.6 0.7))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} none none none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} none none none))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 none), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 none), color(${resultColorSpace} 0.5 0.6 0.7))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3), color(${colorSpace} .5 .6 none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3), color(${resultColorSpace} 0.5 0.6 none))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} none .2 .3), color(${colorSpace} .5 none .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} none 0.2 0.3), color(${resultColorSpace} 0.5 none 0.7))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / none), color(${resultColorSpace} 0.5 0.6 0.7))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / 0.5))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / none), color(${resultColorSpace} 0.5 0.6 0.7 / 0.5))`);
+        test_valid_value(`color`, `color-mix(in ${colorSpace}, color(${colorSpace} .1 .2 .3 / none), color(${colorSpace} .5 .6 .7 / none))`, `color-mix(in ${resultColorSpace}, color(${resultColorSpace} 0.1 0.2 0.3 / none), color(${resultColorSpace} 0.5 0.6 0.7 / none))`);
+   }
 </script>
 </body>
 </html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/margin-and-break-before-child-spanner.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/margin-and-break-before-child-spanner.html
new file mode 100644
index 0000000..8ec3625
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/margin-and-break-before-child-spanner.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1380371">
+<div style="columns:3; column-fill:auto; height:106px;">
+  <div style="margin-top:10px;">
+    <div style="float:left; width:10px; padding-bottom:100px;"></div>
+    <div style="column-span:all;"></div>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/remove-spanner-in-table-caption-nested-multicol.html b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/remove-spanner-in-table-caption-nested-multicol.html
new file mode 100644
index 0000000..21d8a7e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-multicol/crashtests/remove-spanner-in-table-caption-nested-multicol.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
+<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1379635">
+<div style="columns:1;">
+  <div style="columns:2; display:table-caption;">
+    <div style="width:10px;">
+      <div style="height:100px;">
+        <div style="height:1px;"></div>
+        <div style="break-before:column;"></div>
+      </div>
+      <div id="e52" style="overflow:hidden; column-span:all;"></div>
+    </div>
+  </div>
+</div>
+<script>
+  document.body.offsetTop;
+  e52.style.display = "none";
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-nesting/implicit-parent-insertion-crash.html b/third_party/blink/web_tests/external/wpt/css/css-nesting/implicit-parent-insertion-crash.html
new file mode 100644
index 0000000..4be1e1c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-nesting/implicit-parent-insertion-crash.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<body>
+<title>Use-after-free when inserting implicit parent selector</title>
+<link rel="help" href="https://crbug.com/1380313">
+<style>
+:root {
+  :lang(en), :lang(en) {
+  }
+}
+</style>
+<div lang="en"></div>
+<script>
+  // Allocate a large chunk of memory, to trigger a GC.
+  new Int32Array(536870911);
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any-expected.txt b/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any-expected.txt
index 421ba84..891983b 100644
--- a/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any-expected.txt
@@ -1,5 +1,4 @@
 This is a testharness.js-based test.
-Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: Cannot close a CLOSED writable stream
 PASS move(name) to rename a file
 PASS get a handle to a moved file
 PASS move(name) to rename a file the same name
diff --git a/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any.worker-expected.txt
index 421ba84..891983b 100644
--- a/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any.worker-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/fs/FileSystemFileHandle-move.https.any.worker-expected.txt
@@ -1,5 +1,4 @@
 This is a testharness.js-based test.
-Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: Cannot close a CLOSED writable stream
 PASS move(name) to rename a file
 PASS get a handle to a moved file
 PASS move(name) to rename a file the same name
diff --git a/third_party/blink/web_tests/external/wpt/fs/resources/test-helpers.js b/third_party/blink/web_tests/external/wpt/fs/resources/test-helpers.js
index e27666a..20735664 100644
--- a/third_party/blink/web_tests/external/wpt/fs/resources/test-helpers.js
+++ b/third_party/blink/web_tests/external/wpt/fs/resources/test-helpers.js
@@ -101,6 +101,11 @@
 
 async function cleanup_writable(test, value) {
   return cleanup(test, value, async () => {
-    value.close();
+    try {
+      await value.close();
+    } catch (e) {
+      // Ignore any errors when closing writables, since attempting to close
+      // aborted or closed writables will error.
+    }
   });
 }
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js
index 48a4ce4..6a63ede 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getDirectoryHandle.js
@@ -1,3 +1,5 @@
+'use strict';
+
 directory_test(async (t, root) => {
   await promise_rejects_dom(
       t, 'NotFoundError', root.getDirectoryHandle('non-existing-dir'));
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getFileHandle.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getFileHandle.js
index dddd67a7..8685f08 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getFileHandle.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-getFileHandle.js
@@ -1,3 +1,5 @@
+'use strict';
+
 directory_test(async (t, dir) => {
   await promise_rejects_dom(
       t, 'NotFoundError', dir.getFileHandle('non-existing-file'));
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-iteration.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-iteration.js
index 3e721a0f..815ae219 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-iteration.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-iteration.js
@@ -1,3 +1,5 @@
+'use strict';
+
 directory_test(async (t, root) => {
   const file_name1 = 'foo1.txt';
   const file_name2 = 'foo2.txt';
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js
index b1d37e50..108b9135 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemDirectoryHandle-removeEntry.js
@@ -1,3 +1,4 @@
+'use strict';
 
 directory_test(async (t, root) => {
   const handle =
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-getFile.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-getFile.js
index 80593418..4c92083 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-getFile.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemFileHandle-getFile.js
@@ -1,3 +1,5 @@
+'use strict';
+
 directory_test(async (t, root) => {
   const fileContents = 'awesome content';
   let handle = await createFileWithContents(t, 'foo.txt', fileContents, /*parent=*/ root);
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-piped.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-piped.js
index 64637c9f..847fefa2 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-piped.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-piped.js
@@ -1,3 +1,5 @@
+'use strict';
+
 directory_test(async (t, root) => {
   const handle = await createEmptyFile(t, 'foo_string.txt', root);
   const wfs = await handle.createWritable();
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-write.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-write.js
index 287c4ae..70ba72f 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-write.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream-write.js
@@ -1,3 +1,5 @@
+'use strict';
+
 directory_test(async (t, root) => {
   const handle = await createEmptyFile(t, 'empty_blob', root);
   const stream = await handle.createWritable();
diff --git a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream.js b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream.js
index 1cebb99..d9c4f35 100644
--- a/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream.js
+++ b/third_party/blink/web_tests/external/wpt/fs/script-tests/FileSystemWritableFileStream.js
@@ -1,3 +1,5 @@
+'use strict';
+
 directory_test(async (t, root) => {
   const handle = await createEmptyFile(t, 'trunc_shrink', root);
   const stream = await handle.createWritable();
diff --git a/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https-expected.txt b/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https-expected.txt
index 018ec4e3..6be152f 100644
--- a/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/screen-capture/getdisplaymedia.https-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 58 tests; 55 PASS, 3 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 58 tests; 56 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS getDisplayMedia in navigator.mediaDevices
 FAIL getDisplayMedia() must require user activation assert_unreached: Should have rejected: getDisplayMedia should have returned an already-rejected promise. Reached unreachable code
 FAIL getDisplayMedia() must adhere to frameRate if set assert_greater_than_equal: expected a number greater than or equal to 2.5 but got NaN
@@ -36,7 +36,7 @@
 PASS applyConstraints(width or height) must downscale precisely
 PASS getDisplayMedia({"video":{"width":{"max":0}}}) must fail with OverconstrainedError
 PASS getDisplayMedia({"video":{"height":{"max":0}}}) must fail with OverconstrainedError
-FAIL getDisplayMedia({"video":{"frameRate":{"max":0}}}) must fail with OverconstrainedError assert_unreached: getDisplayMedia should have failed Reached unreachable code
+PASS getDisplayMedia({"video":{"frameRate":{"max":0}}}) must fail with OverconstrainedError
 PASS getDisplayMedia({"video":{"width":{"max":-1}}}) must fail with OverconstrainedError
 PASS getDisplayMedia({"video":{"height":{"max":-1}}}) must fail with OverconstrainedError
 PASS getDisplayMedia({"video":{"frameRate":{"max":-1}}}) must fail with OverconstrainedError
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/idlharness.tentative.window-expected.txt b/third_party/blink/web_tests/external/wpt/trusted-types/idlharness.tentative.window-expected.txt
index 7c35b39..f30e9f6 100644
--- a/third_party/blink/web_tests/external/wpt/trusted-types/idlharness.tentative.window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/trusted-types/idlharness.tentative.window-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 109 tests; 101 PASS, 8 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 109 tests; 107 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS idl_test setup
 PASS idl_test validation
 PASS Partial interface mixin WindowOrWorkerGlobalScope: original interface mixin defined
@@ -20,13 +20,13 @@
 PASS TrustedHTML interface: existence and properties of interface prototype object's @@unscopables property
 PASS TrustedHTML interface: stringifier
 PASS TrustedHTML interface: operation toJSON()
-FAIL TrustedHTML interface: operation fromLiteral(object) assert_own_property: interface object missing static operation expected property "fromLiteral" missing
+PASS TrustedHTML interface: operation fromLiteral(object)
 PASS TrustedHTML must be primary interface of window.trustedTypes.createPolicy("SomeName1", { createHTML: s => s }).createHTML("A string")
 PASS Stringification of window.trustedTypes.createPolicy("SomeName1", { createHTML: s => s }).createHTML("A string")
 PASS TrustedHTML interface: window.trustedTypes.createPolicy("SomeName1", { createHTML: s => s }).createHTML("A string") must inherit property "toJSON()" with the proper type
 PASS TrustedHTML interface: toJSON operation on window.trustedTypes.createPolicy("SomeName1", { createHTML: s => s }).createHTML("A string")
 PASS TrustedHTML interface: window.trustedTypes.createPolicy("SomeName1", { createHTML: s => s }).createHTML("A string") must inherit property "fromLiteral(object)" with the proper type
-FAIL TrustedHTML interface: calling fromLiteral(object) on window.trustedTypes.createPolicy("SomeName1", { createHTML: s => s }).createHTML("A string") with too few arguments must throw TypeError assert_own_property: interface object must have static operation as own property expected property "fromLiteral" missing
+PASS TrustedHTML interface: calling fromLiteral(object) on window.trustedTypes.createPolicy("SomeName1", { createHTML: s => s }).createHTML("A string") with too few arguments must throw TypeError
 PASS TrustedScript interface: existence and properties of interface object
 PASS TrustedScript interface object length
 PASS TrustedScript interface object name
@@ -35,13 +35,13 @@
 PASS TrustedScript interface: existence and properties of interface prototype object's @@unscopables property
 PASS TrustedScript interface: stringifier
 PASS TrustedScript interface: operation toJSON()
-FAIL TrustedScript interface: operation fromLiteral(object) assert_own_property: interface object missing static operation expected property "fromLiteral" missing
+PASS TrustedScript interface: operation fromLiteral(object)
 PASS TrustedScript must be primary interface of window.trustedTypes.createPolicy("SomeName2", { createScript: s => s }).createScript("A string")
 PASS Stringification of window.trustedTypes.createPolicy("SomeName2", { createScript: s => s }).createScript("A string")
 PASS TrustedScript interface: window.trustedTypes.createPolicy("SomeName2", { createScript: s => s }).createScript("A string") must inherit property "toJSON()" with the proper type
 PASS TrustedScript interface: toJSON operation on window.trustedTypes.createPolicy("SomeName2", { createScript: s => s }).createScript("A string")
 PASS TrustedScript interface: window.trustedTypes.createPolicy("SomeName2", { createScript: s => s }).createScript("A string") must inherit property "fromLiteral(object)" with the proper type
-FAIL TrustedScript interface: calling fromLiteral(object) on window.trustedTypes.createPolicy("SomeName2", { createScript: s => s }).createScript("A string") with too few arguments must throw TypeError assert_own_property: interface object must have static operation as own property expected property "fromLiteral" missing
+PASS TrustedScript interface: calling fromLiteral(object) on window.trustedTypes.createPolicy("SomeName2", { createScript: s => s }).createScript("A string") with too few arguments must throw TypeError
 PASS TrustedScriptURL interface: existence and properties of interface object
 PASS TrustedScriptURL interface object length
 PASS TrustedScriptURL interface object name
@@ -50,13 +50,13 @@
 PASS TrustedScriptURL interface: existence and properties of interface prototype object's @@unscopables property
 PASS TrustedScriptURL interface: stringifier
 PASS TrustedScriptURL interface: operation toJSON()
-FAIL TrustedScriptURL interface: operation fromLiteral(object) assert_own_property: interface object missing static operation expected property "fromLiteral" missing
+PASS TrustedScriptURL interface: operation fromLiteral(object)
 PASS TrustedScriptURL must be primary interface of window.trustedTypes.createPolicy("SomeName3", { createScriptURL: s => s }).createScriptURL("A string")
 PASS Stringification of window.trustedTypes.createPolicy("SomeName3", { createScriptURL: s => s }).createScriptURL("A string")
 PASS TrustedScriptURL interface: window.trustedTypes.createPolicy("SomeName3", { createScriptURL: s => s }).createScriptURL("A string") must inherit property "toJSON()" with the proper type
 PASS TrustedScriptURL interface: toJSON operation on window.trustedTypes.createPolicy("SomeName3", { createScriptURL: s => s }).createScriptURL("A string")
 PASS TrustedScriptURL interface: window.trustedTypes.createPolicy("SomeName3", { createScriptURL: s => s }).createScriptURL("A string") must inherit property "fromLiteral(object)" with the proper type
-FAIL TrustedScriptURL interface: calling fromLiteral(object) on window.trustedTypes.createPolicy("SomeName3", { createScriptURL: s => s }).createScriptURL("A string") with too few arguments must throw TypeError assert_own_property: interface object must have static operation as own property expected property "fromLiteral" missing
+PASS TrustedScriptURL interface: calling fromLiteral(object) on window.trustedTypes.createPolicy("SomeName3", { createScriptURL: s => s }).createScriptURL("A string") with too few arguments must throw TypeError
 FAIL TrustedTypePolicyFactory interface: existence and properties of interface object assert_equals: prototype of self's property "TrustedTypePolicyFactory" is not Function.prototype expected function "function () { [native code] }" but got function "function EventTarget() { [native code] }"
 PASS TrustedTypePolicyFactory interface object length
 PASS TrustedTypePolicyFactory interface object name
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/trusted-types-from-literal.tentative.html b/third_party/blink/web_tests/external/wpt/trusted-types/trusted-types-from-literal.tentative.html
new file mode 100644
index 0000000..b59c46fe0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/trusted-types/trusted-types-from-literal.tentative.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<head>
+<link rel="author" title="Daniel Vogelheim" href="mailto:vogelheim@chromium.org"></link>
+<link rel="help" href="https://w3c.github.io/webappsec-trusted-types/dist/spec/"></link>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'">
+</head>
+<body>
+<script>
+[ TrustedHTML, TrustedScript, TrustedScriptURL ].forEach(type => {
+
+  test(t => {
+    assert_true("fromLiteral" in type);
+  }, `${type.name}.fromLiteral is supported`);
+
+  test(t => {
+    const c = type.fromLiteral`abc`;
+    assert_true(c instanceof type);
+    assert_equals(c.toString(), "abc");
+  }, `${type.name}.fromLiteral: Basic string literal works.`);
+
+  test(t => {
+    const c = type.fromLiteral``;
+    assert_true(c instanceof type);
+    assert_equals(c.toString(), "");
+  }, `${type.name}.fromLiteral: Empty string literal works.`);
+
+  test(t => {
+    const c = type.fromLiteral`\u{1f4a9}`;
+    assert_true(c instanceof type);
+    assert_equals(c.toString(), "\u{1f4a9}");
+  }, `${type.name}.fromLiteral: A very important emoji works.`);
+
+  test(t => {
+    const c = type.fromLiteral`A Multiline
+  string
+     works.`;
+    assert_true(c instanceof type);
+    assert_true(c.toString().includes("\n"));
+  }, `${type.name}.fromLiteral: Multi-line string literal works.`);
+
+  test(t => {
+    const tag = type.fromLiteral.bind(type);
+    const c = tag`abc`;
+    assert_true(c instanceof type);
+    assert_equals(c.toString(), "abc");
+  }, `${type.name}.fromLiteral: Bound method works.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral("abc");
+    });
+  }, `${type.name}.fromLiteral: String throws.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral(null);
+    });
+  }, `${type.name}.fromLiteral: null throws.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral(undefined);
+    });
+  }, `${type.name}.fromLiteral: undefined throws.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral({});
+    });
+  }, `${type.name}.fromLiteral: Object throws.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral`Hello ${2+3} world`
+    });
+  }, `${type.name}.fromLiteral: template literal with expression throws.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral(["abc"]);
+    });
+  }, `${type.name}.fromLiteral: non-literal throws.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral(Object.freeze(["abc"]));
+    });
+  }, `${type.name}.fromLiteral: frozen non-literal throws.`);
+
+  test(t => {
+    assert_throws_js(TypeError, _ => {
+      type.fromLiteral(["abc", "def"], "xxx");
+    });
+  }, `${type.name}.fromLiteral: non-literal with param throws.`);
+
+});
+
+// TrustedHTML requires normalization of the value. Let's test that TrustedHTML
+// (and only TrustedHTML) does this.
+test(t => {
+  const tag = TrustedHTML.fromLiteral.bind(TrustedHTML);
+  assert_equals(tag`<b>`.toString(), "<b></b>");
+}, "TrustedHTML.fromLiteral: Normalization of value works.");
+
+test(t => {
+  const tag = TrustedScript.fromLiteral.bind(TrustedScript);
+  assert_equals(tag`<b>`.toString(), "<b>");
+}, "TrustedScript.fromLiteral: No normalization of value occurs.");
+
+test(t => {
+  const tag = TrustedScriptURL.fromLiteral.bind(TrustedScriptURL);
+  assert_equals(tag`<b>`.toString(), "<b>");
+}, "TrustedScriptURL.fromLiteral: No normalization of value occurs.");
+
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html b/third_party/blink/web_tests/external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html
new file mode 100644
index 0000000..b13f7e0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/web-share/disabled-by-permissions-policy-cross-origin.https.sub.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <title>WebShare Test: is disabled by permissions policy cross-origin</title>
+    <link
+      rel="help"
+      href="https://w3c.github.io/web-share/#permissions-policy"
+    />
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+  </head>
+  <body></body>
+  <script defer>
+    function waitForMessage(message) {
+      return new Promise((resolve) => {
+        window.addEventListener("message", function listener(event) {
+          if (event.data.action !== message) return;
+          window.removeEventListener("message", listener);
+          resolve(event.data);
+        });
+      });
+    }
+
+    async function loadCrossOriginFrame() {
+      const iframe = document.createElement("iframe");
+      iframe.src =
+        "https://{{hosts[][www]}}:{{ports[https][0]}}/web-share/resources/post-message.html";
+      document.body.appendChild(iframe);
+      await waitForMessage("loaded");
+      return iframe;
+    }
+
+    function makeCleanup(iframe) {
+      return () => {
+        iframe.remove();
+      };
+    }
+
+    const shareData = {
+      title: "WebShare Test",
+      text: "This is a test of the Web Share API",
+      url: "https://example.com/",
+    };
+
+    promise_test(async (t) => {
+      const iframe = await loadCrossOriginFrame();
+      t.add_cleanup(makeCleanup(iframe));
+      const iframeWindow = iframe.contentWindow;
+      iframeWindow.postMessage({ action: "share", data: shareData }, "*");
+      const data = await waitForMessage("share");
+      assert_equals(data.result, "error");
+      assert_equals(data.error, "NotAllowedError");
+    }, "share() is disabled by permissions policy cross-origin");
+
+    promise_test(async (t) => {
+      const iframe = await loadCrossOriginFrame();
+      t.add_cleanup(makeCleanup(iframe));
+      const iframeWindow = iframe.contentWindow;
+      iframeWindow.postMessage({ action: "canShare", data: shareData }, "*");
+      const data = await waitForMessage("canShare");
+      assert_equals(data.result, false, "Expected false, as it can't share.");
+    }, "canShare() returns false when not allowed by permissions policy cross-origin");
+
+    promise_test(async (t) => {
+      const iframe = await loadCrossOriginFrame();
+      t.add_cleanup(makeCleanup(iframe));
+      iframe.contentWindow.postMessage(
+        { action: "canShare", data: shareData },
+        "*"
+      );
+      const data = await waitForMessage("canShare");
+      assert_equals(data.result, true, "Expected true, is it can now share.");
+    }, "canShare() returns false when not allowed by permissions policy cross-origin with empty data");
+  </script>
+</html>
diff --git a/third_party/blink/web_tests/external/wpt/web-share/disabled-by-permissions-policy.https.sub.html.headers b/third_party/blink/web_tests/external/wpt/web-share/disabled-by-permissions-policy.https.sub.html.headers
index f84ca89..83f5a34 100644
--- a/third_party/blink/web_tests/external/wpt/web-share/disabled-by-permissions-policy.https.sub.html.headers
+++ b/third_party/blink/web_tests/external/wpt/web-share/disabled-by-permissions-policy.https.sub.html.headers
@@ -1,2 +1 @@
-Feature-Policy: web-share 'none'
 Permissions-Policy: web-share=()
diff --git a/third_party/blink/web_tests/external/wpt/web-share/resources/post-message.html b/third_party/blink/web_tests/external/wpt/web-share/resources/post-message.html
new file mode 100644
index 0000000..30134e2
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/web-share/resources/post-message.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+<script>
+  window.addEventListener("message", async (event) => {
+    const {
+      data: { action, data },
+    } = event;
+    const response = {};
+    try {
+      switch (action) {
+        case "share":
+          await test_driver.bless("share");
+          await navigator.share(data);
+          response.result = "unreached";
+          break;
+        case "canShare":
+          response.result = navigator.canShare(data);
+          break;
+      }
+    } catch (error) {
+      response.result = "error";
+      response.error = error.name;
+    } finally {
+      event.source.postMessage({ ...response, action }, "*");
+    }
+  });
+
+  // send message to parent that we loaded
+  function sendLoadMessage() {
+    window.parent.postMessage({ action: "loaded" }, "*");
+  }
+</script>
+<body onload="sendLoadMessage()"></body>
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpSender-replaceTrack.https-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpSender-replaceTrack.https-expected.txt
deleted file mode 100644
index 5431b22..0000000
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpSender-replaceTrack.https-expected.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-This is a testharness.js-based test.
-PASS Calling replaceTrack on closed connection should reject with InvalidStateError
-FAIL Calling replaceTrack with track of different kind should reject with TypeError promise_rejects_js: function "function() { throw e }" threw object "InvalidModificationError" ("InvalidModificationError") expected instance of function "function TypeError() { [native code] }" ("TypeError")
-FAIL Calling replaceTrack on stopped sender should reject with InvalidStateError promise_rejects_dom: function "function() { throw e }" threw object "InvalidModificationError" that is not a DOMException InvalidStateError: property "code" is equal to 13, expected 11
-PASS Calling replaceTrack on sender with null track and not set to session description should resolve with sender.track set to given track
-PASS Calling replaceTrack on sender not set to session description should resolve with sender.track set to given track
-PASS Calling replaceTrack(null) on sender not set to session description should resolve with sender.track set to null
-PASS Calling replaceTrack(null) on sender set to session description should resolve with sender.track set to null
-PASS Calling replaceTrack on sender with stopped track and and set to session description should resolve with sender.track set to given track
-PASS Calling replaceTrack on sender with similar track and and set to session description should resolve with sender.track set to new track
-PASS ReplaceTrack transmits the new track not the old track
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt
index 0ed5ed9f..574390a 100644
--- a/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/webrtc/RTCRtpTransceiver.https-expected.txt
@@ -1,5 +1,4 @@
 This is a testharness.js-based test.
-Harness Error. harness_status.status = 1 , harness_status.message = Unhandled rejection: assert_equals: replaceTrack on stopped transceiver throws InvalidStateError expected "InvalidStateError" but got "InvalidModificationError"
 PASS checkAddTransceiverNoTrack
 PASS checkAddTransceiverWithTrack
 PASS checkAddTransceiverWithAddTrack
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/wpt_internal/webcodecs/avc_encoder_config.https.any-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/wpt_internal/webcodecs/avc_encoder_config.https.any-expected.txt
new file mode 100644
index 0000000..7e47f23
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/wpt_internal/webcodecs/avc_encoder_config.https.any-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+FAIL Test AvcConfig supports 'avc' and 'annexb' promise_test: Unhandled rejection with value: object "InvalidStateError: Failed to execute 'encode' on 'VideoEncoder': Cannot call 'encode' on a closed codec."
+FAIL Test H.264 only supports even sizes assert_true: expected true got false
+FAIL Resolutions exceeding H.264 level are rejected assert_true: expected true got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/wpt_internal/webcodecs/avc_encoder_config.https.any.worker-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/wpt_internal/webcodecs/avc_encoder_config.https.any.worker-expected.txt
new file mode 100644
index 0000000..f41392d
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/wpt_internal/webcodecs/avc_encoder_config.https.any.worker-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+FAIL Test AvcConfig supports 'avc' and 'annexb' assert_not_equals: output default got disallowed value undefined
+FAIL Test H.264 only supports even sizes assert_true: expected true got false
+FAIL Resolutions exceeding H.264 level are rejected assert_true: expected true got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index 4c26e73..0ce6482 100644
--- a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -1534,16 +1534,19 @@
     method error
     method terminate
 interface TrustedHTML
+    static method fromLiteral
     attribute @@toStringTag
     method constructor
     method toJSON
     method toString
 interface TrustedScript
+    static method fromLiteral
     attribute @@toStringTag
     method constructor
     method toJSON
     method toString
 interface TrustedScriptURL
+    static method fromLiteral
     attribute @@toStringTag
     method constructor
     method toJSON
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/grammar-markers-hidpi-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/grammar-markers-hidpi-expected.png
index 92d9b91..b3cab56 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/grammar-markers-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/grammar-markers-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-composited-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
index e6ad7119..ca8965e2 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-expected.png
index e6ad7119..ca8965e2 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/inline-spelling-markers-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/paint/markers/markers-zoomed-expected.png b/third_party/blink/web_tests/platform/linux/paint/markers/markers-zoomed-expected.png
index a942b8a1..40cb5ba4 100644
--- a/third_party/blink/web_tests/platform/linux/paint/markers/markers-zoomed-expected.png
+++ b/third_party/blink/web_tests/platform/linux/paint/markers/markers-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-composited-expected.png b/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
index e6ad7119..ca8965e2 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-expected.png b/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-expected.png
index e6ad7119..ca8965e2 100644
--- a/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/linux/virtual/css-highlight-overlay-painting/paint/markers/inline-spelling-markers-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-font-64px-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-font-64px-expected.png
index 763b2982..4b810fd 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-font-64px-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-font-64px-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png
index 96d3e0dc..77eccb4 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-150-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png
index bbbdf642..a4bb6d00 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-175-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png
index cba1713f..ece7589 100644
--- a/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png
+++ b/third_party/blink/web_tests/platform/mac-mac10.13/paint/markers/document-markers-zoom-2000-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac11-arm64/paint/markers/markers-zoomed-expected.png b/third_party/blink/web_tests/platform/mac-mac11-arm64/paint/markers/markers-zoomed-expected.png
new file mode 100644
index 0000000..525f9eaf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac11-arm64/paint/markers/markers-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/paint/markers/markers-zoomed-expected.png b/third_party/blink/web_tests/platform/mac-mac12-arm64/paint/markers/markers-zoomed-expected.png
new file mode 100644
index 0000000..525f9eaf
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/paint/markers/markers-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webcodecs/avc_encoder_config.https.any-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webcodecs/avc_encoder_config.https.any-expected.txt
new file mode 100644
index 0000000..c47aecc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webcodecs/avc_encoder_config.https.any-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+PASS Test AvcConfig supports 'avc' and 'annexb'
+PASS Test H.264 only supports even sizes
+FAIL Resolutions exceeding H.264 level are rejected promise_test: Unhandled rejection with value: object "TypeError: Failed to execute 'isConfigSupported' on 'VideoEncoder': Invalid width; expected range from 1 to 8192, received 8194."
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webcodecs/avc_encoder_config.https.any.worker-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webcodecs/avc_encoder_config.https.any.worker-expected.txt
new file mode 100644
index 0000000..c47aecc
--- /dev/null
+++ b/third_party/blink/web_tests/platform/mac-mac12-arm64/wpt_internal/webcodecs/avc_encoder_config.https.any.worker-expected.txt
@@ -0,0 +1,6 @@
+This is a testharness.js-based test.
+PASS Test AvcConfig supports 'avc' and 'annexb'
+PASS Test H.264 only supports even sizes
+FAIL Resolutions exceeding H.264 level are rejected promise_test: Unhandled rejection with value: object "TypeError: Failed to execute 'isConfigSupported' on 'VideoEncoder': Invalid width; expected range from 1 to 8192, received 8194."
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/grammar-markers-hidpi-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/grammar-markers-hidpi-expected.png
index c6e4c56..ac25d0e 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/grammar-markers-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/grammar-markers-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
index e58ee12..d017f87 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-expected.png
index e58ee12..369ce9e 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/inline-spelling-markers-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/paint/markers/markers-zoomed-expected.png b/third_party/blink/web_tests/platform/mac/paint/markers/markers-zoomed-expected.png
index b741250..21bbb1a 100644
--- a/third_party/blink/web_tests/platform/mac/paint/markers/markers-zoomed-expected.png
+++ b/third_party/blink/web_tests/platform/mac/paint/markers/markers-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/grammar-markers-hidpi-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/grammar-markers-hidpi-expected.png
index 9bccb2f..ad574c73 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/grammar-markers-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/grammar-markers-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-composited-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
index 98313df..59e55aa16 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-composited-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-expected.png
index 98313df..59e55aa16 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/inline-spelling-markers-hidpi-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/paint/markers/markers-zoomed-expected.png b/third_party/blink/web_tests/platform/win/paint/markers/markers-zoomed-expected.png
index 79fc0ed3..1dc26aa 100644
--- a/third_party/blink/web_tests/platform/win/paint/markers/markers-zoomed-expected.png
+++ b/third_party/blink/web_tests/platform/win/paint/markers/markers-zoomed-expected.png
Binary files differ
diff --git a/third_party/blink/web_tests/virtual/devtools-tab-target/README.md b/third_party/blink/web_tests/virtual/devtools-tab-target/README.md
new file mode 100644
index 0000000..6fb23ef
--- /dev/null
+++ b/third_party/blink/web_tests/virtual/devtools-tab-target/README.md
@@ -0,0 +1 @@
+Tests run with DevTools Tab target enabled. See crbug.com/1348385
diff --git a/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-invalid-color-mix-function-expected.txt b/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-invalid-color-mix-function-expected.txt
deleted file mode 100644
index c2f3261..0000000
--- a/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-invalid-color-mix-function-expected.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-This is a testharness.js-based test.
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) -10%, hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 150%, hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 0%, hsl(30deg 30% 40%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% 40%) -10%, hsl(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% 40%) 150%, hsl(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20% 40%) 0%, hsl(30deg 30% 40% 80%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl hue, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl shorter, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl foo, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(hsl(120deg 10% 20%), hsl(30deg 30% 40%), in hsl)" should not set the property value
-PASS e.style['color'] = "color-mix(hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) -10%, hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 150%, hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) 0%, hwb(30deg 30% 40%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% 40%) -10%, hwb(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% 40%) 150%, hwb(30deg 30% 40% 80%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20% 40%) 0%, hwb(30deg 30% 40% 80%) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb hue, hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb shorter, hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb foo, hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in hwb, hwb(120deg 10% 20%) hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(hwb(120deg 10% 20%), hwb(30deg 30% 40%), in hwb)" should not set the property value
-PASS e.style['color'] = "color-mix(hwb(120deg 10% 20%), hwb(30deg 30% 40%))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) -10%, lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) 150%, lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) 0%, lch(50% 60 70deg) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg / .4) -10%, lch(50% 60 70deg / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg / .4) 150%, lch(50% 60 70deg / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg / .4) 0%, lch(50% 60 70deg / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lch hue, lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch shorter, lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch foo, lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lch, lch(10% 20 30deg) lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(lch(10% 20 30deg), lch(50% 60 70deg), in lch)" should not set the property value
-PASS e.style['color'] = "color-mix(lch(10% 20 30deg), lch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) -10%, oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) 150%, oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) 0%, oklch(50% 60 70deg) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg / .4) -10%, oklch(50% 60 70deg / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg / .4) 150%, oklch(50% 60 70deg / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg / .4) 0%, oklch(50% 60 70deg / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch hue, oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch shorter, oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch foo, oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklch, oklch(10% 20 30deg) oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(oklch(10% 20 30deg), oklch(50% 60 70deg), in oklch)" should not set the property value
-PASS e.style['color'] = "color-mix(oklch(10% 20 30deg), oklch(50% 60 70deg))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30) -10%, lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30) 150%, lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30) 0%, lab(50% 60 70) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30 / .4) -10%, lab(50% 60 70 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30 / .4) 150%, lab(50% 60 70 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30 / .4) 0%, lab(50% 60 70 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in lab longer hue, lab(10% 20 30), lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab lab(10% 20 30), lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in lab, lab(10% 20 30) lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(lab(10% 20 30), lab(50% 60 70), in lab)" should not set the property value
-PASS e.style['color'] = "color-mix(lab(10% 20 30), lab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) -10%, oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) 150%, oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) 0%, oklab(50% 60 70) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30 / .4) -10%, oklab(50% 60 70 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30 / .4) 150%, oklab(50% 60 70 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30 / .4) 0%, oklab(50% 60 70 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab longer hue, oklab(10% 20 30), oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab oklab(10% 20 30), oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in oklab, oklab(10% 20 30) oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(oklab(10% 20 30), oklab(50% 60 70), in oklab)" should not set the property value
-PASS e.style['color'] = "color-mix(oklab(10% 20 30), oklab(50% 60 70))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) -10%, color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 150%, color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 0%, color(srgb .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) -10%, color(srgb .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 150%, color(srgb .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 0%, color(srgb .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb longer hue, color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb .1 .2 .3), color(srgb .5 .6 .7), in srgb)" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) -10%, color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 150%, color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 0%, color(srgb-linear .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) -10%, color(srgb-linear .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 150%, color(srgb-linear .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 0%, color(srgb-linear .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear longer hue, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7), in srgb-linear)" should not set the property value
-PASS e.style['color'] = "color-mix(color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) -10%, color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 150%, color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 0%, color(xyz .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) -10%, color(xyz .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 150%, color(xyz .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 0%, color(xyz .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz longer hue, color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz .1 .2 .3), color(xyz .5 .6 .7), in xyz)" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) -10%, color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 150%, color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 0%, color(xyz-d50 .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) -10%, color(xyz-d50 .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 150%, color(xyz-d50 .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 0%, color(xyz-d50 .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50 longer hue, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50 color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7), in xyz-d50)" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) -10%, color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 150%, color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 0%, color(xyz-d65 .5 .6 .7) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) -10%, color(xyz-d65 .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 150%, color(xyz-d65 .5 .6 .7 / .8))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 0%, color(xyz-d65 .5 .6 .7 / .8) 0%)" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65 longer hue, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65 color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) color(xyz-d65 .5 .6 .7))" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7), in xyz-d65)" should not set the property value
-PASS e.style['color'] = "color-mix(color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should not set the property value
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-valid-color-mix-function-expected.txt b/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-valid-color-mix-function-expected.txt
index 1388547..eaad608d 100644
--- a/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-valid-color-mix-function-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/external/wpt/css/css-color/parsing/color-valid-color-mix-function-expected.txt
@@ -1,5 +1,12 @@
 This is a testharness.js-based test.
-Found 450 tests; 0 PASS, 450 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 437 tests; 1 PASS, 436 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL e.style['color'] = "color-mix(in srgb, red, blue)" should set the property value assert_not_equals: property should be set got disallowed value ""
+FAIL e.style['color'] = "color-mix(in hsl, red, blue)" should set the property value assert_not_equals: property should be set got disallowed value ""
+FAIL e.style['color'] = "color-mix(in hsl, red calc(20%), blue)" should set the property value assert_not_equals: property should be set got disallowed value ""
+PASS e.style['color'] = "color-mix(in hsl, red calc(var(--v)*1%), blue)" should set the property value
+FAIL e.style['color'] = "color-mix(in hsl, currentcolor, blue)" should set the property value assert_not_equals: property should be set got disallowed value ""
+FAIL e.style['color'] = "color-mix(in hsl, red 60%, blue 40%)" should set the property value assert_not_equals: property should be set got disallowed value ""
+FAIL e.style['color'] = "color-mix(in lch decreasing hue, red, hsl(120, 100%, 50%))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in hsl, hsl(120deg 10% 20%) 25%, hsl(30deg 30% 40%))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in hsl, 25% hsl(120deg 10% 20%), hsl(30deg 30% 40%))" should set the property value assert_not_equals: property should be set got disallowed value ""
@@ -302,18 +309,14 @@
 FAIL e.style['color'] = "color-mix(in oklab, oklab(10 20 30 / none), oklab(50 60 70 / none))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, 25% color(srgb .1 .2 .3), color(srgb .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), color(srgb .5 .6 .7) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3), 25% color(srgb .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 25%, color(srgb .5 .6 .7) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 30%, color(srgb .5 .6 .7) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 12.5%, color(srgb .5 .6 .7) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3) 0%, color(srgb .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .5), color(srgb .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, 25% color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4), color(srgb .5 .6 .7 / .8) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4), 25% color(srgb .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 25%, color(srgb .5 .6 .7 / .8) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 30%, color(srgb .5 .6 .7 / .8) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / .4) 12.5%, color(srgb .5 .6 .7 / .8) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
@@ -332,18 +335,14 @@
 FAIL e.style['color'] = "color-mix(in srgb, color(srgb .1 .2 .3 / none), color(srgb .5 .6 .7 / none))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), color(srgb-linear .5 .6 .7) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3), 25% color(srgb-linear .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 25%, color(srgb-linear .5 .6 .7) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 30%, color(srgb-linear .5 .6 .7) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 12.5%, color(srgb-linear .5 .6 .7) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3) 0%, color(srgb-linear .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .5), color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, 25% color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), color(srgb-linear .5 .6 .7 / .8) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4), 25% color(srgb-linear .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 25%, color(srgb-linear .5 .6 .7 / .8) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 30%, color(srgb-linear .5 .6 .7 / .8) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / .4) 12.5%, color(srgb-linear .5 .6 .7 / .8) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
@@ -362,18 +361,14 @@
 FAIL e.style['color'] = "color-mix(in srgb-linear, color(srgb-linear .1 .2 .3 / none), color(srgb-linear .5 .6 .7 / none))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, 25% color(xyz .1 .2 .3), color(xyz .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), color(xyz .5 .6 .7) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3), 25% color(xyz .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 25%, color(xyz .5 .6 .7) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 30%, color(xyz .5 .6 .7) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 12.5%, color(xyz .5 .6 .7) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3) 0%, color(xyz .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .5), color(xyz .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, 25% color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4), color(xyz .5 .6 .7 / .8) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4), 25% color(xyz .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 25%, color(xyz .5 .6 .7 / .8) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 30%, color(xyz .5 .6 .7 / .8) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / .4) 12.5%, color(xyz .5 .6 .7 / .8) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
@@ -392,18 +387,14 @@
 FAIL e.style['color'] = "color-mix(in xyz, color(xyz .1 .2 .3 / none), color(xyz .5 .6 .7 / none))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), color(xyz-d50 .5 .6 .7) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3), 25% color(xyz-d50 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 25%, color(xyz-d50 .5 .6 .7) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 30%, color(xyz-d50 .5 .6 .7) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 12.5%, color(xyz-d50 .5 .6 .7) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3) 0%, color(xyz-d50 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .5), color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, 25% color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), color(xyz-d50 .5 .6 .7 / .8) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4), 25% color(xyz-d50 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 25%, color(xyz-d50 .5 .6 .7 / .8) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 30%, color(xyz-d50 .5 .6 .7 / .8) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / .4) 12.5%, color(xyz-d50 .5 .6 .7 / .8) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
@@ -422,18 +413,14 @@
 FAIL e.style['color'] = "color-mix(in xyz-d50, color(xyz-d50 .1 .2 .3 / none), color(xyz-d50 .5 .6 .7 / none))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), color(xyz-d65 .5 .6 .7) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3), 25% color(xyz-d65 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 25%, color(xyz-d65 .5 .6 .7) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 30%, color(xyz-d65 .5 .6 .7) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 12.5%, color(xyz-d65 .5 .6 .7) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3) 0%, color(xyz-d65 .5 .6 .7))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .5), color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, 25% color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), color(xyz-d65 .5 .6 .7 / .8) 25%)" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4), 25% color(xyz-d65 .5 .6 .7 / .8))" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 25%, color(xyz-d65 .5 .6 .7 / .8) 75%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 30%, color(xyz-d65 .5 .6 .7 / .8) 90%)" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['color'] = "color-mix(in xyz-d65, color(xyz-d65 .1 .2 .3 / .4) 12.5%, color(xyz-d65 .5 .6 .7 / .8) 37.5%)" should set the property value assert_not_equals: property should be set got disallowed value ""
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
index d0bd308..10e5933 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -1634,16 +1634,19 @@
 [Worker]     method error
 [Worker]     method terminate
 [Worker] interface TrustedHTML
+[Worker]     static method fromLiteral
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
 [Worker]     method toJSON
 [Worker]     method toString
 [Worker] interface TrustedScript
+[Worker]     static method fromLiteral
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
 [Worker]     method toJSON
 [Worker]     method toString
 [Worker] interface TrustedScriptURL
+[Worker]     static method fromLiteral
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
 [Worker]     method toJSON
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 88f030f..84e9e8bf 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -9180,16 +9180,19 @@
     method previousSibling
     setter currentNode
 interface TrustedHTML
+    static method fromLiteral
     attribute @@toStringTag
     method constructor
     method toJSON
     method toString
 interface TrustedScript
+    static method fromLiteral
     attribute @@toStringTag
     method constructor
     method toJSON
     method toString
 interface TrustedScriptURL
+    static method fromLiteral
     attribute @@toStringTag
     method constructor
     method toJSON
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
index 5316f91..e9fc497 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -1412,16 +1412,19 @@
 [Worker]     method error
 [Worker]     method terminate
 [Worker] interface TrustedHTML
+[Worker]     static method fromLiteral
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
 [Worker]     method toJSON
 [Worker]     method toString
 [Worker] interface TrustedScript
+[Worker]     static method fromLiteral
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
 [Worker]     method toJSON
 [Worker]     method toString
 [Worker] interface TrustedScriptURL
+[Worker]     static method fromLiteral
 [Worker]     attribute @@toStringTag
 [Worker]     method constructor
 [Worker]     method toJSON
diff --git a/third_party/ipcz/src/ipcz/node_link_memory_test.cc b/third_party/ipcz/src/ipcz/node_link_memory_test.cc
index 88cc26d..fc6dc66 100644
--- a/third_party/ipcz/src/ipcz/node_link_memory_test.cc
+++ b/third_party/ipcz/src/ipcz/node_link_memory_test.cc
@@ -25,7 +25,6 @@
 
 const IpczDriver& kTestDriver = reference_drivers::kSyncReferenceDriver;
 
-constexpr NodeName kTestBrokerName(1, 2);
 constexpr NodeName kTestNonBrokerName(2, 3);
 constexpr NodeName kOtherTestNonBrokerName(3, 5);
 
@@ -73,7 +72,7 @@
   }
 
   void SetUp() override {
-    node_a_->SetAssignedName(kTestBrokerName);
+    // Brokers assign their own names, no need to assign one to `node_a_`.
     node_b_->SetAssignedName(kTestNonBrokerName);
     auto links = ConnectNodes(node_a_, node_b_);
     link_a_ = std::move(links.first);
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 8dabad4..d50b654 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -35,7 +35,7 @@
 # https://chromium.googlesource.com/chromium/src/+/main/docs/updating_clang.md
 # Reverting problematic clang rolls is safe, though.
 # This is the output of `git describe` and is usable as a commit-ish.
-CLANG_REVISION = 'llvmorg-16-init-8697-g60809cd2'
+CLANG_REVISION = 'llvmorg-16-init-9369-g87a20868'
 CLANG_SUB_REVISION = 1
 
 PACKAGE_VERSION = '%s-%s' % (CLANG_REVISION, CLANG_SUB_REVISION)
diff --git a/tools/mb/mb.py b/tools/mb/mb.py
index 64e776d..876cb2c 100755
--- a/tools/mb/mb.py
+++ b/tools/mb/mb.py
@@ -1827,7 +1827,6 @@
         cmdline += [
             os.path.join('bin', 'cros_test_wrapper'),
             '--logs-dir=${ISOLATED_OUTDIR}',
-            '--',
         ]
       if is_android:
         extra_files.append('../../build/android/test_wrapper/logdog_wrapper.py')
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 90008586..3a3e9ce 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -418,16 +418,16 @@
       'lacros-amd64-generic-rel-skylab-fyi': 'chromeos_amd64-generic_lacros_rel_fyi_reclient',
       'lacros-arm64-generic-rel-skylab-fyi': 'chromeos_arm64-generic_lacros_rel_fyi_reclient',
       'linux-annotator-rel': 'release_bot_reclient',
-      'linux-ash-chromium-builder-fyi-rel': 'chromeos_with_codecs_release_bot',
+      'linux-ash-chromium-builder-fyi-rel': 'chromeos_with_codecs_release_bot_reclient',
       'linux-backuprefptr-x64-fyi-rel': 'release_trybot_backuprefptr_x64_reclient',
-      'linux-blink-animation-use-time-delta': 'debug_bot_enable_blink_animation_use_time_delta',
+      'linux-blink-animation-use-time-delta': 'debug_bot_enable_blink_animation_use_time_delta_reclient',
       'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_minimal_symbols_tsan',
       'linux-blink-heap-verification': 'release_bot_enable_blink_heap_verification_dcheck_always_on_reclient',
       'linux-blink-v8-sandbox-future-rel': 'release_bot_enable_v8_sandbox_future_dcheck_always_on_reclient',
       'linux-blink-wpt-reset-rel': 'release_bot_blink_minimal_symbols_reclient',
       'linux-chromeos-annotator-rel': 'chromeos_with_codecs_release_bot_reclient',
       'linux-chromeos-code-coverage': 'chromeos_with_codecs_release_bot_coverage_reclient',
-      'linux-code-coverage': 'clang_code_coverage',
+      'linux-code-coverage': 'clang_code_coverage_reclient',
       'linux-example-builder': 'release_bot_reclient',
       'linux-fieldtrial-rel': 'release_bot_minimal_symbols_reclient',
       'linux-headless-shell-rel': 'headless_shell_release_bot_reclient',
@@ -722,8 +722,8 @@
     },
 
     'chromium.updater': {
-      'mac-updater-builder-arm64-dbg': 'updater_debug_bot_arm64',
-      'mac-updater-builder-arm64-rel': 'updater_release_bot_arm64',
+      'mac-updater-builder-arm64-dbg': 'updater_debug_bot_arm64_reclient',
+      'mac-updater-builder-arm64-rel': 'updater_release_bot_arm64_reclient',
       'mac-updater-builder-dbg': 'updater_debug_bot_reclient',
       'mac-updater-builder-rel': 'updater_release_bot_reclient',
       'win-updater-builder-dbg': 'updater_debug_bot_reclient',
@@ -844,9 +844,9 @@
     },
 
     'internal.chromeos.fyi': {
-      'chromeos-betty-pi-arc-chrome-dchecks': 'chromeos_betty-pi-arc_dchecks',
-      'lacros-amd64-generic-chrome-fyi': 'chromeos_amd64-generic_lacros_official_skylab',
-      'lacros-arm-generic-chrome-fyi': 'chromeos_arm-generic_lacros_official_skylab',
+      'chromeos-betty-pi-arc-chrome-dchecks': 'chromeos_betty-pi-arc_dchecks_reclient',
+      'lacros-amd64-generic-chrome-fyi': 'chromeos_amd64-generic_lacros_official_skylab_reclient',
+      'lacros-arm-generic-chrome-fyi': 'chromeos_arm-generic_lacros_official_skylab_reclient',
     },
 
     # Internal codesearch builders.
@@ -944,14 +944,14 @@
     'tryserver.chromium': {
       'android-official': 'android_official_optimize_goma_trybot',
       'fuchsia-official': 'fuchsia_official_optimize_goma_trybot',
-      'linux-official': 'official_optimize_goma_trybot',
+      'linux-official': 'official_optimize_reclient_trybot',
       'mac-official': 'official_optimize_goma_trybot',
       'win-official': 'official_optimize_goma_trybot',
       'win32-official': 'x86_official_optimize_goma_trybot',
     },
 
     'tryserver.chromium.accessibility': {
-      'linux-blink-web-tests-force-accessibility-rel': 'release_bot_blink_accessibility',
+      'linux-blink-web-tests-force-accessibility-rel': 'release_bot_blink_accessibility_reclient',
     },
 
     'tryserver.chromium.android': {
@@ -1068,7 +1068,7 @@
       'lacros-arm-generic-rel': 'chromeos_arm-generic_lacros_rel_dchecks',
       'lacros-arm64-generic-rel': 'chromeos_arm64-generic_lacros_rel_dchecks',
       'lacros-arm64-generic-rel-skylab-fyi': 'chromeos_arm64-generic_lacros_rel_fyi',
-      'linux-cfm-rel': 'linux_cfm_release_trybot',
+      'linux-cfm-rel': 'linux_cfm_release_trybot_reclient',
       'linux-chromeos-annotator-rel': 'chromeos_with_codecs_release_trybot_code_coverage',
       'linux-chromeos-compile-dbg': 'chromeos_with_codecs_debug_bot',
       'linux-chromeos-dbg': 'chromeos_with_codecs_debug_bot',
@@ -1147,22 +1147,22 @@
       'linux-autofill-assistant': 'autofill_assistant_release_trybot',
       'linux-bfcache-rel': 'release_bot_blink',
       'linux-blink-heap-concurrent-marking-tsan-rel': 'release_trybot_tsan',
-      'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification',
+      'linux-blink-heap-verification-try': 'release_trybot_enable_blink_heap_verification_reclient',
       'linux-dcheck-off-rel': 'release_trybot_dcheck_off',
       'linux-example-builder': 'release_trybot',
-      'linux-extended-tracing-rel': 'release_trybot_extended_tracing',
+      'linux-extended-tracing-rel': 'release_trybot_extended_tracing_reclient',
       'linux-fieldtrial-rel': 'release_bot_minimal_symbols',
       'linux-gcc-rel': 'release_bot_minimal_symbols_no_clang',
-      'linux-headless-shell-rel': 'headless_shell_release_bot',
+      'linux-headless-shell-rel': 'headless_shell_release_bot_reclient',
       'linux-inverse-fieldtrials-fyi-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_invert_fieldtrials',
       'linux-lacros-asan-lsan-rel': 'asan_lsan_lacros_release_bot_dcheck_always_on',
       'linux-lacros-fyi-rel': 'lacros_on_linux_release_trybot',
       'linux-lacros-version-skew-fyi': 'lacros_on_linux_release_not_build_ash_bot',
       'linux-layout-tests-edit-ng': 'release_trybot',
       'linux-libfuzzer-asan-rel': 'libfuzzer_asan_release_trybot_reclient',
-      'linux-mbi-mode-per-render-process-host-rel': 'gpu_tests_release_trybot_mbi_mode_per_render_process_host',
+      'linux-mbi-mode-per-render-process-host-rel': 'gpu_tests_release_trybot_mbi_mode_per_render_process_host_reclient',
       'linux-mbi-mode-per-site-instance-rel': 'gpu_tests_release_trybot_mbi_mode_per_site_instance',
-      'linux-perfetto-rel': 'perfetto_release_trybot',
+      'linux-perfetto-rel': 'perfetto_release_trybot_reclient',
       'linux-rel': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_code_coverage_do_typecheck_reclient',
       'linux-rel-inverse-fyi': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_code_coverage_do_typecheck',
       'linux-rel-ml': 'gpu_tests_release_trybot_no_symbols_use_dummy_lastchange_do_typecheck',
@@ -1312,7 +1312,7 @@
       'fuchsia-clang-tidy-rel': 'release_trybot_fuchsia',
       'ios-clang-tidy-rel': 'ios_device_release_compile_only',
       'linux-chromeos-clang-tidy-rel': 'chromeos_with_codecs_release_trybot',
-      'linux-clang-tidy-dbg': 'debug_bot',
+      'linux-clang-tidy-dbg': 'debug_bot_reclient',
       'linux-clang-tidy-rel': 'release_trybot_reclient',
       'linux-lacros-clang-tidy-rel': 'lacros_on_linux_release_trybot',
       'mac-clang-tidy-rel': 'release_trybot',
@@ -2037,6 +2037,9 @@
     'chromeos_amd64-generic_lacros_official_skylab': [
       'chromeos_amd64-generic-crostoolchain', 'lacros', 'official', 'minimal_symbols', 'cfi', 'thin_lto', 'is_skylab',
     ],
+    'chromeos_amd64-generic_lacros_official_skylab_reclient': [
+      'chromeos_amd64-generic-crostoolchain_reclient', 'lacros', 'official', 'minimal_symbols', 'cfi', 'thin_lto', 'is_skylab',
+    ],
 
     'chromeos_amd64-generic_lacros_rel_dchecks': [
       'chromeos_amd64-generic-crostoolchain', 'lacros', 'release', 'dcheck_always_on',
@@ -2171,6 +2174,11 @@
       'use_fake_dbus_clients', 'dcheck_always_on',
       'also_build_lacros_chrome_for_architecture_amd64',
     ],
+    'chromeos_betty-pi-arc_dchecks_reclient': [
+      'chromeos_device_reclient', 'betty-pi-arc', 'include_unwind_tables', 'official',
+      'use_fake_dbus_clients', 'dcheck_always_on',
+      'also_build_lacros_chrome_for_architecture_amd64',
+    ],
 
     'chromeos_eve-arc-r_include_unwind_tables_official': [
       'chromeos_device', 'eve-arc-r', 'include_unwind_tables', 'official',
@@ -2252,10 +2260,6 @@
       'chromeos_with_codecs', 'debug_bot_reclient',
     ],
 
-    'chromeos_with_codecs_release_bot': [
-      'chromeos_with_codecs', 'release_bot',
-    ],
-
     'chromeos_with_codecs_release_bot_coverage_reclient': [
       'chromeos_with_codecs', 'release_bot_reclient', 'use_clang_coverage',
     ],
@@ -2282,10 +2286,6 @@
       'chromeos_with_codecs', 'release_bot_reclient', 'also_build_lacros_chrome'
     ],
 
-    'clang_code_coverage': [
-      'release_bot', 'clang', 'use_clang_coverage', 'no_symbols',
-    ],
-
     'clang_code_coverage_ios_xctest_reclient': [
       'use_clang_coverage', 'debug_static_bot_reclient', 'x64', 'ios', 'xctest', 'ios_disable_xcode_project_generation',
     ],
@@ -2471,8 +2471,8 @@
       'debug_bot_blink_reclient',
     ],
 
-    'debug_bot_enable_blink_animation_use_time_delta': [
-      'debug_bot', 'enable_blink_animation_use_time_delta',
+    'debug_bot_enable_blink_animation_use_time_delta_reclient': [
+      'debug_bot_reclient', 'enable_blink_animation_use_time_delta',
     ],
 
     'debug_bot_fuchsia': [
@@ -2806,8 +2806,8 @@
       'gpu_tests', 'release_trybot', 'invert_fieldtrials',
     ],
 
-    'gpu_tests_release_trybot_mbi_mode_per_render_process_host': [
-      'gpu_tests', 'release_trybot', 'mbi_mode_per_render_process_host'
+    'gpu_tests_release_trybot_mbi_mode_per_render_process_host_reclient': [
+      'gpu_tests', 'release_trybot_reclient', 'mbi_mode_per_render_process_host'
     ],
 
     'gpu_tests_release_trybot_mbi_mode_per_site_instance': [
@@ -2920,10 +2920,6 @@
       'linux_wayland', 'ozone_headless', 'remoting_use_wayland',
     ],
 
-    'headless_shell_release_bot': [
-      'headless_shell', 'release', 'static', 'goma',
-    ],
-
     'headless_shell_release_bot_reclient': [
       'headless_shell', 'release', 'static', 'reclient',
     ],
@@ -3176,8 +3172,8 @@
       'cfm', 'release_bot_reclient', 'chromeos',
     ],
 
-    'linux_cfm_release_trybot': [
-      'cfm', 'release_trybot', 'chromeos',
+    'linux_cfm_release_trybot_reclient': [
+      'cfm', 'release_trybot_reclient', 'chromeos',
     ],
 
     'mac_arm64_gpu_tests_debug_bot_minimal_symbols_no_nacl_reclient': [
@@ -3364,6 +3360,11 @@
     'official_optimize_reclient': [
       'official_optimize_reclient',
     ],
+
+    'official_optimize_reclient_trybot': [
+      'official_optimize_reclient_trybot',
+    ],
+
     'official_reclient': [
        'official', 'reclient',
     ],
@@ -3384,6 +3385,10 @@
       'perfetto', 'release_trybot', 'android', 'x64'
     ],
 
+    'perfetto_release_trybot_reclient': [
+      'perfetto', 'release_trybot_reclient',
+    ],
+
     'presubmit': [
       # The chromium_presubmit bot does not use mb.
       'error',
@@ -3397,10 +3402,6 @@
       'release_bot_blink',
     ],
 
-    'release_bot_blink_accessibility': [
-      'release_bot_blink', 'dcheck_always_on',
-    ],
-
     'release_bot_blink_accessibility_reclient': [
       'release_bot_blink_reclient', 'dcheck_always_on',
     ],
@@ -3592,12 +3593,12 @@
       'release_trybot_dcheck_off',
     ],
 
-    'release_trybot_enable_blink_heap_verification': [
-      'release_trybot_blink', 'enable_blink_heap_verification',
+    'release_trybot_enable_blink_heap_verification_reclient': [
+      'release_trybot_blink_reclient', 'enable_blink_heap_verification',
     ],
 
-    'release_trybot_extended_tracing': [
-      'release_trybot', 'extended_tracing',
+    'release_trybot_extended_tracing_reclient': [
+      'release_trybot_reclient', 'extended_tracing',
     ],
 
     'release_trybot_fuchsia': [
@@ -3672,8 +3673,8 @@
       'updater_on_win_mac', 'debug_static_bot',
     ],
 
-    'updater_debug_bot_arm64': [
-      'arm64', 'updater_on_win_mac', 'debug_static_bot',
+    'updater_debug_bot_arm64_reclient': [
+      'arm64', 'updater_on_win_mac', 'debug_static_bot_reclient',
     ],
 
     'updater_debug_bot_reclient': [
@@ -3684,8 +3685,8 @@
       'updater_on_win_mac', 'debug_static_bot_reclient', 'x86', 'no_symbols',
     ],
 
-    'updater_release_bot_arm64': [
-      'arm64', 'updater_on_win_mac', 'release_bot',
+    'updater_release_bot_arm64_reclient': [
+      'arm64', 'updater_on_win_mac', 'release_bot_reclient',
     ],
 
     'updater_release_bot_reclient': [
@@ -4465,6 +4466,10 @@
       'mixins': ['official_optimize', 'reclient'],
     },
 
+    'official_optimize_reclient_trybot': {
+      'mixins': ['official_optimize', 'reclient', 'minimal_symbols', 'dcheck_always_on'],
+    },
+
     'optimize_for_fuzzing': {
       'gn_args': 'optimize_for_fuzzing=true',
     },
@@ -4588,6 +4593,10 @@
       'mixins': ['release_bot_blink', 'minimal_symbols', 'dcheck_always_on'],
     },
 
+    'release_trybot_blink_reclient': {
+      'mixins': ['release_bot_blink_reclient', 'minimal_symbols', 'dcheck_always_on'],
+    },
+
     'release_trybot_dcheck_off': {
       'mixins': ['release_trybot', 'dcheck_off'],
     },
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json
index 593cd23..31fb6acb 100644
--- a/tools/mb/mb_config_expectations/chromium.fyi.json
+++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -1074,7 +1074,7 @@
       "is_debug": false,
       "proprietary_codecs": true,
       "target_os": "chromeos",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-backuprefptr-x64-fyi-rel": {
@@ -1098,7 +1098,7 @@
       "is_component_build": true,
       "is_debug": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-blink-heap-concurrent-marking-tsan-rel": {
@@ -1175,7 +1175,7 @@
       "is_debug": false,
       "symbol_level": 0,
       "use_clang_coverage": true,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-example-builder": {
diff --git a/tools/mb/mb_config_expectations/chromium.updater.json b/tools/mb/mb_config_expectations/chromium.updater.json
index 7b6304a..44f2bd0f 100644
--- a/tools/mb/mb_config_expectations/chromium.updater.json
+++ b/tools/mb/mb_config_expectations/chromium.updater.json
@@ -6,7 +6,7 @@
       "is_debug": true,
       "symbol_level": 1,
       "target_cpu": "arm64",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "mac-updater-builder-arm64-rel": {
@@ -16,7 +16,7 @@
       "is_component_build": false,
       "is_debug": false,
       "target_cpu": "arm64",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "mac-updater-builder-dbg": {
diff --git a/tools/mb/mb_config_expectations/internal.chromeos.fyi.json b/tools/mb/mb_config_expectations/internal.chromeos.fyi.json
index 60bb951..bc75568a 100644
--- a/tools/mb/mb_config_expectations/internal.chromeos.fyi.json
+++ b/tools/mb/mb_config_expectations/internal.chromeos.fyi.json
@@ -9,8 +9,8 @@
       "is_chromeos_device": true,
       "is_official_build": true,
       "ozone_platform_headless": true,
-      "use_goma": true,
-      "use_real_dbus_clients": false
+      "use_real_dbus_clients": false,
+      "use_remoteexec": true
     }
   },
   "lacros-amd64-generic-chrome-fyi": {
@@ -26,7 +26,7 @@
       "ozone_platform_headless": true,
       "symbol_level": 1,
       "target_os": "chromeos",
-      "use_goma": true,
+      "use_remoteexec": true,
       "use_thin_lto": true
     }
   },
@@ -43,7 +43,7 @@
       "ozone_platform_headless": true,
       "symbol_level": 1,
       "target_os": "chromeos",
-      "use_goma": true,
+      "use_remoteexec": true,
       "use_thin_lto": true
     }
   }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json b/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json
index 0d841a2..d11b1e4 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.accessibility.json
@@ -6,7 +6,7 @@
       "is_component_build": false,
       "is_debug": false,
       "proprietary_codecs": true,
-      "use_goma": true
+      "use_remoteexec": true
     }
   }
 }
\ No newline at end of file
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json b/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json
index b138351..980f091 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.chromiumos.json
@@ -263,7 +263,7 @@
       "is_debug": false,
       "symbol_level": 0,
       "target_os": "chromeos",
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-chromeos-annotator-rel": {
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.json b/tools/mb/mb_config_expectations/tryserver.chromium.json
index e25468d..320e36f5 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.json
@@ -23,7 +23,7 @@
       "dcheck_always_on": true,
       "is_official_build": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "mac-official": {
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
index 4bc2af4c..1dcd5b2 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -232,7 +232,7 @@
       "is_debug": false,
       "proprietary_codecs": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-dcheck-off-rel": {
@@ -260,7 +260,7 @@
       "is_component_build": false,
       "is_debug": false,
       "symbol_level": 0,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-fieldtrial-rel": {
@@ -292,7 +292,7 @@
       "media_use_ffmpeg": false,
       "media_use_libvpx": false,
       "proprietary_codecs": false,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-inverse-fieldtrials-fyi-rel": {
@@ -380,7 +380,7 @@
       "mbi_mode": "per_render_process_host",
       "proprietary_codecs": true,
       "symbol_level": 0,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-mbi-mode-per-site-instance-rel": {
@@ -401,8 +401,8 @@
       "is_component_build": false,
       "is_debug": false,
       "symbol_level": 0,
-      "use_goma": true,
-      "use_perfetto_client_library": true
+      "use_perfetto_client_library": true,
+      "use_remoteexec": true
     }
   },
   "linux-rel": {
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json b/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json
index d661c32..9d3bd4c 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.tricium.json
@@ -55,7 +55,7 @@
       "is_component_build": true,
       "is_debug": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux-clang-tidy-rel": {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index f8f2892..32b676f 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -66925,6 +66925,7 @@
   <int value="8" label="kRemoting"/>
   <int value="9" label="kCastStreaming"/>
   <int value="10" label="kContentEmbedderDefined"/>
+  <int value="11" label="kTest"/>
 </enum>
 
 <enum name="MediaResponseCacheType">
@@ -75968,6 +75969,49 @@
   <int value="1800" label="Kerberos Accounts V2"/>
 </enum>
 
+<enum name="OSStatus_Audio">
+  <int value="-1852797029" label="IllegalOperationError_ActiveStream"/>
+  <int value="-560947818" label="kAudioHardwareBadObjectError_ActiveStream"/>
+  <int value="-10879" label="kAudioUnitErr_InvalidProperty"/>
+  <int value="-10878" label="kAudioUnitErr_InvalidParameter"/>
+  <int value="-10877" label="kAudioUnitErr_InvalidElement"/>
+  <int value="-10876" label="kAudioUnitErr_NoConnection"/>
+  <int value="-10875" label="kAudioUnitErr_FailedInitialization"/>
+  <int value="-10874" label="kAudioUnitErr_TooManyFramesToProcess"/>
+  <int value="-10873" label="kAudioUnitErr_IllegalInstrument"/>
+  <int value="-10872" label="kAudioUnitErr_InstrumentTypeNotFound"/>
+  <int value="-10871" label="kAudioUnitErr_InvalidFile"/>
+  <int value="-10870" label="kAudioUnitErr_UnknownFileType"/>
+  <int value="-10869" label="kAudioUnitErr_FileNotSpecified"/>
+  <int value="-10868" label="kAudioUnitErr_FormatNotSupported"/>
+  <int value="-10867" label="kAudioUnitErr_Uninitialized"/>
+  <int value="-10866" label="kAudioUnitErr_InvalidScope"/>
+  <int value="-10865" label="kAudioUnitErr_PropertyNotWritable"/>
+  <int value="-10864" label="kAUGraphErr_InvalidAudioUnit"/>
+  <int value="-10863" label="Err_CannotDoInCurrentContext"/>
+  <int value="-10862" label="kAUGraphErr_OutputNodeErr"/>
+  <int value="10862" label="kAUGraphErr_OutputNodeErr_ActiveStream"/>
+  <int value="10863" label="Err_CannotDoInCurrentContext_ActiveStream"/>
+  <int value="10864" label="kAUGraphErr_InvalidAudioUnit_ActiveStream"/>
+  <int value="10865" label="kAudioUnitErr_PropertyNotWritable_ActiveStream"/>
+  <int value="10866" label="kAudioUnitErr_InvalidScope_ActiveStream"/>
+  <int value="10867" label="kAudioUnitErr_Uninitialized_ActiveStream"/>
+  <int value="10868" label="kAudioUnitErr_FormatNotSupported_ActiveStream"/>
+  <int value="10869" label="kAudioUnitErr_FileNotSpecified_ActiveStream"/>
+  <int value="10870" label="kAudioUnitErr_UnknownFileType_ActiveStream"/>
+  <int value="10871" label="kAudioUnitErr_InvalidFile_ActiveStream"/>
+  <int value="10872" label="kAudioUnitErr_InstrumentTypeNotFound_ActiveStream"/>
+  <int value="10873" label="kAudioUnitErr_IllegalInstrument_ActiveStream"/>
+  <int value="10874" label="kAudioUnitErr_TooManyFramesToProcess_ActiveStream"/>
+  <int value="10875" label="kAudioUnitErr_FailedInitialization_ActiveStream"/>
+  <int value="10876" label="kAudioUnitErr_NoConnection_ActiveStream"/>
+  <int value="10877" label="kAudioUnitErr_InvalidElement_ActiveStream"/>
+  <int value="10878" label="kAudioUnitErr_InvalidParameter_ActiveStream"/>
+  <int value="10879" label="kAudioUnitErr_InvalidProperty_ActiveStream"/>
+  <int value="560947818" label="kAudioHardwareBadObjectError"/>
+  <int value="1852797029" label="IllegalOperationError"/>
+</enum>
+
 <enum name="OsSuite">
   <int value="0" label="Windows Home Edition (or unknown)"/>
   <int value="1" label="Windows Professional/Ultimate Editions"/>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml
index 6aeca6f..2004d23 100644
--- a/tools/metrics/histograms/metadata/autofill/histograms.xml
+++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -254,7 +254,7 @@
 
 <histogram
     name="Autofill.Ablation.FillDurationSinceInteraction.{FormType}.{Group}"
-    units="ms" expires_after="M112">
+    units="ms" expires_after="M108">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-team@google.com</owner>
   <summary>
@@ -269,7 +269,7 @@
 
 <histogram
     name="Autofill.Ablation.FormSubmissionAfterInteraction.{FormType}.{Group}"
-    enum="Boolean" expires_after="M112">
+    enum="Boolean" expires_after="M108">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-team@google.com</owner>
   <summary>
@@ -982,7 +982,8 @@
 </histogram>
 
 <histogram name="Autofill.CreditCardFillingInfoBar"
-    enum="AutofillCreditCardInfoBar" expires_after="2022-12-12">
+    enum="AutofillCreditCardInfoBar" expires_after="2023-09-30">
+  <owner>jsaul@google.com</owner>
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1137,7 +1138,7 @@
 </histogram>
 
 <histogram name="Autofill.DaysSinceLastUse.Profile" units="days"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1173,7 +1174,7 @@
 </histogram>
 
 <histogram name="Autofill.DeveloperEngagement"
-    enum="AutofillDeveloperEngagement" expires_after="2022-12-12">
+    enum="AutofillDeveloperEngagement" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1385,7 +1386,7 @@
 
 <histogram
     name="Autofill.FieldPredictionQuality.Aggregate{AutofillFieldPredictionSource}"
-    enum="AutofillFieldPredictionQuality" expires_after="2022-12-12">
+    enum="AutofillFieldPredictionQuality" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1401,7 +1402,7 @@
 
 <histogram
     name="Autofill.FieldPredictionQuality.ByFieldType{AutofillFieldPredictionSource}"
-    enum="AutofillFieldPredictionQualityByFieldType" expires_after="2022-12-12">
+    enum="AutofillFieldPredictionQualityByFieldType" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1416,7 +1417,7 @@
 </histogram>
 
 <histogram name="Autofill.FieldPrediction{AutofillFieldPredictionSource}"
-    units="units" expires_after="2022-12-12">
+    units="units" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1433,7 +1434,7 @@
 
 <histogram
     name="Autofill.FillDuration.FromInteraction.WithAutofill{AutofillFormType}"
-    units="units" expires_after="2022-12-12">
+    units="units" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1449,7 +1450,7 @@
 
 <histogram
     name="Autofill.FillDuration.FromInteraction.WithoutAutofill{AutofillFormType}"
-    units="units" expires_after="2022-12-12">
+    units="units" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1464,7 +1465,7 @@
 </histogram>
 
 <histogram name="Autofill.FillDuration.FromLoad.WithAutofill" units="units"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1473,7 +1474,7 @@
 </histogram>
 
 <histogram name="Autofill.FillDuration.FromLoad.WithoutAutofill" units="units"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -1569,7 +1570,7 @@
 </histogram>
 
 <histogram name="Autofill.FormEvents.Address{AutofillDataAvailability}"
-    enum="AutofillFormEvent" expires_after="2022-12-12">
+    enum="AutofillFormEvent" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>jsaul@google.com</owner>
   <summary>
@@ -1722,7 +1723,7 @@
 </histogram>
 
 <histogram name="Autofill.Funnel.FillAfterSuggestion{AutofillFormType}"
-    enum="BooleanAutofillFillAfterSuggestion" expires_after="2022-12-12">
+    enum="BooleanAutofillFillAfterSuggestion" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -1742,7 +1743,7 @@
 <histogram
     name="Autofill.Funnel.InteractionAfterParsedAsType{AutofillFormType}"
     enum="BooleanAutofillInteractionAfterParsedAsType"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -1765,7 +1766,7 @@
 </histogram>
 
 <histogram name="Autofill.Funnel.ParsedAsType{AutofillFormType}"
-    enum="BooleanAutofillParsedAsType" expires_after="2022-12-12">
+    enum="BooleanAutofillParsedAsType" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -1781,7 +1782,7 @@
 </histogram>
 
 <histogram name="Autofill.Funnel.SubmissionAfterFill{AutofillFormType}"
-    enum="BooleanAutofillSubmissionAfterFill" expires_after="2022-12-12">
+    enum="BooleanAutofillSubmissionAfterFill" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -1795,7 +1796,7 @@
 </histogram>
 
 <histogram name="Autofill.Funnel.SuggestionAfterInteraction{AutofillFormType}"
-    enum="BooleanAutofillSuggestionAfterInteraction" expires_after="2022-12-12">
+    enum="BooleanAutofillSuggestionAfterInteraction" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -1848,7 +1849,7 @@
 </histogram>
 
 <histogram name="Autofill.HiddenOrPresentationalSelectFieldsFilled"
-    enum="BooleanHiddenPresentationalAutofilled" expires_after="2022-12-12">
+    enum="BooleanHiddenPresentationalAutofilled" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -2006,7 +2007,7 @@
 </histogram>
 
 <histogram name="Autofill.KeyMetrics.FillingAcceptance{AutofillFormType}"
-    enum="BooleanAutofillFillingAcceptance" expires_after="2022-12-12">
+    enum="BooleanAutofillFillingAcceptance" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -2020,7 +2021,7 @@
 </histogram>
 
 <histogram name="Autofill.KeyMetrics.FillingAssistance{AutofillFormType}"
-    enum="BooleanAutofillFillingAssistance" expires_after="2022-12-12">
+    enum="BooleanAutofillFillingAssistance" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -2037,7 +2038,7 @@
 </histogram>
 
 <histogram name="Autofill.KeyMetrics.FillingCorrectness{AutofillFormType}"
-    enum="BooleanAutofillFillingCorrectness" expires_after="2022-12-12">
+    enum="BooleanAutofillFillingCorrectness" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -2049,7 +2050,7 @@
 </histogram>
 
 <histogram name="Autofill.KeyMetrics.FillingReadiness{AutofillFormType}"
-    enum="BooleanAutofillFillingReadiness" expires_after="2022-12-12">
+    enum="BooleanAutofillFillingReadiness" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -2066,7 +2067,7 @@
 
 <histogram
     name="Autofill.KeyMetrics.FormSubmission.Autofilled{AutofillFormType}"
-    enum="BooleanAutofillSubmission" expires_after="2022-12-12">
+    enum="BooleanAutofillSubmission" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -2084,7 +2085,7 @@
 
 <histogram
     name="Autofill.KeyMetrics.FormSubmission.NotAutofilled{AutofillFormType}"
-    enum="BooleanAutofillSubmission" expires_after="2022-12-12">
+    enum="BooleanAutofillSubmission" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>kolos@chromium.org</owner>
   <owner>nepper@chromium.org</owner>
@@ -2349,7 +2350,7 @@
 </histogram>
 
 <histogram name="Autofill.NumberOfProfilesRemovedDuringDedupe" units="profiles"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -2775,7 +2776,7 @@
 </histogram>
 
 <histogram name="Autofill.PageTranslationStatus" enum="Boolean"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>koerber@google.com</owner>
   <owner>chrome-autofill-team@google.com</owner>
   <summary>
@@ -3209,7 +3210,7 @@
 </histogram>
 
 <histogram name="Autofill.QueriedCreditCardFormIsSecure" enum="BooleanSecure"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3228,7 +3229,7 @@
 </histogram>
 
 <histogram name="Autofill.Query.FailingPayloadSize" units="bytes"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3256,14 +3257,14 @@
 </histogram>
 
 <histogram name="Autofill.Query.RequestDuration" units="ms"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>The duration of a network request for a query.</summary>
 </histogram>
 
 <histogram name="Autofill.Query.WasInCache" enum="BooleanCacheHit"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3272,7 +3273,7 @@
 </histogram>
 
 <histogram name="Autofill.RationalizationQuality.PhoneNumber"
-    enum="AutofillRationalizationQualityMetric" expires_after="2022-12-12">
+    enum="AutofillRationalizationQualityMetric" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3354,7 +3355,7 @@
 </histogram>
 
 <histogram name="Autofill.ScanCreditCard.Duration{CreditCardScanSuccess}"
-    units="ms" expires_after="2022-12-12">
+    units="ms" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3423,14 +3424,14 @@
 </histogram>
 
 <histogram name="Autofill.ServerQueryResponse" enum="AutofillQueryResult"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>The usefulness of Autofill server information.</summary>
 </histogram>
 
 <histogram name="Autofill.ServerResponseHasDataForForm"
-    enum="BooleanHadPredictions" expires_after="2022-12-12">
+    enum="BooleanHadPredictions" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3544,7 +3545,7 @@
 </histogram>
 
 <histogram name="Autofill.StoredProfileCountAtAutofillableFormSubmission"
-    units="units" expires_after="2022-12-12">
+    units="units" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3785,7 +3786,7 @@
 
 <histogram
     name="Autofill.SuggestionAcceptedIndex{AutofillSuggestionAcceptedIndexSuggestionType}"
-    units="position" expires_after="2022-12-12">
+    units="position" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -3990,7 +3991,7 @@
 </histogram>
 
 <histogram name="Autofill.Upload.FailingPayloadSize" units="bytes"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -4032,7 +4033,7 @@
 </histogram>
 
 <histogram name="Autofill.UploadEvent{AutofillUploadEvents}" enum="BooleanSent"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -4090,7 +4091,7 @@
 </histogram>
 
 <histogram name="Autofill.UserHappiness{AutofillFormType}"
-    enum="AutofillUserHappiness" expires_after="2022-12-12">
+    enum="AutofillUserHappiness" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -4371,7 +4372,7 @@
 </histogram>
 
 <histogram name="Autofill.WalletAddressConversionType"
-    enum="AutofillWalletAddressConversionType" expires_after="2022-12-12">
+    enum="AutofillWalletAddressConversionType" expires_after="2023-12-12">
   <owner>battre@chromium.org</owner>
   <owner>chrome-autofill-alerts@google.com</owner>
   <summary>
@@ -4381,7 +4382,7 @@
 </histogram>
 
 <histogram name="Autofill.WebOTP.OneTimeCode.FillDuration.FromInteraction"
-    units="ms" expires_after="2022-12-12">
+    units="ms" expires_after="2023-12-12">
   <owner>yigu@chromium.org</owner>
   <owner>battre@chromium.org</owner>
   <owner>web-identity@google.com</owner>
@@ -4395,7 +4396,7 @@
 </histogram>
 
 <histogram name="Autofill.WebOTP.OneTimeCode.FillDuration.FromLoad" units="ms"
-    expires_after="2022-12-12">
+    expires_after="2023-12-12">
   <owner>yigu@chromium.org</owner>
   <owner>battre@chromium.org</owner>
   <owner>web-identity@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml
index b070087..8a270f2 100644
--- a/tools/metrics/histograms/metadata/blink/histograms.xml
+++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -1145,7 +1145,7 @@
 </histogram>
 
 <histogram name="Blink.Fetch.ReducedUserAgent" enum="Boolean"
-    expires_after="M110">
+    expires_after="M111">
   <owner>miketaylr@chromium.org</owner>
   <owner>victortan@chromium.org</owner>
   <owner>potassium-katabolism@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml
index c09b7b5..e420736 100644
--- a/tools/metrics/histograms/metadata/cookie/histograms.xml
+++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -544,6 +544,19 @@
   </summary>
 </histogram>
 
+<histogram name="Cookie.NameOrValueHtab" enum="BooleanValid"
+    expires_after="2023-05-01">
+  <owner>bingler@chromium.org</owner>
+  <owner>awillia@chromium.org</owner>
+  <summary>
+    Records whether or not a cookie has internal HTABs in either its name or
+    value. Leading and trailing HTABs are ignored.
+
+    This metric is recorded every time CanonicalCookie::Create is called,
+    regardless whether the cookie is successfully created or not.
+  </summary>
+</histogram>
+
 <histogram name="Cookie.NumDomainPurgedKeys" units="keys"
     expires_after="2022-08-28">
   <owner>cfredric@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
index df75d64..8c789758 100644
--- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
+++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -600,7 +600,7 @@
 </histogram>
 
 <histogram name="TrustedWebActivity.ExtraCommandSuccess.{command}"
-    enum="BooleanSuccess" expires_after="2022-11-23">
+    enum="BooleanSuccess" expires_after="2023-11-01">
   <owner>mvanouwerkerk@google.com</owner>
   <owner>peconn@chromium.org</owner>
   <owner>
@@ -663,7 +663,7 @@
 </histogram>
 
 <histogram name="TrustedWebActivity.Notification.PermissionRequestResult"
-    enum="ContentSetting" expires_after="2022-12-04">
+    enum="ContentSetting" expires_after="2023-11-01">
   <owner>mvanouwerkerk@chromium.org</owner>
   <owner>peconn@chromium.org</owner>
   <owner>
diff --git a/tools/metrics/histograms/metadata/download/histograms.xml b/tools/metrics/histograms/metadata/download/histograms.xml
index 5b4dc51..1b04c88 100644
--- a/tools/metrics/histograms/metadata/download/histograms.xml
+++ b/tools/metrics/histograms/metadata/download/histograms.xml
@@ -1268,15 +1268,19 @@
   </summary>
 </histogram>
 
-<histogram name="Download.Session.IsDownloadBubbleShowingWhenSessionEnds"
+<histogram name="Download.Session.IsDownloadBubbleShowingWhenSession{Status}"
     enum="BooleanShowing" expires_after="2023-04-30">
   <owner>xinghuilu@chromium.org</owner>
   <owner>chrome-counter-abuse-alerts@google.com</owner>
   <summary>
-    Records if the download bubble is showing when session ends. See the
+    Records if the download bubble is showing when session {Status}. See the
     description in Session.TotalDuration for how session ends is defined. This
     histogram is added for debugging purpose and will be removed afterwards.
   </summary>
+  <token key="Status">
+    <variant name="Ends" summary="ends"/>
+    <variant name="Starts" summary="starts"/>
+  </token>
 </histogram>
 
 <histogram name="Download.Session.TotalDurationIncludingBubbleTime" units="ms"
diff --git a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
index 1467725..f4ee3be 100644
--- a/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
+++ b/tools/metrics/histograms/metadata/histogram_suffixes_list.xml
@@ -9250,13 +9250,6 @@
       name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"/>
 </histogram_suffixes>
 
-<histogram_suffixes name="ServiceWorkerCache_Cache" separator=".">
-  <suffix name="MatchAll2"
-      label="The time to perform the 'matchAll' operation on a ServiceWorker
-             Cache, which does a mass cache lookup."/>
-  <affected-histogram name="ServiceWorkerCache.Cache"/>
-</histogram_suffixes>
-
 <histogram_suffixes name="ServiceWorkerCache_Cache_MatchSuffixes" separator=".">
   <owner>wanderview@chromium.org</owner>
   <suffix name="Hit"
@@ -9356,10 +9349,7 @@
       label="Collected from a BackgroundSyncManager instance"/>
   <suffix name="Cache" label="Collected from a CacheStorageCache instance"/>
   <suffix name="CacheStorage" label="Collected from a CacheStorage instance"/>
-  <affected-histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow"/>
-  <affected-histogram name="ServiceWorkerCache.Scheduler.OperationDuration"/>
   <affected-histogram name="ServiceWorkerCache.Scheduler.OperationDuration2"/>
-  <affected-histogram name="ServiceWorkerCache.Scheduler.QueueDuration"/>
   <affected-histogram name="ServiceWorkerCache.Scheduler.QueueDuration2"/>
   <affected-histogram name="ServiceWorkerCache.Scheduler.QueueLength"/>
 </histogram_suffixes>
@@ -9380,14 +9370,10 @@
   <suffix name="WriteIndex" label=""/>
   <suffix name="WriteSideData" label=""/>
   <affected-histogram
-      name="ServiceWorkerCache.Cache.Scheduler.IsOperationSlow"/>
-  <affected-histogram
       name="ServiceWorkerCache.Cache.Scheduler.OperationDuration2"/>
   <affected-histogram name="ServiceWorkerCache.Cache.Scheduler.QueueDuration2"/>
   <affected-histogram name="ServiceWorkerCache.Cache.Scheduler.QueueLength"/>
   <affected-histogram
-      name="ServiceWorkerCache.CacheStorage.Scheduler.IsOperationSlow"/>
-  <affected-histogram
       name="ServiceWorkerCache.CacheStorage.Scheduler.OperationDuration2"/>
   <affected-histogram
       name="ServiceWorkerCache.CacheStorage.Scheduler.QueueDuration2"/>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml
index a2a5e1b..516ad90 100644
--- a/tools/metrics/histograms/metadata/media/histograms.xml
+++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -1361,15 +1361,6 @@
   <summary>Audio codec profile used in HTML5 media for AAC playback.</summary>
 </histogram>
 
-<histogram name="Media.AudioInputCbErrorMac" units="OSStatus"
-    expires_after="2023-07-29">
-  <owner>henrika@chromium.org</owner>
-  <owner>webrtc-audio@google.com</owner>
-  <summary>
-    Error codes that AudioUnitRender() returns in AUAudioInputStream on Mac.
-  </summary>
-</histogram>
-
 <histogram name="Media.AudioInputController" units="ms" expires_after="never">
 <!-- expires-never: Audio pipeline health metric. -->
 
@@ -1590,11 +1581,9 @@
 </histogram>
 
 <histogram name="Media.AudioRendererImpl.SinkStatus" enum="OutputDeviceStatus"
-    expires_after="2022-12-12">
-  <owner>armax@chromium.org</owner>
-  <owner>dalecurtis@chromium.org</owner>
-  <owner>guidou@chromium.org</owner>
+    expires_after="2023-11-02">
   <owner>olka@chromium.org</owner>
+  <owner>fhernqvist@google.com</owner>
   <summary>
     Status of audio sink used by AudioRendererImpl. If not OK, a NullAudioSink
     will be used for audio output instead. This is logged for every call to
@@ -3186,10 +3175,13 @@
   </summary>
 </histogram>
 
-<histogram name="Media.InputErrorMac" units="OSStatus" expires_after="never">
+<histogram name="Media.InputErrorMac" enum="OSStatus_Audio"
+    expires_after="never">
 <!-- expires-never: essential indicator for audio input stability in Chrome -->
 
-  <owner>henrika@chromium.org</owner>
+  <owner>olka@chromium.org</owner>
+  <owner>fhernqvist@google.com</owner>
+  <owner>henrika@hromium.org</owner>
   <owner>webrtc-audio@google.com</owner>
   <summary>
     Error codes that we encounter while setting up an AUAudioInputStream on Mac.
diff --git a/tools/metrics/histograms/metadata/mobile/histograms.xml b/tools/metrics/histograms/metadata/mobile/histograms.xml
index 7532939..edccfa63 100644
--- a/tools/metrics/histograms/metadata/mobile/histograms.xml
+++ b/tools/metrics/histograms/metadata/mobile/histograms.xml
@@ -147,6 +147,16 @@
   </summary>
 </histogram>
 
+<histogram name="Mobile.ContextMenu.LensWebImageProcessTime" units="ms"
+    expires_after="2023-10-31">
+  <owner>hujasonx@google.com</owner>
+  <owner>lens-in-bling-team@google.com</owner>
+  <summary>
+    Logs the time it takes to process an image before sending it to Lens.
+    Recorded when Lens is used from any entry point.
+  </summary>
+</histogram>
+
 <histogram name="Mobile.ContextMenu.LensWebUploadStatus"
     enum="IOSLensWebUploadStatus" expires_after="2023-06-23">
   <owner>hujasonx@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml
index 82e2236..9b33292 100644
--- a/tools/metrics/histograms/metadata/navigation/histograms.xml
+++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -1688,7 +1688,7 @@
 
 <histogram
     name="Prerender.Experimental.ActivationNavigationParamsMatch{PrerenderTriggerType}"
-    enum="PrerenderActivationNavigationParamsMatch" expires_after="2022-12-05">
+    enum="PrerenderActivationNavigationParamsMatch" expires_after="2023-06-05">
   <owner>nhiroki@chromium.org</owner>
   <owner>chrome-prerendering@google.com</owner>
   <summary>
@@ -1785,7 +1785,7 @@
 
 <histogram
     name="Prerender.Experimental.PrerenderCancelledInterface{PrerenderTriggerType}"
-    enum="PrerenderCancelledInterface" expires_after="2022-12-05">
+    enum="PrerenderCancelledInterface" expires_after="2023-06-05">
   <owner>nhiroki@chromium.org</owner>
   <owner>toyoshim@chromium.org</owner>
   <owner>lingqi@chromium.org</owner>
@@ -1799,7 +1799,7 @@
 
 <histogram
     name="Prerender.Experimental.PrerenderCancelledUnknownInterface{PrerenderTriggerType}"
-    enum="PrerenderCancelledUnknownInterface" expires_after="2022-12-05">
+    enum="PrerenderCancelledUnknownInterface" expires_after="2023-06-05">
   <owner>nhiroki@chromium.org</owner>
   <owner>toyoshim@chromium.org</owner>
   <owner>lingqi@chromium.org</owner>
@@ -1848,7 +1848,7 @@
 
 <histogram
     name="Prerender.Experimental.PrerenderHostFinalStatus{PrerenderTriggerType}"
-    enum="PrerenderHostFinalStatus" expires_after="2022-12-05">
+    enum="PrerenderHostFinalStatus" expires_after="2023-06-05">
   <owner>nhiroki@chromium.org</owner>
   <owner>toyoshim@chromium.org</owner>
   <owner>lingqi@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml
index 6e0a003..42a79983 100644
--- a/tools/metrics/histograms/metadata/others/histograms.xml
+++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -7863,7 +7863,24 @@
 
   <owner>calamity@chromium.org</owner>
   <owner>grt@chromium.org</owner>
-  <summary>The different ways Chrome is launched.</summary>
+  <summary>
+    The different ways Chrome is launched.
+
+    This metric is gradually being replaced with an improved version. See
+    tracking bug http://crbug.com/1366137
+
+    Warnings about this version of this metric.
+
+    1. If user starts Chrome while Chrome is already running, this reports
+    incorrect data. See http://crbug.com/1067205
+
+    2. On ChromeOS, if a user session-restores multiple profiles, each profile
+    records this metric. See http://crbug.com/1356222
+
+    3. When the profile picker is shown on startup (which can only happen on
+    Windows, Mac, and Linux), this metric is not recorded. See
+    http://crbug.com/1380458
+  </summary>
 </histogram>
 
 <histogram name="Layout.MicroSecondsPerComplexText" units="microseconds"
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml
index ffcfcb6..dbc603c 100644
--- a/tools/metrics/histograms/metadata/password/histograms.xml
+++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -3448,7 +3448,7 @@
 </histogram>
 
 <histogram name="PasswordManager.{Store}TotalAccountsHiRes2.WithScheme{Scheme}"
-    units="accounts" expires_after="2022-11-30">
+    units="accounts" expires_after="2023-11-30">
   <owner>battre@chromium.org</owner>
   <owner>mamir@chromium.org</owner>
   <owner>treib@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml
index d1df8071..465f979e 100644
--- a/tools/metrics/histograms/metadata/power/histograms.xml
+++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -550,6 +550,46 @@
   </summary>
 </histogram>
 
+<histogram
+    name="Power.AdaptiveChargingDelayDelta{AdaptiveChargingState}.{OnTimeStatus}"
+    units="minutes" expires_after="2023-10-26">
+  <owner>dbasehore@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    The difference between the correct delay time and the actual delay time for
+    Adaptive Charging, as computed by (correct delay - actual delay) in minutes.
+    Adaptive Charging delays charging from a hold charge percentage, 80%, to
+    full if it predicts the charger will be unplugged more than 2 hours in the
+    future. The correct delay time ends exactly 2 hours before the user unplugs
+    the charger. This metric is recorded upon unplug of an AC charger, if the
+    hold percent was reached.
+
+    We record this under several variants, which split this result by whether
+    Adaptive Charging is enabled and active, a heuristic disabled the feature,
+    the user canceled the feature for this use, the user disabled the feature,
+    or the feature is not supported on the hardware class. We still record the
+    metric if the feature is not supported, since we may backport support to
+    older systems, and we'd like to know how well the ML model does before
+    enabling support.
+
+    Since metrics don't work with negative values, this is additionally split
+    across Late and Early variants. The absolute values of negatives are
+    reported under the Late variant. Positive and 0 values are reported under
+    the Early variant.
+  </summary>
+  <token key="AdaptiveChargingState">
+    <variant name="Active"/>
+    <variant name="HeuristicDisabled"/>
+    <variant name="NotSupported"/>
+    <variant name="UserCanceled"/>
+    <variant name="UserDisabled"/>
+  </token>
+  <token key="OnTimeStatus">
+    <variant name="Early"/>
+    <variant name="Late"/>
+  </token>
+</histogram>
+
 <histogram name="Power.AdaptiveChargingMinutes.{ReportType}" units="minutes"
     expires_after="2023-03-19">
   <owner>dbasehore@chromium.org</owner>
@@ -606,6 +646,30 @@
   </token>
 </histogram>
 
+<histogram name="Power.AdaptiveChargingMinutesFullOnAC{AdaptiveChargingState}"
+    units="minutes" expires_after="2023-10-26">
+  <owner>dbasehore@chromium.org</owner>
+  <owner>chromeos-platform-power@google.com</owner>
+  <summary>
+    This shows the time spent fully charged while on AC in minutes.
+
+    We record this under several variants, which split this result by whether
+    Adaptive Charging is enabled and active, a heuristic disabled the feature,
+    the user canceled the feature for this use, the user disabled the feature,
+    or the feature is not supported on the hardware class. We still record the
+    metric if the feature is not supported, since we may backport support to
+    older systems, and we'd like to know how well the ML model does before
+    enabling support.
+  </summary>
+  <token key="AdaptiveChargingState">
+    <variant name="Active"/>
+    <variant name="HeuristicDisabled"/>
+    <variant name="NotSupported"/>
+    <variant name="UserCanceled"/>
+    <variant name="UserDisabled"/>
+  </token>
+</histogram>
+
 <histogram name="Power.AdaptiveChargingMinutesToFull" units="minutes"
     expires_after="2023-03-19">
   <owner>dbasehore@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/profile/histograms.xml b/tools/metrics/histograms/metadata/profile/histograms.xml
index 80d01e6..fcff304 100644
--- a/tools/metrics/histograms/metadata/profile/histograms.xml
+++ b/tools/metrics/histograms/metadata/profile/histograms.xml
@@ -329,7 +329,7 @@
 </histogram>
 
 <histogram name="Profile.LacrosFre.WelcomeHasGivenName" enum="Boolean"
-    expires_after="M106">
+    expires_after="M111">
   <owner>dgn@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
   <summary>
@@ -341,7 +341,7 @@
 </histogram>
 
 <histogram name="Profile.LacrosPrimaryProfileFirstRunEntryPoint"
-    enum="LacrosFirstRunEntryPoint" expires_after="2022-11-13">
+    enum="LacrosFirstRunEntryPoint" expires_after="2023-04-23">
   <owner>dgn@chromium.org</owner>
   <owner>droger@chromium.org</owner>
   <summary>
@@ -354,7 +354,7 @@
 </histogram>
 
 <histogram name="Profile.LacrosPrimaryProfileFirstRunOutcome"
-    enum="ProfileSignedInFlowOutcome" expires_after="2022-11-13">
+    enum="ProfileSignedInFlowOutcome" expires_after="2023-04-23">
   <owner>dgn@chromium.org</owner>
   <owner>droger@chromium.org</owner>
   <summary>
@@ -840,7 +840,7 @@
 </histogram>
 
 <histogram name="ProfilePicker.StartupTime.MainViewInitialized" units="ms"
-    expires_after="2022-11-13">
+    expires_after="2023-04-23">
   <owner>alexilin@chromium.org</owner>
   <owner>dgn@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
@@ -851,7 +851,7 @@
 </histogram>
 
 <histogram name="ProfilePicker.StartupTime.WebViewCreated" units="ms"
-    expires_after="2022-11-13">
+    expires_after="2023-04-23">
   <owner>alexilin@chromium.org</owner>
   <owner>dgn@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml
index 221fe31..227f6978 100644
--- a/tools/metrics/histograms/metadata/service/histograms.xml
+++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -1229,9 +1229,8 @@
 </histogram>
 
 <histogram name="ServiceWorkerCache.Cache" units="ms"
-    expires_after="2022-12-02">
+    expires_after="2023-06-24">
   <owner>wanderview@chromium.org</owner>
-  <owner>dmurph@chromium.org</owner>
   <owner>chrome-owp-storage@google.com</owner>
   <summary>
     The time to perform operations on the Cache object in the ServiceWorker
@@ -1274,7 +1273,6 @@
 
 <histogram name="ServiceWorkerCache.CacheStorage" units="ms"
     expires_after="2023-04-09">
-  <owner>dmurph@chromium.org</owner>
   <owner>wanderview@chromium.org</owner>
   <owner>chrome-owp-storage@google.com</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml
index ddf60ce..beab5ac 100644
--- a/tools/metrics/histograms/metadata/sharing/histograms.xml
+++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -551,7 +551,7 @@
 </histogram>
 
 <histogram name="Sharing.SharingHubAndroid.{DetailedContentType}.{ShareStatus}"
-    enum="LinkToggleState" expires_after="M110">
+    enum="LinkToggleState" expires_after="M115">
   <owner>sophey@chromium.org</owner>
   <owner>src/chrome/browser/share/OWNERS</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml
index 6cfd62a..535fd43 100644
--- a/tools/metrics/histograms/metadata/storage/histograms.xml
+++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -182,7 +182,7 @@
 </histogram>
 
 <histogram name="LevelDBEnv.DeleteTableBackupFile" enum="BooleanSuccess"
-    expires_after="2022-12-04">
+    expires_after="2023-08-01">
   <owner>cmumford@chromium.org</owner>
   <owner>chrome-owp-storage@google.com</owner>
   <summary>
@@ -208,7 +208,7 @@
 </histogram>
 
 <histogram name="LevelDBWrapper.CommitDelay" units="ms"
-    expires_after="2022-12-04">
+    expires_after="2023-08-01">
   <owner>ayui@chromium.org</owner>
   <owner>chrome-owp-storage@google.com</owner>
   <summary>
diff --git a/tools/perf/benchmarks/jetstream2.py b/tools/perf/benchmarks/jetstream2.py
index 5f62c7f..6c66e1e 100644
--- a/tools/perf/benchmarks/jetstream2.py
+++ b/tools/perf/benchmarks/jetstream2.py
@@ -41,4 +41,10 @@
     return 'jetstream2'
 
   def CreateStorySet(self, options):
-    return page_sets.Jetstream2StorySet()
+    return page_sets.Jetstream2StorySet(options.test_list)
+
+  @classmethod
+  def AddBenchmarkCommandLineArgs(cls, parser):
+    parser.add_option('--test-list',
+                      type="string",
+                      help="Only run specific tests, seperated by commas.")
diff --git a/tools/perf/contrib/power/cpu_powerups.sql b/tools/perf/contrib/power/cpu_powerups.sql
new file mode 100644
index 0000000..b74e622cc
--- /dev/null
+++ b/tools/perf/contrib/power/cpu_powerups.sql
@@ -0,0 +1,172 @@
+-- Find causes for CPUs powering up.
+--
+-- Copyright 2022 The Chromium Authors
+--
+-- Use of this source code is governed by a BSD-style license that can be
+-- found in the LICENSE file.
+
+-- The scripts below analyse traces with the following tracing options
+-- enabled:
+--
+--  - Linux kernel:
+---    "power/*", "sched/*", "task/*",
+--  - Chromium:
+--      "toplevel", "toplevel.flow".
+
+-- Tables of note:
+--
+--   first_top_level_slice_after_cpu_power_up :: Top-level slices that ran
+--      after a CPU power-up.
+
+-- The CPU power transitions in the trace.
+--
+-- Schema:
+--   ts          : The timestamp at the start of the slice.
+--   dur         : The duration of the slice.
+--   cpu         : The CPU on which the transition occurred
+--   power_state : The power state that the CPU was in at time 'ts' for
+--                 duration 'dur'.
+--   previous_power_state : The power state that the CPU was previously in.
+--   power_slice_id       : A unique ID for the slice.
+--
+-- Power states are encoded as non-negative integers, with zero representing
+-- full-power operation and positive values representing increasingly deep
+-- sleep states.
+--
+-- On ARM systems, power state 1 represents the WFI (Wait For Interrupt) sleep
+-- state that the CPU enters while idle.
+DROP VIEW IF EXISTS cpu_power_slice;
+CREATE VIEW cpu_power_slice AS
+  WITH cpu_power_states AS (
+    SELECT
+      c.id AS id,
+      cct.cpu AS cpu,
+      c.ts AS ts,
+      -- Encode the 'value' field as a power state.
+      CAST((CASE c.value WHEN 4294967295 THEN 0 ELSE c.value + 1 END)
+        AS INT) AS power_state
+    FROM counter AS c
+    JOIN cpu_counter_track AS cct
+      ON c.track_id = cct.id
+    WHERE cct.name = 'cpuidle'
+  )
+  SELECT *
+  FROM (
+    SELECT
+      ts,
+      LEAD(ts) OVER (PARTITION BY cpu ORDER BY ts ASC) - ts
+        AS dur,
+      cpu,
+      power_state,
+      LAG(power_state) OVER (PARTITION BY cpu ORDER BY ts ASC)
+        AS previous_power_state,
+      id AS power_slice_id
+    FROM cpu_power_states
+  )
+  WHERE dur IS NOT NULL
+    AND previous_power_state IS NOT NULL
+    AND power_state = 0                      -- Track full-power states.
+    AND power_state != previous_power_state  -- Skip missing spans.
+    ORDER BY ts ASC;
+
+-- We do not want scheduler slices with utid = 0 (the 'swapper' kernel thread).
+DROP VIEW IF EXISTS valid_sched_slice;
+CREATE VIEW valid_sched_slice AS
+  SELECT *
+  FROM sched_slice
+  WHERE utid != 0;
+
+-- Join scheduler slices with the spans with CPU power slices.
+--
+-- There multiple scheduler slices could fall into one CPU power slice.
+--
+---  CPU Power:
+--   |----------------------------|....................|---------|
+--   A       <cpu active>         B     <cpu idling>   C         D
+
+--   Scheduler slices on that CPU:
+--     |-----T1-----| |....T2....|                      |---T3--|
+--     E            F G          H                      I       J
+--
+-- Here threads T1 and T2 executed in CPU power slice [A,B].  The
+-- time between F and G represents time between threads in the kernel.
+DROP TABLE IF EXISTS sched_and_power_slice;
+CREATE VIRTUAL TABLE sched_and_power_slice
+USING
+  SPAN_JOIN(cpu_power_slice PARTITIONED cpu,
+            valid_sched_slice PARTITIONED cpu);
+
+-- The Linux scheduler slices that executed immediately after a
+-- CPU power up.
+--
+-- Schema:
+--   ts         : The timestamp at the start of the slice.
+--   dur        : The duration of the slice.
+--   cpu        : The cpu on which the slice executed.
+--   sched_id   : Id for the sched_slice table.
+--   utid       : Unique id for the thread that ran within the slice.
+--   previous_power_state : The CPU's power state before this slice.
+DROP VIEW IF EXISTS first_sched_slice_after_cpu_power_up;
+CREATE VIEW first_sched_slice_after_cpu_power_up AS
+  SELECT
+    ts,
+    dur,
+    cpu,
+    id,
+    utid,
+    previous_power_state,
+    power_slice_id
+  FROM sched_and_power_slice
+  WHERE power_state = 0     -- Power-ups only.
+  GROUP BY cpu, power_slice_id
+  HAVING ts = MIN(ts)       -- There will only be one MIN sched slice per CPU.
+  ORDER BY ts ASC;
+
+-- A view joining thread tracks and top-level slices.
+--
+-- This view is intended to be intersected by time with the scheduler
+-- slices scheduled after a CPU power up.
+--
+-- Schema:
+--   utid     : Thread unique id.
+--   slice_id : The slice_id for the top-level slice.
+--   ts       : Starting timestamp for the slice.
+--   dur      : The duration for the slice.
+DROP VIEW IF EXISTS thread_slices;
+CREATE VIEW thread_slices AS
+  SELECT t.utid, s.id AS slice_id, s.ts AS ts, s.dur AS dur
+  FROM slice AS s
+  JOIN thread_track AS t
+    ON s.track_id = t.id
+  WHERE s.depth = 0
+  ORDER BY ts ASC;
+
+-- A table holding the slices that executed within the scheduler
+-- slice that ran on a CPU immediately after power-up.
+--
+-- Schema:
+--   ts       : Timestamp of the resulting slice
+--   dur      : Duration of the slice.
+--   cpu      : The CPU the sched slice ran on.
+--   utid     : Unique thread id for the slice.
+--   sched_id : 'id' field from the sched_slice table.
+--   type     : From the sched_slice table, always 'sched_slice'.
+--   end_state : The ending state for the sched_slice
+--   priority : The kernel thread priority
+--   slice_id : Id of the top-level slice for this (sched) slice.
+DROP TABLE IF EXISTS slices_after_cpu_power_up;
+CREATE VIRTUAL TABLE slices_after_cpu_power_up
+USING
+  SPAN_JOIN(first_sched_slice_after_cpu_power_up PARTITIONED utid,
+            thread_slices PARTITIONED utid);
+
+-- The first top-level slice that ran after a CPU power-up.
+DROP VIEW IF EXISTS first_top_level_slice_after_cpu_power_up;
+CREATE VIEW first_top_level_slice_after_cpu_power_up AS
+  SELECT slice_id, previous_power_state
+  FROM slices_after_cpu_power_up
+  GROUP BY cpu, power_slice_id
+  HAVING ts = MIN(ts)
+  ORDER BY ts ASC;
+
+SELECT "cpu_powerups"; -- Keep the Perfetto trace processor's |.read| happy.
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index 8a85915..73f2cb2 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,8 +5,8 @@
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "win": {
-            "hash": "18d0103c2a2b08215dcfb6b4f4b695803acccea7",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/0cbb37ad93ee2bfcf4c1b0bc3e136eadbe4fb467/trace_processor_shell.exe"
+            "hash": "1aba577a3550db8ad57a3eb7efebb5c20493054c",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/21523f457bf0af5ba8e3d33a687e9643e797f607/trace_processor_shell.exe"
         },
         "linux_arm": {
             "hash": "58893933be305d3bfe0a72ebebcacde2ac3ca893",
@@ -14,7 +14,7 @@
         },
         "mac": {
             "hash": "6f2840b72c0f8cab5e2f26ad39fe4a9aaebf955b",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/0cbb37ad93ee2bfcf4c1b0bc3e136eadbe4fb467/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/21523f457bf0af5ba8e3d33a687e9643e797f607/trace_processor_shell"
         },
         "mac_arm64": {
             "hash": "92318bea34f5c9beec69d2d826a9a92ec9d3cdcd",
@@ -22,7 +22,7 @@
         },
         "linux": {
             "hash": "2ef6d0c4d75184e5139cfab6a4485ddfd488a1ae",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/0cbb37ad93ee2bfcf4c1b0bc3e136eadbe4fb467/trace_processor_shell"
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/06c0150ef04cb2b72c8df56acd8d22a185d81cb7/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/tools/perf/page_sets/jetstream2_pages.py b/tools/perf/page_sets/jetstream2_pages.py
index c4fe35b..6450035 100644
--- a/tools/perf/page_sets/jetstream2_pages.py
+++ b/tools/perf/page_sets/jetstream2_pages.py
@@ -10,8 +10,13 @@
   URL = 'http://browserbench.org/JetStream/'
   NAME = 'JetStream2'
 
-  def __init__(self, page_set):
+  def __init__(self, page_set, test_list):
     super(Jetstream2Story, self).__init__(page_set)
+    if test_list is not None:
+      assert not self.script_to_evaluate_on_commit
+      self.script_to_evaluate_on_commit = """
+          window.testList = "%s"
+      """ % (test_list)
 
   def ExecuteTest(self, action_runner):
     action_runner.tab.WaitForDocumentReadyStateToBeComplete()
@@ -73,9 +78,9 @@
 
 
 class Jetstream2StorySet(story.StorySet):
-  def __init__(self):
+  def __init__(self, test_list=None):
     super(Jetstream2StorySet, self).__init__(
         archive_data_file='data/jetstream2.json',
         cloud_storage_bucket=story.INTERNAL_BUCKET)
 
-    self.AddStory(Jetstream2Story(self))
+    self.AddStory(Jetstream2Story(self, test_list))
diff --git a/ui/accessibility/platform/BUILD.gn b/ui/accessibility/platform/BUILD.gn
index 11de200..c531455 100644
--- a/ui/accessibility/platform/BUILD.gn
+++ b/ui/accessibility/platform/BUILD.gn
@@ -133,6 +133,8 @@
       "fuchsia/semantic_provider.h",
       "fuchsia/semantic_provider_impl.cc",
       "fuchsia/semantic_provider_impl.h",
+      "inspect/ax_event_recorder_fuchsia.cc",
+      "inspect/ax_event_recorder_fuchsia.h",
     ]
 
     public_deps += [
diff --git a/ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.cc b/ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.cc
new file mode 100644
index 0000000..60af0ed
--- /dev/null
+++ b/ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.cc
@@ -0,0 +1,27 @@
+// Copyright 2021 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.h"
+
+#include <ostream>
+
+#include "ui/accessibility/platform/inspect/ax_inspect.h"
+
+namespace ui {
+
+// static
+AXEventRecorderFuchsia* AXEventRecorderFuchsia::instance_ = nullptr;
+
+AXEventRecorderFuchsia::AXEventRecorderFuchsia(base::ProcessId pid,
+                                               const AXTreeSelector& selector) {
+  CHECK(!instance_) << "There can be only one instance of"
+                    << " AccessibilityEventRecorder at a time.";
+  instance_ = this;
+}
+
+AXEventRecorderFuchsia::~AXEventRecorderFuchsia() {
+  instance_ = nullptr;
+}
+
+}  // namespace ui
diff --git a/ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.h b/ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.h
new file mode 100644
index 0000000..157edbe
--- /dev/null
+++ b/ui/accessibility/platform/inspect/ax_event_recorder_fuchsia.h
@@ -0,0 +1,31 @@
+// Copyright 2021 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_EVENT_RECORDER_FUCHSIA_H_
+#define UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_EVENT_RECORDER_FUCHSIA_H_
+
+#include "base/process/process_handle.h"
+#include "ui/accessibility/ax_export.h"
+#include "ui/accessibility/platform/inspect/ax_event_recorder.h"
+
+namespace ui {
+
+struct AXTreeSelector;
+
+class AX_EXPORT AXEventRecorderFuchsia : public AXEventRecorder {
+ public:
+  AXEventRecorderFuchsia(base::ProcessId pid, const AXTreeSelector& selector);
+
+  AXEventRecorderFuchsia(const AXEventRecorderFuchsia&) = delete;
+  AXEventRecorderFuchsia& operator=(const AXEventRecorderFuchsia&) = delete;
+
+  ~AXEventRecorderFuchsia() override;
+
+ private:
+  static AXEventRecorderFuchsia* instance_;
+};
+
+}  // namespace ui
+
+#endif  // UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_EVENT_RECORDER_FUCHSIA_H_
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
index 9d579bd..95c9079 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -651,6 +651,7 @@
 <translation id="6495925982925244349"><ph name="NETWORK_INDEX" /> 番目のネットワーク(全 <ph name="NETWORK_COUNT" /> 件)、<ph name="NETWORK_NAME" />、<ph name="SECURITY_STATUS" />、<ph name="CONNECTION_STATUS" />、信号強度 <ph name="SIGNAL_STRENGTH" />%、管理者によって管理、詳細</translation>
 <translation id="649877868557234318"><ph name="FILE_NAME" /> を <ph name="FOLDER_NAME" /> に展開しています</translation>
 <translation id="6499681088828539489">共有ネットワークのプロキシを許可しない</translation>
+<translation id="6503285896705205014"><ph name="COUNT" /> 個のファイルのコピーは管理者が設定したポリシーによってブロックされています</translation>
 <translation id="6509122719576673235">ノルウェー語</translation>
 <translation id="6528513914570774834">このデバイスの他のユーザーにこのネットワークの使用を許可する</translation>
 <translation id="653019979737152879"><ph name="FILE_NAME" /> を同期しています...</translation>
@@ -753,6 +754,7 @@
 <translation id="7357762654218998920">このファイル形式はサポートされていません。Chrome OS でファイルを開く方法については、<ph name="BEGIN_LINK_HELP" />こちら<ph name="END_LINK_HELP" />をご覧ください。</translation>
 <translation id="7359359531237882347"><ph name="NUMBER_OF_ITEMS" /> 個のアイテムをコピーしています...</translation>
 <translation id="7375951387215729722">ファイルの一覧は <ph name="COLUMN_NAME" /> の降順で並べ替えられています。</translation>
+<translation id="7377161162143020057">このファイルのコピーは管理者が設定したポリシーによってブロックされています</translation>
 <translation id="7402503521691663770">ChromeOS Flex デバイス</translation>
 <translation id="7408870451288633753">チェコ語</translation>
 <translation id="7417453074306512035">エチオピア語キーボード</translation>
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index 8981b39..98200f6 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -301,7 +301,7 @@
     : desktop_window_tree_host_(nullptr),
       ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET),
       content_window_(new aura::Window(this)),
-      native_widget_delegate_(delegate),
+      native_widget_delegate_(delegate->AsWidget()->GetWeakPtr()),
       last_drop_operation_(ui::DragDropTypes::DRAG_NONE),
       restore_focus_on_activate_(false),
       cursor_(gfx::kNullCursor),
@@ -317,10 +317,7 @@
     // `native_widget_delegate_` to avoid holding a briefly dangling ptr.
     drop_helper_.reset();
     window_reorderer_.reset();
-    //  Use `ClearAndDelete` here to stop referencing the underlying pointer and
-    //  free its memory. Compared to raw delete calls, this avoids the raw_ptr
-    //  to be temporarily dangling.
-    native_widget_delegate_.ClearAndDelete();
+    owned_native_widget_delegate.reset();
   } else {
     CloseNow();
   }
@@ -392,7 +389,8 @@
   bool should_delete_this =
       (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) ||
       (ownership_ == Widget::InitParams::CLIENT_OWNS_WIDGET);
-  native_widget_delegate_->OnNativeWidgetDestroyed();
+  if (native_widget_delegate_)
+    native_widget_delegate_->OnNativeWidgetDestroyed();
   if (should_delete_this)
     delete this;
 }
@@ -553,6 +551,10 @@
   widget_type_ = params.type;
   name_ = params.name;
 
+  if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
+    owned_native_widget_delegate =
+        base::WrapUnique(native_widget_delegate_.get());
+
   content_window_->AcquireAllPropertiesFrom(
       std::move(params.init_properties_container));
 
@@ -566,7 +568,7 @@
       desktop_window_tree_host_ = params.desktop_window_tree_host;
     } else {
       desktop_window_tree_host_ =
-          DesktopWindowTreeHost::Create(native_widget_delegate_, this);
+          DesktopWindowTreeHost::Create(native_widget_delegate_.get(), this);
     }
     host_.reset(desktop_window_tree_host_->AsWindowTreeHost());
   }
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
index be2544c8..bc2b717 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.h
@@ -113,10 +113,6 @@
   // DesktopWindowTreeHost's transparency.
   void UpdateWindowTransparency();
 
-  void set_delegate_for_testing(internal::NativeWidgetDelegate* delegate) {
-    native_widget_delegate_ = delegate;
-  }
-
   base::WeakPtr<internal::NativeWidgetPrivate> GetWeakPtr() override;
 
  protected:
@@ -299,9 +295,12 @@
   // WARNING: this may be NULL, in particular during shutdown it becomes NULL.
   raw_ptr<aura::Window, DanglingUntriaged> content_window_;
 
-  // TODO(crbug.com/1346381) Change delegate to a WeakPtr after
-  // removing ownership model.
-  raw_ptr<internal::NativeWidgetDelegate> native_widget_delegate_;
+  base::WeakPtr<internal::NativeWidgetDelegate> native_widget_delegate_;
+
+  // This is a unique ptr to enforce scenarios where NativeWidget
+  // will own the NativeWidgetDelegate.
+  // Used for ownership model: NativeWidgetOwnsWidget.
+  std::unique_ptr<internal::NativeWidgetDelegate> owned_native_widget_delegate;
 
   std::unique_ptr<wm::FocusController> focus_client_;
   std::unique_ptr<aura::client::ScreenPositionClient> position_client_;
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
index 7514563..2f95c53 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura_unittest.cc
@@ -370,6 +370,23 @@
   run_loop.Run();
 }
 
+// DesktopNativeWidgetAura::CloseNow is protected.
+// Create a new object to override CloseNow so we can test deleting
+// the native widget.
+class TestDesktopNativeWidgetAura : public DesktopNativeWidgetAura {
+ public:
+  explicit TestDesktopNativeWidgetAura(internal::NativeWidgetDelegate* delegate)
+      : DesktopNativeWidgetAura(delegate) {}
+
+  TestDesktopNativeWidgetAura(const TestDesktopNativeWidgetAura&) = delete;
+  TestDesktopNativeWidgetAura& operator=(const TestDesktopNativeWidgetAura&) =
+      delete;
+
+  ~TestDesktopNativeWidgetAura() override = default;
+
+  void CloseNow() override { DesktopNativeWidgetAura::CloseNow(); }
+};
+
 class DesktopNativeWidgetAuraWithNoDelegateTest
     : public DesktopNativeWidgetAuraTest {
  public:
@@ -386,23 +403,26 @@
   // testing::Test overrides:
   void SetUp() override {
     DesktopNativeWidgetAuraTest::SetUp();
-    // This gets destroyed by Widget.
-    desktop_native_widget = new DesktopNativeWidgetAura(widget.get());
+    desktop_native_widget = new TestDesktopNativeWidgetAura(widget.get());
     Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
-    params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+    params.ownership = views::Widget::InitParams::CLIENT_OWNS_WIDGET;
     params.native_widget = desktop_native_widget;
     widget->Init(std::move(params));
-    desktop_native_widget->set_delegate_for_testing(nullptr);
+
+    // Widget will create a DefaultWidgetDelegate if no delegates are provided.
+    // Call Widget::OnNativeWidgetDestroyed() to destroy
+    // the WidgetDelegate properly.
+    widget->OnNativeWidgetDestroyed();
+    widget.reset();
   }
 
   void TearDown() override {
-    desktop_native_widget->set_delegate_for_testing(widget.get());
-    widget.reset();
+    desktop_native_widget->CloseNow();
     ViewsTestBase::TearDown();
   }
 
   std::unique_ptr<Widget> widget;
-  raw_ptr<DesktopNativeWidgetAura> desktop_native_widget = nullptr;
+  raw_ptr<TestDesktopNativeWidgetAura> desktop_native_widget;
 };
 
 // Verifies having a null NativeWidgetDelegate doesn't crash.
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
index 36889a5..4ed33f3 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc
@@ -373,7 +373,8 @@
   platform_window()->PrepareForShutdown();
 
   ReleaseCapture();
-  native_widget_delegate_->OnNativeWidgetDestroying();
+  if (native_widget_delegate_)
+    native_widget_delegate_->OnNativeWidgetDestroying();
 
   // If we have children, close them. Use a copy for iteration because they'll
   // remove themselves.
diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
index 1bdb899..7fe6a03a 100644
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
+++ b/ui/views/widget/desktop_aura/desktop_window_tree_host_win.cc
@@ -843,7 +843,9 @@
 }
 
 bool DesktopWindowTreeHostWin::IsModal() const {
-  return native_widget_delegate_->IsModal();
+  if (native_widget_delegate_)
+    return native_widget_delegate_->IsModal();
+  return false;
 }
 
 int DesktopWindowTreeHostWin::GetInitialShowState() const {
@@ -961,7 +963,8 @@
 
 void DesktopWindowTreeHostWin::HandleDestroying() {
   drag_drop_client_->OnNativeWidgetDestroying(GetHWND());
-  native_widget_delegate_->OnNativeWidgetDestroying();
+  if (native_widget_delegate_)
+    native_widget_delegate_->OnNativeWidgetDestroying();
 
   // Destroy the compositor before destroying the HWND since shutdown
   // may try to swap to the window.
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index 632e022..b6cc28b5a 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -124,7 +124,7 @@
 // NativeWidgetAura, public:
 
 NativeWidgetAura::NativeWidgetAura(internal::NativeWidgetDelegate* delegate)
-    : delegate_(delegate),
+    : delegate_(delegate->AsWidget()->GetWeakPtr()),
       window_(new aura::Window(this, aura::client::WINDOW_TYPE_UNKNOWN)),
       ownership_(Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) {
   aura::client::SetFocusChangeObserver(window_, this);
@@ -186,6 +186,8 @@
   DCHECK(params.parent || params.context);
 
   ownership_ = params.ownership;
+  if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET)
+    owned_delegate_ = base::WrapUnique(delegate_.get());
 
   window_->AcquireAllPropertiesFrom(
       std::move(params.init_properties_container));
@@ -1225,10 +1227,7 @@
     // briefly dangling ptr.
     drop_helper_.reset();
     window_reorderer_.reset();
-    //  Use `ClearAndDelete` here to stop referencing the underlying pointer and
-    //  free its memory. Compared to raw delete calls, this avoids the raw_ptr
-    //  to be temporarily dangling.
-    delegate_.ClearAndDelete();
+    owned_delegate_.reset();
   } else {
     CloseNow();
   }
diff --git a/ui/views/widget/native_widget_aura.h b/ui/views/widget/native_widget_aura.h
index a4639d5..ad0f9f5 100644
--- a/ui/views/widget/native_widget_aura.h
+++ b/ui/views/widget/native_widget_aura.h
@@ -232,21 +232,16 @@
   // aura::TransientWindowObserver:
   void OnTransientParentChanged(aura::Window* new_parent) override;
 
-  void set_delegate_for_testing(internal::NativeWidgetDelegate* delegate) {
-    delegate_ = delegate;
-  }
-
  protected:
   ~NativeWidgetAura() override;
 
-  internal::NativeWidgetDelegate* delegate() { return delegate_; }
+  internal::NativeWidgetDelegate* delegate() { return delegate_.get(); }
 
  private:
   void SetInitialFocus(ui::WindowShowState show_state);
 
-  // TODO(crbug.com/1346381) Change delegate to a WeakPtr after
-  // removing ownership model.
-  raw_ptr<internal::NativeWidgetDelegate> delegate_;
+  base::WeakPtr<internal::NativeWidgetDelegate> delegate_;
+  std::unique_ptr<internal::NativeWidgetDelegate> owned_delegate_;
 
   // WARNING: set to NULL when destroyed. As the Widget is not necessarily
   // destroyed along with |window_| all usage of |window_| should first verify
diff --git a/ui/views/widget/native_widget_aura_unittest.cc b/ui/views/widget/native_widget_aura_unittest.cc
index f808a103..0835fea6 100644
--- a/ui/views/widget/native_widget_aura_unittest.cc
+++ b/ui/views/widget/native_widget_aura_unittest.cc
@@ -875,6 +875,19 @@
   EXPECT_EQ(restore_bounds, window->bounds());
 }
 
+// NativeWidgetAura has a protected destructor.
+// Use a test object that overrides the destructor for unit tests.
+class TestNativeWidgetAura : public NativeWidgetAura {
+ public:
+  explicit TestNativeWidgetAura(internal::NativeWidgetDelegate* delegate)
+      : NativeWidgetAura(delegate) {}
+
+  TestNativeWidgetAura(const TestNativeWidgetAura&) = delete;
+  TestNativeWidgetAura& operator=(const TestNativeWidgetAura&) = delete;
+
+  ~TestNativeWidgetAura() override = default;
+};
+
 // Series of tests that verifies having a null NativeWidgetDelegate doesn't
 // crash.
 class NativeWidgetAuraWithNoDelegateTest : public NativeWidgetAuraTest {
@@ -891,23 +904,26 @@
   // testing::Test overrides:
   void SetUp() override {
     NativeWidgetAuraTest::SetUp();
-    // This gets destroyed by Widget.
-    native_widget = new NativeWidgetAura(widget.get());
+    native_widget = new TestNativeWidgetAura(widget.get());
     Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
-    params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+    params.ownership = views::Widget::InitParams::CLIENT_OWNS_WIDGET;
     params.native_widget = native_widget;
     widget->Init(std::move(params));
-    native_widget->set_delegate_for_testing(nullptr);
+
+    // Widget will create a DefaultWidgetDelegate if no delegates are provided.
+    // Call Widget::OnNativeWidgetDestroyed() to destroy
+    // the WidgetDelegate properly.
+    widget->OnNativeWidgetDestroyed();
+    widget.reset();
   }
 
   void TearDown() override {
-    native_widget->set_delegate_for_testing(widget.get());
-    widget.reset();
+    native_widget->CloseNow();
     ViewsTestBase::TearDown();
   }
 
   std::unique_ptr<Widget> widget;
-  raw_ptr<NativeWidgetAura> native_widget = nullptr;
+  raw_ptr<TestNativeWidgetAura> native_widget;
 };
 
 TEST_F(NativeWidgetAuraWithNoDelegateTest, OnCaptureLostTest) {
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index ed305e3..427aa55 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -5315,13 +5315,15 @@
             widget, false, nullptr);
     return init_params;
   };
-  Widget owner_dialog_widget(
+  Widget owner_dialog_widget;
+  owner_dialog_widget.Init(
       create_params(&owner_dialog_widget, top_level_widget->GetNativeView()));
   owner_dialog_widget.Show();
   HWND owner_hwnd = HWNDForWidget(&owner_dialog_widget);
 
   // Create the owned modal dialog.
-  Widget owned_dialog_widget(
+  Widget owned_dialog_widget;
+  owned_dialog_widget.Init(
       create_params(&owned_dialog_widget, owner_dialog_widget.GetNativeView()));
   owned_dialog_widget.Show();
   HWND owned_hwnd = HWNDForWidget(&owned_dialog_widget);
diff --git a/ui/webui/resources/cr_components/history_clusters/clusters.ts b/ui/webui/resources/cr_components/history_clusters/clusters.ts
index 3340e06..c9a013e 100644
--- a/ui/webui/resources/cr_components/history_clusters/clusters.ts
+++ b/ui/webui/resources/cr_components/history_clusters/clusters.ts
@@ -174,6 +174,10 @@
     this.onQueryChangedByUserListenerId_ =
         this.callbackRouter_.onQueryChangedByUser.addListener(
             this.onQueryChangedByUser_.bind(this));
+
+    if (this.inSidePanel_) {
+      this.pageHandler_.showSidePanelUI();
+    }
   }
 
   override disconnectedCallback() {
@@ -344,15 +348,11 @@
     // Do this on browser idle to avoid jank and to give the DOM a chance to be
     // updated with the results we just got.
     this.onBrowserIdle_().then(() => {
-      if (this.scrollHeight <= this.clientHeight) {
+      if (this.scrollHeight <= this.clientHeight && this.result_.canLoadMore) {
         this.onLoadMoreButtonClick_();
       }
     });
     this.showSpinner_ = false;
-
-    if (this.inSidePanel_) {
-      this.pageHandler_.showSidePanelUI();
-    }
   }
 
   /**
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn
index 70f35e07..40bbf71 100644
--- a/weblayer/BUILD.gn
+++ b/weblayer/BUILD.gn
@@ -155,6 +155,8 @@
     "app/main.cc",
     "browser/accept_languages_service_factory.cc",
     "browser/accept_languages_service_factory.h",
+    "browser/autocomplete_scheme_classifier_impl.cc",
+    "browser/autocomplete_scheme_classifier_impl.h",
     "browser/autofill_client_impl.cc",
     "browser/autofill_client_impl.h",
     "browser/background_download_service_factory.cc",
@@ -313,12 +315,6 @@
     "browser/translate_client_impl.h",
     "browser/translate_ranker_factory.cc",
     "browser/translate_ranker_factory.h",
-    "browser/url_bar/autocomplete_scheme_classifier_impl.cc",
-    "browser/url_bar/autocomplete_scheme_classifier_impl.h",
-    "browser/url_bar/page_info_delegate_impl.cc",
-    "browser/url_bar/page_info_delegate_impl.h",
-    "browser/url_bar/url_bar_controller_impl.cc",
-    "browser/url_bar/url_bar_controller_impl.h",
     "browser/web_contents_view_delegate_impl.cc",
     "browser/web_contents_view_delegate_impl.h",
     "browser/web_data_service_factory.cc",
@@ -382,7 +378,6 @@
     "public/profile.h",
     "public/tab.h",
     "public/tab_observer.h",
-    "public/url_bar_controller.h",
     "renderer/content_renderer_client_impl.cc",
     "renderer/content_renderer_client_impl.h",
     "renderer/error_page_helper.cc",
@@ -702,10 +697,6 @@
       "browser/translate_compact_infobar.h",
       "browser/tts_environment_android_impl.cc",
       "browser/tts_environment_android_impl.h",
-      "browser/url_bar/page_info_client_impl.cc",
-      "browser/url_bar/page_info_client_impl.h",
-      "browser/url_bar/trusted_cdn_observer.cc",
-      "browser/url_bar/trusted_cdn_observer.h",
       "browser/verdict_cache_manager_factory.cc",
       "browser/verdict_cache_manager_factory.h",
       "browser/webapps/webapk_install_scheduler.cc",
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/PageInfoTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/PageInfoTest.java
deleted file mode 100644
index 61d458e..0000000
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/PageInfoTest.java
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer.test;
-
-import static androidx.test.espresso.Espresso.onView;
-import static androidx.test.espresso.action.ViewActions.click;
-import static androidx.test.espresso.assertion.ViewAssertions.matches;
-import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static androidx.test.espresso.matcher.ViewMatchers.withText;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.View;
-
-import androidx.test.espresso.ViewInteraction;
-import androidx.test.filters.SmallTest;
-
-import org.hamcrest.Matcher;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.chromium.base.StrictModeContext;
-import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.base.test.util.CriteriaNotSatisfiedException;
-import org.chromium.base.test.util.DisabledTest;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.weblayer.PageInfoDisplayOptions;
-import org.chromium.weblayer.TestWebLayer;
-import org.chromium.weblayer.shell.InstrumentationActivity;
-
-/**
- * Tests the behavior of the Page Info UI.
- */
-@RunWith(WebLayerJUnit4ClassRunner.class)
-public class PageInfoTest {
-    private static final String CONNECTION_IS_NOT_SECURE_TEXT = "Connection is not secure";
-
-    @Rule
-    public InstrumentationActivityTestRule mActivityTestRule =
-            new InstrumentationActivityTestRule();
-
-    private ViewInteraction onViewWaiting(Matcher<View> matcher) {
-        CriteriaHelper.pollInstrumentationThread(() -> {
-            try {
-                onView(matcher).check(matches(isDisplayed()));
-            } catch (Error e) {
-                throw new CriteriaNotSatisfiedException(e.toString());
-            }
-        });
-        return onView(matcher);
-    }
-
-    @Test
-    @SmallTest
-    public void testPageInfoLaunches() {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_TEXT_CLICKABLE, false);
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(
-                mActivityTestRule.getTestDataURL("simple_page.html"), extras);
-
-        Context remoteContext = TestWebLayer.getRemoteContext(activity.getApplicationContext());
-        String packageName =
-                TestWebLayer.getWebLayerContext(activity.getApplicationContext()).getPackageName();
-        int buttonId = ResourceUtil.getIdentifier(remoteContext, "id/security_button", packageName);
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
-                EventUtils.simulateTouchCenterOfView(activity.findViewById(buttonId));
-            }
-        });
-        onViewWaiting(withText(CONNECTION_IS_NOT_SECURE_TEXT));
-    }
-
-    @Test
-    @SmallTest
-    public void testShowPageInfo() {
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(
-                mActivityTestRule.getTestDataURL("simple_page.html"));
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
-                PageInfoDisplayOptions options =
-                        PageInfoDisplayOptions.builder().showPublisherUrl().build();
-                activity.getBrowser().getUrlBarController().showPageInfo(options);
-            }
-        });
-        onViewWaiting(withText(CONNECTION_IS_NOT_SECURE_TEXT));
-    }
-
-    @Test
-    @SmallTest
-    public void testSingleTappableContainer() {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_TEXT_CLICKABLE, true);
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(
-                mActivityTestRule.getTestDataURL("simple_page.html"), extras);
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
-                EventUtils.simulateTouchCenterOfView(activity.getUrlBarView());
-            }
-        });
-        onViewWaiting(withText(CONNECTION_IS_NOT_SECURE_TEXT));
-    }
-
-    @Test
-    @SmallTest
-    @DisabledTest(message = "https://crbug.com/1312569")
-    public void testPageInfoConnectionSubPage() {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_TEXT_CLICKABLE, true);
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(
-                mActivityTestRule.getTestDataURL("simple_page.html"), extras);
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
-                EventUtils.simulateTouchCenterOfView(activity.getUrlBarView());
-            }
-        });
-        onViewWaiting(withText(CONNECTION_IS_NOT_SECURE_TEXT)).perform(click());
-        onViewWaiting(withText("The identity of this website isn't verified."));
-    }
-
-    @Test
-    @SmallTest
-    @DisabledTest(message = "https://crbug.com/1188735")
-    public void testPageInfoCookiesSubPage() {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_TEXT_CLICKABLE, true);
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(
-                mActivityTestRule.getTestDataURL("simple_page.html"), extras);
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) {
-                EventUtils.simulateTouchCenterOfView(activity.getUrlBarView());
-            }
-        });
-        onViewWaiting(withText("Cookies")).perform(click());
-        onViewWaiting(withText("0 cookies in use"));
-    }
-}
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/UrlBarControllerTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/UrlBarControllerTest.java
deleted file mode 100644
index fa803cb..0000000
--- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/UrlBarControllerTest.java
+++ /dev/null
@@ -1,333 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer.test;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.drawable.BitmapDrawable;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.util.Pair;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-import androidx.test.filters.SmallTest;
-
-import org.hamcrest.Matchers;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.chromium.base.CommandLine;
-import org.chromium.base.test.util.AnnotationRule;
-import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.Criteria;
-import org.chromium.base.test.util.CriteriaHelper;
-import org.chromium.base.test.util.DisabledTest;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.net.test.util.TestWebServer;
-import org.chromium.weblayer.Tab;
-import org.chromium.weblayer.TestWebLayer;
-import org.chromium.weblayer.shell.InstrumentationActivity;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-import java.util.concurrent.ExecutionException;
-
-/**
- * Test class to test UrlBarController logic.
- */
-@RunWith(WebLayerJUnit4ClassRunner.class)
-@DisabledTest(message = "https://crbug.com/1315403")
-public class UrlBarControllerTest {
-    @Rule
-    public InstrumentationActivityTestRule mActivityTestRule =
-            new InstrumentationActivityTestRule();
-
-    private static final String ABOUT_BLANK_URL = "about:blank";
-    private static final String NEW_TAB_URL = "new_browser.html";
-    private static final String HTTP_SCHEME = "http://";
-    private static final String PAGE_WITH_TITLE =
-            "<!DOCTYPE html><html><head><title>Example title</title></head></html>";
-
-    private TestWebServer mWebServer;
-    // The test server handles "echo" with a response containing "Echo" :).
-    private String mTestServerSiteUrl;
-
-    /**
-     * Annotation to override the trusted CDN.
-     */
-    @Retention(RetentionPolicy.RUNTIME)
-    private @interface OverrideTrustedCdn {}
-
-    private static class OverrideTrustedCdnRule extends AnnotationRule {
-        public OverrideTrustedCdnRule() {
-            super(OverrideTrustedCdn.class);
-        }
-
-        /**
-         * @return Whether the trusted CDN should be overridden.
-         */
-        public boolean isEnabled() {
-            return !getAnnotations().isEmpty();
-        }
-    }
-
-    @Rule
-    public OverrideTrustedCdnRule mOverrideTrustedCdn = new OverrideTrustedCdnRule();
-
-    @Before
-    public void setUp() throws Exception {
-        mWebServer = TestWebServer.start();
-        mTestServerSiteUrl = mActivityTestRule.getTestServer().getURL("/echo");
-        if (mOverrideTrustedCdn.isEnabled()) {
-            CommandLine.getInstance().appendSwitchWithValue(
-                    "trusted-cdn-base-url-for-tests", mWebServer.getBaseUrl());
-            mActivityTestRule.writeCommandLineFile();
-        }
-    }
-
-    @After
-    public void tearDown() {
-        mWebServer.shutdown();
-    }
-
-    private String getDisplayedUrl() {
-        try {
-            InstrumentationActivity activity = mActivityTestRule.getActivity();
-            TestWebLayer testWebLayer =
-                    TestWebLayer.getTestWebLayer(activity.getApplicationContext());
-            View urlBarView = activity.getUrlBarView();
-            return testWebLayer.getDisplayedUrl(urlBarView);
-        } catch (RemoteException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private int getIcon(String name) {
-        InstrumentationActivity activity = mActivityTestRule.getActivity();
-        String packageName =
-                TestWebLayer.getWebLayerContext(activity.getApplicationContext()).getPackageName();
-        return ResourceUtil.getIdentifier(
-                TestWebLayer.getRemoteContext(activity.getApplicationContext()), name, packageName);
-    }
-
-    private int getDefaultSecurityIcon() throws RemoteException {
-        // On tablets an info icon is shown for ConnectionSecurityLevel.NONE pages,
-        // on smaller form factors nothing.
-        InstrumentationActivity activity = mActivityTestRule.getActivity();
-        TestWebLayer testWebLayer = TestWebLayer.getTestWebLayer(activity.getApplicationContext());
-        if (testWebLayer.isWindowOnSmallDevice(mActivityTestRule.getActivity().getBrowser())) {
-            return 0;
-        }
-
-        return getIcon("drawable/omnibox_info");
-    }
-
-    private int getAmpIcon() throws RemoteException {
-        return getIcon("drawable/amp_icon");
-    }
-
-    private void runTrustedCdnPublisherUrlTest(
-            String publisherUrl, String expectedPublisher, int expectedSecurityIcon) {
-        final List<Pair<String, String>> headers;
-        if (publisherUrl == null) {
-            headers = null;
-        } else {
-            headers = Collections.singletonList(Pair.create("X-AMP-Cache", publisherUrl));
-        }
-        String testUrl = mWebServer.setResponse("/test.html", PAGE_WITH_TITLE, headers);
-
-        mActivityTestRule.navigateAndWait(testUrl);
-
-        final String expectedUrl;
-        if (expectedPublisher == null) {
-            // Remove everything but the TLD because these aren't displayed.
-            String temp = testUrl.substring(HTTP_SCHEME.length());
-            expectedUrl = temp.substring(0, temp.indexOf("/"));
-        } else {
-            expectedUrl = String.format(Locale.US, "%s – delivered by Google", expectedPublisher);
-        }
-
-        Assert.assertEquals(expectedUrl, getDisplayedUrl());
-
-        verifySecurityIcon(expectedSecurityIcon);
-    }
-
-    private void verifySecurityIcon(int expectedSecurityIcon) {
-        InstrumentationActivity activity = mActivityTestRule.getActivity();
-        TestWebLayer testWebLayer = TestWebLayer.getTestWebLayer(activity.getApplicationContext());
-        View urlBarView = activity.getUrlBarView();
-        try {
-            ImageView securityButton = testWebLayer.getSecurityButton(urlBarView);
-
-            if (expectedSecurityIcon == 0) {
-                Assert.assertEquals(View.INVISIBLE, securityButton.getVisibility());
-                return;
-            }
-
-            CriteriaHelper.pollInstrumentationThread(() -> {
-                Criteria.checkThat(securityButton.getVisibility(), Matchers.is(View.VISIBLE));
-            });
-            Bitmap expected = BitmapFactory.decodeResource(
-                    TestWebLayer.getRemoteContext(activity.getApplicationContext()).getResources(),
-                    expectedSecurityIcon);
-            Bitmap shown = ((BitmapDrawable) securityButton.getDrawable()).getBitmap();
-            // Below should work but fails, so do it manually.
-            // Assert.assertTrue(expected.sameAs(
-            //         ((BitmapDrawable) securityButton.getDrawable()).getBitmap()));
-            Assert.assertEquals(expected.getWidth(), shown.getWidth());
-            Assert.assertEquals(expected.getHeight(), shown.getHeight());
-            Assert.assertEquals(expected.getConfig(), shown.getConfig());
-            int[] expectedPixels = new int[expected.getWidth() * expected.getHeight()];
-            expected.getPixels(expectedPixels, 0, expected.getWidth(), 0, 0, expected.getWidth(),
-                    expected.getHeight());
-            int[] shownPixels = new int[shown.getWidth() * shown.getHeight()];
-            shown.getPixels(
-                    shownPixels, 0, shown.getWidth(), 0, 0, shown.getWidth(), shown.getHeight());
-            Assert.assertTrue(Arrays.equals(expectedPixels, shownPixels));
-        } catch (RemoteException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Tests that UrlBarView can be instantiated and shown.
-     */
-    @Test
-    @SmallTest
-    public void testShowUrlBar() throws RemoteException {
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL);
-        Assert.assertEquals(ABOUT_BLANK_URL, mActivityTestRule.getCurrentDisplayUrl());
-    }
-
-    /**
-     * Tests that UrlBarView contains an ImageButton and a TextView with the expected text.
-     */
-    @Test
-    @SmallTest
-    public void testUrlBarView() throws RemoteException {
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL);
-        View urlBarView = activity.getUrlBarView();
-
-        Assert.assertEquals(ABOUT_BLANK_URL, getDisplayedUrl());
-    }
-
-    /**
-     * Tests that UrlBar TextView is updated when the URL navigated to changes.
-     */
-    @Test
-    @SmallTest
-    public void testUrlBarTextViewOnNewNavigation() {
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL);
-        mActivityTestRule.navigateAndWait(mTestServerSiteUrl);
-        Assert.assertEquals(mTestServerSiteUrl, mActivityTestRule.getCurrentDisplayUrl());
-
-        View urlBarView = (LinearLayout) activity.getUrlBarView();
-
-        // Remove everything but the TLD because these aren't displayed.
-        String mExpectedUrlBarViewText = mTestServerSiteUrl.substring(HTTP_SCHEME.length());
-        mExpectedUrlBarViewText =
-                mExpectedUrlBarViewText.substring(0, mExpectedUrlBarViewText.indexOf("/echo"));
-
-        Assert.assertEquals(mExpectedUrlBarViewText, getDisplayedUrl());
-    }
-
-    /**
-     * Tests that UrlBar TextView is updated when the active tab changes.
-     */
-    @Test
-    @SmallTest
-    public void testUrlBarTextViewOnNewActiveTab() throws ExecutionException {
-        String url = mActivityTestRule.getTestDataURL(NEW_TAB_URL);
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(url);
-        Assert.assertNotNull(activity);
-
-        NewTabCallbackImpl callback = new NewTabCallbackImpl();
-        Tab firstTab = TestThreadUtils.runOnUiThreadBlockingNoException(() -> {
-            Tab tab = activity.getBrowser().getActiveTab();
-            tab.setNewTabCallback(callback);
-            return tab;
-        });
-
-        // This should launch a new tab and navigate to about:blank.
-        EventUtils.simulateTouchCenterOfView(activity.getWindow().getDecorView());
-
-        callback.waitForNewTab();
-        Tab newTab = TestThreadUtils.runOnUiThreadBlocking(() -> {
-            Assert.assertEquals(2, activity.getBrowser().getTabs().size());
-            Tab secondTab = activity.getBrowser().getActiveTab();
-            Assert.assertNotSame(firstTab, secondTab);
-            return secondTab;
-        });
-
-        NavigationWaiter waiter = new NavigationWaiter(ABOUT_BLANK_URL, newTab, false, true);
-        if (!ABOUT_BLANK_URL.equals(getDisplayedUrl())) {
-            waiter.waitForNavigation();
-        }
-
-        Assert.assertEquals(ABOUT_BLANK_URL, getDisplayedUrl());
-    }
-
-    @Test
-    @SmallTest
-    @OverrideTrustedCdn
-    public void testTrustedCdn() throws RemoteException {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_SHOW_PUBLISHER_URL, true);
-        InstrumentationActivity activity =
-                mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL, extras);
-        runTrustedCdnPublisherUrlTest("https://example.com/test", "example.com", getAmpIcon());
-    }
-
-    @Test
-    @SmallTest
-    public void testUntrustedCdn() throws RemoteException {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_SHOW_PUBLISHER_URL, true);
-        InstrumentationActivity activity =
-                mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL, extras);
-        runTrustedCdnPublisherUrlTest("https://example.com/test", null, getDefaultSecurityIcon());
-    }
-
-    @Test
-    @SmallTest
-    @OverrideTrustedCdn
-    @CommandLineFlags.Add("disable-features=ShowTrustedPublisherURL")
-    public void testTrustedCdnFeatureDisabled() throws RemoteException {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_SHOW_PUBLISHER_URL, true);
-        InstrumentationActivity activity =
-                mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL, extras);
-        runTrustedCdnPublisherUrlTest("https://example.com/test", null, getDefaultSecurityIcon());
-    }
-
-    @Test
-    @SmallTest
-    @OverrideTrustedCdn
-    public void testTrustedCdnNoHeader() throws RemoteException {
-        Bundle extras = new Bundle();
-        extras.putBoolean(InstrumentationActivity.EXTRA_URLBAR_SHOW_PUBLISHER_URL, true);
-        InstrumentationActivity activity =
-                mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL, extras);
-        runTrustedCdnPublisherUrlTest(null, null, getDefaultSecurityIcon());
-    }
-
-    @Test
-    @SmallTest
-    @OverrideTrustedCdn
-    public void testTrustedCdnNoUrlBarOption() throws RemoteException {
-        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(ABOUT_BLANK_URL);
-        runTrustedCdnPublisherUrlTest("https://example.com/test", null, getDefaultSecurityIcon());
-    }
-}
diff --git a/weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.cc b/weblayer/browser/autocomplete_scheme_classifier_impl.cc
similarity index 93%
rename from weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.cc
rename to weblayer/browser/autocomplete_scheme_classifier_impl.cc
index 4026332b..3098046 100644
--- a/weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.cc
+++ b/weblayer/browser/autocomplete_scheme_classifier_impl.cc
@@ -1,8 +1,8 @@
-// Copyright 2020 The Chromium Authors
+// Copyright 2022 The Chromium Authors
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.h"
+#include "weblayer/browser/autocomplete_scheme_classifier_impl.h"
 
 #include "base/strings/string_util.h"
 #include "build/build_config.h"
@@ -52,4 +52,4 @@
   return metrics::OmniboxInputType::EMPTY;
 }
 
-}  // namespace weblayer
+}  // namespace weblayer
\ No newline at end of file
diff --git a/weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.h b/weblayer/browser/autocomplete_scheme_classifier_impl.h
similarity index 74%
rename from weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.h
rename to weblayer/browser/autocomplete_scheme_classifier_impl.h
index 9840511..2f5c0ec 100644
--- a/weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.h
+++ b/weblayer/browser/autocomplete_scheme_classifier_impl.h
@@ -1,9 +1,9 @@
-// Copyright 2020 The Chromium Authors
+// Copyright 2022 The Chromium Authors
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef WEBLAYER_BROWSER_URL_BAR_AUTOCOMPLETE_SCHEME_CLASSIFIER_IMPL_H_
-#define WEBLAYER_BROWSER_URL_BAR_AUTOCOMPLETE_SCHEME_CLASSIFIER_IMPL_H_
+#ifndef WEBLAYER_BROWSER_AUTOCOMPLETE_SCHEME_CLASSIFIER_IMPL_H_
+#define WEBLAYER_BROWSER_AUTOCOMPLETE_SCHEME_CLASSIFIER_IMPL_H_
 
 #include "components/omnibox/browser/autocomplete_scheme_classifier.h"
 
@@ -23,4 +23,4 @@
 
 }  // namespace weblayer
 
-#endif  // WEBLAYER_BROWSER_URL_BAR_AUTOCOMPLETE_SCHEME_CLASSIFIER_IMPL_H_
+#endif  // WEBLAYER_BROWSER_AUTOCOMPLETE_SCHEME_CLASSIFIER_IMPL_H_
\ No newline at end of file
diff --git a/weblayer/browser/browser_process.cc b/weblayer/browser/browser_process.cc
index 4476d64..03406f2 100644
--- a/weblayer/browser/browser_process.cc
+++ b/weblayer/browser/browser_process.cc
@@ -22,7 +22,6 @@
 
 #if BUILDFLAG(IS_ANDROID)
 #include "weblayer/browser/safe_browsing/safe_browsing_service.h"
-#include "weblayer/browser/url_bar/page_info_client_impl.h"
 #endif
 
 namespace weblayer {
@@ -51,10 +50,6 @@
 
 void BrowserProcess::PreMainMessageLoopRun() {
   CreateNetworkQualityObserver();
-
-#if BUILDFLAG(IS_ANDROID)
-  page_info::SetPageInfoClient(PageInfoClientImpl::GetInstance());
-#endif
 }
 
 void BrowserProcess::StartTearDown() {
diff --git a/weblayer/browser/java/BUILD.gn b/weblayer/browser/java/BUILD.gn
index 83630f48..bd94ccf 100644
--- a/weblayer/browser/java/BUILD.gn
+++ b/weblayer/browser/java/BUILD.gn
@@ -20,15 +20,9 @@
 
 android_resources("weblayer_resources") {
   sources = [
-    "res/drawable-hdpi/amp_icon.png",
-    "res/drawable-mdpi/amp_icon.png",
-    "res/drawable-xhdpi/amp_icon.png",
-    "res/drawable-xxhdpi/amp_icon.png",
-    "res/drawable-xxxhdpi/amp_icon.png",
     "res/drawable/weblayer_tab_indicator.xml",
     "res/layout/settings_layout.xml",
     "res/layout/weblayer_infobar_translate_compact_content.xml",
-    "res/layout/weblayer_url_bar.xml",
     "res/values-night/styles.xml",
     "res/values/colors.xml",
     "res/values/dimens.xml",
@@ -160,7 +154,6 @@
     "org/chromium/weblayer_private/NavigationImpl.java",
     "org/chromium/weblayer_private/NewTabCallbackProxy.java",
     "org/chromium/weblayer_private/PageImpl.java",
-    "org/chromium/weblayer_private/PageInfoControllerDelegateImpl.java",
     "org/chromium/weblayer_private/PrerenderControllerImpl.java",
     "org/chromium/weblayer_private/ProfileImpl.java",
     "org/chromium/weblayer_private/ProfileManager.java",
@@ -168,7 +161,6 @@
     "org/chromium/weblayer_private/TabCallbackProxy.java",
     "org/chromium/weblayer_private/TabImpl.java",
     "org/chromium/weblayer_private/TranslateCompactInfoBar.java",
-    "org/chromium/weblayer_private/UrlBarControllerImpl.java",
     "org/chromium/weblayer_private/WebApkInstallSchedulerBridge.java",
     "org/chromium/weblayer_private/WebApkInstallSchedulerClient.java",
     "org/chromium/weblayer_private/WebApkServiceConnection.java",
@@ -513,7 +505,6 @@
     "org/chromium/weblayer_private/TabCallbackProxy.java",
     "org/chromium/weblayer_private/TabImpl.java",
     "org/chromium/weblayer_private/TranslateCompactInfoBar.java",
-    "org/chromium/weblayer_private/UrlBarControllerImpl.java",
     "org/chromium/weblayer_private/WebApkInstallSchedulerBridge.java",
     "org/chromium/weblayer_private/WebLayerExceptionFilter.java",
     "org/chromium/weblayer_private/WebLayerFactoryImpl.java",
@@ -571,7 +562,6 @@
     "org/chromium/weblayer_private/interfaces/SettingType.java",
     "org/chromium/weblayer_private/interfaces/SettingsFragmentArgs.java",
     "org/chromium/weblayer_private/interfaces/SettingsIntentHelper.java",
-    "org/chromium/weblayer_private/interfaces/UrlBarOptionsKeys.java",
     "org/chromium/weblayer_private/interfaces/WebLayerVersionConstants.java",
   ]
 
@@ -663,7 +653,6 @@
     "org/chromium/weblayer_private/interfaces/ISiteSettingsFragment.aidl",
     "org/chromium/weblayer_private/interfaces/ITab.aidl",
     "org/chromium/weblayer_private/interfaces/ITabClient.aidl",
-    "org/chromium/weblayer_private/interfaces/IUrlBarController.aidl",
     "org/chromium/weblayer_private/interfaces/IUserIdentityCallbackClient.aidl",
     "org/chromium/weblayer_private/interfaces/IWebLayer.aidl",
     "org/chromium/weblayer_private/interfaces/IWebLayerClient.aidl",
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java
index 4efd099..fe7d92f 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserFragmentImpl.java
@@ -7,13 +7,16 @@
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.SystemClock;
 import android.view.ContextThemeWrapper;
+import android.view.SurfaceControlViewHost;
 import android.view.View;
 import android.view.ViewGroup;
 
 import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
 
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.components.embedder_support.application.ClassLoaderContextWrapperFactory;
@@ -54,7 +57,7 @@
     }
 
     @Override
-    public void onAttach(Context context) {
+    protected void onAttach(Context context) {
         StrictModeWorkaround.apply();
         super.onAttach(context);
         mEmbedderActivityContext = context;
@@ -65,7 +68,7 @@
     }
 
     @Override
-    public void onCreate(Bundle savedInstanceState) {
+    protected void onCreate(Bundle savedInstanceState) {
         StrictModeWorkaround.apply();
         super.onCreate(savedInstanceState);
         // onCreate() is only called once
@@ -79,26 +82,26 @@
     }
 
     @Override
-    public View onCreateView(ViewGroup container, Bundle savedInstanceState) {
+    protected View onCreateView(ViewGroup container, Bundle savedInstanceState) {
         StrictModeWorkaround.apply();
         return mBrowser.getFragmentView();
     }
 
     @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         StrictModeWorkaround.apply();
         mBrowser.onActivityResult(requestCode, resultCode, data);
     }
 
     @Override
-    public void onRequestPermissionsResult(
+    protected void onRequestPermissionsResult(
             int requestCode, String[] permissions, int[] grantResults) {
         StrictModeWorkaround.apply();
         mBrowser.onRequestPermissionsResult(requestCode, permissions, grantResults);
     }
 
     @Override
-    public void onDestroy() {
+    protected void onDestroy() {
         StrictModeWorkaround.apply();
         super.onDestroy();
         mBrowser.destroy();
@@ -106,7 +109,7 @@
     }
 
     @Override
-    public void onDetach() {
+    protected void onDetach() {
         StrictModeWorkaround.apply();
         super.onDetach();
         // mBrowser != null if fragment is retained, otherwise onDestroy is called first.
@@ -116,27 +119,27 @@
     }
 
     @Override
-    public void onSaveInstanceState(Bundle outState) {
+    protected void onSaveInstanceState(Bundle outState) {
         StrictModeWorkaround.apply();
         mBrowser.onSaveInstanceState(outState);
         super.onSaveInstanceState(outState);
     }
 
     @Override
-    public void onStart() {
+    protected void onStart() {
         super.onStart();
         mBrowser.onFragmentStart();
     }
 
     @Override
-    public void onStop() {
+    protected void onStop() {
         super.onStop();
         Activity activity = getActivity();
         mBrowser.onFragmentStop(activity != null && activity.getChangingConfigurations() != 0);
     }
 
     @Override
-    public void onResume() {
+    protected void onResume() {
         super.onResume();
         sResumedCount++;
         if (sResumedCount == 1) sSessionStartTimeMs = SystemClock.uptimeMillis();
@@ -144,7 +147,7 @@
     }
 
     @Override
-    public void onPause() {
+    protected void onPause() {
         super.onPause();
         sResumedCount--;
         if (sResumedCount == 0) {
@@ -154,6 +157,18 @@
         mBrowser.onFragmentPause();
     }
 
+    @RequiresApi(Build.VERSION_CODES.R)
+    @Override
+    protected void setSurfaceControlViewHost(SurfaceControlViewHost host) {
+        // TODO(rayankans): Handle fallback for older devices.
+        host.setView(mBrowser.getViewController().getView(), 0, 0);
+    }
+
+    @Override
+    protected View getContentViewRenderView() {
+        return mBrowser.getViewController().getView();
+    }
+
     @Nullable
     public BrowserImpl getBrowser() {
         return mBrowser;
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java
index 3dbce42..37cafae 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserImpl.java
@@ -7,17 +7,14 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Configuration;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.provider.Settings;
 import android.text.TextUtils;
-import android.view.SurfaceControlViewHost;
 import android.view.View;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
 import androidx.fragment.app.FragmentManager;
 
 import org.chromium.base.ObserverList;
@@ -34,7 +31,6 @@
 import org.chromium.weblayer_private.interfaces.IBrowserClient;
 import org.chromium.weblayer_private.interfaces.IObjectWrapper;
 import org.chromium.weblayer_private.interfaces.ITab;
-import org.chromium.weblayer_private.interfaces.IUrlBarController;
 import org.chromium.weblayer_private.interfaces.ObjectWrapper;
 import org.chromium.weblayer_private.interfaces.StrictModeWorkaround;
 import org.chromium.weblayer_private.media.MediaRouteDialogFragmentImpl;
@@ -74,7 +70,6 @@
     private IBrowserClient mClient;
     private LocaleChangedBroadcastReceiver mLocaleReceiver;
     private boolean mInDestroy;
-    private final UrlBarControllerImpl mUrlBarController;
     private boolean mFragmentStarted;
     private boolean mFragmentResumed;
 
@@ -166,7 +161,6 @@
 
         createAttachmentState(embedderAppContext, windowAndroid);
         mNativeBrowser = BrowserImplJni.get().createBrowser(profile.getNativeProfile(), this);
-        mUrlBarController = new UrlBarControllerImpl(this, mNativeBrowser);
     }
 
     public WindowAndroid getWindowAndroid() {
@@ -178,10 +172,6 @@
         return mViewController.getContentView();
     }
 
-    public UrlBarControllerImpl getUrlBarControllerImpl() {
-        return mUrlBarController;
-    }
-
     // Called from constructor and onFragmentAttached() to configure state needed when attached.
     private void createAttachmentState(
             Context embedderAppContext, FragmentWindowAndroid windowAndroid) {
@@ -516,12 +506,6 @@
     }
 
     @Override
-    public IUrlBarController getUrlBarController() {
-        StrictModeWorkaround.apply();
-        return mUrlBarController;
-    }
-
-    @Override
     public void setBrowserControlsOffsetsEnabled(boolean enable) {
         mNotifyOnBrowserControlsOffsetsChanged = enable;
     }
@@ -564,9 +548,6 @@
         }
         destroyAttachmentState();
 
-        // mUrlBarController keeps a reference to mNativeBrowser, and hence must be destroyed before
-        // mNativeBrowser.
-        mUrlBarController.destroy();
         BrowserImplJni.get().deleteBrowser(mNativeBrowser);
 
         if (--sInstanceCount == 0) {
@@ -724,20 +705,6 @@
         }
     }
 
-    @RequiresApi(Build.VERSION_CODES.R)
-    @Override
-    public void setSurfaceControlViewHost(IObjectWrapper wrappedHost) {
-        // TODO(rayankans): Handle fallback for older devices.
-        SurfaceControlViewHost host =
-                ObjectWrapper.unwrap(wrappedHost, SurfaceControlViewHost.class);
-        host.setView(mViewController.getView(), 0, 0);
-    }
-
-    @Override
-    public IObjectWrapper getContentViewRenderView() {
-        return ObjectWrapper.wrap(mViewController.getView());
-    }
-
     @NativeMethods
     interface Natives {
         long createBrowser(long profile, BrowserImpl caller);
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/FragmentHostingRemoteFragmentImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/FragmentHostingRemoteFragmentImpl.java
index 0433767..366d08b 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/FragmentHostingRemoteFragmentImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/FragmentHostingRemoteFragmentImpl.java
@@ -154,7 +154,7 @@
     }
 
     @Override
-    public void onAttach(Context embedderContext) {
+    protected void onAttach(Context embedderContext) {
         StrictModeWorkaround.apply();
         super.onAttach(embedderContext);
 
@@ -174,28 +174,28 @@
     }
 
     @Override
-    public void onCreate(Bundle savedInstanceState) {
+    protected void onCreate(Bundle savedInstanceState) {
         StrictModeWorkaround.apply();
         super.onCreate(savedInstanceState);
         mFragmentController.dispatchCreate();
     }
 
     @Override
-    public void onDestroyView() {
+    protected void onDestroyView() {
         StrictModeWorkaround.apply();
         super.onDestroyView();
         mFragmentController.dispatchDestroyView();
     }
 
     @Override
-    public void onDestroy() {
+    protected void onDestroy() {
         StrictModeWorkaround.apply();
         super.onDestroy();
         mFragmentController.dispatchDestroy();
     }
 
     @Override
-    public void onDetach() {
+    protected void onDetach() {
         StrictModeWorkaround.apply();
         super.onDetach();
         mContext = null;
@@ -210,7 +210,7 @@
     }
 
     @Override
-    public void onStart() {
+    protected void onStart() {
         super.onStart();
 
         if (!mStarted) {
@@ -223,19 +223,19 @@
     }
 
     @Override
-    public void onStop() {
+    protected void onStop() {
         super.onStop();
         mFragmentController.dispatchStop();
     }
 
     @Override
-    public void onResume() {
+    protected void onResume() {
         super.onResume();
         mFragmentController.dispatchResume();
     }
 
     @Override
-    public void onPause() {
+    protected void onPause() {
         super.onPause();
         mFragmentController.dispatchPause();
     }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java
index 55816b1..6af28d1 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/NavigationControllerImpl.java
@@ -78,15 +78,6 @@
         NavigateParamsImpl params = (NavigateParamsImpl) iParams;
         WebResourceResponseInfo responseInfo = null;
         if (params.getResponse() != null) {
-            if (mTab.isActiveTab()) {
-                BrowserImpl browser = mTab.getBrowser();
-                UrlBarControllerImpl urlBarController = browser.getUrlBarControllerImpl();
-                if (urlBarController != null && urlBarController.hasActiveView()) {
-                    throw new IllegalStateException(
-                            "Can't navigate to an InputStream if the stock URL bar is visible.");
-                }
-            }
-
             WebResourceResponse response =
                     ObjectWrapper.unwrap(params.getResponse(), WebResourceResponse.class);
             responseInfo = new WebResourceResponseInfo(response.getMimeType(),
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/RemoteFragmentImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/RemoteFragmentImpl.java
index b321c72..4418b4d 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/RemoteFragmentImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/RemoteFragmentImpl.java
@@ -8,10 +8,14 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentSender;
+import android.os.Build;
 import android.os.Bundle;
+import android.view.SurfaceControlViewHost;
 import android.view.View;
 import android.view.ViewGroup;
 
+import androidx.annotation.RequiresApi;
+
 import org.chromium.weblayer_private.interfaces.IObjectWrapper;
 import org.chromium.weblayer_private.interfaces.IRemoteFragment;
 import org.chromium.weblayer_private.interfaces.ObjectWrapper;
@@ -26,67 +30,74 @@
     protected RemoteFragmentImpl() {}
 
     @Deprecated
-    public final View onCreateView() {
+    protected final View onCreateView() {
         return onCreateView(/*container=*/null, /*savedInstanceState=*/null);
     }
 
-    public View onCreateView(ViewGroup container, Bundle savedInstanceState) {
+    protected View onCreateView(ViewGroup container, Bundle savedInstanceState) {
         return null;
     }
 
-    public final Activity getActivity() {
+    protected final Activity getActivity() {
         return null;
     }
 
-    public final View getView() {
+    protected final View getView() {
         return null;
     }
 
-    public void onCreate(Bundle savedInstanceState) {}
+    protected void onCreate(Bundle savedInstanceState) {}
 
-    public void onAttach(Context context) {}
+    protected void onAttach(Context context) {}
 
-    public void onActivityCreated(Bundle savedInstanceState) {}
+    protected void onActivityCreated(Bundle savedInstanceState) {}
 
-    public void onStart() {}
+    protected void onStart() {}
 
-    public void onDestroy() {}
+    protected void onDestroy() {}
 
-    public void onDetach() {}
+    protected void onDetach() {}
 
-    public void onResume() {}
+    protected void onResume() {}
 
-    public void onDestroyView() {}
+    protected void onDestroyView() {}
 
-    public void onStop() {}
+    protected void onStop() {}
 
-    public void onPause() {}
+    protected void onPause() {}
 
-    public void onSaveInstanceState(Bundle outState) {}
+    protected void onSaveInstanceState(Bundle outState) {}
 
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {}
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {}
 
-    public void requestPermissions(String[] permissions, int requestCode) {}
+    protected void requestPermissions(String[] permissions, int requestCode) {}
 
-    public void onRequestPermissionsResult(
+    protected void onRequestPermissionsResult(
             int requestCode, String[] permissions, int[] grantResults) {}
 
+    @RequiresApi(Build.VERSION_CODES.R)
+    protected void setSurfaceControlViewHost(SurfaceControlViewHost host) {}
+
+    protected View getContentViewRenderView() {
+        return null;
+    }
+
     // TODO(crbug/1378606): Either remove below methods together with callers or provide a client
     // implementation on weblayer side.
-    public boolean startActivityForResult(Intent intent, int requestCode, Bundle options) {
+    protected boolean startActivityForResult(Intent intent, int requestCode, Bundle options) {
         return false;
     }
 
-    public boolean startIntentSenderForResult(IntentSender intent, int requestCode,
+    protected boolean startIntentSenderForResult(IntentSender intent, int requestCode,
             Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) {
         return false;
     }
 
-    public boolean shouldShowRequestPermissionRationale(String permission) {
+    protected boolean shouldShowRequestPermissionRationale(String permission) {
         return false;
     }
 
-    public void removeFragmentFromFragmentManager() {}
+    protected void removeFragmentFromFragmentManager() {}
 
     // IRemoteFragment implementation below.
 
@@ -176,4 +187,17 @@
         StrictModeWorkaround.apply();
         onRequestPermissionsResult(requestCode, permissions, grantResults);
     }
+
+    @RequiresApi(Build.VERSION_CODES.R)
+    @Override
+    public final void handleSetSurfaceControlViewHost(IObjectWrapper host) {
+        StrictModeWorkaround.apply();
+        setSurfaceControlViewHost(ObjectWrapper.unwrap(host, SurfaceControlViewHost.class));
+    }
+
+    @Override
+    public final IObjectWrapper handleGetContentViewRenderView() {
+        StrictModeWorkaround.apply();
+        return ObjectWrapper.wrap(getContentViewRenderView());
+    }
 }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java
deleted file mode 100644
index c93b4f8..0000000
--- a/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java
+++ /dev/null
@@ -1,301 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer_private;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import androidx.annotation.ColorRes;
-import androidx.annotation.DrawableRes;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.content.ContextCompat;
-import androidx.core.widget.ImageViewCompat;
-
-import org.chromium.base.LifetimeAssert;
-import org.chromium.base.annotations.JNINamespace;
-import org.chromium.base.annotations.NativeMethods;
-import org.chromium.components.embedder_support.util.UrlUtilities;
-import org.chromium.components.omnibox.SecurityButtonAnimationDelegate;
-import org.chromium.components.omnibox.SecurityStatusIcon;
-import org.chromium.components.page_info.PageInfoController;
-import org.chromium.components.page_info.PageInfoHighlight;
-import org.chromium.components.security_state.ConnectionSecurityLevel;
-import org.chromium.content_public.browser.WebContents;
-import org.chromium.weblayer_private.interfaces.IObjectWrapper;
-import org.chromium.weblayer_private.interfaces.IUrlBarController;
-import org.chromium.weblayer_private.interfaces.ObjectWrapper;
-import org.chromium.weblayer_private.interfaces.StrictModeWorkaround;
-import org.chromium.weblayer_private.interfaces.UrlBarOptionsKeys;
-
-/**
- *  Implementation of {@link IUrlBarController}.
- */
-@JNINamespace("weblayer")
-// This isn't part of Chrome, so using explicit colors/sizes is ok.
-@SuppressWarnings("checkstyle:SetTextColorAndSetTextSizeCheck")
-public class UrlBarControllerImpl extends IUrlBarController.Stub {
-    public static final float DEFAULT_TEXT_SIZE = 10.0F;
-    public static final float MINIMUM_TEXT_SIZE = 5.0F;
-
-    private BrowserImpl mBrowserImpl;
-    private long mNativeUrlBarController;
-    // A count of how many Views created by this controller are attached to a Window.
-    private int mActiveViewCount;
-    private final LifetimeAssert mLifetimeAssert = LifetimeAssert.create(this);
-
-    private String getUrlForDisplay() {
-        return UrlBarControllerImplJni.get().getUrlForDisplay(mNativeUrlBarController);
-    }
-
-    void destroy() {
-        UrlBarControllerImplJni.get().deleteUrlBarController(mNativeUrlBarController);
-        mNativeUrlBarController = 0;
-        mBrowserImpl = null;
-
-        // If mLifetimeAssert is GC'ed before this is called, it will throw an exception
-        // with a stack trace showing the stack during LifetimeAssert.create().
-        LifetimeAssert.setSafeToGc(mLifetimeAssert, true);
-    }
-
-    public UrlBarControllerImpl(BrowserImpl browserImpl, long nativeBrowser) {
-        mBrowserImpl = browserImpl;
-        mNativeUrlBarController =
-                UrlBarControllerImplJni.get().createUrlBarController(nativeBrowser);
-    }
-
-    void addActiveView() {
-        mActiveViewCount++;
-    }
-
-    void removeActiveView() {
-        mActiveViewCount--;
-    }
-
-    boolean hasActiveView() {
-        return mActiveViewCount != 0;
-    }
-
-    @Override
-    public IObjectWrapper /* View */ createUrlBarView(Bundle options,
-            @Nullable IObjectWrapper /* OnLongClickListener */ clickListener,
-            @Nullable IObjectWrapper /* OnLongClickListener */ longClickListener) {
-        StrictModeWorkaround.apply();
-        if (mBrowserImpl == null) {
-            throw new IllegalStateException("UrlBarView cannot be created without a valid Browser");
-        }
-        Context context = mBrowserImpl.getContext();
-        if (context == null) throw new IllegalStateException("BrowserFragment not attached yet.");
-
-        UrlBarView urlBarView =
-                new UrlBarView(this, context, options, clickListener, longClickListener);
-        return ObjectWrapper.wrap(urlBarView);
-    }
-
-    @Override
-    public void showPageInfo(@NonNull Bundle bundle) {
-        if (mBrowserImpl == null) {
-            throw new IllegalStateException("Page info can not be shown without a valid Browser");
-        }
-        if (!mBrowserImpl.isViewAttachedToWindow()) {
-            throw new IllegalStateException("Must be attached to window to show page info");
-        }
-        final boolean showPublisherUrl =
-                bundle.getBoolean(UrlBarOptionsKeys.SHOW_PUBLISHER_URL, /*default= */ false);
-        showPageInfoUi(showPublisherUrl);
-    }
-
-    private void showPageInfoUi(boolean showPublisherUrl) {
-        WebContents webContents = mBrowserImpl.getActiveTab().getWebContents();
-
-        String publisherUrl = null;
-        if (showPublisherUrl) {
-            String publisherUrlMaybeNull =
-                    UrlBarControllerImplJni.get().getPublisherUrl(mNativeUrlBarController);
-            if (publisherUrlMaybeNull != null && !TextUtils.isEmpty(publisherUrlMaybeNull)) {
-                publisherUrl = UrlUtilities.extractPublisherFromPublisherUrl(publisherUrlMaybeNull);
-            }
-        }
-
-        PageInfoController.show(mBrowserImpl.getWindowAndroid().getActivity().get(), webContents,
-                publisherUrl, PageInfoController.OpenedFromSource.TOOLBAR,
-                PageInfoControllerDelegateImpl.create(webContents),
-                PageInfoHighlight.noHighlight());
-    }
-
-    protected class UrlBarView
-            extends LinearLayout implements BrowserImpl.VisibleSecurityStateObserver {
-        private final UrlBarControllerImpl mController;
-        private float mTextSize;
-        private boolean mShowPageInfoWhenUrlTextClicked;
-        private boolean mShowPublisherUrl;
-
-        // These refer to the resources in the embedder's APK, not WebLayer's.
-        private @ColorRes int mUrlTextColor;
-        private @ColorRes int mUrlIconColor;
-
-        private TextView mUrlTextView;
-        private ImageButton mSecurityButton;
-        private final SecurityButtonAnimationDelegate mSecurityButtonAnimationDelegate;
-        OnClickListener mUrlBarClickListener;
-        OnLongClickListener mUrlBarLongClickListener;
-
-        public UrlBarView(@NonNull UrlBarControllerImpl controller, @NonNull Context context,
-                @NonNull Bundle options,
-                @Nullable IObjectWrapper /* OnClickListener */ clickListener,
-                @Nullable IObjectWrapper /* OnLongClickListener */ longClickListener) {
-            super(context);
-            mController = controller;
-            setGravity(Gravity.CENTER_HORIZONTAL);
-
-            mTextSize = options.getFloat(UrlBarOptionsKeys.URL_TEXT_SIZE, DEFAULT_TEXT_SIZE);
-            mShowPageInfoWhenUrlTextClicked = options.getBoolean(
-                    UrlBarOptionsKeys.SHOW_PAGE_INFO_WHEN_URL_TEXT_CLICKED, /*default= */ false);
-            mShowPublisherUrl =
-                    options.getBoolean(UrlBarOptionsKeys.SHOW_PUBLISHER_URL, /*default= */ false);
-            mUrlTextColor = options.getInt(UrlBarOptionsKeys.URL_TEXT_COLOR, /*default= */ 0);
-            mUrlIconColor = options.getInt(UrlBarOptionsKeys.URL_ICON_COLOR, /*default= */ 0);
-
-            View.inflate(getContext(), R.layout.weblayer_url_bar, this);
-            setOrientation(LinearLayout.HORIZONTAL);
-            setBackgroundColor(Color.TRANSPARENT);
-            mUrlTextView = findViewById(R.id.url_text);
-            mSecurityButton = (ImageButton) findViewById(R.id.security_button);
-            mSecurityButtonAnimationDelegate = new SecurityButtonAnimationDelegate(
-                    mSecurityButton, mUrlTextView, R.dimen.security_status_icon_size);
-            mUrlBarClickListener = ObjectWrapper.unwrap(clickListener, OnClickListener.class);
-            mUrlBarLongClickListener =
-                    ObjectWrapper.unwrap(longClickListener, OnLongClickListener.class);
-
-            // NOTE: We don't animate the security button update here because this is not a change
-            // per se but rather an initial setting of the state. See crbug.com/1247666 for details.
-            updateView(/*animateSecurityButtonUpdate=*/false);
-        }
-
-        // BrowserImpl.VisibleSecurityStateObserver
-        @Override
-        public void onVisibleSecurityStateOfActiveTabChanged() {
-            updateView(/*animateSecurityButtonUpdate=*/true);
-        }
-
-        @Override
-        protected void onAttachedToWindow() {
-            if (mBrowserImpl != null) {
-                mBrowserImpl.addVisibleSecurityStateObserver(this);
-
-                // NOTE: We don't animate the security button update here because this is not a
-                // change per se but rather an initial setting of the state. See crbug.com/1247666
-                // for details.
-                updateView(/*animateSecurityButtonUpdate=*/false);
-            }
-
-            super.onAttachedToWindow();
-            mController.addActiveView();
-        }
-
-        @Override
-        protected void onDetachedFromWindow() {
-            if (mBrowserImpl != null) mBrowserImpl.removeVisibleSecurityStateObserver(this);
-            super.onDetachedFromWindow();
-            mController.removeActiveView();
-        }
-
-        private void updateView(boolean animateSecurityButtonUpdate) {
-            if (mBrowserImpl == null) return;
-            int securityLevel = UrlBarControllerImplJni.get().getConnectionSecurityLevel(
-                    mNativeUrlBarController);
-
-            String publisherUrl =
-                    UrlBarControllerImplJni.get().getPublisherUrl(mNativeUrlBarController);
-
-            String displayUrl;
-            int securityIcon;
-            if (mShowPublisherUrl && securityLevel != ConnectionSecurityLevel.DANGEROUS
-                    && !TextUtils.isEmpty(publisherUrl)) {
-                displayUrl = getContext().getResources().getString(R.string.amp_publisher_url,
-                        UrlUtilities.extractPublisherFromPublisherUrl(publisherUrl));
-                securityIcon = R.drawable.amp_icon;
-            } else {
-                displayUrl = getUrlForDisplay();
-                securityIcon = getSecurityIcon();
-            }
-
-            mUrlTextView.setText(displayUrl);
-            mUrlTextView.setTextSize(
-                    TypedValue.COMPLEX_UNIT_SP, Math.max(MINIMUM_TEXT_SIZE, mTextSize));
-            Context embedderContext = mBrowserImpl.getEmbedderActivityContext();
-            if (mUrlTextColor != 0 && embedderContext != null) {
-                mUrlTextView.setTextColor(ContextCompat.getColor(embedderContext, mUrlTextColor));
-            }
-
-            mSecurityButtonAnimationDelegate.updateSecurityButton(
-                    securityIcon, animateSecurityButtonUpdate);
-
-            mSecurityButton.setContentDescription(getContext().getResources().getString(
-                    SecurityStatusIcon.getSecurityIconContentDescriptionResourceId(securityLevel)));
-
-            if (mUrlIconColor != 0 && embedderContext != null) {
-                ImageViewCompat.setImageTintList(mSecurityButton,
-                        ColorStateList.valueOf(
-                                ContextCompat.getColor(embedderContext, mUrlIconColor)));
-            }
-
-            if (mShowPageInfoWhenUrlTextClicked) {
-                // Set clicklisteners on the entire UrlBarView.
-                assert (mUrlBarClickListener == null);
-                mSecurityButton.setClickable(false);
-                setOnClickListener(v -> { showPageInfoUi(mShowPublisherUrl); });
-
-                if (mUrlBarLongClickListener != null) {
-                    setOnLongClickListener(mUrlBarLongClickListener);
-                }
-            } else {
-                // Set a clicklistener on the security status and TextView separately. This mode
-                // can be used to create an editable URL bar using WebLayer.
-                mSecurityButton.setOnClickListener(v -> { showPageInfoUi(mShowPublisherUrl); });
-                if (mUrlBarClickListener != null) {
-                    mUrlTextView.setOnClickListener(mUrlBarClickListener);
-                }
-                if (mUrlBarLongClickListener != null) {
-                    mUrlTextView.setOnLongClickListener(mUrlBarLongClickListener);
-                }
-            }
-        }
-
-        public boolean showPublisherUrl() {
-            return mShowPublisherUrl;
-        }
-
-        @DrawableRes
-        private int getSecurityIcon() {
-            return SecurityStatusIcon.getSecurityIconResource(
-                    UrlBarControllerImplJni.get().getConnectionSecurityLevel(
-                            mNativeUrlBarController),
-                    mBrowserImpl.isWindowOnSmallDevice(),
-                    /*skipIconForNeutralState=*/true,
-                    /*useUpdatedConnectionSecurityIndicators=*/false);
-        }
-    }
-
-    @NativeMethods()
-    interface Natives {
-        long createUrlBarController(long browserPtr);
-        void deleteUrlBarController(long urlBarControllerImplPtr);
-        String getUrlForDisplay(long nativeUrlBarControllerImpl);
-        String getPublisherUrl(long nativeUrlBarControllerImpl);
-        int getConnectionSecurityLevel(long nativeUrlBarControllerImpl);
-    }
-}
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IBrowser.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IBrowser.aidl
index 88c7c50..ab94b030 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IBrowser.aidl
+++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IBrowser.aidl
@@ -8,7 +8,6 @@
 import org.chromium.weblayer_private.interfaces.IObjectWrapper;
 import org.chromium.weblayer_private.interfaces.IProfile;
 import org.chromium.weblayer_private.interfaces.ITab;
-import org.chromium.weblayer_private.interfaces.IUrlBarController;
 
 import java.util.List;
 
@@ -26,7 +25,6 @@
 
   void addTab(in ITab tab) = 7;
   void destroyTab(in ITab tab) = 8;
-  IUrlBarController getUrlBarController() = 9;
 
   void setBottomView(in IObjectWrapper view) = 10;
 
@@ -50,12 +48,6 @@
   // Added in 91.
   void setChangeVisibilityOnNextDetach(in boolean changeVisibility) = 18;
 
-  // Added in 105.
-  void setSurfaceControlViewHost(in IObjectWrapper host) = 19;
-
   // Added in 105
   int[] getTabIds() = 20;
-
-  // Added in 106.
-  IObjectWrapper getContentViewRenderView() = 21;
 }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IRemoteFragment.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IRemoteFragment.aidl
index fbb151cb..10b5601 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IRemoteFragment.aidl
+++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IRemoteFragment.aidl
@@ -29,4 +29,6 @@
                                         in int[] grantResults) = 13;
   IObjectWrapper /* View */ handleOnCreateView(in IObjectWrapper /* ViewGroup */ container,
                                                in IObjectWrapper /* Bundle */ savedInstanceState) = 14;
+  void handleSetSurfaceControlViewHost(in IObjectWrapper /* SurfaceControlViewHost */ host) = 15;
+  IObjectWrapper /* View */ handleGetContentViewRenderView() = 16;
 }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IUrlBarController.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IUrlBarController.aidl
deleted file mode 100644
index be7f9536..0000000
--- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/IUrlBarController.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer_private.interfaces;
-
-import org.chromium.weblayer_private.interfaces.IObjectWrapper;
-
-interface IUrlBarController {
-
-  // ID 0 was deprecatedCreateUrlBarView and was removed in M89.
-
-  IObjectWrapper /* View */ createUrlBarView(
-      in Bundle options,
-      in IObjectWrapper /* View.OnClickListener */ textClickListener,
-      in IObjectWrapper /* View.OnLongClickListener */ textLongClickListener) = 1;
-
-  // Added in 95.
-  void showPageInfo(in Bundle options) = 2;
-}
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/UrlBarOptionsKeys.java b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/UrlBarOptionsKeys.java
deleted file mode 100644
index 8c22d00..0000000
--- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/UrlBarOptionsKeys.java
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2019 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer_private.interfaces;
-
-/** Keys for the Bundle of arguments with which BrowserFragments are created. */
-public interface UrlBarOptionsKeys {
-    /**
-     * If true, clicking on the url shows page info. Default is false.
-     */
-    String SHOW_PAGE_INFO_WHEN_URL_TEXT_CLICKED = "ShowPageInfoWhenUrlTextClicked";
-    /**
-     * If true, shows publisher url. Default is false.
-     * @since 88
-     */
-    String SHOW_PUBLISHER_URL = "ShowPublisherUrl";
-    String URL_ICON_COLOR = "UrlIconColor";
-    String URL_TEXT_COLOR = "UrlTextColor";
-    String URL_TEXT_SIZE = "UrlTextSize";
-}
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java
index a49a3ce..bc6f3630 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/test/TestWebLayerImpl.java
@@ -6,10 +6,6 @@
 
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.TextView;
 
 import androidx.fragment.app.FragmentManager;
 
@@ -181,19 +177,6 @@
     }
 
     @Override
-    public String getDisplayedUrl(IObjectWrapper /* View */ view) {
-        View urlBarView = ObjectWrapper.unwrap(view, View.class);
-        assert (urlBarView instanceof LinearLayout);
-        LinearLayout urlBarLayout = (LinearLayout) urlBarView;
-        assert (urlBarLayout.getChildCount() == 2);
-
-        View textView = urlBarLayout.getChildAt(1);
-        assert (textView instanceof TextView);
-        TextView urlBarTextView = (TextView) textView;
-        return urlBarTextView.getText().toString();
-    }
-
-    @Override
     public String getTranslateInfoBarTargetLanguage(ITab tab) {
         TabImpl tabImpl = (TabImpl) tab;
         return tabImpl.getTranslateInfoBarTargetLanguageForTesting();
@@ -255,18 +238,6 @@
     }
 
     @Override
-    public IObjectWrapper getSecurityButton(IObjectWrapper /* View */ view) {
-        View urlBarView = ObjectWrapper.unwrap(view, View.class);
-        assert (urlBarView instanceof LinearLayout);
-        LinearLayout urlBarLayout = (LinearLayout) urlBarView;
-        assert (urlBarLayout.getChildCount() == 2);
-
-        View securityIconView = urlBarLayout.getChildAt(0);
-        assert (securityIconView instanceof ImageView);
-        return ObjectWrapper.wrap((ImageView) securityIconView);
-    }
-
-    @Override
     public void fetchAccessToken(IProfile profile, IObjectWrapper /* Set<String> */ scopes,
             IObjectWrapper /* ValueCallback<String> */ onTokenFetched) throws RemoteException {
         ProfileImpl profileImpl = (ProfileImpl) profile;
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl b/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl
index 119afb7..a987a8d 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl
+++ b/weblayer/browser/java/org/chromium/weblayer_private/test_interfaces/ITestWebLayer.aidl
@@ -48,8 +48,6 @@
 
   boolean canInfoBarContainerScroll(in ITab tab) = 14;
 
-  String getDisplayedUrl(IObjectWrapper /* View */ urlBarView) = 15;
-
   // Returns the target language of the currently-showing translate infobar, or null if no translate
   // infobar is currently showing.
   String getTranslateInfoBarTargetLanguage(in ITab tab) = 16;
@@ -70,7 +68,6 @@
   void crashTab(in ITab tab) = 20;
 
   boolean isWindowOnSmallDevice(in IBrowser browser) = 21;
-  IObjectWrapper getSecurityButton(IObjectWrapper /* View */ urlBarView) = 22;
   void fetchAccessToken(in IProfile profile, in IObjectWrapper /* Set<String */ scopes, in IObjectWrapper /* ValueCallback<String> */ onTokenFetched) = 23;
   // Add a TestContentCaptureConsumer for the provided |browser|, with a Runnable |onNewEvent| to notify the
   // caller when the events happened, the event ID will be received through |eventsObserved| list.
diff --git a/weblayer/browser/java/res/drawable-hdpi/amp_icon.png b/weblayer/browser/java/res/drawable-hdpi/amp_icon.png
deleted file mode 100644
index 651c3596..0000000
--- a/weblayer/browser/java/res/drawable-hdpi/amp_icon.png
+++ /dev/null
Binary files differ
diff --git a/weblayer/browser/java/res/drawable-mdpi/amp_icon.png b/weblayer/browser/java/res/drawable-mdpi/amp_icon.png
deleted file mode 100644
index 855dfc1..0000000
--- a/weblayer/browser/java/res/drawable-mdpi/amp_icon.png
+++ /dev/null
Binary files differ
diff --git a/weblayer/browser/java/res/drawable-xhdpi/amp_icon.png b/weblayer/browser/java/res/drawable-xhdpi/amp_icon.png
deleted file mode 100644
index e6d2088c..0000000
--- a/weblayer/browser/java/res/drawable-xhdpi/amp_icon.png
+++ /dev/null
Binary files differ
diff --git a/weblayer/browser/java/res/drawable-xxhdpi/amp_icon.png b/weblayer/browser/java/res/drawable-xxhdpi/amp_icon.png
deleted file mode 100644
index d98a6aa4..0000000
--- a/weblayer/browser/java/res/drawable-xxhdpi/amp_icon.png
+++ /dev/null
Binary files differ
diff --git a/weblayer/browser/java/res/drawable-xxxhdpi/amp_icon.png b/weblayer/browser/java/res/drawable-xxxhdpi/amp_icon.png
deleted file mode 100644
index c596f1a..0000000
--- a/weblayer/browser/java/res/drawable-xxxhdpi/amp_icon.png
+++ /dev/null
Binary files differ
diff --git a/weblayer/browser/java/res/layout/weblayer_url_bar.xml b/weblayer/browser/java/res/layout/weblayer_url_bar.xml
deleted file mode 100644
index 35f5a7b..0000000
--- a/weblayer/browser/java/res/layout/weblayer_url_bar.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Copyright 2020 The Chromium Authors
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools">
-
-    <!-- ContentDescription is set programmatically. -->
-    <ImageButton
-        android:id="@+id/security_button"
-        tools:ignore="ContentDescription"
-        android:background="@android:color/transparent"
-        android:layout_gravity="center_vertical"
-        android:layout_height="@dimen/security_status_icon_size"
-        android:layout_width="@dimen/security_status_icon_size"
-        android:scaleType="center"
-        android:visibility="gone"
-        app:tint="@color/default_icon_color_tint_list"/>
-
-    <TextView
-        android:id="@+id/url_text"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:singleLine="true"
-        android:paddingEnd="@dimen/url_text_edge_padding"
-        android:paddingStart="@dimen/url_text_edge_padding"
-        android:ellipsize="start"
-        style="@style/TextAppearance.TextLarge.Primary"/>
-
-</merge>
diff --git a/weblayer/browser/java/res/values/dimens.xml b/weblayer/browser/java/res/values/dimens.xml
index d0d8aa8..a32f07a 100644
--- a/weblayer/browser/java/res/values/dimens.xml
+++ b/weblayer/browser/java/res/values/dimens.xml
@@ -6,9 +6,6 @@
 -->
 
 <resources>
-    <dimen name="security_status_icon_size">18dp</dimen>
-    <dimen name="url_text_edge_padding">5dp</dimen>
-  
     <!-- Dimensions for compact translate infobar. -->
     <dimen name="weblayer_infobar_translate_fade_edge_length">18dp</dimen>
 
diff --git a/weblayer/browser/java/weblayer_strings.grd b/weblayer/browser/java/weblayer_strings.grd
index 4815aee5..27e5f79c 100644
--- a/weblayer/browser/java/weblayer_strings.grd
+++ b/weblayer/browser/java/weblayer_strings.grd
@@ -176,9 +176,6 @@
       <message name="IDS_WEBLAYER_NOTIFICATION_CHANNEL_GROUP_NAME" desc="The user-facing label for the notification channel group used for notifications arising from web browsing activity.">
         Web browser activity
       </message>
-      <message name="IDS_AMP_PUBLISHER_URL" desc="Text shown in WebLayer url bar for a web page that is hosted by the Google content delivery network but was originally published by someone else.">
-        <ph name="PUBLISHER_ORIGIN">%1$s<ex>example.com</ex></ph> – delivered by Google
-      </message>
     </messages>
   </release>
 </grit>
diff --git a/weblayer/browser/java/weblayer_strings_grd/IDS_AMP_PUBLISHER_URL.png.sha1 b/weblayer/browser/java/weblayer_strings_grd/IDS_AMP_PUBLISHER_URL.png.sha1
deleted file mode 100644
index e3a5a42..0000000
--- a/weblayer/browser/java/weblayer_strings_grd/IDS_AMP_PUBLISHER_URL.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-fdd1f7e78bdd42094f42487217e5cabd0fa6f5ce
\ No newline at end of file
diff --git a/weblayer/browser/tab_impl.cc b/weblayer/browser/tab_impl.cc
index 8f1457ae4..a4b3727 100644
--- a/weblayer/browser/tab_impl.cc
+++ b/weblayer/browser/tab_impl.cc
@@ -131,7 +131,6 @@
 #include "weblayer/browser/safe_browsing/safe_browsing_navigation_observer_manager_factory.h"
 #include "weblayer/browser/safe_browsing/weblayer_safe_browsing_tab_observer_delegate.h"
 #include "weblayer/browser/translate_client_impl.h"
-#include "weblayer/browser/url_bar/trusted_cdn_observer.h"
 #include "weblayer/browser/webapps/weblayer_app_banner_manager_android.h"
 #include "weblayer/browser/weblayer_factory_impl_android.h"
 #include "weblayer/browser/webrtc/media_stream_manager.h"
@@ -398,8 +397,6 @@
       std::make_unique<BrowserControlsNavigationStateHandler>(
           web_contents_.get(), this);
 
-  TrustedCDNObserver::CreateForWebContents(web_contents_.get());
-
   if (base::FeatureList::IsEnabled(
           features::kWebLayerClientSidePhishingDetection)) {
     safe_browsing::SafeBrowsingTabObserver::CreateForWebContents(
diff --git a/weblayer/browser/url_bar/DEPS b/weblayer/browser/url_bar/DEPS
deleted file mode 100644
index 34bb268..0000000
--- a/weblayer/browser/url_bar/DEPS
+++ /dev/null
@@ -1,4 +0,0 @@
-include_rules = [
-  "+components/browsing_data/content",
-  "+components/page_info",
-]
diff --git a/weblayer/browser/url_bar/page_info_browsertest.cc b/weblayer/browser/url_bar/page_info_browsertest.cc
deleted file mode 100644
index bf77b7905..0000000
--- a/weblayer/browser/url_bar/page_info_browsertest.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <string>
-
-#include "base/strings/utf_string_conversions.h"
-#include "components/content_settings/core/common/content_settings.h"
-#include "components/page_info/android/page_info_client.h"
-#include "components/page_info/page_info_delegate.h"
-#include "third_party/blink/public/common/permissions/permission_utils.h"
-#include "url/origin.h"
-#include "weblayer/browser/tab_impl.h"
-#include "weblayer/browser/url_bar/page_info_delegate_impl.h"
-#include "weblayer/public/navigation_controller.h"
-#include "weblayer/public/tab.h"
-#include "weblayer/shell/browser/shell.h"
-#include "weblayer/test/weblayer_browser_test.h"
-#include "weblayer/test/weblayer_browser_test_utils.h"
-
-namespace weblayer {
-
-class PageInfoBrowserTest : public WebLayerBrowserTest {
- public:
-  void SetUpOnMainThread() override {
-    ASSERT_TRUE(embedded_test_server()->Start());
-  }
-
- protected:
-  content::WebContents* GetWebContents() {
-    Tab* tab = shell()->tab();
-    TabImpl* tab_impl = static_cast<TabImpl*>(tab);
-    return tab_impl->web_contents();
-  }
-
-  GURL GetCurrentDisplayURL() {
-    auto* navigation_controller = shell()->tab()->GetNavigationController();
-    return navigation_controller->GetNavigationEntryDisplayURL(
-        navigation_controller->GetNavigationListCurrentIndex());
-  }
-};
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, PageInfoClientSet) {
-  EXPECT_TRUE(page_info::GetPageInfoClient());
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, ContentNotDisplayedInVrHeadset) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-  EXPECT_FALSE(page_info_delegate->IsContentDisplayedInVrHeadset());
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, StatefulSSLHostStateDelegateSet) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-  EXPECT_TRUE(page_info_delegate->GetStatefulSSLHostStateDelegate());
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, PermissionDecisionAutoblocker) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-  EXPECT_TRUE(page_info_delegate->GetPermissionDecisionAutoblocker());
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, ContentSettings) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-  EXPECT_TRUE(page_info_delegate->GetContentSettings());
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, PermissionResult) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-  GURL url("https://example.com");
-
-  auto* content_settings_map = page_info_delegate->GetContentSettings();
-  ASSERT_TRUE(content_settings_map);
-  content_settings_map->SetContentSettingDefaultScope(
-      url, url, ContentSettingsType::BACKGROUND_SYNC, CONTENT_SETTING_BLOCK);
-
-  // Check that |page_info_delegate| returns expected ContentSettingsType.
-  EXPECT_EQ(page_info_delegate
-                ->GetPermissionResult(blink::PermissionType::NOTIFICATIONS,
-                                      url::Origin::Create(url))
-                .content_setting,
-            CONTENT_SETTING_BLOCK);
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest,
-                       PageSpecificContentSettingsDelegate) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-  EXPECT_TRUE(page_info_delegate->GetPageSpecificContentSettingsDelegate());
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, EmbedderNameSet) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-  std::u16string expected_embedder_name = u"WebLayerBrowserTests";
-  EXPECT_EQ(expected_embedder_name,
-            page_info_delegate->GetClientApplicationName().c_str());
-}
-
-IN_PROC_BROWSER_TEST_F(PageInfoBrowserTest, SubresourceFilterActivation) {
-  std::unique_ptr<PageInfoDelegate> page_info_delegate =
-      page_info::GetPageInfoClient()->CreatePageInfoDelegate(GetWebContents());
-  ASSERT_TRUE(page_info_delegate);
-
-  NavigateAndWaitForCompletion(GURL("about:blank"), shell());
-  EXPECT_FALSE(
-      page_info_delegate->IsSubresourceFilterActivated(GetCurrentDisplayURL()));
-
-  GURL test_url(embedded_test_server()->GetURL("/simple_page.html"));
-  ActivateSubresourceFilterInWebContentsForURL(GetWebContents(), test_url);
-
-  NavigateAndWaitForCompletion(test_url, shell());
-  EXPECT_TRUE(
-      page_info_delegate->IsSubresourceFilterActivated(GetCurrentDisplayURL()));
-}
-
-}  // namespace weblayer
diff --git a/weblayer/browser/url_bar/page_info_client_impl.cc b/weblayer/browser/url_bar/page_info_client_impl.cc
deleted file mode 100644
index 503a49b..0000000
--- a/weblayer/browser/url_bar/page_info_client_impl.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "weblayer/browser/url_bar/page_info_client_impl.h"
-
-#include "content/public/browser/web_contents.h"
-#include "weblayer/browser/android/resource_mapper.h"
-#include "weblayer/browser/url_bar/page_info_delegate_impl.h"
-
-namespace weblayer {
-
-// static
-PageInfoClientImpl* PageInfoClientImpl::GetInstance() {
-  return new PageInfoClientImpl();
-}
-
-std::unique_ptr<PageInfoDelegate> PageInfoClientImpl::CreatePageInfoDelegate(
-    content::WebContents* web_contents) {
-  DCHECK(web_contents);
-  return std::make_unique<PageInfoDelegateImpl>(web_contents);
-}
-
-int PageInfoClientImpl::GetJavaResourceId(int native_resource_id) {
-  return weblayer::MapToJavaDrawableId(native_resource_id);
-}
-
-}  // namespace weblayer
diff --git a/weblayer/browser/url_bar/page_info_client_impl.h b/weblayer/browser/url_bar/page_info_client_impl.h
deleted file mode 100644
index 4839e05..0000000
--- a/weblayer/browser/url_bar/page_info_client_impl.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBLAYER_BROWSER_URL_BAR_PAGE_INFO_CLIENT_IMPL_H_
-#define WEBLAYER_BROWSER_URL_BAR_PAGE_INFO_CLIENT_IMPL_H_
-
-#include "components/page_info/android/page_info_client.h"
-#include "components/page_info/page_info_delegate.h"
-#include "components/page_info/page_info_ui_delegate.h"
-
-#include <memory>
-
-namespace content {
-class WebContents;
-}
-
-namespace weblayer {
-
-// WebLayer's implementation of PageInfoClient.
-class PageInfoClientImpl : public page_info::PageInfoClient {
- public:
-  static PageInfoClientImpl* GetInstance();
-
-  PageInfoClientImpl() = default;
-  ~PageInfoClientImpl() = default;
-
-  // PageInfoClient implementation.
-  std::unique_ptr<PageInfoDelegate> CreatePageInfoDelegate(
-      content::WebContents* web_contents) override;
-  int GetJavaResourceId(int native_resource_id) override;
-};
-
-}  // namespace weblayer
-
-#endif  // WEBLAYER_BROWSER_URL_BAR_PAGE_INFO_CLIENT_IMPL_H_
diff --git a/weblayer/browser/url_bar/page_info_delegate_impl.cc b/weblayer/browser/url_bar/page_info_delegate_impl.cc
deleted file mode 100644
index c821955..0000000
--- a/weblayer/browser/url_bar/page_info_delegate_impl.cc
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "weblayer/browser/url_bar/page_info_delegate_impl.h"
-
-#include "build/build_config.h"
-#include "components/permissions/permission_util.h"
-#include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
-#include "components/security_state/content/content_utils.h"
-#include "components/subresource_filter/content/browser/subresource_filter_content_settings_manager.h"
-#include "components/subresource_filter/content/browser/subresource_filter_profile_context.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/browser/permission_controller.h"
-#include "content/public/browser/permission_result.h"
-#include "url/origin.h"
-#include "weblayer/browser/host_content_settings_map_factory.h"
-#include "weblayer/browser/page_specific_content_settings_delegate.h"
-#include "weblayer/browser/permissions/permission_decision_auto_blocker_factory.h"
-#include "weblayer/browser/stateful_ssl_host_state_delegate_factory.h"
-#include "weblayer/browser/subresource_filter_profile_context_factory.h"
-
-#if BUILDFLAG(IS_ANDROID)
-#include "weblayer/browser/weblayer_impl_android.h"
-#endif
-
-namespace weblayer {
-
-PageInfoDelegateImpl::PageInfoDelegateImpl(content::WebContents* web_contents)
-    : web_contents_(web_contents) {
-  DCHECK(web_contents_);
-}
-
-permissions::ObjectPermissionContextBase*
-PageInfoDelegateImpl::GetChooserContext(ContentSettingsType type) {
-  // TODO(crbug.com/1052375): Once WebLayer has USB and Bluetooth support,
-  // add more logic here.
-  return nullptr;
-}
-
-#if BUILDFLAG(FULL_SAFE_BROWSING)
-safe_browsing::PasswordProtectionService*
-PageInfoDelegateImpl::GetPasswordProtectionService() const {
-  NOTREACHED();
-  return nullptr;
-}
-
-void PageInfoDelegateImpl::OnUserActionOnPasswordUi(
-    safe_browsing::WarningAction action) {
-  NOTREACHED();
-}
-
-std::u16string PageInfoDelegateImpl::GetWarningDetailText() {
-  // TODO(crbug.com/1052375): Implement.
-  NOTREACHED();
-  return std::u16string();
-}
-#endif
-
-permissions::PermissionResult PageInfoDelegateImpl::GetPermissionResult(
-    blink::PermissionType permission,
-    const url::Origin& origin) {
-  content::PermissionResult permission_result =
-      GetBrowserContext()
-          ->GetPermissionController()
-          ->GetPermissionResultForOriginWithoutContext(permission, origin);
-  return permissions::PermissionUtil::ToPermissionResult(permission_result);
-}
-
-#if !BUILDFLAG(IS_ANDROID)
-bool PageInfoDelegateImpl::CreateInfoBarDelegate() {
-  NOTREACHED();
-  return false;
-}
-
-void PageInfoDelegateImpl::ShowSiteSettings(const GURL& site_url) {
-  // TODO(crbug.com/1052375): Implement once site settings code has been
-  // componentized.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::ShowCookiesSettings() {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::OpenCookiesDialog() {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::OpenCertificateDialog(
-    net::X509Certificate* certificate) {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::OpenConnectionHelpCenterPage(
-    const ui::Event& event) {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::OpenSafetyTipHelpCenterPage() {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::OpenContentSettingsExceptions(
-    ContentSettingsType content_settings_type) {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::OnPageInfoActionOccurred(
-    PageInfo::PageInfoAction action) {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-
-void PageInfoDelegateImpl::OnUIClosing() {
-  // Used for desktop only. Doesn't need implementation for WebLayer.
-  NOTREACHED();
-}
-#endif
-
-permissions::PermissionDecisionAutoBlocker*
-PageInfoDelegateImpl::GetPermissionDecisionAutoblocker() {
-  return PermissionDecisionAutoBlockerFactory::GetForBrowserContext(
-      GetBrowserContext());
-}
-
-StatefulSSLHostStateDelegate*
-PageInfoDelegateImpl::GetStatefulSSLHostStateDelegate() {
-  return StatefulSSLHostStateDelegateFactory::GetInstance()
-      ->GetForBrowserContext(GetBrowserContext());
-}
-
-HostContentSettingsMap* PageInfoDelegateImpl::GetContentSettings() {
-  return HostContentSettingsMapFactory::GetForBrowserContext(
-      GetBrowserContext());
-}
-
-bool PageInfoDelegateImpl::IsSubresourceFilterActivated(const GURL& site_url) {
-  return SubresourceFilterProfileContextFactory::GetForBrowserContext(
-             GetBrowserContext())
-      ->settings_manager()
-      ->GetSiteActivationFromMetadata(site_url);
-}
-
-bool PageInfoDelegateImpl::IsContentDisplayedInVrHeadset() {
-  // VR is not supported for WebLayer.
-  return false;
-}
-
-security_state::SecurityLevel PageInfoDelegateImpl::GetSecurityLevel() {
-  auto state = security_state::GetVisibleSecurityState(web_contents_);
-  DCHECK(state);
-  return security_state::GetSecurityLevel(
-      *state,
-      /* used_policy_installed_certificate */ false);
-}
-
-security_state::VisibleSecurityState
-PageInfoDelegateImpl::GetVisibleSecurityState() {
-  return *security_state::GetVisibleSecurityState(web_contents_);
-}
-
-std::unique_ptr<content_settings::PageSpecificContentSettings::Delegate>
-PageInfoDelegateImpl::GetPageSpecificContentSettingsDelegate() {
-  return std::make_unique<PageSpecificContentSettingsDelegate>(web_contents_);
-}
-
-#if BUILDFLAG(IS_ANDROID)
-const std::u16string PageInfoDelegateImpl::GetClientApplicationName() {
-  return weblayer::GetClientApplicationName();
-}
-#endif
-
-content::BrowserContext* PageInfoDelegateImpl::GetBrowserContext() const {
-  return web_contents_->GetBrowserContext();
-}
-
-}  //  namespace weblayer
diff --git a/weblayer/browser/url_bar/page_info_delegate_impl.h b/weblayer/browser/url_bar/page_info_delegate_impl.h
deleted file mode 100644
index acc0de59..0000000
--- a/weblayer/browser/url_bar/page_info_delegate_impl.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBLAYER_BROWSER_URL_BAR_PAGE_INFO_DELEGATE_IMPL_H_
-#define WEBLAYER_BROWSER_URL_BAR_PAGE_INFO_DELEGATE_IMPL_H_
-
-#include <string>
-
-#include "base/memory/raw_ptr.h"
-#include "build/build_config.h"
-#include "components/browsing_data/content/local_shared_objects_container.h"
-#include "components/page_info/page_info.h"
-#include "components/page_info/page_info_delegate.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_contents_user_data.h"
-#include "url/gurl.h"
-
-namespace weblayer {
-
-class PageInfoDelegateImpl : public PageInfoDelegate {
- public:
-  explicit PageInfoDelegateImpl(content::WebContents* web_contents);
-  ~PageInfoDelegateImpl() override = default;
-
-  // PageInfoDelegate implementation
-  permissions::ObjectPermissionContextBase* GetChooserContext(
-      ContentSettingsType type) override;
-#if BUILDFLAG(FULL_SAFE_BROWSING)
-  safe_browsing::PasswordProtectionService* GetPasswordProtectionService()
-      const override;
-  void OnUserActionOnPasswordUi(safe_browsing::WarningAction action) override;
-  std::u16string GetWarningDetailText() override;
-#endif
-  permissions::PermissionResult GetPermissionResult(
-      blink::PermissionType permission,
-      const url::Origin& origin) override;
-
-#if !BUILDFLAG(IS_ANDROID)
-  bool CreateInfoBarDelegate() override;
-  void ShowSiteSettings(const GURL& site_url) override;
-  void ShowCookiesSettings() override;
-  void OpenCookiesDialog() override;
-  void OpenCertificateDialog(net::X509Certificate* certificate) override;
-  void OpenConnectionHelpCenterPage(const ui::Event& event) override;
-  void OpenSafetyTipHelpCenterPage() override;
-  void OpenContentSettingsExceptions(
-      ContentSettingsType content_settings_type) override;
-  void OnPageInfoActionOccurred(PageInfo::PageInfoAction action) override;
-  void OnUIClosing() override;
-#endif
-
-  permissions::PermissionDecisionAutoBlocker* GetPermissionDecisionAutoblocker()
-      override;
-  StatefulSSLHostStateDelegate* GetStatefulSSLHostStateDelegate() override;
-  HostContentSettingsMap* GetContentSettings() override;
-  std::unique_ptr<content_settings::PageSpecificContentSettings::Delegate>
-  GetPageSpecificContentSettingsDelegate() override;
-  bool IsSubresourceFilterActivated(const GURL& site_url) override;
-  bool IsContentDisplayedInVrHeadset() override;
-  security_state::SecurityLevel GetSecurityLevel() override;
-  security_state::VisibleSecurityState GetVisibleSecurityState() override;
-
-#if BUILDFLAG(IS_ANDROID)
-  const std::u16string GetClientApplicationName() override;
-#endif
-
- private:
-  content::BrowserContext* GetBrowserContext() const;
-
-  raw_ptr<content::WebContents> web_contents_;
-};
-
-}  //  namespace weblayer
-
-#endif  // WEBLAYER_BROWSER_URL_BAR_PAGE_INFO_DELEGATE_IMPL_H_
diff --git a/weblayer/browser/url_bar/trusted_cdn_observer.cc b/weblayer/browser/url_bar/trusted_cdn_observer.cc
deleted file mode 100644
index 021c5b75..0000000
--- a/weblayer/browser/url_bar/trusted_cdn_observer.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "weblayer/browser/url_bar/trusted_cdn_observer.h"
-
-#include "components/embedder_support/android/util/cdn_utils.h"
-#include "content/public/browser/navigation_handle.h"
-#include "content/public/browser/web_contents.h"
-
-namespace weblayer {
-
-TrustedCDNObserver::TrustedCDNObserver(content::WebContents* web_contents)
-    : WebContentsObserver(web_contents),
-      content::WebContentsUserData<TrustedCDNObserver>(*web_contents) {}
-
-TrustedCDNObserver::~TrustedCDNObserver() = default;
-
-// TrustedCdn should only track primary pages and should skip subframe,
-// same-document, or non-committed navigations (downloads or 204/205 responses).
-void TrustedCDNObserver::PrimaryPageChanged(content::Page& page) {
-  publisher_url_ = embedder_support::GetPublisherURL(page);
-
-  // Trigger url bar update.
-  web_contents()->DidChangeVisibleSecurityState();
-}
-
-WEB_CONTENTS_USER_DATA_KEY_IMPL(TrustedCDNObserver);
-
-}  // namespace weblayer
diff --git a/weblayer/browser/url_bar/trusted_cdn_observer.h b/weblayer/browser/url_bar/trusted_cdn_observer.h
deleted file mode 100644
index 232986b5..0000000
--- a/weblayer/browser/url_bar/trusted_cdn_observer.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBLAYER_BROWSER_URL_BAR_TRUSTED_CDN_OBSERVER_H_
-#define WEBLAYER_BROWSER_URL_BAR_TRUSTED_CDN_OBSERVER_H_
-
-#include "content/public/browser/web_contents_observer.h"
-#include "content/public/browser/web_contents_user_data.h"
-#include "url/gurl.h"
-
-namespace weblayer {
-
-// Monitors navigations to see if a publisher URL exists.
-class TrustedCDNObserver
-    : public content::WebContentsObserver,
-      public content::WebContentsUserData<TrustedCDNObserver> {
- public:
-  ~TrustedCDNObserver() override;
-
-  const GURL& publisher_url() const { return publisher_url_; }
-
- private:
-  friend class content::WebContentsUserData<TrustedCDNObserver>;
-
-  explicit TrustedCDNObserver(content::WebContents* web_contents);
-
-  // content::WebContentsObserver implementation:
-  void PrimaryPageChanged(content::Page& page) override;
-
-  GURL publisher_url_;
-
-  WEB_CONTENTS_USER_DATA_KEY_DECL();
-};
-
-}  // namespace weblayer
-
-#endif  // WEBLAYER_BROWSER_URL_BAR_TRUSTED_CDN_OBSERVER_H_
\ No newline at end of file
diff --git a/weblayer/browser/url_bar/url_bar_browsertest.cc b/weblayer/browser/url_bar/url_bar_browsertest.cc
deleted file mode 100644
index c86c2df..0000000
--- a/weblayer/browser/url_bar/url_bar_browsertest.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/memory/raw_ptr.h"
-#include "base/run_loop.h"
-#include "net/test/embedded_test_server/embedded_test_server.h"
-#include "weblayer/browser/browser_impl.h"
-#include "weblayer/browser/profile_impl.h"
-#include "weblayer/browser/tab_impl.h"
-#include "weblayer/shell/browser/shell.h"
-#include "weblayer/test/weblayer_browser_test.h"
-#include "weblayer/test/weblayer_browser_test_utils.h"
-
-namespace weblayer {
-
-class UrlBarBrowserTest : public WebLayerBrowserTest {
- public:
-  UrlBarBrowserTest() = default;
-  ~UrlBarBrowserTest() override = default;
-
-  // WebLayerBrowserTest
-  void SetUpOnMainThread() override {
-    WebLayerBrowserTest::SetUpOnMainThread();
-    ASSERT_TRUE(embedded_test_server()->Start());
-    tab_ = static_cast<TabImpl*>(shell()->browser()->CreateTab());
-    another_tab_ = static_cast<TabImpl*>(shell()->browser()->CreateTab());
-    SetActiveTab(tab_);
-  }
-  void PostRunTestOnMainThread() override {
-    tab_ = nullptr;
-    another_tab_ = nullptr;
-    WebLayerBrowserTest::PostRunTestOnMainThread();
-  }
-
-  GURL real_url() {
-    return embedded_test_server()->GetURL("/simple_page.html");
-  }
-  GURL abort_url() { return embedded_test_server()->GetURL("/nocontent"); }
-
-  void SetVisibleSecurityStateChangedCallback(base::OnceClosure closure) {
-    browser_impl()->set_visible_security_state_callback_for_tests(
-        std::move(closure));
-  }
-
-  void SetActiveTab(TabImpl* tab) { shell()->browser()->SetActiveTab(tab); }
-
- protected:
-  raw_ptr<TabImpl> tab_ = nullptr;
-  raw_ptr<TabImpl> another_tab_ = nullptr;
-
- private:
-  BrowserImpl* browser_impl() {
-    return static_cast<BrowserImpl*>(shell()->browser());
-  }
-};
-
-IN_PROC_BROWSER_TEST_F(UrlBarBrowserTest, CanceledNavigationsUpdateUrl) {
-  NavigateAndWaitForCompletion(real_url(), tab_);
-
-  {
-    base::RunLoop run_loop;
-    SetVisibleSecurityStateChangedCallback(run_loop.QuitClosure());
-
-    // Navigating to the /nocontent url cancels the navigation with a 204 error.
-    NavigateAndWaitForStart(abort_url(), tab_);
-
-    // The test won't finish until WebLayer acts on the resulting
-    // WebContentsObserver::DidChangeVisibleSecurityState() notification, or the
-    // test times out.
-    run_loop.Run();
-  }
-}
-
-IN_PROC_BROWSER_TEST_F(UrlBarBrowserTest, ChangingActiveTabUpdatesUrlBarView) {
-  NavigateAndWaitForCompletion(real_url(), tab_);
-  NavigateAndWaitForCompletion(real_url(), another_tab_);
-
-  {
-    base::RunLoop run_loop;
-    SetVisibleSecurityStateChangedCallback(run_loop.QuitClosure());
-
-    SetActiveTab(another_tab_);
-
-    // The test won't finish until
-    // BrowserImpl::VisibleSecurityStateOfActiveTabChanged() gets called.
-    run_loop.Run();
-  }
-}
-
-}  // namespace weblayer
diff --git a/weblayer/browser/url_bar/url_bar_controller_impl.cc b/weblayer/browser/url_bar/url_bar_controller_impl.cc
deleted file mode 100644
index e622ca4..0000000
--- a/weblayer/browser/url_bar/url_bar_controller_impl.cc
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "weblayer/browser/url_bar/url_bar_controller_impl.h"
-
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "build/build_config.h"
-#include "components/omnibox/browser/autocomplete_input.h"
-#include "components/omnibox/browser/location_bar_model_impl.h"
-#include "components/security_state/content/content_utils.h"
-#include "components/security_state/core/security_state.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/common/content_constants.h"
-#include "weblayer/browser/browser_impl.h"
-#include "weblayer/browser/tab_impl.h"
-#include "weblayer/browser/url_bar/autocomplete_scheme_classifier_impl.h"
-#include "weblayer/public/browser.h"
-#include "weblayer/public/navigation_controller.h"
-
-#if BUILDFLAG(IS_ANDROID)
-#include "base/android/jni_string.h"
-#include "weblayer/browser/java/jni/UrlBarControllerImpl_jni.h"
-#include "weblayer/browser/url_bar/trusted_cdn_observer.h"
-#endif
-
-namespace weblayer {
-
-std::unique_ptr<UrlBarController> UrlBarController::Create(Browser* browser) {
-  return std::make_unique<UrlBarControllerImpl>(
-      static_cast<BrowserImpl*>(browser));
-}
-
-#if BUILDFLAG(IS_ANDROID)
-static jlong JNI_UrlBarControllerImpl_CreateUrlBarController(
-    JNIEnv* env,
-    jlong native_browser) {
-  return reinterpret_cast<intptr_t>(
-      new UrlBarControllerImpl(reinterpret_cast<BrowserImpl*>(native_browser)));
-}
-
-static void JNI_UrlBarControllerImpl_DeleteUrlBarController(
-    JNIEnv* env,
-    jlong native_urlbarcontroller) {
-  delete reinterpret_cast<UrlBarControllerImpl*>(native_urlbarcontroller);
-}
-#endif
-
-UrlBarControllerImpl::UrlBarControllerImpl(BrowserImpl* browser)
-    : browser_(browser),
-      location_bar_model_(std::make_unique<LocationBarModelImpl>(
-          this,
-          content::kMaxURLDisplayChars)) {
-  DCHECK(browser_);
-}
-
-UrlBarControllerImpl::~UrlBarControllerImpl() = default;
-
-#if BUILDFLAG(IS_ANDROID)
-base::android::ScopedJavaLocalRef<jstring>
-UrlBarControllerImpl::GetUrlForDisplay(JNIEnv* env) {
-  return base::android::ScopedJavaLocalRef<jstring>(
-      base::android::ConvertUTF16ToJavaString(env, GetUrlForDisplay()));
-}
-
-base::android::ScopedJavaLocalRef<jstring>
-UrlBarControllerImpl::GetPublisherUrl(JNIEnv* env) {
-  GURL url;
-
-  auto* active_web_contents = GetActiveWebContents();
-  if (active_web_contents) {
-    auto* trusted_cdn_observer =
-        TrustedCDNObserver::FromWebContents(active_web_contents);
-    if (trusted_cdn_observer)
-      url = trusted_cdn_observer->publisher_url();
-  }
-  return base::android::ScopedJavaLocalRef<jstring>(
-      base::android::ConvertUTF8ToJavaString(env, url.spec()));
-}
-
-jint UrlBarControllerImpl::GetConnectionSecurityLevel(JNIEnv* env) {
-  return GetConnectionSecurityLevel();
-}
-#endif
-
-std::u16string UrlBarControllerImpl::GetUrlForDisplay() {
-  return location_bar_model_->GetURLForDisplay();
-}
-
-security_state::SecurityLevel
-UrlBarControllerImpl::GetConnectionSecurityLevel() {
-  auto* active_web_contents = GetActiveWebContents();
-  if (!active_web_contents)
-    return security_state::SecurityLevel::NONE;
-
-  auto state = security_state::GetVisibleSecurityState(active_web_contents);
-  DCHECK(state);
-  return security_state::GetSecurityLevel(
-      *state, /* used_policy_installed_certificate= */ false);
-}
-
-bool UrlBarControllerImpl::GetURL(GURL* url) const {
-  auto* active_web_contents = GetActiveWebContents();
-  if (!active_web_contents)
-    return false;
-
-  DCHECK(url);
-  *url = active_web_contents->GetVisibleURL();
-  return true;
-}
-
-bool UrlBarControllerImpl::ShouldTrimDisplayUrlAfterHostName() const {
-  return true;
-}
-
-std::u16string UrlBarControllerImpl::FormattedStringWithEquivalentMeaning(
-    const GURL& url,
-    const std::u16string& formatted_url) const {
-  return AutocompleteInput::FormattedStringWithEquivalentMeaning(
-      url, formatted_url, AutocompleteSchemeClassifierImpl(), nullptr);
-}
-
-content::WebContents* UrlBarControllerImpl::GetActiveWebContents() const {
-  auto* active_tab = static_cast<TabImpl*>(browser_->GetActiveTab());
-  if (!active_tab)
-    return nullptr;
-
-  return active_tab->web_contents();
-}
-
-}  // namespace weblayer
diff --git a/weblayer/browser/url_bar/url_bar_controller_impl.h b/weblayer/browser/url_bar/url_bar_controller_impl.h
deleted file mode 100644
index fbd4378..0000000
--- a/weblayer/browser/url_bar/url_bar_controller_impl.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBLAYER_BROWSER_URL_BAR_URL_BAR_CONTROLLER_IMPL_H_
-#define WEBLAYER_BROWSER_URL_BAR_URL_BAR_CONTROLLER_IMPL_H_
-
-#include <string>
-
-#include "base/memory/raw_ptr.h"
-#include "build/build_config.h"
-#include "components/omnibox/browser/location_bar_model_delegate.h"
-#include "weblayer/public/url_bar_controller.h"
-
-#if BUILDFLAG(IS_ANDROID)
-#include "base/android/scoped_java_ref.h"
-#endif
-
-class LocationBarModelImpl;
-
-namespace content {
-class WebContents;
-}
-
-namespace weblayer {
-class BrowserImpl;
-
-class UrlBarControllerImpl : public UrlBarController,
-                             public LocationBarModelDelegate {
- public:
-  explicit UrlBarControllerImpl(BrowserImpl* native_browser);
-  ~UrlBarControllerImpl() override;
-  UrlBarControllerImpl(const UrlBarControllerImpl&) = delete;
-  UrlBarControllerImpl& operator=(const UrlBarControllerImpl&) = delete;
-
-#if BUILDFLAG(IS_ANDROID)
-  base::android::ScopedJavaLocalRef<jstring> GetUrlForDisplay(JNIEnv* env);
-  base::android::ScopedJavaLocalRef<jstring> GetPublisherUrl(JNIEnv* env);
-  jint GetConnectionSecurityLevel(JNIEnv* env);
-#endif
-
-  // UrlBarController:
-  std::u16string GetUrlForDisplay() override;
-  security_state::SecurityLevel GetConnectionSecurityLevel() override;
-
-  // LocationBarModelDelegate:
-  bool GetURL(GURL* url) const override;
-  bool ShouldTrimDisplayUrlAfterHostName() const override;
-  std::u16string FormattedStringWithEquivalentMeaning(
-      const GURL& url,
-      const std::u16string& formatted_url) const override;
-
- private:
-  content::WebContents* GetActiveWebContents() const;
-  const raw_ptr<BrowserImpl> browser_;
-  std::unique_ptr<LocationBarModelImpl> location_bar_model_;
-};
-
-}  // namespace weblayer
-
-#endif  // WEBLAYER_BROWSER_URL_BAR_URL_BAR_CONTROLLER_IMPL_H_
diff --git a/weblayer/browser/weblayer_impl_android.cc b/weblayer/browser/weblayer_impl_android.cc
index e40b83f..ef9d5072 100644
--- a/weblayer/browser/weblayer_impl_android.cc
+++ b/weblayer/browser/weblayer_impl_android.cc
@@ -16,7 +16,6 @@
 #include "weblayer/browser/component_updater/registration.h"
 #include "weblayer/browser/devtools_server_android.h"
 #include "weblayer/browser/java/jni/WebLayerImpl_jni.h"
-#include "weblayer/browser/url_bar/page_info_client_impl.h"
 #include "weblayer/common/crash_reporter/crash_keys.h"
 
 using base::android::JavaParamRef;
diff --git a/weblayer/public/java/BUILD.gn b/weblayer/public/java/BUILD.gn
index 6bae275..612ec48 100644
--- a/weblayer/public/java/BUILD.gn
+++ b/weblayer/public/java/BUILD.gn
@@ -89,7 +89,6 @@
     "org/chromium/weblayer/ObserverList.java",
     "org/chromium/weblayer/OpenUrlCallback.java",
     "org/chromium/weblayer/Page.java",
-    "org/chromium/weblayer/PageInfoDisplayOptions.java",
     "org/chromium/weblayer/PaymentDetailsUpdateServiceWrapper.java",
     "org/chromium/weblayer/PrerenderController.java",
     "org/chromium/weblayer/Profile.java",
@@ -102,13 +101,12 @@
     "org/chromium/weblayer/Tab.java",
     "org/chromium/weblayer/TabCallback.java",
     "org/chromium/weblayer/TabListCallback.java",
+    "org/chromium/weblayer/TabManagerDelegate.java",
     "org/chromium/weblayer/TabNavigationControllerProxy.java",
     "org/chromium/weblayer/TabParams.java",
     "org/chromium/weblayer/TabProxy.java",
     "org/chromium/weblayer/ThreadCheck.java",
     "org/chromium/weblayer/UnsupportedVersionException.java",
-    "org/chromium/weblayer/UrlBarController.java",
-    "org/chromium/weblayer/UrlBarOptions.java",
     "org/chromium/weblayer/UserIdentityCallback.java",
     "org/chromium/weblayer/VerifiesOnO.java",
     "org/chromium/weblayer/VerifiesOnR.java",
@@ -198,6 +196,7 @@
     "org/chromium/webengine/interfaces/IStringCallback.aidl",
     "org/chromium/webengine/interfaces/ITabCallback.aidl",
     "org/chromium/webengine/interfaces/ITabListObserverDelegate.aidl",
+    "org/chromium/webengine/interfaces/ITabManagerDelegate.aidl",
     "org/chromium/webengine/interfaces/ITabNavigationControllerProxy.aidl",
     "org/chromium/webengine/interfaces/ITabObserverDelegate.aidl",
     "org/chromium/webengine/interfaces/ITabParams.aidl",
diff --git a/weblayer/public/java/org/chromium/webengine/TabManager.java b/weblayer/public/java/org/chromium/webengine/TabManager.java
index 2d9ef2b6..385fd757 100644
--- a/weblayer/public/java/org/chromium/webengine/TabManager.java
+++ b/weblayer/public/java/org/chromium/webengine/TabManager.java
@@ -18,8 +18,8 @@
 import org.chromium.webengine.interfaces.ExceptionType;
 import org.chromium.webengine.interfaces.IBooleanCallback;
 import org.chromium.webengine.interfaces.ITabCallback;
+import org.chromium.webengine.interfaces.ITabManagerDelegate;
 import org.chromium.webengine.interfaces.ITabParams;
-import org.chromium.webengine.interfaces.IWebFragmentDelegate;
 
 /**
  * Class for interaction with WebFragment Tabs.
@@ -28,7 +28,7 @@
  * Access only via ListenableFuture through WebFragment.
  */
 public class TabManager {
-    private IWebFragmentDelegate mDelegate;
+    private ITabManagerDelegate mDelegate;
 
     private final class RequestNavigationCallback extends IBooleanCallback.Stub {
         private CallbackToFutureAdapter.Completer<Boolean> mCompleter;
@@ -66,7 +66,7 @@
         }
     };
 
-    TabManager(IWebFragmentDelegate delegate) {
+    TabManager(ITabManagerDelegate delegate) {
         mDelegate = delegate;
     }
 
diff --git a/weblayer/public/java/org/chromium/webengine/WebFragment.java b/weblayer/public/java/org/chromium/webengine/WebFragment.java
index 468b924..acd0c027 100644
--- a/weblayer/public/java/org/chromium/webengine/WebFragment.java
+++ b/weblayer/public/java/org/chromium/webengine/WebFragment.java
@@ -28,6 +28,7 @@
 import com.google.common.util.concurrent.ListenableFuture;
 
 import org.chromium.webengine.interfaces.ICookieManagerDelegate;
+import org.chromium.webengine.interfaces.ITabManagerDelegate;
 import org.chromium.webengine.interfaces.IWebFragmentDelegate;
 import org.chromium.webengine.interfaces.IWebFragmentDelegateClient;
 import org.chromium.weblayer_private.interfaces.IObjectWrapper;
@@ -64,7 +65,11 @@
         @Override
         public void onStarted(Bundle instanceState) {
             mInstanceState = instanceState;
-            mTabManager = new TabManager(mDelegate);
+        }
+
+        @Override
+        public void onTabManagerReady(ITabManagerDelegate delegate) {
+            mTabManager = new TabManager(delegate);
             mTabManagerCompleter.set(mTabManager);
         }
 
diff --git a/weblayer/public/java/org/chromium/webengine/interfaces/ITabManagerDelegate.aidl b/weblayer/public/java/org/chromium/webengine/interfaces/ITabManagerDelegate.aidl
new file mode 100644
index 0000000..9ba57e17
--- /dev/null
+++ b/weblayer/public/java/org/chromium/webengine/interfaces/ITabManagerDelegate.aidl
@@ -0,0 +1,15 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.webengine.interfaces;
+
+import org.chromium.webengine.interfaces.IBooleanCallback;
+import org.chromium.webengine.interfaces.ITabProxy;
+import org.chromium.webengine.interfaces.ITabCallback;
+
+oneway interface ITabManagerDelegate {
+    void getActiveTab(ITabCallback callback) = 14;
+    void tryNavigateBack(IBooleanCallback callback) = 17;
+    void createTab(ITabCallback callback) = 18;
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegate.aidl b/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegate.aidl
index fd4a362..f01e134 100644
--- a/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegate.aidl
+++ b/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegate.aidl
@@ -6,10 +6,8 @@
 
 import android.os.Bundle;
 import org.chromium.webengine.interfaces.IWebFragmentDelegateClient;
-import org.chromium.webengine.interfaces.IBooleanCallback;
 import org.chromium.webengine.interfaces.ITabListObserverDelegate;
-import org.chromium.webengine.interfaces.ITabProxy;
-import org.chromium.webengine.interfaces.ITabCallback;
+
 import org.chromium.weblayer_private.interfaces.IObjectWrapper;
 
 // Next value: 20
@@ -36,8 +34,5 @@
     void retrieveContentViewRenderView() = 12;
 
     // Tab operations.
-    void getActiveTab(ITabCallback callback) = 14;
     void setTabListObserverDelegate(ITabListObserverDelegate tabListObserverDelegate) = 15;
-    void tryNavigateBack(IBooleanCallback callback) = 17;
-    void createTab(ITabCallback callback) = 18;
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegateClient.aidl b/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegateClient.aidl
index e5ab0cd9..969d73e 100644
--- a/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegateClient.aidl
+++ b/weblayer/public/java/org/chromium/webengine/interfaces/IWebFragmentDelegateClient.aidl
@@ -7,6 +7,7 @@
 import android.view.SurfaceControlViewHost.SurfacePackage;
 
 import org.chromium.webengine.interfaces.ICookieManagerDelegate;
+import org.chromium.webengine.interfaces.ITabManagerDelegate;
 import org.chromium.weblayer_private.interfaces.IObjectWrapper;
 
 oneway interface IWebFragmentDelegateClient {
@@ -23,4 +24,6 @@
     void onStarted(in Bundle instanceState) = 3;
 
     void onCookieManagerReady(in ICookieManagerDelegate delegate) = 4;
+
+    void onTabManagerReady(in ITabManagerDelegate delegate) = 5;
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/Browser.java b/weblayer/public/java/org/chromium/weblayer/Browser.java
index 0eaf222..37ca7be 100644
--- a/weblayer/public/java/org/chromium/weblayer/Browser.java
+++ b/weblayer/public/java/org/chromium/weblayer/Browser.java
@@ -5,7 +5,6 @@
 package org.chromium.weblayer;
 
 import android.os.RemoteException;
-import android.view.SurfaceControlViewHost;
 import android.view.View;
 
 import androidx.annotation.NonNull;
@@ -47,7 +46,6 @@
     // Set to null once destroyed (or for tests).
     private IBrowser mImpl;
     private final ObserverList<TabListCallback> mTabListCallbacks;
-    private final UrlBarController mUrlBarController;
 
     private final ObserverList<BrowserControlsOffsetCallback> mBrowserControlsOffsetCallbacks;
     private final ObserverList<BrowserRestoreCallback> mBrowserRestoreCallbacks;
@@ -81,7 +79,6 @@
     protected Browser() {
         mImpl = null;
         mTabListCallbacks = null;
-        mUrlBarController = null;
         mBrowserControlsOffsetCallbacks = null;
         mBrowserRestoreCallbacks = null;
     }
@@ -98,7 +95,6 @@
 
         try {
             mImpl.setClient(new BrowserClientImpl());
-            mUrlBarController = new UrlBarController(mImpl.getUrlBarController());
         } catch (RemoteException e) {
             throw new APICallException(e);
         }
@@ -535,16 +531,6 @@
     }
 
     /**
-     * Returns the UrlBarController.
-     */
-    @NonNull
-    public UrlBarController getUrlBarController() {
-        ThreadCheck.ensureOnUiThread();
-        throwIfDestroyed();
-        return mUrlBarController;
-    }
-
-    /**
      * Normally when the Browser is detached the visibility of the page is set to hidden. When the
      * visibility is hidden video may stop, or other side effects may result. At certain times,
      * such as fullscreen or rotation, it may be necessary to transiently detach the Browser.
@@ -569,33 +555,6 @@
         }
     }
 
-    /**
-     * Attaches the top-level view to the SurfaceControlViewHost.
-     * @param host The SurfaceControlViewHost created from the host app's SurfaceView.
-     *
-     * @since 105
-     */
-    void setSurfaceControlViewHost(SurfaceControlViewHost host) {
-        ThreadCheck.ensureOnUiThread();
-
-        if (WebLayer.getSupportedMajorVersionInternal() < 105) {
-            throw new UnsupportedOperationException();
-        }
-        try {
-            mImpl.setSurfaceControlViewHost(ObjectWrapper.wrap(host));
-        } catch (RemoteException e) {
-            throw new APICallException(e);
-        }
-    }
-
-    View getContentViewRenderView() {
-        try {
-            return ObjectWrapper.unwrap(mImpl.getContentViewRenderView(), View.class);
-        } catch (RemoteException e) {
-            throw new APICallException(e);
-        }
-    }
-
     private final class BrowserClientImpl extends IBrowserClient.Stub {
         @Override
         public void onActiveTabChanged(int activeTabId) {
diff --git a/weblayer/public/java/org/chromium/weblayer/NavigateParams.java b/weblayer/public/java/org/chromium/weblayer/NavigateParams.java
index 2f90173..34011d84 100644
--- a/weblayer/public/java/org/chromium/weblayer/NavigateParams.java
+++ b/weblayer/public/java/org/chromium/weblayer/NavigateParams.java
@@ -114,9 +114,7 @@
          *                  page wasn't in the back-forward cache. An example to cache for 1 minute:
          *                      Cache-Control: private, max-age=60
          *             -since this isn't fetched by WebLayer it won't have the necessary certificate
-         *                  information to show the security padlock or certificate data. As such an
-         *                  exception is thrown if this is set when a View from UrlBarController is
-         *                  attached to a window.
+         *                  information to show the security padlock or certificate data.
          */
         @NonNull
         public Builder setResponse(@NonNull WebResourceResponse response) {
diff --git a/weblayer/public/java/org/chromium/weblayer/NavigationController.java b/weblayer/public/java/org/chromium/weblayer/NavigationController.java
index 1b0a8b2..1665a8a 100644
--- a/weblayer/public/java/org/chromium/weblayer/NavigationController.java
+++ b/weblayer/public/java/org/chromium/weblayer/NavigationController.java
@@ -54,8 +54,6 @@
      * @param uri the destination URI.
      * @param params extra parameters for the navigation.
      *
-     * @throws IllegalStateException if params.getResponse() is not null but a URLBarController
-     *         View is attached to a Window.
      */
     public void navigate(@NonNull Uri uri, @Nullable NavigateParams params) {
         ThreadCheck.ensureOnUiThread();
diff --git a/weblayer/public/java/org/chromium/weblayer/PageInfoDisplayOptions.java b/weblayer/public/java/org/chromium/weblayer/PageInfoDisplayOptions.java
deleted file mode 100644
index 264c222..0000000
--- a/weblayer/public/java/org/chromium/weblayer/PageInfoDisplayOptions.java
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-
-import org.chromium.weblayer_private.interfaces.UrlBarOptionsKeys;
-
-/**
- * Builds the options used to configure how the url bar shows page info.
- *
- * @since 95
- */
-final class PageInfoDisplayOptions {
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    private Bundle mOptions;
-
-    /**
-     * A Builder class to help create PageInfoDisplayOptions.
-     */
-    public static final class Builder {
-        private Bundle mOptions;
-
-        private Builder() {
-            mOptions = new Bundle();
-        }
-
-        Bundle getBundle() {
-            return mOptions;
-        }
-
-        /**
-         * Specifies whether the publisher URL is shown.
-         */
-        @NonNull
-        public Builder showPublisherUrl() {
-            mOptions.putBoolean(UrlBarOptionsKeys.SHOW_PUBLISHER_URL, true);
-            return this;
-        }
-
-        /**
-         * Builds a PageInfoDisplayOptions object.
-         */
-        @NonNull
-        public PageInfoDisplayOptions build() {
-            return new PageInfoDisplayOptions(mOptions);
-        }
-    }
-
-    private PageInfoDisplayOptions(Bundle options) {
-        mOptions = options;
-    }
-
-    /**
-     * Returns the page info display options as a Bundle.
-     */
-    Bundle getBundle() {
-        return mOptions;
-    }
-
-    /**
-     * Returns whether the publisher URL is shown.
-     */
-    public boolean getShowPublisherUrl() {
-        return mOptions.getBoolean(UrlBarOptionsKeys.SHOW_PUBLISHER_URL, false);
-    }
-}
diff --git a/weblayer/public/java/org/chromium/weblayer/RemoteFragmentEventHandler.java b/weblayer/public/java/org/chromium/weblayer/RemoteFragmentEventHandler.java
index df3601f..df95f30 100644
--- a/weblayer/public/java/org/chromium/weblayer/RemoteFragmentEventHandler.java
+++ b/weblayer/public/java/org/chromium/weblayer/RemoteFragmentEventHandler.java
@@ -7,6 +7,8 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.os.RemoteException;
+import android.view.SurfaceControlViewHost;
+import android.view.View;
 
 import androidx.annotation.CallSuper;
 import androidx.annotation.NonNull;
@@ -138,6 +140,27 @@
         }
     }
 
+    @CallSuper
+    protected View getContentViewRenderView() {
+        ThreadCheck.ensureOnUiThread();
+        try {
+            return ObjectWrapper.unwrap(
+                    mRemoteFragment.handleGetContentViewRenderView(), View.class);
+        } catch (RemoteException e) {
+            throw new APICallException(e);
+        }
+    }
+
+    @CallSuper
+    protected void setSurfaceControlViewHost(SurfaceControlViewHost host) {
+        ThreadCheck.ensureOnUiThread();
+        try {
+            mRemoteFragment.handleSetSurfaceControlViewHost(ObjectWrapper.wrap(host));
+        } catch (RemoteException e) {
+            throw new APICallException(e);
+        }
+    }
+
     protected IRemoteFragment getRemoteFragment() {
         return mRemoteFragment;
     }
diff --git a/weblayer/public/java/org/chromium/weblayer/TabManagerDelegate.java b/weblayer/public/java/org/chromium/weblayer/TabManagerDelegate.java
new file mode 100644
index 0000000..f03660c81
--- /dev/null
+++ b/weblayer/public/java/org/chromium/weblayer/TabManagerDelegate.java
@@ -0,0 +1,63 @@
+// Copyright 2022 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.weblayer;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.os.RemoteException;
+
+import org.chromium.webengine.interfaces.IBooleanCallback;
+import org.chromium.webengine.interfaces.ITabCallback;
+import org.chromium.webengine.interfaces.ITabManagerDelegate;
+import org.chromium.webengine.interfaces.ITabParams;
+
+class TabManagerDelegate extends ITabManagerDelegate.Stub {
+    private Handler mHandler = new Handler(Looper.getMainLooper());
+
+    private Browser mBrowser;
+
+    TabManagerDelegate(Browser browser) {
+        mBrowser = browser;
+    }
+
+    @Override
+    public void getActiveTab(ITabCallback tabCallback) {
+        mHandler.post(() -> {
+            Tab activeTab = mBrowser.getActiveTab();
+            try {
+                if (activeTab != null) {
+                    ITabParams tabParams = TabParams.buildParcelable(activeTab);
+                    tabCallback.onResult(tabParams);
+                } else {
+                    tabCallback.onResult(null);
+                }
+            } catch (RemoteException e) {
+            }
+        });
+    }
+
+    @Override
+    public void createTab(ITabCallback callback) {
+        mHandler.post(() -> {
+            Tab newTab = mBrowser.createTab();
+            try {
+                callback.onResult(TabParams.buildParcelable(newTab));
+            } catch (RemoteException e) {
+            }
+        });
+    }
+
+    @Override
+    public void tryNavigateBack(IBooleanCallback callback) {
+        mHandler.post(() -> {
+            mBrowser.tryNavigateBack(didNavigate -> {
+                try {
+                    callback.onResult(didNavigate);
+                } catch (RemoteException e) {
+                }
+            });
+        });
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/UrlBarController.java b/weblayer/public/java/org/chromium/weblayer/UrlBarController.java
deleted file mode 100644
index 2abba7f9..0000000
--- a/weblayer/public/java/org/chromium/weblayer/UrlBarController.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer;
-
-import android.os.RemoteException;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-import org.chromium.weblayer_private.interfaces.APICallException;
-import org.chromium.weblayer_private.interfaces.IUrlBarController;
-import org.chromium.weblayer_private.interfaces.ObjectWrapper;
-
-/**
- * UrlBarController enables creation of URL bar views and retrieval of information about them.
- */
-class UrlBarController {
-    private final IUrlBarController mImpl;
-
-    // Constructor for test mocking.
-    protected UrlBarController() {
-        mImpl = null;
-    }
-
-    UrlBarController(IUrlBarController urlBarController) {
-        mImpl = urlBarController;
-    }
-
-    /**
-     * Creates a URL bar view based on the options provided.
-     * @param options The options provided to tweak the URL bar display.
-     */
-    @NonNull
-    public View createUrlBarView(@NonNull UrlBarOptions options) {
-        ThreadCheck.ensureOnUiThread();
-        try {
-            return ObjectWrapper.unwrap(
-                    mImpl.createUrlBarView(options.getBundle(),
-                            ObjectWrapper.wrap(options.getTextClickListener()),
-                            ObjectWrapper.wrap(options.getTextLongClickListener())),
-                    View.class);
-        } catch (RemoteException exception) {
-            throw new APICallException(exception);
-        }
-    }
-
-    /**
-     * Shows the page-info dialog.
-     *
-     * @throws IllegalStateException if called and not attached.
-     *
-     * @since 95
-     */
-    public void showPageInfo(@NonNull PageInfoDisplayOptions options) {
-        ThreadCheck.ensureOnUiThread();
-        if (WebLayer.getSupportedMajorVersionInternal() < 95) {
-            throw new UnsupportedOperationException();
-        }
-        try {
-            mImpl.showPageInfo(options.getBundle());
-        } catch (RemoteException e) {
-            throw new APICallException(e);
-        }
-    }
-}
diff --git a/weblayer/public/java/org/chromium/weblayer/UrlBarOptions.java b/weblayer/public/java/org/chromium/weblayer/UrlBarOptions.java
deleted file mode 100644
index 0f2cdda4..0000000
--- a/weblayer/public/java/org/chromium/weblayer/UrlBarOptions.java
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.weblayer;
-
-import android.os.Bundle;
-import android.util.AndroidRuntimeException;
-import android.view.View.OnClickListener;
-import android.view.View.OnLongClickListener;
-
-import androidx.annotation.ColorRes;
-import androidx.annotation.NonNull;
-
-import org.chromium.weblayer_private.interfaces.UrlBarOptionsKeys;
-
-/**
- * Class containing options to tweak the URL bar.
- */
-final class UrlBarOptions {
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    private Bundle mOptions;
-    private OnClickListener mTextClickListener;
-    private OnLongClickListener mTextLongClickListener;
-
-    /**
-     * A Builder class to help create UrlBarOptions.
-     */
-    public static final class Builder {
-        private Bundle mOptions;
-        private OnClickListener mTextClickListener;
-        private OnLongClickListener mTextLongClickListener;
-
-        private Builder() {
-            mOptions = new Bundle();
-        }
-
-        Bundle getBundle() {
-            return mOptions;
-        }
-
-        OnClickListener getTextClickListener() {
-            return mTextClickListener;
-        }
-
-        OnLongClickListener getTextLongClickListener() {
-            return mTextLongClickListener;
-        }
-
-        /**
-         * Sets the text size of the URL bar.
-         *
-         * @param textSize The desired size of the URL bar text in scalable pixels.
-         * The default is 14.0F and the minimum allowed size is 5.0F.
-         */
-        @NonNull
-        public Builder setTextSizeSP(float textSize) {
-            mOptions.putFloat(UrlBarOptionsKeys.URL_TEXT_SIZE, textSize);
-            return this;
-        }
-
-        /**
-         * Specifies whether the URL text in the URL bar should also show Page Info UI on click.
-         * By default, only the security status icon does so.
-         */
-        @NonNull
-        public Builder showPageInfoWhenTextIsClicked() {
-            mOptions.putBoolean(UrlBarOptionsKeys.SHOW_PAGE_INFO_WHEN_URL_TEXT_CLICKED, true);
-            return this;
-        }
-
-        /**
-         * Specifies whether the publisher URL is shown.
-         */
-        @NonNull
-        public Builder showPublisherUrl() {
-            mOptions.putBoolean(UrlBarOptionsKeys.SHOW_PUBLISHER_URL, true);
-            return this;
-        }
-
-        /**
-         * Sets the color of the URL bar text.
-         *
-         * @param textColor The color for the Url bar text.
-         */
-        @NonNull
-        public Builder setTextColor(@ColorRes int textColor) {
-            mOptions.putInt(UrlBarOptionsKeys.URL_TEXT_COLOR, textColor);
-            return this;
-        }
-
-        /**
-         * Sets the color of the URL bar security status icon.
-         *
-         * @param iconColor The color for the Url bar icon.
-         */
-        @NonNull
-        public Builder setIconColor(@ColorRes int iconColor) {
-            mOptions.putInt(UrlBarOptionsKeys.URL_ICON_COLOR, iconColor);
-            return this;
-        }
-
-        @NonNull
-        public Builder setTextClickListener(@NonNull OnClickListener clickListener) {
-            mTextClickListener = clickListener;
-            return this;
-        }
-
-        @NonNull
-        public Builder setTextLongClickListener(@NonNull OnLongClickListener longClickListener) {
-            mTextLongClickListener = longClickListener;
-            return this;
-        }
-
-        /**
-         * Builds a UrlBarOptions object.
-         */
-        @NonNull
-        public UrlBarOptions build() {
-            boolean showPageInfoWhenUrlTextClicked = mOptions.getBoolean(
-                    UrlBarOptionsKeys.SHOW_PAGE_INFO_WHEN_URL_TEXT_CLICKED, /*default= */ false);
-            if (mTextClickListener != null && showPageInfoWhenUrlTextClicked) {
-                throw new AndroidRuntimeException("Text click listener cannot be set when "
-                        + "SHOW_PAGE_INFO_WHEN_URL_TEXT_CLICKED is true.");
-            }
-            return new UrlBarOptions(this);
-        }
-    }
-
-    private UrlBarOptions(Builder builder) {
-        mOptions = builder.getBundle();
-        mTextClickListener = builder.getTextClickListener();
-        mTextLongClickListener = builder.getTextLongClickListener();
-    }
-
-    /**
-     * Gets the URL bar options as a Bundle.
-     */
-    Bundle getBundle() {
-        return mOptions;
-    }
-
-    /**
-     * Gets the text size of the URL bar text in scalable pixels.
-     */
-    public float getTextSizeSP() {
-        return mOptions.getFloat(UrlBarOptionsKeys.URL_TEXT_SIZE);
-    }
-
-    /**
-     * Gets the ClickListener.
-     */
-    OnClickListener getTextClickListener() {
-        return mTextClickListener;
-    }
-
-    /**
-     * Gets the LongClickListener.
-     */
-    OnLongClickListener getTextLongClickListener() {
-        return mTextLongClickListener;
-    }
-}
diff --git a/weblayer/public/java/org/chromium/weblayer/WebFragmentDelegate.java b/weblayer/public/java/org/chromium/weblayer/WebFragmentDelegate.java
index a4ca74e8..7f4650ed 100644
--- a/weblayer/public/java/org/chromium/weblayer/WebFragmentDelegate.java
+++ b/weblayer/public/java/org/chromium/weblayer/WebFragmentDelegate.java
@@ -13,11 +13,8 @@
 import android.view.SurfaceControlViewHost;
 import android.view.WindowManager;
 
-import org.chromium.webengine.interfaces.IBooleanCallback;
 import org.chromium.webengine.interfaces.IFragmentParams;
-import org.chromium.webengine.interfaces.ITabCallback;
 import org.chromium.webengine.interfaces.ITabListObserverDelegate;
-import org.chromium.webengine.interfaces.ITabParams;
 import org.chromium.webengine.interfaces.IWebFragmentDelegate;
 import org.chromium.webengine.interfaces.IWebFragmentDelegateClient;
 import org.chromium.weblayer_private.interfaces.BrowserFragmentArgs;
@@ -87,7 +84,7 @@
         mSurfaceControlViewHost =
                 new SurfaceControlViewHost(mContext, window.getDefaultDisplay(), hostToken);
 
-        mEventHandler.getBrowser().setSurfaceControlViewHost(mSurfaceControlViewHost);
+        mEventHandler.setSurfaceControlViewHost(mSurfaceControlViewHost);
         try {
             mClient.onSurfacePackageReady(mSurfaceControlViewHost.getSurfacePackage());
         } catch (RemoteException e) {
@@ -99,7 +96,7 @@
         mHandler.post(() -> {
             try {
                 mClient.onContentViewRenderViewReady(
-                        ObjectWrapper.wrap(mEventHandler.getBrowser().getContentViewRenderView()));
+                        ObjectWrapper.wrap(mEventHandler.getContentViewRenderView()));
             } catch (RemoteException e) {
             }
         });
@@ -115,22 +112,6 @@
     }
 
     @Override
-    public void getActiveTab(ITabCallback tabCallback) {
-        mHandler.post(() -> {
-            Tab activeTab = mEventHandler.getBrowser().getActiveTab();
-            try {
-                if (activeTab != null) {
-                    ITabParams tabParams = TabParams.buildParcelable(activeTab);
-                    tabCallback.onResult(tabParams);
-                } else {
-                    tabCallback.onResult(null);
-                }
-            } catch (RemoteException e) {
-            }
-        });
-    }
-
-    @Override
     public void onAttach() {
         mHandler.post(() -> mEventHandler.onAttach(mContext));
     }
@@ -180,6 +161,7 @@
 
             try {
                 mClient.onStarted(instanceState);
+                mClient.onTabManagerReady(new TabManagerDelegate(mEventHandler.getBrowser()));
             } catch (RemoteException e) {
             }
         });
@@ -204,27 +186,4 @@
     public void setTabListObserverDelegate(ITabListObserverDelegate browserObserverDelegate) {
         mTabListDelegate.setObserver(browserObserverDelegate);
     }
-
-    @Override
-    public void tryNavigateBack(IBooleanCallback callback) {
-        mHandler.post(() -> {
-            mEventHandler.getBrowser().tryNavigateBack(didNavigate -> {
-                try {
-                    callback.onResult(didNavigate);
-                } catch (RemoteException e) {
-                }
-            });
-        });
-    }
-
-    @Override
-    public void createTab(ITabCallback callback) {
-        mHandler.post(() -> {
-            Tab newTab = mEventHandler.getBrowser().createTab();
-            try {
-                callback.onResult(TabParams.buildParcelable(newTab));
-            } catch (RemoteException e) {
-            }
-        });
-    }
 }
\ No newline at end of file
diff --git a/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java b/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java
index 628ea93..85c05cca 100644
--- a/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java
+++ b/weblayer/public/javatestutil/org/chromium/weblayer/TestWebLayer.java
@@ -11,7 +11,6 @@
 import android.util.AndroidRuntimeException;
 import android.view.View;
 import android.webkit.ValueCallback;
-import android.widget.ImageView;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -127,10 +126,6 @@
         return mITestWebLayer.canInfoBarContainerScroll(tab.getITab());
     }
 
-    public String getDisplayedUrl(View urlBarView) throws RemoteException {
-        return mITestWebLayer.getDisplayedUrl(ObjectWrapper.wrap(urlBarView));
-    }
-
     public String getTranslateInfoBarTargetLanguage(Tab tab) throws RemoteException {
         return mITestWebLayer.getTranslateInfoBarTargetLanguage(tab.getITab());
     }
@@ -162,11 +157,6 @@
         return mITestWebLayer.isWindowOnSmallDevice(browser.getIBrowser());
     }
 
-    public ImageView getSecurityButton(View urlBarView) throws RemoteException {
-        return (ImageView) ObjectWrapper.unwrap(
-                mITestWebLayer.getSecurityButton(ObjectWrapper.wrap(urlBarView)), ImageView.class);
-    }
-
     public void fetchAccessToken(Profile profile, Set<String> scopes,
             Callback<String> onTokenFetched) throws RemoteException {
         ValueCallback<String> valueCallback = (String token) -> {
diff --git a/weblayer/public/url_bar_controller.h b/weblayer/public/url_bar_controller.h
deleted file mode 100644
index a5e1902..0000000
--- a/weblayer/public/url_bar_controller.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2020 The Chromium Authors
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBLAYER_PUBLIC_URL_BAR_CONTROLLER_H_
-#define WEBLAYER_PUBLIC_URL_BAR_CONTROLLER_H_
-
-#include <string>
-
-#include "components/security_state/core/security_state.h"
-
-namespace weblayer {
-
-class Browser;
-
-class UrlBarController {
- public:
-  static std::unique_ptr<UrlBarController> Create(Browser* browser);
-
-  virtual ~UrlBarController() {}
-  virtual std::u16string GetUrlForDisplay() = 0;
-  virtual security_state::SecurityLevel GetConnectionSecurityLevel() = 0;
-};
-
-}  // namespace weblayer
-
-#endif  // WEBLAYER_PUBLIC_URL_BAR_CONTROLLER_H_
\ No newline at end of file
diff --git a/weblayer/test/BUILD.gn b/weblayer/test/BUILD.gn
index b95fa0a..add925e 100644
--- a/weblayer/test/BUILD.gn
+++ b/weblayer/test/BUILD.gn
@@ -193,7 +193,6 @@
     "../browser/ssl_browsertest.cc",
     "../browser/subresource_filter_browsertest.cc",
     "../browser/translate_browsertest.cc",
-    "../browser/url_bar/url_bar_browsertest.cc",
     "../browser/weblayer_variations_http_browsertest.cc",
     "../browser/webui/webui_browsertest.cc",
     "browsertests_main.cc",
@@ -229,7 +228,6 @@
       "../browser/safe_browsing/client_side_detection_service_factory_browsertest.cc",
       "../browser/safe_browsing/safe_browsing_browsertest.cc",
       "../browser/safe_browsing/weblayer_ping_manager_browsertest.cc",
-      "../browser/url_bar/page_info_browsertest.cc",
       "../browser/webapps/webapk_install_scheduler_browsertest.cc",
       "../shell/android/browsertests_apk/translate_test_bridge.cc",
       "../shell/android/browsertests_apk/translate_test_bridge.h",