diff --git a/AUTHORS b/AUTHORS
index b42bc6d..41cf3fc 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -223,6 +223,7 @@
 Debug Wang <debugwang@tencent.com>
 Deepak Dilip Borade <deepak.db@samsung.com>
 Deepak Mittal <deepak.m1@samsung.com>
+Deepak Mohan <hop2deep@gmail.com>
 Deepak Sharma <deepak.sharma@amd.com>
 Deepak Singla <deepak.s@samsung.com>
 Deokjin Kim <deokjin81.kim@samsung.com>
diff --git a/DEPS b/DEPS
index 164a5ed..6e71afd0 100644
--- a/DEPS
+++ b/DEPS
@@ -167,11 +167,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '902cf1e12a74e0f4d28ca6089aaecfda63e3b728',
+  'skia_revision': '5899485b9a87e868fe5d9e410956bd29d3158c06',
   # 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': '79eb4f5c4a72d35033d405fc5f1d539989b5d89c',
+  'v8_revision': 'a3b4ceff6b8da6dacfe458af87cc6a8c91de5dde',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -179,7 +179,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': 'a333b87cfcbe26daa7760aa710234c8e999d9ba5',
+  'angle_revision': 'e600ac2a03bbd6cd7e0cb8ef0706fd3b7b9a7912',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -218,7 +218,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '1167bff3e9a6302687667c6134673e4b3fd13636',
+  'freetype_revision': '5a1a79c0e8de8e886cc347ad22801982e8298a06',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling HarfBuzz
   # and whatever else without interference from each other.
@@ -230,7 +230,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '0b1af463167af25923a31dd190b41a32841e05fe',
+  'catapult_revision': 'f7b20a05decf39ce51b6728d773a023e2bc5759b',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -302,7 +302,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '720988d878a186959e2b799ac8644c82759ef890',
+  'dawn_revision': 'e986cb92544aa2cbf4c5ce30020f024cd25a7344',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -887,7 +887,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '1ad5811accaedf0cf6b05747261a6a006d0dc090',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '1458d572f95002172a9335174cd48a3a67bcd079',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -1280,7 +1280,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'f91a82bb16246437dc6c565b80f13158d142dde6',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + '26f21f5e0ac0b6021c5abb92321d16d3454996bb',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1470,7 +1470,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '7c4e67ff117d6c640e6dd17989afe2fb7da7eecb',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'a639f7a2447777d126b25bdf1536c22e3f698c49',
+    Var('webrtc_git') + '/src.git' + '@' + 'b4161d3c0d43e06d73c311e33d8fbed216fd233c',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1532,7 +1532,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@482a6e85b16710573a1277cbb655e4be6665bdf2',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@457b1b9115f537c2d308f6b8fc047cf33d06e98a',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/WATCHLISTS b/WATCHLISTS
index f6e375c3..e4e33bf 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -245,7 +245,8 @@
       'filepath': 'content/browser/frame_host/back_forward_cache.*|'\
                   'content/browser/back_forward_cache_browsertest.cc|'\
                   'content/test/data/back_forward_cache/|'\
-                  'content/public/browser/back_forward_cache.*',
+                  'content/public/browser/back_forward_cache.*|'\
+                  'testing/buildbot/filters.bfcache.*.filter',
     },
     'binary_size': {
       'filepath': 'build/android/binary_size/|'\
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index 738efb1..2ba283ed 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -545,8 +545,6 @@
     "java/src/org/chromium/android_webview/AwRenderProcess.java",
     "java/src/org/chromium/android_webview/AwRenderProcessGoneDetail.java",
     "java/src/org/chromium/android_webview/AwSafeBrowsingConfigHelper.java",
-    "java/src/org/chromium/android_webview/AwSafeBrowsingConversionHelper.java",
-    "java/src/org/chromium/android_webview/AwSafeBrowsingResponse.java",
     "java/src/org/chromium/android_webview/AwScrollOffsetManager.java",
     "java/src/org/chromium/android_webview/AwServiceWorkerClient.java",
     "java/src/org/chromium/android_webview/AwServiceWorkerController.java",
@@ -594,6 +592,9 @@
     "java/src/org/chromium/android_webview/gfx/JavaBrowserViewRendererHelper.java",
     "java/src/org/chromium/android_webview/metrics/AwMetricsLogUploader.java",
     "java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java",
+    "java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConfigHelper.java",
+    "java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConversionHelper.java",
+    "java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingResponse.java",
     "java/src/org/chromium/android_webview/permission/AwGeolocationCallback.java",
     "java/src/org/chromium/android_webview/permission/AwPermissionRequest.java",
     "java/src/org/chromium/android_webview/policy/AwPolicyProvider.java",
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/GlueApiHelperForOMR1.java b/android_webview/glue/java/src/com/android/webview/chromium/GlueApiHelperForOMR1.java
index c06add3a..7e7b3fb 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/GlueApiHelperForOMR1.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/GlueApiHelperForOMR1.java
@@ -10,7 +10,7 @@
 import android.webkit.WebViewClient;
 
 import org.chromium.android_webview.AwContentsClient.AwWebResourceRequest;
-import org.chromium.android_webview.AwSafeBrowsingResponse;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.base.annotations.VerifiesOnOMR1;
 
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/SafeBrowsingResponseAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/SafeBrowsingResponseAdapter.java
index 01adeea..c3461399 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/SafeBrowsingResponseAdapter.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/SafeBrowsingResponseAdapter.java
@@ -9,8 +9,8 @@
 import android.os.Build;
 import android.webkit.SafeBrowsingResponse;
 
-import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.SafeBrowsingAction;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 
 /**
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/SharedWebViewContentsClientAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/SharedWebViewContentsClientAdapter.java
index ef572e5..bd038491 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/SharedWebViewContentsClientAdapter.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/SharedWebViewContentsClientAdapter.java
@@ -17,9 +17,9 @@
 import org.chromium.android_webview.AwContentsClient;
 import org.chromium.android_webview.AwHistogramRecorder;
 import org.chromium.android_webview.AwRenderProcess;
-import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.AwWebResourceResponse;
 import org.chromium.android_webview.SafeBrowsingAction;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.base.Log;
 import org.chromium.base.TraceEvent;
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebkitToSharedGlueConverter.java b/android_webview/glue/java/src/com/android/webview/chromium/WebkitToSharedGlueConverter.java
index ff60a4c..4e9a738 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebkitToSharedGlueConverter.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebkitToSharedGlueConverter.java
@@ -14,9 +14,9 @@
 
 import org.chromium.android_webview.AwContentsClient.AwWebResourceError;
 import org.chromium.android_webview.AwContentsClient.AwWebResourceRequest;
-import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.AwServiceWorkerSettings;
 import org.chromium.android_webview.AwSettings;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.content_public.browser.MessagePort;
 
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
index 82b16eb..3816d4b 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
@@ -19,6 +19,7 @@
 import org.chromium.android_webview.common.ServiceNames;
 import org.chromium.android_webview.metrics.AwMetricsServiceClient;
 import org.chromium.android_webview.policy.AwPolicyProvider;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
 import org.chromium.android_webview.services.ICrashReceiverService;
 import org.chromium.base.CommandLine;
 import org.chromium.base.ContextUtils;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
index b9c5f1ce..8f7d1f3 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
@@ -23,6 +23,7 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.android_webview.permission.AwPermissionRequest;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.base.Log;
 import org.chromium.base.metrics.RecordHistogram;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
index 0fcafc28..68ae9c46 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
@@ -10,6 +10,8 @@
 import android.os.Handler;
 import android.util.Log;
 
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConversionHelper;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.CalledByNativeUnchecked;
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClientCallbackHelper.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClientCallbackHelper.java
index 3fa731a..c9542d81 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClientCallbackHelper.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClientCallbackHelper.java
@@ -10,6 +10,7 @@
 import android.os.Message;
 import android.os.SystemClock;
 
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.base.VisibleForTesting;
 
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingConfigHelper.java b/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingConfigHelper.java
index 919c944..10d260bc 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingConfigHelper.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingConfigHelper.java
@@ -1,154 +1,18 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 package org.chromium.android_webview;
 
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-
-import androidx.annotation.IntDef;
-import androidx.annotation.Nullable;
-
-import org.chromium.android_webview.common.PlatformServiceBridge;
-import org.chromium.base.Callback;
-import org.chromium.base.CommandLine;
-import org.chromium.base.Log;
-import org.chromium.base.annotations.JNINamespace;
-import org.chromium.base.metrics.RecordHistogram;
-import org.chromium.base.metrics.ScopedSysTraceEvent;
-
 /**
- * Helper class for getting the configuration settings related to safebrowsing in WebView.
+ * Temporary adapter while downstream depends on this package name.
  */
-@JNINamespace("android_webview")
 public class AwSafeBrowsingConfigHelper {
-    private static final String TAG = "AwSafeBrowsingConfi-";
-
-    private static final String OPT_IN_META_DATA_STR = "android.webkit.WebView.EnableSafeBrowsing";
-    private static final boolean DEFAULT_USER_OPT_IN = false;
-
-    private static volatile Boolean sSafeBrowsingUserOptIn;
-    private static volatile boolean sEnabledByManifest;
-
-    // Used to record the UMA histogram SafeBrowsing.WebView.AppOptIn. Since these values are
-    // persisted to logs, they should never be renumbered nor reused.
-    @IntDef({AppOptIn.NO_PREFERENCE, AppOptIn.OPT_IN, AppOptIn.OPT_OUT})
-    @interface AppOptIn {
-        int NO_PREFERENCE = 0;
-        int OPT_IN = 1;
-        int OPT_OUT = 2;
-
-        int COUNT = 3;
-    }
-
-    // Used to record the UMA histogram SafeBrowsing.WebView.UserOptIn. Since these values are
-    // persisted to logs, they should never be renumbered nor reused.
-    @IntDef({UserOptIn.UNABLE_TO_DETERMINE, UserOptIn.OPT_IN, UserOptIn.OPT_OUT})
-    @interface UserOptIn {
-        int OPT_OUT = 0;
-        int OPT_IN = 1;
-        int UNABLE_TO_DETERMINE = 2;
-
-        int COUNT = 3;
-    }
-
-    private static void recordAppOptIn(@AppOptIn int value) {
-        RecordHistogram.recordEnumeratedHistogram(
-                "SafeBrowsing.WebView.AppOptIn", value, AppOptIn.COUNT);
-    }
-
-    private static void recordUserOptIn(@UserOptIn int value) {
-        RecordHistogram.recordEnumeratedHistogram(
-                "SafeBrowsing.WebView.UserOptIn", value, UserOptIn.COUNT);
-    }
-
-    public static void setSafeBrowsingEnabledByManifest(boolean enabled) {
-        sEnabledByManifest = enabled;
-    }
-
-    public static boolean getSafeBrowsingEnabledByManifest() {
-        return sEnabledByManifest;
-    }
-
-    // Should only be called once during startup. Calling this multiple times will skew UMA metrics.
-    public static void maybeEnableSafeBrowsingFromManifest(final Context appContext) {
-        try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
-                     "AwSafeBrowsingConfigHelper.maybeEnableSafeBrowsingFromManifest")) {
-            Boolean appOptIn = getAppOptInPreference(appContext);
-            if (appOptIn == null) {
-                recordAppOptIn(AppOptIn.NO_PREFERENCE);
-            } else if (appOptIn) {
-                recordAppOptIn(AppOptIn.OPT_IN);
-            } else {
-                recordAppOptIn(AppOptIn.OPT_OUT);
-            }
-
-            // If the app specifies something, fallback to the app's preference, otherwise check for
-            // the existence of the CLI switch.
-            setSafeBrowsingEnabledByManifest(
-                    appOptIn == null ? !isDisabledByCommandLine() : appOptIn);
-
-            Callback<Boolean> cb = verifyAppsValue -> {
-                setSafeBrowsingUserOptIn(
-                        verifyAppsValue == null ? DEFAULT_USER_OPT_IN : verifyAppsValue);
-
-                if (verifyAppsValue == null) {
-                    recordUserOptIn(UserOptIn.UNABLE_TO_DETERMINE);
-                } else if (verifyAppsValue) {
-                    recordUserOptIn(UserOptIn.OPT_IN);
-                } else {
-                    recordUserOptIn(UserOptIn.OPT_OUT);
-                }
-            };
-            PlatformServiceBridge.getInstance().querySafeBrowsingUserConsent(cb);
-        }
-    }
-
-    private static boolean isDisabledByCommandLine() {
-        try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
-                     "AwSafeBrowsingConfigHelper.isDisabledByCommandLine")) {
-            CommandLine cli = CommandLine.getInstance();
-            // Disable flag has higher precedence than the default
-            return cli.hasSwitch(AwSwitches.WEBVIEW_DISABLE_SAFEBROWSING_SUPPORT);
-        }
-    }
-
-    /**
-     * Checks the application manifest for Safe Browsing opt-in preference.
-     *
-     * @param appContext application context.
-     * @return true if app has opted in, false if opted out, and null if no preference specified.
-     */
-    @Nullable
-    private static Boolean getAppOptInPreference(Context appContext) {
-        try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
-                     "AwSafeBrowsingConfigHelper.getAppOptInPreference")) {
-            ApplicationInfo info = appContext.getPackageManager().getApplicationInfo(
-                    appContext.getPackageName(), PackageManager.GET_META_DATA);
-            if (info.metaData == null) {
-                // No <meta-data> tag was found.
-                return null;
-            }
-            return info.metaData.containsKey(OPT_IN_META_DATA_STR)
-                    ? info.metaData.getBoolean(OPT_IN_META_DATA_STR)
-                    : null;
-        } catch (PackageManager.NameNotFoundException e) {
-            // This should never happen.
-            Log.e(TAG, "App could not find itself by package name!");
-            return false;
-        }
-    }
-
-    // Can be called from any thread. This returns true or false, depending on user opt-in
-    // preference. This returns null if we don't know yet what the user's preference is.
+    // Deprecated: remove this once downstream no longer depends on AwSafeBrowsingConfigHelper in
+    // this package name.
     public static Boolean getSafeBrowsingUserOptIn() {
-        return sSafeBrowsingUserOptIn;
-    }
-
-    public static void setSafeBrowsingUserOptIn(boolean optin) {
-        sSafeBrowsingUserOptIn = optin;
+        return org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper
+                .getSafeBrowsingUserOptIn();
     }
 
     // Not meant to be instantiated.
diff --git a/android_webview/java/src/org/chromium/android_webview/AwServiceWorkerController.java b/android_webview/java/src/org/chromium/android_webview/AwServiceWorkerController.java
index fced85c..e5c2f965 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwServiceWorkerController.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwServiceWorkerController.java
@@ -6,6 +6,8 @@
 
 import android.content.Context;
 
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
+
 /**
  * Manages clients and settings for Service Workers.
  */
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
index d76a92d..3e3fdf32 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -17,6 +17,7 @@
 
 import androidx.annotation.IntDef;
 
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
 import org.chromium.android_webview.settings.ForceDarkBehavior;
 import org.chromium.android_webview.settings.ForceDarkMode;
 import org.chromium.base.ContextUtils;
diff --git a/android_webview/java/src/org/chromium/android_webview/OWNERS b/android_webview/java/src/org/chromium/android_webview/OWNERS
deleted file mode 100644
index 320aaf7..0000000
--- a/android_webview/java/src/org/chromium/android_webview/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-per-file AwSafeBrowsing*.java=ntfschr@chromium.org
diff --git a/android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConfigHelper.java b/android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConfigHelper.java
new file mode 100644
index 0000000..8e5b5cdc
--- /dev/null
+++ b/android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConfigHelper.java
@@ -0,0 +1,157 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.android_webview.safe_browsing;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.Nullable;
+
+import org.chromium.android_webview.AwSwitches;
+import org.chromium.android_webview.common.PlatformServiceBridge;
+import org.chromium.base.Callback;
+import org.chromium.base.CommandLine;
+import org.chromium.base.Log;
+import org.chromium.base.annotations.JNINamespace;
+import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.base.metrics.ScopedSysTraceEvent;
+
+/**
+ * Helper class for getting the configuration settings related to safebrowsing in WebView.
+ */
+@JNINamespace("android_webview")
+public class AwSafeBrowsingConfigHelper {
+    private static final String TAG = "AwSafeBrowsingConfi-";
+
+    private static final String OPT_IN_META_DATA_STR = "android.webkit.WebView.EnableSafeBrowsing";
+    private static final boolean DEFAULT_USER_OPT_IN = false;
+
+    private static volatile Boolean sSafeBrowsingUserOptIn;
+    private static volatile boolean sEnabledByManifest;
+
+    // Used to record the UMA histogram SafeBrowsing.WebView.AppOptIn. Since these values are
+    // persisted to logs, they should never be renumbered nor reused.
+    @IntDef({AppOptIn.NO_PREFERENCE, AppOptIn.OPT_IN, AppOptIn.OPT_OUT})
+    @interface AppOptIn {
+        int NO_PREFERENCE = 0;
+        int OPT_IN = 1;
+        int OPT_OUT = 2;
+
+        int COUNT = 3;
+    }
+
+    // Used to record the UMA histogram SafeBrowsing.WebView.UserOptIn. Since these values are
+    // persisted to logs, they should never be renumbered nor reused.
+    @IntDef({UserOptIn.UNABLE_TO_DETERMINE, UserOptIn.OPT_IN, UserOptIn.OPT_OUT})
+    @interface UserOptIn {
+        int OPT_OUT = 0;
+        int OPT_IN = 1;
+        int UNABLE_TO_DETERMINE = 2;
+
+        int COUNT = 3;
+    }
+
+    private static void recordAppOptIn(@AppOptIn int value) {
+        RecordHistogram.recordEnumeratedHistogram(
+                "SafeBrowsing.WebView.AppOptIn", value, AppOptIn.COUNT);
+    }
+
+    private static void recordUserOptIn(@UserOptIn int value) {
+        RecordHistogram.recordEnumeratedHistogram(
+                "SafeBrowsing.WebView.UserOptIn", value, UserOptIn.COUNT);
+    }
+
+    public static void setSafeBrowsingEnabledByManifest(boolean enabled) {
+        sEnabledByManifest = enabled;
+    }
+
+    public static boolean getSafeBrowsingEnabledByManifest() {
+        return sEnabledByManifest;
+    }
+
+    // Should only be called once during startup. Calling this multiple times will skew UMA metrics.
+    public static void maybeEnableSafeBrowsingFromManifest(final Context appContext) {
+        try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
+                     "AwSafeBrowsingConfigHelper.maybeEnableSafeBrowsingFromManifest")) {
+            Boolean appOptIn = getAppOptInPreference(appContext);
+            if (appOptIn == null) {
+                recordAppOptIn(AppOptIn.NO_PREFERENCE);
+            } else if (appOptIn) {
+                recordAppOptIn(AppOptIn.OPT_IN);
+            } else {
+                recordAppOptIn(AppOptIn.OPT_OUT);
+            }
+
+            // If the app specifies something, fallback to the app's preference, otherwise check for
+            // the existence of the CLI switch.
+            setSafeBrowsingEnabledByManifest(
+                    appOptIn == null ? !isDisabledByCommandLine() : appOptIn);
+
+            Callback<Boolean> cb = verifyAppsValue -> {
+                setSafeBrowsingUserOptIn(
+                        verifyAppsValue == null ? DEFAULT_USER_OPT_IN : verifyAppsValue);
+
+                if (verifyAppsValue == null) {
+                    recordUserOptIn(UserOptIn.UNABLE_TO_DETERMINE);
+                } else if (verifyAppsValue) {
+                    recordUserOptIn(UserOptIn.OPT_IN);
+                } else {
+                    recordUserOptIn(UserOptIn.OPT_OUT);
+                }
+            };
+            PlatformServiceBridge.getInstance().querySafeBrowsingUserConsent(cb);
+        }
+    }
+
+    private static boolean isDisabledByCommandLine() {
+        try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
+                     "AwSafeBrowsingConfigHelper.isDisabledByCommandLine")) {
+            CommandLine cli = CommandLine.getInstance();
+            // Disable flag has higher precedence than the default
+            return cli.hasSwitch(AwSwitches.WEBVIEW_DISABLE_SAFEBROWSING_SUPPORT);
+        }
+    }
+
+    /**
+     * Checks the application manifest for Safe Browsing opt-in preference.
+     *
+     * @param appContext application context.
+     * @return true if app has opted in, false if opted out, and null if no preference specified.
+     */
+    @Nullable
+    private static Boolean getAppOptInPreference(Context appContext) {
+        try (ScopedSysTraceEvent e = ScopedSysTraceEvent.scoped(
+                     "AwSafeBrowsingConfigHelper.getAppOptInPreference")) {
+            ApplicationInfo info = appContext.getPackageManager().getApplicationInfo(
+                    appContext.getPackageName(), PackageManager.GET_META_DATA);
+            if (info.metaData == null) {
+                // No <meta-data> tag was found.
+                return null;
+            }
+            return info.metaData.containsKey(OPT_IN_META_DATA_STR)
+                    ? info.metaData.getBoolean(OPT_IN_META_DATA_STR)
+                    : null;
+        } catch (PackageManager.NameNotFoundException e) {
+            // This should never happen.
+            Log.e(TAG, "App could not find itself by package name!");
+            return false;
+        }
+    }
+
+    // Can be called from any thread. This returns true or false, depending on user opt-in
+    // preference. This returns null if we don't know yet what the user's preference is.
+    public static Boolean getSafeBrowsingUserOptIn() {
+        return sSafeBrowsingUserOptIn;
+    }
+
+    public static void setSafeBrowsingUserOptIn(boolean optin) {
+        sSafeBrowsingUserOptIn = optin;
+    }
+
+    // Not meant to be instantiated.
+    private AwSafeBrowsingConfigHelper() {}
+}
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingConversionHelper.java b/android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConversionHelper.java
similarity index 98%
rename from android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingConversionHelper.java
rename to android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConversionHelper.java
index 4d9db88..beb05d6 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingConversionHelper.java
+++ b/android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingConversionHelper.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.android_webview;
+package org.chromium.android_webview.safe_browsing;
 
 import android.webkit.WebViewClient;
 
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingResponse.java b/android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingResponse.java
similarity index 91%
rename from android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingResponse.java
rename to android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingResponse.java
index abd130e..81087c0 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSafeBrowsingResponse.java
+++ b/android_webview/java/src/org/chromium/android_webview/safe_browsing/AwSafeBrowsingResponse.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.android_webview;
+package org.chromium.android_webview.safe_browsing;
 
 /**
  * Container to hold the application's response to WebViewClient#onSafeBrowsingHit().
diff --git a/android_webview/java/src/org/chromium/android_webview/safe_browsing/OWNERS b/android_webview/java/src/org/chromium/android_webview/safe_browsing/OWNERS
new file mode 100644
index 0000000..44bd0563
--- /dev/null
+++ b/android_webview/java/src/org/chromium/android_webview/safe_browsing/OWNERS
@@ -0,0 +1 @@
+file://android_webview/browser/safe_browsing/OWNERS
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/SafeBrowsingTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/SafeBrowsingTest.java
index 2fdc9e2c..017de5a0 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/SafeBrowsingTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/SafeBrowsingTest.java
@@ -30,14 +30,14 @@
 import org.chromium.android_webview.AwContents.NativeDrawFunctorFactory;
 import org.chromium.android_webview.AwContentsClient;
 import org.chromium.android_webview.AwContentsStatics;
-import org.chromium.android_webview.AwSafeBrowsingConfigHelper;
-import org.chromium.android_webview.AwSafeBrowsingConversionHelper;
-import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.AwSettings;
 import org.chromium.android_webview.AwSwitches;
 import org.chromium.android_webview.AwWebContentsObserver;
 import org.chromium.android_webview.ErrorCodeConversionHelper;
 import org.chromium.android_webview.SafeBrowsingAction;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConfigHelper;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingConversionHelper;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.android_webview.test.TestAwContentsClient.OnReceivedError2Helper;
 import org.chromium.android_webview.test.util.GraphicsTestUtils;
 import org.chromium.base.BuildInfo;
diff --git a/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibSafeBrowsingResponse.java b/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibSafeBrowsingResponse.java
index 4e7c86e6..55881eb7 100644
--- a/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibSafeBrowsingResponse.java
+++ b/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibSafeBrowsingResponse.java
@@ -4,8 +4,8 @@
 
 package org.chromium.support_lib_callback_glue;
 
-import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.SafeBrowsingAction;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.support_lib_boundary.SafeBrowsingResponseBoundaryInterface;
 
diff --git a/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibWebViewContentsClientAdapter.java b/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibWebViewContentsClientAdapter.java
index 486865e..80aa618 100644
--- a/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibWebViewContentsClientAdapter.java
+++ b/android_webview/support_library/callback/java/src/org/chromium/support_lib_callback_glue/SupportLibWebViewContentsClientAdapter.java
@@ -12,7 +12,7 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.android_webview.AwContentsClient.AwWebResourceError;
-import org.chromium.android_webview.AwSafeBrowsingResponse;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.ScopedSysTraceEvent;
diff --git a/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java b/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
index abfa001..5990446 100644
--- a/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
+++ b/android_webview/test/shell/src/org/chromium/android_webview/test/NullContentsClient.java
@@ -20,12 +20,12 @@
 import org.chromium.android_webview.AwHttpAuthHandler;
 import org.chromium.android_webview.AwRenderProcess;
 import org.chromium.android_webview.AwRenderProcessGoneDetail;
-import org.chromium.android_webview.AwSafeBrowsingResponse;
 import org.chromium.android_webview.AwWebResourceResponse;
 import org.chromium.android_webview.JsPromptResultReceiver;
 import org.chromium.android_webview.JsResultReceiver;
 import org.chromium.android_webview.SafeBrowsingAction;
 import org.chromium.android_webview.permission.AwPermissionRequest;
+import org.chromium.android_webview.safe_browsing.AwSafeBrowsingResponse;
 import org.chromium.base.Callback;
 import org.chromium.base.ThreadUtils;
 
diff --git a/ash/login/ui/login_auth_user_view.cc b/ash/login/ui/login_auth_user_view.cc
index b8162cb3..c2fb9ba 100644
--- a/ash/login/ui/login_auth_user_view.cc
+++ b/ash/login/ui/login_auth_user_view.cc
@@ -64,16 +64,16 @@
 
 // Distance between the user view (ie, the icon and name) and the password
 // textfield.
-const int kDistanceBetweenUserViewAndPasswordDp = 28;
+const int kDistanceBetweenUserViewAndPasswordDp = 24;
 
 // Distance between the password textfield and the the pin keyboard.
-const int kDistanceBetweenPasswordFieldAndPinKeyboardDp = 20;
+const int kDistanceBetweenPasswordFieldAndPinKeyboardDp = 16;
 
 // Distance from the end of pin keyboard to the bottom of the big user view.
 const int kDistanceFromPinKeyboardToBigUserViewBottomDp = 50;
 
 // Distance from the top of the user view to the user icon.
-constexpr int kDistanceFromTopOfBigUserViewToUserIconDp = 54;
+constexpr int kDistanceFromTopOfBigUserViewToUserIconDp = 24;
 
 constexpr SkColor kChallengeResponseArrowBackgroundColor =
     SkColorSetARGB(0x2B, 0xFF, 0xFF, 0xFF);
diff --git a/ash/login/ui/login_pin_view.cc b/ash/login/ui/login_pin_view.cc
index 51b573b0..f92f5e33 100644
--- a/ash/login/ui/login_pin_view.cc
+++ b/ash/login/ui/login_pin_view.cc
@@ -61,13 +61,11 @@
 constexpr int kRepeatingBackspaceDelayMs = 150;
 
 // Size of the md-ripple when a PIN button is tapped.
-constexpr int kRippleSizeDp = 54;
+constexpr int kRippleSizeDp = 48;
 
-// Button sizes. Button height varies per keyboard style, while button width is
-// the same for both styles.
-constexpr int kAlphanumericButtonHeightDp = 78;
-constexpr int kNumericButtonHeightDp = 70;
-constexpr int kButtonWidthDp = 78;
+// Button sizes.
+constexpr int kButtonHeightDp = 56;
+constexpr int kButtonWidthDp = 72;
 
 base::string16 GetButtonLabelForNumber(int value) {
   DCHECK(value >= 0 && value < int{base::size(kPinLabels)});
@@ -399,9 +397,7 @@
 
 // static
 gfx::Size LoginPinView::TestApi::GetButtonSize(Style style) {
-  return gfx::Size(kButtonWidthDp, style == Style::kNumeric
-                                       ? kNumericButtonHeightDp
-                                       : kAlphanumericButtonHeightDp);
+  return gfx::Size(kButtonWidthDp, kButtonHeightDp);
 }
 
 LoginPinView::TestApi::TestApi(LoginPinView* view) : view_(view) {}
@@ -454,9 +450,7 @@
       views::BoxLayout::Orientation::kVertical));
 
   bool show_letters = keyboard_style == Style::kAlphanumeric;
-  const gfx::Size button_size =
-      gfx::Size(kButtonWidthDp, show_letters ? kAlphanumericButtonHeightDp
-                                             : kNumericButtonHeightDp);
+  const gfx::Size button_size = gfx::Size(kButtonWidthDp, kButtonHeightDp);
 
   auto add_digit_button = [&](View* row, int value) {
     row->AddChildView(
diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc
index d626091..5dde204 100644
--- a/ash/login/ui/login_user_view.cc
+++ b/ash/login/ui/login_user_view.cc
@@ -41,7 +41,7 @@
 namespace {
 
 // Vertical spacing between icon, label, and authentication UI.
-constexpr int kVerticalSpacingBetweenEntriesDp = 32;
+constexpr int kVerticalSpacingBetweenEntriesDp = 24;
 // Horizontal spacing between username label and the dropdown icon.
 constexpr int kDistanceBetweenUsernameAndDropdownDp = 8;
 // Distance between user icon and the user label in small/extra-small layouts.
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index bf7482ad..0bb14203 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">የማሳወቂያ ቅንብሮችን አሳይ። ማሳወቂያዎች ጠፍተዋል</translation>
 <translation id="4269883910223712419">የዚህ መሣሪያ የሚከተሉትን የማድረግ ችሎታ አለው፦</translation>
 <translation id="4279490309300973883">በማንጸባረቅ ላይ</translation>
-<translation id="4281007048406351813">ወደ ጊዜ ቆጣሪው 1 ደቂቃ ያክሉ</translation>
 <translation id="4296136865091727875">ሁሉንም <ph name="COUNT" /> ማሳወቂያዎች አጽዳ</translation>
 <translation id="4303223480529385476">የሁኔታ አካባቢን ዘርጋ</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">በመያያዝ ላይ</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">በ<ph name="TIMEOUT_SECONDS" /> ውስጥ ወደ ቀድሞው ጥራት በመመለስ ላይ</translation>
-<translation id="7222902781030499995">ሰዓት ቆጣሪ አቁም</translation>
 <translation id="7256634071279256947">የኋላ ማይክሮፎን</translation>
 <translation id="726276584504105859">የተከፈለ ማያ ገጽን ለመጠቀም ወደዚህ ይጎትቱ</translation>
 <translation id="7262906531272962081">አስታዋሽ ይፍጠሩ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index b6022738..819c502 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">عرض إعدادات الإشعارات. تم إيقاف الإشعارات</translation>
 <translation id="4269883910223712419">يمتلك مشرف هذا الجهاز القدرة على ما يلي:</translation>
 <translation id="4279490309300973883">النسخ المطابق</translation>
-<translation id="4281007048406351813">إضافة دقيقة واحدة إلى الموقِّت</translation>
 <translation id="4296136865091727875">محو جميع الإشعارات التي يبلغ عددها <ph name="COUNT" /></translation>
 <translation id="4303223480529385476">توسيع منطقة الحالة</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">اتصال</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">سيتم الرجوع إلى درجة الدقة القديمة في غضون <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">إيقاف الموقّت</translation>
 <translation id="7256634071279256947">الميكروفون الخلفي</translation>
 <translation id="726276584504105859">السحب هنا لاستخدام وضع تقسيم الشاشة</translation>
 <translation id="7262906531272962081">إنشاء تذكير</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index df5f880a..274737f6 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Показване на настройките за известия. Известията са изключени</translation>
 <translation id="4269883910223712419">Администраторът на това устройство може:</translation>
 <translation id="4279490309300973883">Дублиране</translation>
-<translation id="4281007048406351813">Добавяне на 1 минута към таймера</translation>
 <translation id="4296136865091727875">Изчистване на всичките <ph name="COUNT" /> известия</translation>
 <translation id="4303223480529385476">Разгъване на лентата на състоянието</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Свързва се</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Старата разделителна способност ще се възстанови след <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Спиране на таймера</translation>
 <translation id="7256634071279256947">Заден микрофон</translation>
 <translation id="726276584504105859">Преместете тук с плъзгане, за да използвате режим за разделен екран</translation>
 <translation id="7262906531272962081">Създаване на напомняне</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 46a4a14..a1dbe2f 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">বিজ্ঞপ্তি সেটিংস দেখান। বিজ্ঞপ্তি বন্ধ আছে</translation>
 <translation id="4269883910223712419">এই ডিভাইসের প্রশাসক এগুলি করতে পারেন:</translation>
 <translation id="4279490309300973883">অনুকরণ করা হচ্ছে</translation>
-<translation id="4281007048406351813">টাইমারে ১ মিনিট যোগ করুন</translation>
 <translation id="4296136865091727875"><ph name="COUNT" />টি বিজ্ঞপ্তি মুছে ফেলুন</translation>
 <translation id="4303223480529385476">স্ট্যাটাস এরিয়া বড় করুন</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">সংযুক্ত হচ্ছে</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" /> -এ পুরনো রেজোলিউশানে ফেরানো হচ্ছে</translation>
-<translation id="7222902781030499995">টাইমার বন্ধ করুন</translation>
 <translation id="7256634071279256947">পেছনের মাইক্রোফোন</translation>
 <translation id="726276584504105859">বিভক্ত স্ক্রিন ব্যবহার করতে এখানে টেনে আনুন</translation>
 <translation id="7262906531272962081">রিমাইন্ডার তৈরি করুন</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 9c430111..08fe09eb 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Mostra la configuració de notificacions. Les notificacions estan desactivades.</translation>
 <translation id="4269883910223712419">L'administrador d'aquest dispositiu pot dur a terme les accions següents:</translation>
 <translation id="4279490309300973883">S'està creant una rèplica</translation>
-<translation id="4281007048406351813">Afegeix 1 minut al temporitzador</translation>
 <translation id="4296136865091727875">Esborra les <ph name="COUNT" /> notificacions</translation>
 <translation id="4303223480529385476">Desplega l'àrea d'estat</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">S'està connectant</translation>
 <translation id="7165278925115064263">Alt+Maj+K</translation>
 <translation id="7168224885072002358">Es revertirà a la resolució anterior d'aquí a <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Atura el temporitzador</translation>
 <translation id="7256634071279256947">Micròfon posterior</translation>
 <translation id="726276584504105859">Arrossega-la aquí per utilitzar la pantalla dividida</translation>
 <translation id="7262906531272962081">Crea un recordatori</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 8aaaa1c0..4c1e45e 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Zobrazit nastavení oznámení. Oznámení jsou vypnutá</translation>
 <translation id="4269883910223712419">Administrátor zařízení má následující možnosti:</translation>
 <translation id="4279490309300973883">Zrcadlení</translation>
-<translation id="4281007048406351813">Přidat k časovači 1 min</translation>
 <translation id="4296136865091727875">Vymazat všechna oznámení (<ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Rozbalit stavovou oblast</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Připojování</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Původní rozlišení bude obnoveno za <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Zastavit časovač</translation>
 <translation id="7256634071279256947">Zadní mikrofon</translation>
 <translation id="726276584504105859">Chcete-li použít rozdělenou obrazovku, přetáhněte okno sem</translation>
 <translation id="7262906531272962081">Vytvořit připomenutí</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 8f7a697..dbaa75f 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Vis indstillinger for notifikationer. Notifikationer er slået fra</translation>
 <translation id="4269883910223712419">Administratoren af denne enhed kan gøre følgende:</translation>
 <translation id="4279490309300973883">Spejling</translation>
-<translation id="4281007048406351813">Føj 1 minut til timeren</translation>
 <translation id="4296136865091727875">Ryd alle <ph name="COUNT" /> notifikationer</translation>
 <translation id="4303223480529385476">Udvid statusområde</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Opretter forbindelse</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Fortryder og vender tilbage til den gamle opløsning om <ph name="TIMEOUT_SECONDS" /> sekunder.</translation>
-<translation id="7222902781030499995">Stop timeren</translation>
 <translation id="7256634071279256947">Mikrofon på bagsiden</translation>
 <translation id="726276584504105859">Træk hertil for at bruge opdelt skærm</translation>
 <translation id="7262906531272962081">Opret påmindelse</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index c0b72d5..60c57b6e 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Benachrichtigungseinstellungen anzeigen. Benachrichtigungen sind deaktiviert.</translation>
 <translation id="4269883910223712419">Der Administrator dieses Geräts kann Folgendes tun:</translation>
 <translation id="4279490309300973883">Spiegelung</translation>
-<translation id="4281007048406351813">Timer um 1 Min. verlängern</translation>
 <translation id="4296136865091727875">Alle <ph name="COUNT" /> Benachrichtigungen löschen</translation>
 <translation id="4303223480529385476">Statusbereich maximieren</translation>
 <translation id="4321179778687042513">Strg</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Verbindung wird hergestellt.</translation>
 <translation id="7165278925115064263">Alt + Umschalttaste + K</translation>
 <translation id="7168224885072002358">Alte Auflösung wird in <ph name="TIMEOUT_SECONDS" /> wiederhergestellt.</translation>
-<translation id="7222902781030499995">Timer stoppen</translation>
 <translation id="7256634071279256947">Mikrofon auf der Rückseite</translation>
 <translation id="726276584504105859">Hierher ziehen, um den Bildschirm zu teilen</translation>
 <translation id="7262906531272962081">Erinnerung erstellen</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index 5724ffd..2bf3ae3 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Εμφάνιση ρυθμίσεων ειδοποιήσεων. Οι ειδοποιήσεις είναι απενεργοποιημένες.</translation>
 <translation id="4269883910223712419">Ο διαχειριστής αυτής της συσκευής μπορεί να εκτελεί τις ακόλουθες ενέργειες:</translation>
 <translation id="4279490309300973883">Κατοπτρισμός</translation>
-<translation id="4281007048406351813">Προσθήκη ενός λεπτού στο χρονόμετρο</translation>
 <translation id="4296136865091727875">Διαγραφή και των <ph name="COUNT" /> ειδοποιήσεων</translation>
 <translation id="4303223480529385476">Ανάπτυξη περιοχής κατάστασης</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Σύνδεση</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Επαναφορά στην προηγούμενη ανάλυση σε <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Διακοπή χρονομέτρου</translation>
 <translation id="7256634071279256947">Πίσω μικρόφωνο</translation>
 <translation id="726276584504105859">Σύρετε εδώ για να χρησιμοποιήσετε τον διαχωρισμό οθόνης</translation>
 <translation id="7262906531272962081">Δημιουργία υπενθύμισης</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index 2c7955a2..f6ce3c6 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Show notification settings. Notifications are off</translation>
 <translation id="4269883910223712419">The admin of this device has the ability to:</translation>
 <translation id="4279490309300973883">Mirroring</translation>
-<translation id="4281007048406351813">Add 1 min to timer</translation>
 <translation id="4296136865091727875">Clear all <ph name="COUNT" /> notifications</translation>
 <translation id="4303223480529385476">Expand status area</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Connecting ...</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Reverting to old resolution in <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Stop timer</translation>
 <translation id="7256634071279256947">Rear microphone</translation>
 <translation id="726276584504105859">Drag here to use split screen</translation>
 <translation id="7262906531272962081">Create reminder</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 4b36eff..63495a6a 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">Mostrar la configuración de las notificaciones: Están desactivadas</translation>
 <translation id="4269883910223712419">El administrador de este dispositivo puede hacer lo siguiente:</translation>
 <translation id="4279490309300973883">Duplicando</translation>
-<translation id="4281007048406351813">Agregar 1 minuto al cronómetro</translation>
 <translation id="4296136865091727875">Borrar las <ph name="COUNT" /> notificaciones</translation>
 <translation id="4303223480529385476">Expandir el área de estado</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Conectando</translation>
 <translation id="7165278925115064263">Alt+mayúscula+K</translation>
 <translation id="7168224885072002358">Se revertirá a la resolución anterior en <ph name="TIMEOUT_SECONDS" />.</translation>
-<translation id="7222902781030499995">Detener temporizador</translation>
 <translation id="7256634071279256947">Micrófono posterior</translation>
 <translation id="726276584504105859">Arrastra hasta aquí para usar la pantalla dividida</translation>
 <translation id="7262906531272962081">Crear un recordatorio</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 4f3e1b3..f98fb95c 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">Muestra la configuración de notificaciones. Las notificaciones están desactivadas.</translation>
 <translation id="4269883910223712419">El administrador de este dispositivo puede hacer lo siguiente:</translation>
 <translation id="4279490309300973883">Duplicando</translation>
-<translation id="4281007048406351813">Añadir 1 minuto al temporizador</translation>
 <translation id="4296136865091727875">Borrar las <ph name="COUNT" /> notificaciones</translation>
 <translation id="4303223480529385476">Mostrar área de estado</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Conectando</translation>
 <translation id="7165278925115064263">Alt + Mayús + K</translation>
 <translation id="7168224885072002358">Restableciendo la resolución anterior en <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Detener temporizador</translation>
 <translation id="7256634071279256947">Micrófono trasero</translation>
 <translation id="726276584504105859">Arrastra hasta aquí para utilizar la pantalla dividida</translation>
 <translation id="7262906531272962081">Crear recordatorio</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 2c4b9cec..c855a27 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">Kuvab märguandeseaded. Märguanded on välja lülitatud</translation>
 <translation id="4269883910223712419">Selle seadme administraator saab teha järgmist.</translation>
 <translation id="4279490309300973883">Peegeldamine</translation>
-<translation id="4281007048406351813">Lisa taimerile 1 minut</translation>
 <translation id="4296136865091727875">Kustuta kõik <ph name="COUNT" /> märguannet</translation>
 <translation id="4303223480529385476">Laienda olekuala</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Ühendamine</translation>
 <translation id="7165278925115064263">Alt + Tõstuklahv + K</translation>
 <translation id="7168224885072002358">Ekraan ennistatakse vanale eraldusvõimele <ph name="TIMEOUT_SECONDS" /> pärast</translation>
-<translation id="7222902781030499995">Peata taimer</translation>
 <translation id="7256634071279256947">Tagumine mikrofon</translation>
 <translation id="726276584504105859">Jagatud ekraani kasutamiseks lohistage siia</translation>
 <translation id="7262906531272962081">Loo meeldetuletus</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index dbee3a98..ea993a60 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">نمایش تنظیمات اعلان. اعلان‌ها خاموش است</translation>
 <translation id="4269883910223712419">سرپرست این دستگاه می‌تواند:</translation>
 <translation id="4279490309300973883">بازتاب می‌شود</translation>
-<translation id="4281007048406351813">افزون ۱ دقیقه به تایمر</translation>
 <translation id="4296136865091727875">پاک کردن همه <ph name="COUNT" /> اعلان</translation>
 <translation id="4303223480529385476">بزرگ کردن ناحیه نشانگر وضعیت</translation>
 <translation id="4321179778687042513">مهار</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">در حال اتصال</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">برگرداندن به وضوح قدیمی در <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">توقف تایمر</translation>
 <translation id="7256634071279256947">میکروفون پشت</translation>
 <translation id="726276584504105859">برای استفاده از تقسیم صفحه، به اینجا بکشید</translation>
 <translation id="7262906531272962081">ایجاد یادآوری</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 5d26ead..5e66a31 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Näytä ilmoitusasetukset. Ilmoitukset on poistettu käytöstä.</translation>
 <translation id="4269883910223712419">Tämän laitteen ylläpitäjä voi</translation>
 <translation id="4279490309300973883">Peilaus päällä</translation>
-<translation id="4281007048406351813">Lisää 1 min ajastimeen</translation>
 <translation id="4296136865091727875">Poista kaikki <ph name="COUNT" /> ilmoitusta</translation>
 <translation id="4303223480529385476">Laajenna tila-alue</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -421,7 +420,6 @@
 <translation id="7143207342074048698">Yhdistetään</translation>
 <translation id="7165278925115064263">Alt+Vaihto+K</translation>
 <translation id="7168224885072002358">Palautetaan vanha tarkkuus, aikaa palautukseen <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Pysäytä ajastin</translation>
 <translation id="7256634071279256947">Takamikrofoni</translation>
 <translation id="726276584504105859">Jaa näyttö vetämällä tähän.</translation>
 <translation id="7262906531272962081">Luo muistutus</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index d37db0e..3fa74f72 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Ipakita ang mga setting ng notification. Naka-off ang mga notification</translation>
 <translation id="4269883910223712419">May kakayahan ang admin ng device na ito na:</translation>
 <translation id="4279490309300973883">Nagmi-mirror</translation>
-<translation id="4281007048406351813">Magdagdag ng 1 minuto sa timer</translation>
 <translation id="4296136865091727875">I-clear ang lahat ng <ph name="COUNT" /> (na) notification</translation>
 <translation id="4303223480529385476">I-expand ang lugar ng status</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Kumokonekta</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Magre-revert sa lumang resolution sa loob ng <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Ihinto ang timer</translation>
 <translation id="7256634071279256947">Mikropono sa likod</translation>
 <translation id="726276584504105859">I-drag dito upang magamit ang split screen</translation>
 <translation id="7262906531272962081">Gumawa ng paalala</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 4a39338..ad08621f 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Afficher les paramètres de notification. Les notifications sont désactivées</translation>
 <translation id="4269883910223712419">L'administrateur de cet appareil peut :</translation>
 <translation id="4279490309300973883">Mise en miroir</translation>
-<translation id="4281007048406351813">Ajouter une minute au minuteur</translation>
 <translation id="4296136865091727875">Effacer les <ph name="COUNT" /> notifications</translation>
 <translation id="4303223480529385476">Développer la zone d'état</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Connexion en cours</translation>
 <translation id="7165278925115064263">Alt+Maj+K</translation>
 <translation id="7168224885072002358">Rétablissement de la résolution précédente dans <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Arrête le minuteur</translation>
 <translation id="7256634071279256947">Micro arrière</translation>
 <translation id="726276584504105859">Faire glisser ici pour utiliser l'écran partagé</translation>
 <translation id="7262906531272962081">Créer un rappel</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 19b9b41..58227f1e 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">નોટિફિકેશન સેટિંગ બતાવો. નોટિફિકેશન બંધ છે</translation>
 <translation id="4269883910223712419">આ ઉપકરણના વ્યવસ્થાપકની ક્ષમતા:</translation>
 <translation id="4279490309300973883">પ્રતિબિંબત થઈ રહ્યું છે</translation>
-<translation id="4281007048406351813">ટાઇમરમાં 1 મિનિટ ઉમેરો</translation>
 <translation id="4296136865091727875">બધા <ph name="COUNT" /> નોટિફિકેશન સાફ કરો</translation>
 <translation id="4303223480529385476">સ્ટેટસ એરિયા વધારો</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">કનેક્ટ કરી રહ્યું છે</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">જૂના રિઝોલ્યુશન પર પાછા ફરી રહ્યાં છે <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">ટાઇમર રોકો</translation>
 <translation id="7256634071279256947">પાછળનો માઇક્રોફોન</translation>
 <translation id="726276584504105859">વિભાજિત સ્ક્રીનનો ઉપયોગ કરવા માટે અહીં ખેંચો</translation>
 <translation id="7262906531272962081">રિમાઇન્ડર બનાવો</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index dbff6bd..de43a08 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">सूचना सेटिंग दिखाएं. सूचनाएं बंद हैं</translation>
 <translation id="4269883910223712419">इस डिवाइस के एडमिन ये काम कर सकते हैं:</translation>
 <translation id="4279490309300973883">स्क्रीन शेयर करने की सुविधा चालू है</translation>
-<translation id="4281007048406351813">टाइमर में एक मिनट जोड़ें</translation>
 <translation id="4296136865091727875">सभी <ph name="COUNT" /> सूचनाएं हटाएं</translation>
 <translation id="4303223480529385476">स्टेटस बताने वाली जगह को बड़ा करें</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">कनेक्‍ट हो रहा है</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" /> में पुराने रिज़ॉल्यूशन में वापस लौट रहा है</translation>
-<translation id="7222902781030499995">टाइमर बंद करें</translation>
 <translation id="7256634071279256947">पीछे वाला माइक्रोफ़ोन</translation>
 <translation id="726276584504105859">दो स्क्रीन का इस्तेमाल करने के लिए यहां खींचें और छोडें</translation>
 <translation id="7262906531272962081">रिमाइंडर लगाएं</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 58b757d..50145ae9 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Prikaz postavki obavijesti. Obavijesti su isključene</translation>
 <translation id="4269883910223712419">Administrator ovog uređaja ima sljedeće mogućnosti:</translation>
 <translation id="4279490309300973883">Zrcaljenje</translation>
-<translation id="4281007048406351813">Dodaj odbrojavanju 1 min</translation>
 <translation id="4296136865091727875">Brisanje svih obavijesti (<ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Proširite područje statusa</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Povezivanje</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Vraćanje na staru razlučivost za <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Zaustavi odbrojavanje</translation>
 <translation id="7256634071279256947">Stražnji mikrofon</translation>
 <translation id="726276584504105859">Povucite ovdje da biste upotrebljavali podijeljeni zaslon</translation>
 <translation id="7262906531272962081">Izrada podsjetnika</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index baab5e00..998bb83 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">Az értesítési beállítások megjelenítése. Az értesítések ki vannak kapcsolva</translation>
 <translation id="4269883910223712419">Az eszköz rendszergazdája a következőket végezheti el:</translation>
 <translation id="4279490309300973883">Tükrözés</translation>
-<translation id="4281007048406351813">1 perc hozzáadása az időzítőhöz</translation>
 <translation id="4296136865091727875">Az összes (<ph name="COUNT" />) értesítés törlése</translation>
 <translation id="4303223480529385476">Állapotsor kibontása</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Csatlakozás</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Visszaállítás a régi felbontásra <ph name="TIMEOUT_SECONDS" /> mp múlva</translation>
-<translation id="7222902781030499995">Időzítő megállítása</translation>
 <translation id="7256634071279256947">Hátulsó mikrofon</translation>
 <translation id="726276584504105859">Húzza ide az osztott képernyő használatához</translation>
 <translation id="7262906531272962081">Emlékeztető létrehozása</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 1e87a42d..791bede 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Tampilkan setelan notifikasi. Notifikasi nonaktif.</translation>
 <translation id="4269883910223712419">Admin perangkat ini memiliki kemampuan untuk:</translation>
 <translation id="4279490309300973883">Mencerminkan</translation>
-<translation id="4281007048406351813">Tambahkan 1 mnt ke timer</translation>
 <translation id="4296136865091727875">Hapus semua (<ph name="COUNT" />) notifikasi</translation>
 <translation id="4303223480529385476">Luaskan area status</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Menyambungkan</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Mengembalikan ke resolusi lama dalam <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Hentikan timer</translation>
 <translation id="7256634071279256947">Mikrofon belakang</translation>
 <translation id="726276584504105859">Tarik ke sini untuk menggunakan layar terpisah</translation>
 <translation id="7262906531272962081">Buat pengingat</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index fd604475..ec07502c 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">Mostra impostazioni di notifica. Le notifiche sono disattivate</translation>
 <translation id="4269883910223712419">L'amministratore di questo dispositivo ha la possibilità di:</translation>
 <translation id="4279490309300973883">Mirroring</translation>
-<translation id="4281007048406351813">Aggiungi un minuto al timer</translation>
 <translation id="4296136865091727875">Cancella tutte e <ph name="COUNT" /> le notifiche</translation>
 <translation id="4303223480529385476">Espandi area di stato</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Connessione</translation>
 <translation id="7165278925115064263">ALT + MAIUSC + K</translation>
 <translation id="7168224885072002358">Ripristino della risoluzione precedente tra <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Interrompi timer</translation>
 <translation id="7256634071279256947">Microfono posteriore</translation>
 <translation id="726276584504105859">Trascina qui per utilizzare la modalità Schermo diviso</translation>
 <translation id="7262906531272962081">Crea promemoria</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index c4d56df..7a7698f 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">צפייה בהגדרות של הודעות. ההודעות מושבתות</translation>
 <translation id="4269883910223712419">מנהל המכשיר הזה יכול:</translation>
 <translation id="4279490309300973883">שיקוף</translation>
-<translation id="4281007048406351813">הוספת דקה לטיימר</translation>
 <translation id="4296136865091727875">ניקוי כל <ph name="COUNT" /> ההתראות</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">הקשת על מקש הקיצור של ניגודיות גבוהה. להפעיל אותה?</translation>
@@ -417,7 +416,6 @@
 <translation id="7143207342074048698">מתחבר</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">חוזר לרזולוציה הקודמת בעוד <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">הפסקת הטיימר</translation>
 <translation id="7256634071279256947">מיקרופון אחורי</translation>
 <translation id="726276584504105859">לשימוש במסך מפוצל יש לגרור לכאן</translation>
 <translation id="7262906531272962081">יצירת תזכורת</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index c3da3e0..badb8b3 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">通知設定を表示します。通知はオフです</translation>
 <translation id="4269883910223712419">このデバイスの管理者は以下を行うことができます。</translation>
 <translation id="4279490309300973883">ミラーリング</translation>
-<translation id="4281007048406351813">タイマーに 1 分追加</translation>
 <translation id="4296136865091727875"><ph name="COUNT" /> 件の通知をすべて消去</translation>
 <translation id="4303223480529385476">ステータス領域を表示</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">接続中</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" /> 秒後に元の解像度に戻ります</translation>
-<translation id="7222902781030499995">タイマーを停止します</translation>
 <translation id="7256634071279256947">後方のマイク</translation>
 <translation id="726276584504105859">分割画面を使用するにはここにドラッグします</translation>
 <translation id="7262906531272962081">リマインダーの作成</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 5e87d09..531fb58 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೋರಿಸಿ. ಅಧಿಸೂಚನೆಗಳು ಆಫ್ ಆಗಿವೆ</translation>
 <translation id="4269883910223712419">ಈ ಸಾಧನದ ನಿರ್ವಾಹಕರು ಈ ಕೆಳಗಿನ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೊಂದಿದ್ದಾರೆ:</translation>
 <translation id="4279490309300973883">ಪ್ರತಿಬಿಂಬಿಸುವಿಕೆ</translation>
-<translation id="4281007048406351813">ಟೈಮರ್‌ಗೆ 1 ನಿಮಿಷವನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="4296136865091727875">ಎಲ್ಲಾ <ph name="COUNT" /> ಅಧಿಸೂಚನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="4303223480529385476">ಸ್ಥಿತಿ ಪ್ರದೇಶವನ್ನು ಹಿಗ್ಗಿಸಿ</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" /> ನಲ್ಲಿ ಹಳೆಯ ರೆಸಲ್ಯೂಷನ್‌ಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತಿದೆ</translation>
-<translation id="7222902781030499995">ಟೈಮರ್ ನಿಲ್ಲಿಸಿ</translation>
 <translation id="7256634071279256947">ಹಿಂಭಾಗದ ಮೈಕ್ರೊಫೋನ್</translation>
 <translation id="726276584504105859">ವಿಭಜಿತ ಪರದೆಯನ್ನು ಬಳಸಲು ಇಲ್ಲಿ ಡ್ರ್ಯಾಗ್‌ ಮಾಡಿ</translation>
 <translation id="7262906531272962081">ಜ್ಞಾಪನೆ ರಚಿಸಿ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index d7b9602..2050fee 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">알림 설정을 표시합니다. 알림이 사용 중지되어 있습니다.</translation>
 <translation id="4269883910223712419">이 기기의 관리자는 다음과 같은 작업을 할 수 있습니다.</translation>
 <translation id="4279490309300973883">미러링</translation>
-<translation id="4281007048406351813">타이머에 1분 추가</translation>
 <translation id="4296136865091727875">알림 <ph name="COUNT" />개 모두 지우기</translation>
 <translation id="4303223480529385476">상태 영역 확장</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">연결 중</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" />초 후 기존 해상도로 돌아갑니다.</translation>
-<translation id="7222902781030499995">타이머 중지</translation>
 <translation id="7256634071279256947">후면 마이크</translation>
 <translation id="726276584504105859">화면 분할을 사용하려면 여기를 드래그하세요.</translation>
 <translation id="7262906531272962081">알림 만들기</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index 132489f..965a527 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Rodyti pranešimų nustatymus. Pranešimai išjungti</translation>
 <translation id="4269883910223712419">Šio įrenginio administratorius gali atlikti nurodytus veiksmus.</translation>
 <translation id="4279490309300973883">Dubliuojama</translation>
-<translation id="4281007048406351813">Pridėti 1 min. prie laikmačio</translation>
 <translation id="4296136865091727875">Išvalykite visus pranešimus (<ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Išskleisti būsenos sritį</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Jungiama</translation>
 <translation id="7165278925115064263">„Alt“ + „Shift“ + K</translation>
 <translation id="7168224885072002358">Po <ph name="TIMEOUT_SECONDS" /> bus grąžinta sena skyra</translation>
-<translation id="7222902781030499995">Stabdyti laikmatį</translation>
 <translation id="7256634071279256947">Užpakalinis mikrofonas</translation>
 <translation id="726276584504105859">Vilkite čia, kad naudotumėte skaidytą ekraną</translation>
 <translation id="7262906531272962081">Sukurti priminimą</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index 417bc09f..8d04316 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Rādīt paziņojumu iestatījumus. Paziņojumi ir izslēgti</translation>
 <translation id="4269883910223712419">Ierīces administrators var veikt šādas darbības:</translation>
 <translation id="4279490309300973883">Spoguļošana</translation>
-<translation id="4281007048406351813">Pievienot taimerim 1 min</translation>
 <translation id="4296136865091727875">Notīrīt visus paziņojumus (kopā <ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Izvērst statusa apgabalu</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Notiek savienojuma izveide</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Iepriekšējā izšķirtspēja tiks atgriezta pēc <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Apturēt taimera darbību</translation>
 <translation id="7256634071279256947">Aizmugurējais mikrofons</translation>
 <translation id="726276584504105859">Velciet šeit, lai izmantotu ekrāna sadalīšanu.</translation>
 <translation id="7262906531272962081">Izveidot atgādinājumu</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index 8dff5ad..5d755c0 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">അറിയിപ്പ് ക്രമീകരണം കാണിക്കുക. അറിയിപ്പുകൾ ഓഫാണ്</translation>
 <translation id="4269883910223712419">ഈ ഉപകരണത്തിന്റെ അഡ്‌മിന് ഇനിപ്പറയുന്ന കാര്യങ്ങൾ ചെയ്യാൻ കഴിയും:</translation>
 <translation id="4279490309300973883">മിററിംഗ്</translation>
-<translation id="4281007048406351813">ടൈമറിൽ ഒരു മിനിറ്റ് ചേർക്കുക</translation>
 <translation id="4296136865091727875">എല്ലാ <ph name="COUNT" /> അറിയിപ്പുകളും മായ്ക്കുക</translation>
 <translation id="4303223480529385476">സ്റ്റാറ്റസ് ഏരിയ വികസിപ്പിക്കുക</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">കണക്റ്റുചെയ്യുന്നു</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" />-ൽ പഴയ മിഴിവിലേക്ക് പഴയപടിയാക്കുന്നു</translation>
-<translation id="7222902781030499995">ടൈമര്‍ നിര്‍ത്തുക</translation>
 <translation id="7256634071279256947">പിൻഭാഗത്തെ മൈക്രോഫോൺ</translation>
 <translation id="726276584504105859">സ്പ്ലിറ്റ് സ്ക്രീൻ ഉപയോഗിക്കുന്നതിന് ഇവിടെ വലിച്ചിടുക</translation>
 <translation id="7262906531272962081">റിമൈൻഡർ സൃഷ്‌ടിക്കുക</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 62ee27d9..74de915 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">सूचना सेटिंग्ज दाखवा. सूचना बंद आहेत</translation>
 <translation id="4269883910223712419">या डिव्हाइसचे प्रशासन पुढील गोष्टी करू शकते:</translation>
 <translation id="4279490309300973883">मिररिंग</translation>
-<translation id="4281007048406351813">टायमरला एक मिनिट जोडा</translation>
 <translation id="4296136865091727875">सर्व <ph name="COUNT" /> सूचना साफ करा</translation>
 <translation id="4303223480529385476">स्थिती क्षेत्राचा विस्तार करा</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">कनेक्ट करीत आहे</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" /> मध्ये जुन्या रिझोल्युशनवर परत करत आहे</translation>
-<translation id="7222902781030499995">टायमर थांबवा</translation>
 <translation id="7256634071279256947">मागील मायक्रोफोन</translation>
 <translation id="726276584504105859">विभाजित स्क्रीन वापरण्यासाठी येथे ड्रॅग करा</translation>
 <translation id="7262906531272962081">रिमाइंडर तयार करा</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index 81a457f..be2c8a8 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">Tunjukkan tetapan pemberitahuan. Pemberitahuan dimatikan</translation>
 <translation id="4269883910223712419">Pentadbir peranti ini berkeupayaan untuk:</translation>
 <translation id="4279490309300973883">Pencerminan</translation>
-<translation id="4281007048406351813">Tambah 1 min pada pemasa</translation>
 <translation id="4296136865091727875">Kosongkan kesemua <ph name="COUNT" /> pemberitahuan</translation>
 <translation id="4303223480529385476">Kembangkan area status</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Menyambung</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Kembali kepada peleraian lama dalam <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Hentikan pemasa</translation>
 <translation id="7256634071279256947">Mikrofon belakang</translation>
 <translation id="726276584504105859">Seret ke sini untuk menggunakan skrin pisah</translation>
 <translation id="7262906531272962081">Buat peringatan</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index aaf8fc5..457efb5a 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Instellingen voor meldingen weergeven. Meldingen zijn uitgeschakeld</translation>
 <translation id="4269883910223712419">De beheerder van dit apparaat kan het volgende doen:</translation>
 <translation id="4279490309300973883">Mirroring</translation>
-<translation id="4281007048406351813">1 min toevoegen aan timer</translation>
 <translation id="4296136865091727875">Alle <ph name="COUNT" /> meldingen wissen</translation>
 <translation id="4303223480529385476">Statusgedeelte uitvouwen</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Verbinding maken</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Terugzetten naar oude resolutie over <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Timer stoppen</translation>
 <translation id="7256634071279256947">Microfoon aan achterzijde</translation>
 <translation id="726276584504105859">Sleep hier naartoe om het scherm te splitsen</translation>
 <translation id="7262906531272962081">Herinnering maken</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 2097a11..1b859507 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Vis innstillinger for varsler. Varsler er av</translation>
 <translation id="4269883910223712419">Administratoren av denne enheten kan</translation>
 <translation id="4279490309300973883">Speiling</translation>
-<translation id="4281007048406351813">Legg til 1 min i nedtellingen</translation>
 <translation id="4296136865091727875">Fjern alle <ph name="COUNT" /> varsler</translation>
 <translation id="4303223480529385476">Vis statusområdet</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Kobler til</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Går tilbake til den gamle oppløsningen om <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Stopp nedtellingen</translation>
 <translation id="7256634071279256947">Mikrofon bak</translation>
 <translation id="726276584504105859">Dra hit for å bruke delt skjerm</translation>
 <translation id="7262906531272962081">Opprett en påminnelse</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index a2b18274..33bdc637 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Pokaż ustawienia powiadomień. Powiadomienia są wyłączone.</translation>
 <translation id="4269883910223712419">Administrator tego urządzenia może:</translation>
 <translation id="4279490309300973883">Odbicie lustrzane</translation>
-<translation id="4281007048406351813">Dodaj minutę do minutnika</translation>
 <translation id="4296136865091727875">Wyczyść wszystkie powiadomienia (<ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Rozwiń pasek stanu</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Łączenie</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Powrót do wcześniejszej rozdzielczości za <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Zatrzymaj licznik</translation>
 <translation id="7256634071279256947">Tylny mikrofon</translation>
 <translation id="726276584504105859">Przeciągnij tutaj, by podzielić ekran</translation>
 <translation id="7262906531272962081">Utwórz przypomnienie</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index 2a7ab0f..2097ba0 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Mostrar configurações de notificação. As notificações estão desativadas</translation>
 <translation id="4269883910223712419">O administrador deste dispositivo pode:</translation>
 <translation id="4279490309300973883">Espelhamento</translation>
-<translation id="4281007048406351813">Adicionar 1 min ao timer</translation>
 <translation id="4296136865091727875">Limpar todas as <ph name="COUNT" /> notificações</translation>
 <translation id="4303223480529385476">Expandir área de status</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Conectando</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Revertendo para resolução anterior em <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Parar timer</translation>
 <translation id="7256634071279256947">Microfone traseiro</translation>
 <translation id="726276584504105859">Arraste aqui para usar a tela dividida</translation>
 <translation id="7262906531272962081">Criar lembrete</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 8755d97b..30d2e2b 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Mostrar definições de notificação. As notificações estão desativadas</translation>
 <translation id="4269883910223712419">O administrador deste dispositivo pode:</translation>
 <translation id="4279490309300973883">Espelhamento</translation>
-<translation id="4281007048406351813">Adicionar 1 min ao temporizador</translation>
 <translation id="4296136865091727875">Limpar todas as <ph name="COUNT" /> notificações</translation>
 <translation id="4303223480529385476">Expandir área de estado</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">A ligar</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">A reverter para a resolução antiga dentro de <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Parar temporizador</translation>
 <translation id="7256634071279256947">Microfone posterior</translation>
 <translation id="726276584504105859">Arraste para aqui para utilizar o ecrã dividido</translation>
 <translation id="7262906531272962081">Criar lembrete</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index c1196bd7..7a6b17c2 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Afișează setările pentru notificări. Notificările sunt dezactivate</translation>
 <translation id="4269883910223712419">Administratorul acestui dispozitiv poate:</translation>
 <translation id="4279490309300973883">Oglindire</translation>
-<translation id="4281007048406351813">Adaugă un minut la temporizator</translation>
 <translation id="4296136865091727875">Șterge toate cele <ph name="COUNT" /> notificări</translation>
 <translation id="4303223480529385476">Extinde zona de stare</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Se conectează</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Se revine la rezoluția anterioară în <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Oprește cronometrul</translation>
 <translation id="7256634071279256947">Microfonul din spate</translation>
 <translation id="726276584504105859">Trage aici pentru a folosi ecranul împărțit</translation>
 <translation id="7262906531272962081">Creează un memento</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 1477dab..e69f0ca 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Показать настройки уведомлений. Уведомления отключены.</translation>
 <translation id="4269883910223712419">Администратор этого устройства имеет возможность:</translation>
 <translation id="4279490309300973883">Отражение</translation>
-<translation id="4281007048406351813">Добавить к таймеру 1 мин.</translation>
 <translation id="4296136865091727875">Удалить все уведомления: <ph name="COUNT" /></translation>
 <translation id="4303223480529385476">Развернуть панель состояния</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Подключение</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Возврат к предыдущему разрешению через <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Остановить таймер</translation>
 <translation id="7256634071279256947">Основной микрофон</translation>
 <translation id="726276584504105859">Перетащите сюда, чтобы разделить экран</translation>
 <translation id="7262906531272962081">Создать напоминание</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 7a13b59..f9ca3be2 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Zobraziť nastavenia upozornení. Upozornenia sú vypnuté</translation>
 <translation id="4269883910223712419">Správca tohto zariadenia môže:</translation>
 <translation id="4279490309300973883">Zrkadlenie</translation>
-<translation id="4281007048406351813">Pridať 1 minútu k časovaču</translation>
 <translation id="4296136865091727875">Vymazať všetky upozornenia (počet: <ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Rozbaliť stavovú oblasť</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Pripája sa</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Vrátenie starého rozlíšenia prebehne o <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Zastaviť časovač</translation>
 <translation id="7256634071279256947">Zadný mikrofóm</translation>
 <translation id="726276584504105859">Presuňte okno sem a použite tak rozdelenú obrazovku</translation>
 <translation id="7262906531272962081">Vytvoriť pripomenutie</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 88bdc40d..611a6ed 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Prikaz nastavitev obvestil. Obvestila so izklopljena.</translation>
 <translation id="4269883910223712419">Skrbniku te naprave je omogočeno to:</translation>
 <translation id="4279490309300973883">Zrcaljenje</translation>
-<translation id="4281007048406351813">Dodaj 1 min časovniku</translation>
 <translation id="4296136865091727875">Izbris vseh <ph name="COUNT" /> obvestil</translation>
 <translation id="4303223480529385476">Razširitev območja stanja</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Vzpostavljanje povezave</translation>
 <translation id="7165278925115064263">Alt + Shift + K</translation>
 <translation id="7168224885072002358">Ponastavitev na prejšnjo ločljivost čez <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Ustavi merilnik časa</translation>
 <translation id="7256634071279256947">Zadnji mikrofon</translation>
 <translation id="726276584504105859">Povlecite sem za razdeljeni zaslon</translation>
 <translation id="7262906531272962081">Ustvarjanje opomnika</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index b4eb4d5..e6244a73 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Прегледајте подешавања обавештења. Обавештења су искључена</translation>
 <translation id="4269883910223712419">Администратор овог уређаја може:</translation>
 <translation id="4279490309300973883">Пресликавање</translation>
-<translation id="4281007048406351813">Додај 1 мин у тајмер</translation>
 <translation id="4296136865091727875">Обришите сва обавештења (<ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Проширите област статуса</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Повезивање</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Враћање на стару резолуцију за <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Заустави тајмер</translation>
 <translation id="7256634071279256947">Задњи микрофон</translation>
 <translation id="726276584504105859">Превуците овде да бисте користили подељени екран</translation>
 <translation id="7262906531272962081">Направи подсетник</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index e7687893..762b2cc2 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Visa aviseringsinställningar. Aviseringar har inaktiverats</translation>
 <translation id="4269883910223712419">Enhetens administratör kan</translation>
 <translation id="4279490309300973883">Spegling</translation>
-<translation id="4281007048406351813">Lägg till en minut på timern</translation>
 <translation id="4296136865091727875">Rensa alla <ph name="COUNT" /> aviseringar</translation>
 <translation id="4303223480529385476">Utöka statusfält</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Ansluter</translation>
 <translation id="7165278925115064263">Alt + Skift + K</translation>
 <translation id="7168224885072002358">Återgår till den gamla upplösningen om <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Stoppa timer</translation>
 <translation id="7256634071279256947">Mikrofonen på baksidan</translation>
 <translation id="726276584504105859">Dra hit för att dela upp skärmen</translation>
 <translation id="7262906531272962081">Skapa påminnelse</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index 0414883..ae7e769 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Onyesha mipangilio ya arifa. Umezima arifa</translation>
 <translation id="4269883910223712419">Msimamizi wa kifaa hiki ana uwezo wa:</translation>
 <translation id="4279490309300973883">Kuakisi</translation>
-<translation id="4281007048406351813">Ongeza dakika 1 kwenye kipima muda</translation>
 <translation id="4296136865091727875">Futa arifa zote <ph name="COUNT" /></translation>
 <translation id="4303223480529385476">Panua eneo la hali</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Inaunganisha</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Inarejesha katika ubora wa zamani baada ya <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Komesha kipima muda</translation>
 <translation id="7256634071279256947">Maikrofoni ya nyuma</translation>
 <translation id="726276584504105859">Buruta hapa ili utumie skrini iliyogawanywa</translation>
 <translation id="7262906531272962081">Weka kikumbusho</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 2c64a011..bf2e2c4 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">அறிவிப்பு அமைப்புகளைக் காண்பிக்கும். அறிவிப்புகள் முடக்கப்பட்டுள்ளன</translation>
 <translation id="4269883910223712419">இந்தச் சாதனத்தின் நிர்வாகி இவற்றைச் செய்ய முடியும்:</translation>
 <translation id="4279490309300973883">பிரதிபலிக்கிறது</translation>
-<translation id="4281007048406351813">டைமரில் 1 நிமிடத்தைச் சேர்</translation>
 <translation id="4296136865091727875"><ph name="COUNT" /> அறிவிப்புகளையும் அழிக்கும்</translation>
 <translation id="4303223480529385476">நிலைப் பகுதியை விரிவாக்கும்</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">இணைத்தல்</translation>
 <translation id="7165278925115064263">ஆல்ட்+ஷிஃப்ட்+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" /> வினாடிகளில் பழைய தெளிவுதிறனுக்கு மாற்றியமைக்கப்படும்</translation>
-<translation id="7222902781030499995">டைமரை நிறுத்து</translation>
 <translation id="7256634071279256947">பின்பக்க மைக்ரோஃபோன்</translation>
 <translation id="726276584504105859">திரைப் பிரிப்பைப் பயன்படுத்த, இங்கே இழுக்கவும்</translation>
 <translation id="7262906531272962081">நினைவூட்டலை உருவாக்கு</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 5d94f3f..2c7a489 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -230,7 +230,6 @@
 <translation id="4261870227682513959">నోటిఫికేషన్ సెట్టింగ్‌లను చూపుతుంది. నోటిఫికేషన్‌లు ఆఫ్ చేయబడి ఉన్నాయి</translation>
 <translation id="4269883910223712419">ఈ పరికర నిర్వాహకుడికి వీటిని చేయగల సామర్థ్యం ఉంది:</translation>
 <translation id="4279490309300973883">మిర్రరింగ్</translation>
-<translation id="4281007048406351813">టైమర్‌కు 1 నిమి జోడించు</translation>
 <translation id="4296136865091727875">మొత్తం <ph name="COUNT" /> నోటిఫికేషన్‌లను క్లియర్ చేస్తుంది</translation>
 <translation id="4303223480529385476">విస్తరించు స్థితి ప్రాంతం</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">కనెక్ట్ అవుతోంది</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" />లో తిరిగి పాత రిజల్యూషన్‌కి మార్చబడుతుంది</translation>
-<translation id="7222902781030499995">టైమర్‌ను ఆపివేయి</translation>
 <translation id="7256634071279256947">వెనుకవైపు మైక్రోఫోన్</translation>
 <translation id="726276584504105859">విభజన స్క్రీన్‌ను ఉపయోగించడానికి ఇక్కడికి లాగండి</translation>
 <translation id="7262906531272962081">రిమైండర్‌ను సృష్టించండి</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index ef2fe4d..193590f 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">แสดงการตั้งค่าการแจ้งเตือน การแจ้งเตือนปิดอยู่</translation>
 <translation id="4269883910223712419">ผู้ดูแลระบบของอุปกรณ์เครื่องนี้ทำสิ่งต่อไปนี้ได้</translation>
 <translation id="4279490309300973883">กำลังแสดงผล</translation>
-<translation id="4281007048406351813">เพิ่มเวลาตัวจับเวลาอีก 1 นาที</translation>
 <translation id="4296136865091727875">ล้างการแจ้งเตือนทั้งหมด <ph name="COUNT" /> รายการ</translation>
 <translation id="4303223480529385476">ขยายพื้นที่แสดงสถานะ</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">กำลังเชื่อมต่อ</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">เปลี่ยนกลับไปเป็นความละเอียดเดิมภายใน <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">หยุดตัวจับเวลา</translation>
 <translation id="7256634071279256947">ไมโครโฟนด้านหลัง</translation>
 <translation id="726276584504105859">ลากมาที่นี่เพื่อใช้การแยกหน้าจอ</translation>
 <translation id="7262906531272962081">สร้างการช่วยเตือน</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index fc417232..b8ac822 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Bildirim ayarlarını göster. Bildirimler kapalı</translation>
 <translation id="4269883910223712419">Bu cihazın yöneticisi şunları yapabilir:</translation>
 <translation id="4279490309300973883">Yansıtılıyor</translation>
-<translation id="4281007048406351813">Zamanlayıcıya 1 dakika ekle</translation>
 <translation id="4296136865091727875"><ph name="COUNT" /> bildirimin tümünü temizle</translation>
 <translation id="4303223480529385476">Durum alanını genişlet</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -420,7 +419,6 @@
 <translation id="7143207342074048698">Bağlanıyor</translation>
 <translation id="7165278925115064263">Alt+Üst Karakter+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" /> saniye içinde eski çözünürlüğe dönülüyor</translation>
-<translation id="7222902781030499995">Kronometreyi durdur</translation>
 <translation id="7256634071279256947">Arka mikrofon</translation>
 <translation id="726276584504105859">Ekranı bölünmüş olarak kullanmak için burayı sürükleyin</translation>
 <translation id="7262906531272962081">Hatırlatıcı oluştur</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 898e97ed..34b0187 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">Показати налаштування сповіщень. Сповіщення вимкнено</translation>
 <translation id="4269883910223712419">Адміністратор цього пристрою може:</translation>
 <translation id="4279490309300973883">Дзеркальне відображення</translation>
-<translation id="4281007048406351813">Додати 1 хвилину до таймера</translation>
 <translation id="4296136865091727875">Видаліть усі сповіщення (<ph name="COUNT" />)</translation>
 <translation id="4303223480529385476">Розгорнути панель стану</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">Під’єднання</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Попередня роздільна здатність повернеться через <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Зупинити таймер</translation>
 <translation id="7256634071279256947">Мікрофон на задній панелі</translation>
 <translation id="726276584504105859">Перетягніть сюди, щоб розділити екран</translation>
 <translation id="7262906531272962081">Створити нагадування</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index ab145e69..3b96fe0a 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -229,8 +229,8 @@
 <translation id="4261870227682513959">Hiển thị các tùy chọn cài đặt thông báo. Thông báo hiện đang tắt</translation>
 <translation id="4269883910223712419">Quản trị viên của thiết bị này có thể:</translation>
 <translation id="4279490309300973883">Đang phản chiếu</translation>
-<translation id="4281007048406351813">Thêm 1 phút vào bộ hẹn giờ</translation>
 <translation id="4296136865091727875">Xóa tất cả <ph name="COUNT" /> thông báo</translation>
+<translation id="4303223480529385476">Mở rộng khu vực trạng thái</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">Bạn đã nhấn phím tắt của chế độ tương phản cao. Bạn có muốn bật chế độ này không?</translation>
 <translation id="4331809312908958774">Hệ điều hành Chrome</translation>
@@ -406,6 +406,7 @@
 <translation id="7015766095477679451">Quay lại lúc <ph name="COME_BACK_TIME" />.</translation>
 <translation id="7025533177575372252">Kết nối <ph name="DEVICE_NAME" /> với điện thoại của bạn</translation>
 <translation id="7029814467594812963">Thoát khỏi phiên</translation>
+<translation id="7042322267639375032">Thu gọn khu vực trạng thái</translation>
 <translation id="7066646422045619941">Mạng này bị quản trị viên của bạn tắt.</translation>
 <translation id="7067196344162293536">Tự động xoay</translation>
 <translation id="7068360136237591149">Mở tệp</translation>
@@ -417,7 +418,6 @@
 <translation id="7143207342074048698">Đang kết nối</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358">Sẽ hoàn nguyên về độ phân giải cũ sau <ph name="TIMEOUT_SECONDS" /></translation>
-<translation id="7222902781030499995">Dừng lịch hẹn giờ</translation>
 <translation id="7256634071279256947">Micrô mặt sau</translation>
 <translation id="726276584504105859">Kéo vào đây để sử dụng chế độ chia đôi màn hình</translation>
 <translation id="7262906531272962081">Tạo lời nhắc</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index ecff9d143..8f11b17 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">显示通知设置。通知已关闭</translation>
 <translation id="4269883910223712419">此设备的管理员能够:</translation>
 <translation id="4279490309300973883">正在镜像</translation>
-<translation id="4281007048406351813">给定时器加 1 分钟</translation>
 <translation id="4296136865091727875">清除所有 <ph name="COUNT" /> 条通知</translation>
 <translation id="4303223480529385476">展开状态区</translation>
 <translation id="4321179778687042513">ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">正在连接</translation>
 <translation id="7165278925115064263">Alt+Shift+K</translation>
 <translation id="7168224885072002358"><ph name="TIMEOUT_SECONDS" />秒后恢复到原分辨率</translation>
-<translation id="7222902781030499995">停止计时器</translation>
 <translation id="7256634071279256947">后置麦克风</translation>
 <translation id="726276584504105859">拖到此处即可使用分屏模式</translation>
 <translation id="7262906531272962081">创建提醒</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 47ecd4b..3357a946c 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -229,7 +229,6 @@
 <translation id="4261870227682513959">顯示通知設定。已關閉所有通知</translation>
 <translation id="4269883910223712419">這部裝置的管理員擁有下列權限:</translation>
 <translation id="4279490309300973883">鏡像</translation>
-<translation id="4281007048406351813">將計時器時間增加 1 分鐘</translation>
 <translation id="4296136865091727875">清除全部 <ph name="COUNT" /> 則通知</translation>
 <translation id="4303223480529385476">展開狀態區</translation>
 <translation id="4321179778687042513">Ctrl</translation>
@@ -419,7 +418,6 @@
 <translation id="7143207342074048698">連線中</translation>
 <translation id="7165278925115064263">Alt + Shift + K 鍵</translation>
 <translation id="7168224885072002358">系統將在 <ph name="TIMEOUT_SECONDS" /> 秒後還原成原來的解析度</translation>
-<translation id="7222902781030499995">停止計時器</translation>
 <translation id="7256634071279256947">後置麥克風</translation>
 <translation id="726276584504105859">拖曳到這裡即可使用分割畫面</translation>
 <translation id="7262906531272962081">建立提醒</translation>
diff --git a/base/task/thread_pool/thread_group_unittest.cc b/base/task/thread_pool/thread_group_unittest.cc
index 0f253f5..d09567b8 100644
--- a/base/task/thread_pool/thread_group_unittest.cc
+++ b/base/task/thread_pool/thread_group_unittest.cc
@@ -801,7 +801,10 @@
   job_handle.Join();
   // All worker tasks should complete before Join() returns.
   EXPECT_EQ(0U, job_task->GetMaxConcurrency());
+  thread_group_->JoinForTesting();
   EXPECT_EQ(1U, task_source->HasOneRef());
+  // Prevent TearDown() from calling JoinForTesting() again.
+  thread_group_ = nullptr;
 }
 
 // Verify that the maximum number of BEST_EFFORT tasks that can run concurrently
diff --git a/base/trace_event/blame_context.cc b/base/trace_event/blame_context.cc
index 3c5f32a..e7599ef 100644
--- a/base/trace_event/blame_context.cc
+++ b/base/trace_event/blame_context.cc
@@ -40,6 +40,8 @@
 
 void BlameContext::Enter() {
   DCHECK(WasInitialized());
+  if (LIKELY(!*category_group_enabled_))
+    return;
   TRACE_EVENT_API_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_ENTER_CONTEXT,
                                   category_group_enabled_, name_, scope_, id_,
                                   nullptr, TRACE_EVENT_FLAG_HAS_ID);
@@ -47,6 +49,8 @@
 
 void BlameContext::Leave() {
   DCHECK(WasInitialized());
+  if (LIKELY(!*category_group_enabled_))
+    return;
   TRACE_EVENT_API_ADD_TRACE_EVENT(TRACE_EVENT_PHASE_LEAVE_CONTEXT,
                                   category_group_enabled_, name_, scope_, id_,
                                   nullptr, TRACE_EVENT_FLAG_HAS_ID);
@@ -55,7 +59,7 @@
 void BlameContext::TakeSnapshot() {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(WasInitialized());
-  if (!*category_group_enabled_)
+  if (LIKELY(!*category_group_enabled_))
     return;
   std::unique_ptr<trace_event::TracedValue> snapshot(
       new trace_event::TracedValue);
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 5663300e..e4931aee 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-8900186046979314384
\ No newline at end of file
+8900159537766563312
\ No newline at end of file
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1
index 2eecdfc..b5b4182 100644
--- a/build/fuchsia/mac.sdk.sha1
+++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@
-8900185799248764720
\ No newline at end of file
+8900162284614629680
\ No newline at end of file
diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
index f474467..6b306c71 100644
--- a/cc/trees/property_tree.cc
+++ b/cc/trees/property_tree.cc
@@ -12,7 +12,6 @@
 #include "base/memory/ptr_util.h"
 #include "base/numerics/checked_math.h"
 #include "base/trace_event/traced_value.h"
-#include "cc/layers/layer_impl.h"
 #include "cc/trees/clip_node.h"
 #include "cc/trees/effect_node.h"
 #include "cc/trees/layer_tree_impl.h"
@@ -132,47 +131,6 @@
   PropertyTree<TransformNode>::set_needs_update(needs_update);
 }
 
-bool TransformTree::ComputeTranslation(int source_id,
-                                       int dest_id,
-                                       gfx::Transform* transform) const {
-  transform->MakeIdentity();
-  if (source_id == dest_id)
-    return true;
-
-  const TransformNode* dest = Node(dest_id);
-  if (!dest->ancestors_are_invertible)
-    return false;
-  if (source_id != kInvalidNodeId)
-    transform->ConcatTransform(ToScreen(source_id));
-  if (dest_id != kInvalidNodeId) {
-    if (dest->local.IsFlat() && (dest->node_and_ancestors_are_flat ||
-                                 dest->flattens_inherited_transform)) {
-      // In this case, flattenning will not affect the result, so we can use the
-      // FromScreen transform of the dest node.
-      transform->ConcatTransform(FromScreen(dest_id));
-    } else {
-      // In this case, some node between source and destination flattens
-      // inherited transform. Consider the tree R->A->B->C->D, where D is the
-      // source, A is the destination and C flattens inherited transform. The
-      // expected result is D * C * flattened(B). D's ToScreen will be D * C *
-      // flattened(B * A * R), but as the source to destination transform is
-      // at most translation, C and B cannot be non-flat and so flattened(B * A
-      // * R) = B * flattened(A * R). So, to get the expected result we have to
-      // multiply D's ToScreen transform with flattened(A * R)^{-1}, which is
-      // the inverse of flattened ToScreen of destination.
-      gfx::Transform to_screen = ToScreen(dest_id);
-      to_screen.FlattenTo2d();
-      gfx::Transform from_screen;
-      bool success = to_screen.GetInverse(&from_screen);
-      if (!success)
-        return false;
-      transform->ConcatTransform(from_screen);
-    }
-  }
-
-  return true;
-}
-
 TransformNode* TransformTree::FindNodeFromElementId(ElementId id) {
   auto iterator = property_trees()->element_id_to_transform_node_index.find(id);
   if (iterator == property_trees()->element_id_to_transform_node_index.end())
diff --git a/cc/trees/property_tree.h b/cc/trees/property_tree.h
index bf90db3..8370ad1 100644
--- a/cc/trees/property_tree.h
+++ b/cc/trees/property_tree.h
@@ -137,16 +137,6 @@
   TransformNode* FindNodeFromElementId(ElementId id);
   bool OnTransformAnimated(ElementId element_id,
                            const gfx::Transform& transform);
-  // Computes the change of basis transform from node |source_id| to |dest_id|.
-  // This is used by scroll children to compute transform from their scroll
-  // parent space (source) to their parent space (destination) and it can atmost
-  // be a translation. This function assumes that the path from source to
-  // destination has only translations. So, it should not be called when there
-  // can be intermediate 3d transforms but the end result is a translation.
-  bool ComputeTranslation(int source_id,
-                          int dest_id,
-                          gfx::Transform* transform) const;
-
   void ResetChangeTracking();
   // Updates the parent, target, and screen space transforms and snapping.
   void UpdateTransforms(int id);
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
index 1dccf00..b21f8858 100644
--- a/chrome/android/chrome_java_sources.gni
+++ b/chrome/android/chrome_java_sources.gni
@@ -645,6 +645,7 @@
   "java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationParams.java",
   "java/src/org/chromium/chrome/browser/externalnav/IntentWithGesturesHandler.java",
   "java/src/org/chromium/chrome/browser/favicon/FaviconHelper.java",
+  "java/src/org/chromium/chrome/browser/favicon/FaviconUtils.java",
   "java/src/org/chromium/chrome/browser/favicon/LargeIconBridge.java",
   "java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotMonitor.java",
   "java/src/org/chromium/chrome/browser/feature_engagement/ScreenshotMonitorDelegate.java",
@@ -1716,7 +1717,6 @@
   "java/src/org/chromium/chrome/browser/util/ChromeIntentUtil.java",
   "java/src/org/chromium/chrome/browser/util/ColorUtils.java",
   "java/src/org/chromium/chrome/browser/util/FeatureUtilities.java",
-  "java/src/org/chromium/chrome/browser/util/ViewUtils.java",
   "java/src/org/chromium/chrome/browser/vr/ArDelegate.java",
   "java/src/org/chromium/chrome/browser/vr/ArDelegateProvider.java",
   "java/src/org/chromium/chrome/browser/webapps/ActivateWebApkActivity.java",
diff --git a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
index 9d5d53b..aa6bd80 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
+++ b/chrome/android/features/keyboard_accessory/internal/java/src/org/chromium/chrome/browser/keyboard_accessory/ManualFillingComponentBridge.java
@@ -95,11 +95,6 @@
     }
 
     @CalledByNative
-    void showTouchToFillSheet() {
-        // TODO(crbug.com/957532): Implement this method.
-    }
-
-    @CalledByNative
     void hide() {
         mManualFillingComponent.hide();
     }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListFaviconProvider.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListFaviconProvider.java
index 9110ec0..230fe6f 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListFaviconProvider.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListFaviconProvider.java
@@ -16,9 +16,9 @@
 
 import org.chromium.base.Callback;
 import org.chromium.chrome.browser.favicon.FaviconHelper;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.native_page.NativePageFactory;
 import org.chromium.chrome.browser.profiles.Profile;
-import org.chromium.chrome.browser.util.ViewUtils;
 import org.chromium.chrome.tab_ui.R;
 
 /**
@@ -66,9 +66,8 @@
     }
 
     private Drawable processBitmap(Bitmap bitmap) {
-        return ViewUtils.createRoundedBitmapDrawable(
-                Bitmap.createScaledBitmap(bitmap, mFaviconSize, mFaviconSize, true),
-                ViewUtils.DEFAULT_FAVICON_CORNER_RADIUS);
+        return FaviconUtils.createRoundedBitmapDrawable(
+                Bitmap.createScaledBitmap(bitmap, mFaviconSize, mFaviconSize, true));
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
index f4fed8f..f7ed0d2a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemRow.java
@@ -11,10 +11,10 @@
 
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.favicon.IconType;
 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
 import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
-import org.chromium.chrome.browser.util.ViewUtils;
 import org.chromium.components.bookmarks.BookmarkId;
 
 /**
@@ -34,7 +34,7 @@
         super(context, attrs);
         mMinIconSize = (int) getResources().getDimension(R.dimen.default_favicon_min_size);
         mDisplayedIconSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_size);
-        mIconGenerator = ViewUtils.createDefaultRoundedIconGenerator(context.getResources(), true);
+        mIconGenerator = FaviconUtils.createCircularIconGenerator(context.getResources());
     }
 
     // BookmarkRow implementation.
@@ -81,9 +81,8 @@
             icon = mIconGenerator.generateIconForUrl(mUrl);
             setIconDrawable(new BitmapDrawable(getResources(), icon));
         } else {
-            setIconDrawable(ViewUtils.createRoundedBitmapDrawable(
-                    Bitmap.createScaledBitmap(icon, mDisplayedIconSize, mDisplayedIconSize, false),
-                    ViewUtils.DEFAULT_FAVICON_CORNER_RADIUS));
+            setIconDrawable(FaviconUtils.createRoundedBitmapDrawable(Bitmap.createScaledBitmap(
+                    icon, mDisplayedIconSize, mDisplayedIconSize, false)));
         }
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetService.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetService.java
index e758c4b..83898ca 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarkswidget/BookmarkWidgetService.java
@@ -31,6 +31,7 @@
 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
 import org.chromium.chrome.browser.bookmarks.BookmarkModel;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.favicon.IconType;
 import org.chromium.chrome.browser.favicon.LargeIconBridge;
 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
@@ -39,7 +40,6 @@
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
 import org.chromium.chrome.browser.util.IntentUtils;
-import org.chromium.chrome.browser.util.ViewUtils;
 import org.chromium.components.bookmarks.BookmarkId;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 
@@ -186,7 +186,7 @@
             mMinIconSizeDp = (int) res.getDimension(R.dimen.default_favicon_min_size);
             mDisplayedIconSize = res.getDimensionPixelSize(R.dimen.default_favicon_size);
             mIconGenerator =
-                    ViewUtils.createDefaultRoundedIconGenerator(context.getResources(), false);
+                    FaviconUtils.createRoundedRectangleIconGenerator(context.getResources());
 
             mRemainingTaskCount = 1;
             mBookmarkModel = new BookmarkModel();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBase.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBase.java
index 295c566..93d9df9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBase.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelBase.java
@@ -361,6 +361,11 @@
                 && ChromeFeatureList.isEnabled(ChromeFeatureList.OVERLAY_NEW_LAYOUT);
     }
 
+    /** @return The offset for the page content in DPs. */
+    protected float getLayoutOffsetYDps() {
+        return mLayoutYOffset * mPxToDp;
+    }
+
     // ============================================================================================
     // UI States
     // ============================================================================================
@@ -1109,7 +1114,7 @@
      * portion of the Base Page visible when a Panel is in expanded state. To facilitate the
      * calculation, the first argument contains the height of the Panel in the expanded state.
      *
-     * @return The desired offset for the Base Page
+     * @return The desired offset for the Base Page in DPs
      */
     protected float calculateBasePageDesiredOffset() {
         return 0.f;
@@ -1131,7 +1136,7 @@
      * consideration the Toolbar height, and adjust the offset accordingly, in order to
      * move the Toolbar out of the view as the Panel expands.
      *
-     * @return The target offset Y.
+     * @return The target offset Y in DPs.
      */
     private float calculateBasePageTargetY() {
         // Only a fullscreen wide Panel should offset the base page. A small panel should
@@ -1140,7 +1145,7 @@
 
         // Start with the desired offset taking viewport offset into consideration and make sure
         // the result is <= 0 so the page moves up and not down.
-        float offset = Math.min(calculateBasePageDesiredOffset() - mLayoutYOffset, 0.0f);
+        float offset = Math.min(calculateBasePageDesiredOffset() - getLayoutOffsetYDps(), 0.0f);
 
         // Make sure the offset is not greater than the expanded height, because
         // there's nothing to render below the Page.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
index 6abf015..c63ea9e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/contextualsearch/ContextualSearchPanel.java
@@ -789,6 +789,7 @@
             // Calculate the offset to center the selection on the available area.
             final float availableHeight = getTabHeight() - getExpandedHeight();
             offset = -selectionY + availableHeight / 2;
+            offset += getLayoutOffsetYDps();
         }
         return offset;
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java
index 4d137ca0..71854a1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java
@@ -17,10 +17,10 @@
 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentProgressObserver;
 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContent;
 import org.chromium.chrome.browser.favicon.FaviconHelper;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.tabmodel.TabLaunchType;
 import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
-import org.chromium.chrome.browser.util.ViewUtils;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
 import org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver;
@@ -201,8 +201,7 @@
             mContext = context;
             mFaviconHelper = new FaviconHelper();
             mDefaultFaviconHelper = new FaviconHelper.DefaultFaviconHelper();
-            mIconGenerator =
-                    ViewUtils.createDefaultRoundedIconGenerator(mContext.getResources(), true);
+            mIconGenerator = FaviconUtils.createCircularIconGenerator(mContext.getResources());
             mFaviconSize =
                     mContext.getResources().getDimensionPixelSize(R.dimen.preview_tab_favicon_size);
         }
@@ -239,9 +238,8 @@
                         Bitmap.createScaledBitmap(image, mFaviconSize, mFaviconSize, true));
             }
 
-            return ViewUtils.createRoundedBitmapDrawable(
-                    Bitmap.createScaledBitmap(image, mFaviconSize, mFaviconSize, true),
-                    ViewUtils.DEFAULT_FAVICON_CORNER_RADIUS);
+            return FaviconUtils.createRoundedBitmapDrawable(
+                    Bitmap.createScaledBitmap(image, mFaviconSize, mFaviconSize, true));
         }
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/favicon/FaviconUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/favicon/FaviconUtils.java
new file mode 100644
index 0000000..70e34ba
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/favicon/FaviconUtils.java
@@ -0,0 +1,65 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.favicon;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.ContextUtils;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
+import org.chromium.chrome.browser.util.ViewUtils;
+
+/**
+ * Utilities to deal with favicons.
+ */
+public class FaviconUtils {
+    /**
+     * Creates a {@link RoundedIconGenerator} to generate circular {@link Bitmap}s of favicons.
+     * @param resources The {@link Resources} for accessing color and dimen resources.
+     * @return A {@link RoundedIconGenerator} that uses the default circle icon style. Intended for
+     *         monograms, e.g. a circle with character(s) in the center.
+     */
+    public static RoundedIconGenerator createCircularIconGenerator(Resources resources) {
+        int displayedIconSize = resources.getDimensionPixelSize(R.dimen.circular_monogram_size);
+        int cornerRadius = displayedIconSize / 2;
+        int textSize = resources.getDimensionPixelSize(R.dimen.circular_monogram_text_size);
+        return new RoundedIconGenerator(displayedIconSize, displayedIconSize, cornerRadius,
+                getIconColor(resources), textSize);
+    }
+
+    /**
+     * Creates a {@link RoundedIconGenerator} to generate rounded rectangular {@link Bitmap}s of
+     * favicons.
+     * @param resources The {@link Resources} for accessing color and dimen resources.
+     * @return A {@link RoundedIconGenerator} that uses the default rounded rectangle icon style.
+     *         Intended for monograms, e.g. a rounded rectangle with character(s) in the center.
+     */
+    public static RoundedIconGenerator createRoundedRectangleIconGenerator(Resources resources) {
+        int displayedIconSize = resources.getDimensionPixelSize(R.dimen.default_favicon_size);
+        int cornerRadius = resources.getDimensionPixelSize(R.dimen.default_favicon_corner_radius);
+        int textSize = resources.getDimensionPixelSize(R.dimen.default_favicon_icon_text_size);
+        return new RoundedIconGenerator(displayedIconSize, displayedIconSize, cornerRadius,
+                getIconColor(resources), textSize);
+    }
+
+    /**
+     * Creates a {@link RoundedBitmapDrawable} using the provided {@link Bitmap} and a default
+     * favicon corner radius.
+     * @param icon The {@link Bitmap} to round.
+     * @return A {@link RoundedBitmapDrawable} for the provided {@link Bitmap}.
+     */
+    public static RoundedBitmapDrawable createRoundedBitmapDrawable(Bitmap icon) {
+        Resources resources = ContextUtils.getApplicationContext().getResources();
+        return ViewUtils.createRoundedBitmapDrawable(
+                icon, resources.getDimensionPixelSize(R.dimen.default_favicon_corner_radius));
+    }
+
+    private static int getIconColor(Resources resources) {
+        return ApiCompatibilityUtils.getColor(resources, R.color.default_favicon_background_color);
+    }
+}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetMediator.java
index e3f4a78..fd5f70a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/NavigationSheetMediator.java
@@ -15,11 +15,11 @@
 
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.favicon.FaviconHelper;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
 import org.chromium.chrome.browser.ui.widget.TintedDrawable;
 import org.chromium.chrome.browser.util.UrlConstants;
-import org.chromium.chrome.browser.util.ViewUtils;
 import org.chromium.content_public.browser.NavigationEntry;
 import org.chromium.content_public.browser.NavigationHistory;
 import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
@@ -76,7 +76,7 @@
         mModelList = modelList;
         mClickListener = listener;
         mFaviconHelper = new FaviconHelper();
-        mIconGenerator = ViewUtils.createDefaultRoundedIconGenerator(context.getResources(), true);
+        mIconGenerator = FaviconUtils.createCircularIconGenerator(context.getResources());
         mFaviconSize = context.getResources().getDimensionPixelSize(R.dimen.default_favicon_size);
         mHistoryIcon = TintedDrawable.constructTintedDrawable(
                 context, R.drawable.ic_history_googblue_24dp, R.color.default_icon_color);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
index eae807c..9d310b6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
@@ -19,12 +19,12 @@
 import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.favicon.FaviconHelper.DefaultFaviconHelper;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.favicon.IconType;
 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
 import org.chromium.chrome.browser.preferences.Pref;
 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
 import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
-import org.chromium.chrome.browser.util.ViewUtils;
 import org.chromium.chrome.browser.widget.selection.SelectableItemView;
 
 /**
@@ -51,7 +51,7 @@
 
         mMinIconSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_min_size);
         mDisplayedIconSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_size);
-        mIconGenerator = ViewUtils.createDefaultRoundedIconGenerator(getResources(), true);
+        mIconGenerator = FaviconUtils.createCircularIconGenerator(getResources());
         mEndPadding = context.getResources().getDimensionPixelSize(
                 R.dimen.selectable_list_layout_row_padding);
 
@@ -169,9 +169,8 @@
             icon = mIconGenerator.generateIconForUrl(getItem().getUrl());
             setIconDrawable(new BitmapDrawable(getResources(), icon));
         } else {
-            setIconDrawable(ViewUtils.createRoundedBitmapDrawable(
-                    Bitmap.createScaledBitmap(icon, mDisplayedIconSize, mDisplayedIconSize, false),
-                    ViewUtils.DEFAULT_FAVICON_CORNER_RADIUS));
+            setIconDrawable(FaviconUtils.createRoundedBitmapDrawable(Bitmap.createScaledBitmap(
+                    icon, mDisplayedIconSize, mDisplayedIconSize, false)));
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java
index bb9c9a8..735c2fb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsRowAdapter.java
@@ -29,13 +29,13 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.favicon.FaviconHelper.DefaultFaviconHelper;
 import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.ntp.ForeignSessionHelper.ForeignSession;
 import org.chromium.chrome.browser.ntp.ForeignSessionHelper.ForeignSessionTab;
 import org.chromium.chrome.browser.ntp.ForeignSessionHelper.ForeignSessionWindow;
 import org.chromium.chrome.browser.signin.SyncPromoView;
 import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
 import org.chromium.chrome.browser.util.UrlUtilities;
-import org.chromium.chrome.browser.util.ViewUtils;
 import org.chromium.components.signin.metrics.SigninAccessPoint;
 import org.chromium.ui.base.DeviceFormFactor;
 import org.chromium.ui.mojom.WindowOpenDisposition;
@@ -682,7 +682,7 @@
         mDefaultFaviconHelper = new DefaultFaviconHelper();
         mFaviconSize = resources.getDimensionPixelSize(R.dimen.default_favicon_size);
 
-        mIconGenerator = ViewUtils.createDefaultRoundedIconGenerator(activity.getResources(), true);
+        mIconGenerator = FaviconUtils.createCircularIconGenerator(activity.getResources());
 
         RecordHistogram.recordEnumeratedHistogram("HistoryPage.OtherDevicesMenu",
                 OtherSessionsActions.MENU_INITIALIZED, OtherSessionsActions.NUM_ENTRIES);
@@ -714,9 +714,8 @@
     private Drawable getRoundedFavicon(Bitmap image, int size) {
         // TODO(injae): Move shared code between Bookmarks/History/Downloads/here to ViewUtils.java.
         // Also applies to RoundedIconGenerator. crbug.com/829550
-        return ViewUtils.createRoundedBitmapDrawable(
-                Bitmap.createScaledBitmap(image, size, size, true),
-                ViewUtils.DEFAULT_FAVICON_CORNER_RADIUS);
+        return FaviconUtils.createRoundedBitmapDrawable(
+                Bitmap.createScaledBitmap(image, size, size, true));
     }
 
     private void loadForeignFavicon(final ViewHolder viewHolder, final String url) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java
index 28f4f66..0448c462 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentApp.java
@@ -104,7 +104,7 @@
     @Nullable
     private URI mCanDedupedApplicationId;
     private boolean mIsReadyToPayQueried;
-    private boolean mIsServiceConnected;
+    private boolean mIsServiceBindingInitiated;
 
     /**
      * Builds the point of interaction with a locally installed 3rd party native Android payment
@@ -163,7 +163,6 @@
         mServiceConnection = new ServiceConnection() {
             @Override
             public void onServiceConnected(ComponentName name, IBinder service) {
-                mIsServiceConnected = true;
                 IsReadyToPayService isReadyToPayService =
                         IsReadyToPayService.Stub.asInterface(service);
                 if (isReadyToPayService == null) {
@@ -173,9 +172,16 @@
                 }
             }
 
+            // "Called when a connection to the Service has been lost. This typically happens when
+            // the process hosting the service has crashed or been killed. This does not remove the
+            // ServiceConnection itself -- this binding to the service will remain active, and you
+            // will receive a call to onServiceConnected(ComponentName, IBinder) when the Service is
+            // next running."
+            // https://developer.android.com/reference/android/content/ServiceConnection.html#onServiceDisconnected(android.content.ComponentName)
             @Override
             public void onServiceDisconnected(ComponentName name) {
-                mIsServiceConnected = false;
+                // Do not wait for the service to restart.
+                respondToGetInstrumentsQuery(null);
             }
         };
 
@@ -183,12 +189,19 @@
                 removeUrlScheme(origin), removeUrlScheme(iframeOrigin), certificateChain,
                 methodDataMap, null /* total */, null /* displayItems */, null /* modifiers */));
         try {
-            if (!ContextUtils.getApplicationContext().bindService(
-                        mIsReadyToPayIntent, mServiceConnection, Context.BIND_AUTO_CREATE)) {
-                respondToGetInstrumentsQuery(null);
-                return;
-            }
+            // This method returns "true if the system is in the process of bringing up a service
+            // that your client has permission to bind to; false if the system couldn't find the
+            // service or if your client doesn't have permission to bind to it. If this value is
+            // true, you should later call unbindService(ServiceConnection) to release the
+            // connection."
+            // https://developer.android.com/reference/android/content/Context.html#bindService(android.content.Intent,%20android.content.ServiceConnection,%20int)
+            mIsServiceBindingInitiated = ContextUtils.getApplicationContext().bindService(
+                    mIsReadyToPayIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
         } catch (SecurityException e) {
+            // Intentionally blank, so mIsServiceBindingInitiated is false.
+        }
+
+        if (!mIsServiceBindingInitiated) {
             respondToGetInstrumentsQuery(null);
             return;
         }
@@ -200,9 +213,11 @@
 
     private void respondToGetInstrumentsQuery(final PaymentInstrument instrument) {
         if (mServiceConnection != null) {
-            if (mIsServiceConnected) {
+            if (mIsServiceBindingInitiated) {
+                // mServiceConnection "parameter must not be null."
+                // https://developer.android.com/reference/android/content/Context.html#unbindService(android.content.ServiceConnection)
                 ContextUtils.getApplicationContext().unbindService(mServiceConnection);
-                mIsServiceConnected = false;
+                mIsServiceBindingInitiated = false;
             }
             mServiceConnection = null;
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ConfirmImportantSitesDialogFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ConfirmImportantSitesDialogFragment.java
index e513885..9272bb5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ConfirmImportantSitesDialogFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/privacy/ConfirmImportantSitesDialogFragment.java
@@ -30,13 +30,13 @@
 import org.chromium.base.ContextUtils;
 import org.chromium.base.VisibleForTesting;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.favicon.FaviconUtils;
 import org.chromium.chrome.browser.favicon.IconType;
 import org.chromium.chrome.browser.favicon.LargeIconBridge;
 import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
 import org.chromium.chrome.browser.util.ConversionUtils;
-import org.chromium.chrome.browser.util.ViewUtils;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -65,7 +65,7 @@
             mDomains = domains;
             mFaviconURLs = faviconURLs;
             mFaviconSize = resources.getDimensionPixelSize(R.dimen.default_favicon_size);
-            mIconGenerator = ViewUtils.createDefaultRoundedIconGenerator(getResources(), false);
+            mIconGenerator = FaviconUtils.createRoundedRectangleIconGenerator(getResources());
         }
 
         @Override
@@ -130,9 +130,8 @@
                 icon = mIconGenerator.generateIconForUrl(url);
                 return new BitmapDrawable(getResources(), icon);
             } else {
-                return ViewUtils.createRoundedBitmapDrawable(
-                        Bitmap.createScaledBitmap(icon, mFaviconSize, mFaviconSize, false),
-                        ViewUtils.DEFAULT_FAVICON_CORNER_RADIUS);
+                return FaviconUtils.createRoundedBitmapDrawable(
+                        Bitmap.createScaledBitmap(icon, mFaviconSize, mFaviconSize, false));
             }
         }
     }
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
index 4ef484e..eb61c5e9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -208,6 +208,7 @@
 <translation id="2498359688066513246">Trợ giúp và phản hồi</translation>
 <translation id="2501278716633472235">Quay lại</translation>
 <translation id="2513403576141822879">Bạn có thể xem thêm tùy chọn cài đặt liên quan đến quyền riêng tư, bảo mật và hoạt động thu thập dữ liệu trong phần <ph name="BEGIN_LINK" />Đồng bộ hóa và dịch vụ của Google<ph name="END_LINK" /></translation>
+<translation id="2518590038762162553">Ở Chế độ thu gọn, Chrome tải trang nhanh hơn và sử dụng ít dữ liệu hơn lên tới 60%. Để tối ưu hóa các trang bạn truy cập, Chrome sẽ gửi lưu lượng truy cập web của bạn cho Google. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation>
 <translation id="2523184218357549926">Gửi cho Google URL của các trang bạn truy cập</translation>
 <translation id="2532336938189706096">Lượt xem trên web</translation>
 <translation id="2534155362429831547">Đã xóa <ph name="NUMBER_OF_ITEMS" /> mục</translation>
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp
index d15eb8d..3cfc20d6 100644
--- a/chrome/app/chromeos_strings.grdp
+++ b/chrome/app/chromeos_strings.grdp
@@ -1246,6 +1246,9 @@
   <message name="IDS_NETWORK_LIST_INITIALIZING" desc="Text in the network list element when a Cellular network is initiailizing.">
     Initializing...
   </message>
+  <message name="IDS_NETWORK_LIST_NOT_AVAILABLE" desc="Text in the network list element when a network is not available to be selected but is still present in the list (e.g., if cellular activation is not allowed in the current context, this message is displayed next to unactivated cellular networks).">
+    Not available
+  </message>
   <message name="IDS_NETWORK_LIST_SIM_CARD_LOCKED" desc="Text in the network list element when a Cellular network's SIM card is locked.">
     SIM card is locked
   </message>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index be25e91e..e4cbd90 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1479,7 +1479,7 @@
 <translation id="3154351730702813399">Az eszköz rendszergazdája figyelheti a böngészési tevékenységét.</translation>
 <translation id="3154429428035006212">Több mint egy hónapja offline</translation>
 <translation id="3156531245809797194">A Chrome használatához jelentkezzen be</translation>
-<translation id="3157931365184549694">Visszaállítás</translation>
+<translation id="3157931365184549694">Helyreállítás</translation>
 <translation id="3158033540161634471">Az ujjlenyomat beállítása</translation>
 <translation id="3159493096109238499">Bézs</translation>
 <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (hardverrel támogatott)</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 2d1814d..23e193e 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -1211,7 +1211,7 @@
 <translation id="275662540872599901">skrini imezimwa</translation>
 <translation id="2762441749940182211">Kamera imezuiwa</translation>
 <translation id="2765217105034171413">Ndogo</translation>
-<translation id="276969039800130567">Umeingia kama <ph name="USER_EMAIL_ADDRESS" />.</translation>
+<translation id="276969039800130567">Umeingia ukitumia <ph name="USER_EMAIL_ADDRESS" />.</translation>
 <translation id="2770465223704140727">Ondoa kwenye orodha</translation>
 <translation id="2770690685823456775">Tuma manenosiri yako kwenye folda nyingine</translation>
 <translation id="2771268254788431918">Data ya mtandao wa simu imewashwa</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 22e0799a..5a9dcf3 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -319,10 +319,11 @@
 <translation id="1470811252759861213">Để nhận tiện ích trên tất cả các máy tính của bạn, hãy <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1470967055429794975">Thao tác này sẽ xóa toàn bộ dữ liệu trên khóa bảo mật, bao gồm cả mã PIN của khóa</translation>
 <translation id="1475502736924165259">Bạn có các chứng chỉ trên tệp không phù hợp với bất kỳ danh mục nào khác</translation>
+<translation id="1476088332184200792">Sao chép vào Thiết bị của bạn</translation>
 <translation id="1476607407192946488">&amp;Cài đặt ngôn ngữ</translation>
 <translation id="1478340334823509079">Chi tiết: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Cài đặt chưa được bật</translation>
-<translation id="1481206932476131736">Quản lý các tài khoản bạn đã đăng nhập. Các trang web, ứng dụng và tiện ích trong Chrome cũng như Google Play có thể dùng những tài khoản này để mang lại trải nghiệm phù hợp cho bạn, tùy theo quyền.</translation>
+<translation id="1481206932476131736">Quản lý các tài khoản bạn đã đăng nhập. Các trang web, ứng dụng và tiện ích trong Chrome cũng như Google Play có thể dùng những tài khoản này để mang lại trải nghiệm phù hợp cho bạn, tùy theo sự cho phép.</translation>
 <translation id="1482626744466814421">Đánh dấu tab này...</translation>
 <translation id="1483493594462132177">Gửi</translation>
 <translation id="1484979925941077974">Trang web đang sử dụng Bluetooth</translation>
@@ -1340,6 +1341,7 @@
 <translation id="2941112035454246133">Thấp</translation>
 <translation id="2942560570858569904">Đang chờ...</translation>
 <translation id="2942581856830209953">Tùy chỉnh trang này</translation>
+<translation id="294308617863380348">Bao gồm cả cookie của bên thứ ba</translation>
 <translation id="2944060181911631861">Gửi dữ liệu chẩn đoán và dữ liệu về mức sử dụng. Giúp cải thiện trải nghiệm Android của bạn bằng cách tự động gửi dữ liệu chẩn đoán, dữ liệu về mức sử dụng ứng dụng và thiết bị cho Google. Những thông tin này sẽ giúp tăng độ ổn định của hệ thống và ứng dụng cũng như cải thiện các mặt khác. Một số dữ liệu tổng hợp cũng sẽ hữu ích cho các ứng dụng và đối tác của Google, chẳng hạn như những nhà phát triển Android. Nếu bạn bật mục cài đặt bổ sung Hoạt động web và ứng dụng thì dữ liệu này có thể được lưu vào Tài khoản Google của bạn. <ph name="BEGIN_LINK1" />Tìm hiểu thêm<ph name="END_LINK1" /></translation>
 <translation id="2946119680249604491">Thêm kết nối</translation>
 <translation id="2948300991547862301">Truy cập <ph name="PAGE_TITLE" /></translation>
@@ -1771,6 +1773,7 @@
 <translation id="3613134908380545408">Hiển thị <ph name="FOLDER_NAME" /></translation>
 <translation id="3613422051106148727">&amp;Mở trong tab mới</translation>
 <translation id="3615073365085224194">Chạm ngón tay của bạn vào cảm biến vân tay</translation>
+<translation id="3615579745882581859">đang quét <ph name="FILE_NAME" />.</translation>
 <translation id="3616741288025931835">&amp;Xoá Dữ liệu Duyệt web...</translation>
 <translation id="3617891479562106823">Không có nền. Hãy thử lại sau.</translation>
 <translation id="3619115746895587757">Cà phê cappuccino</translation>
@@ -2251,6 +2254,7 @@
 <translation id="4297322094678649474">Thay đổi ngôn ngữ</translation>
 <translation id="4301671483919369635">Trang này được phép chỉnh sửa tệp</translation>
 <translation id="4303079906735388947">Thiết lập mã PIN mới cho khóa bảo mật</translation>
+<translation id="4305402730127028764">Sao chép vào <ph name="DEVICE_NAME" /></translation>
 <translation id="4306119971288449206">Ứng dụng phải được cung cấp loại nội dung "<ph name="CONTENT_TYPE" />"</translation>
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K hiện có)</translation>
 <translation id="4310139701823742692">Tệp có định dạng sai. Hãy kiểm tra tệp PPD rồi thử lại.</translation>
@@ -2929,6 +2933,7 @@
 <translation id="5367091008316207019">Đang đọc tệp..</translation>
 <translation id="5368720394188453070">Điện thoại của bạn bị khóa. Hãy mở khóa điện thoại để truy cập.</translation>
 <translation id="5368779022775404937">Đăng nhập vào <ph name="REALM" /></translation>
+<translation id="5369491905435686894">Bật tính năng tăng tốc chuột</translation>
 <translation id="5370819323174483825">&amp;Tải lại</translation>
 <translation id="5372529912055771682">Chế độ đăng ký đã cung cấp không được phiên bản hệ điều hành này hỗ trợ. Hãy đảm bảo bạn đang chạy phiên bản mới nhất và thử lại.</translation>
 <translation id="5372579129492968947">Bỏ ghim tiện ích</translation>
@@ -3001,6 +3006,7 @@
 <translation id="5464632865477611176">Chạy lần này</translation>
 <translation id="5464660706533281090">Người dùng là trẻ em không thể thay đổi tùy chọn cài đặt này.</translation>
 <translation id="5466374726908360271">Dá&amp;n và tìm kiếm “<ph name="SEARCH_TERMS" />”</translation>
+<translation id="5468173180030470402">Đang tìm mục chia sẻ tệp</translation>
 <translation id="5471768120198416576">Chào bạn! Đây là giọng nói của tính năng chuyển văn bản sang lời nói.</translation>
 <translation id="5473333559083690127">Nhập lại mã PIN mới</translation>
 <translation id="5481941284378890518">Thêm máy in lân cận</translation>
@@ -3536,6 +3542,7 @@
 <translation id="6233154960150021497">Đặt chế độ mặc định là sử dụng giọng nói thay cho bàn phím</translation>
 <translation id="6234474535228214774">Đang chờ cài đặt</translation>
 <translation id="6237816943013845465">Cho phép bạn điều chỉnh độ phân giải màn hình</translation>
+<translation id="6238767809035845642">Văn bản được chia sẻ từ Thiết bị khác</translation>
 <translation id="6238923052227198598">Giữ ghi chú mới nhất trên màn hình khóa</translation>
 <translation id="6239558157302047471">Tải lại &amp;khung</translation>
 <translation id="6241530762627360640">Truy cập thông tin về thiết bị Bluetooth được ghép nối với hệ thống của bạn và khám phá các thiết bị Bluetooth lân cận.</translation>
@@ -3772,7 +3779,7 @@
 <translation id="6596325263575161958">Tùy chọn mã hóa</translation>
 <translation id="6596816719288285829">Địa chỉ IP</translation>
 <translation id="6597017209724497268">Mẫu</translation>
-<translation id="6597148444736186483">Để đăng xuất khỏi tài khoản chính trên thiết bị này, hãy nhấp vào mục thời gian trên màn hình. Trong trình đơn hiện ra, hãy nhấp vào "Đăng xuất".</translation>
+<translation id="6597148444736186483">Để đăng xuất khỏi tài khoản chính trên thiết bị này, hãy nhấp vào khu vực giờ trên màn hình. Trong trình đơn hiện ra, hãy nhấp vào "Đăng xuất".</translation>
 <translation id="659934686219830168">Quá trình đồng bộ hóa sẽ bắt đầu sau khi bạn rời khỏi trang này</translation>
 <translation id="6602956230557165253">Sử dụng các phím mũi tên trái và phải để điều hướng.</translation>
 <translation id="6605847144724004692">Chưa có người dùng nào xếp hạng.</translation>
@@ -4366,6 +4373,7 @@
 <translation id="7487141338393529395">Bật tính năng kiểm tra lỗi chính tả nâng cao</translation>
 <translation id="7487969577036436319">Không có thành phần nào được cài đặt</translation>
 <translation id="7489355918927585587">{COUNT,plural, =0{&amp;Mở tất cả}=1{&amp;Mở dấu trang}other{&amp;Mở tất cả (#)}}</translation>
+<translation id="7489761397368794366">Gọi bằng thiết bị của bạn</translation>
 <translation id="749028671485790643">Cá nhân <ph name="VALUE" /></translation>
 <translation id="7490813197707563893">Địa chỉ MAC</translation>
 <translation id="7493386493263658176">Tiện ích <ph name="EXTENSION_NAME" /> có thể thu thập tất cả nội dung bạn nhập, bao gồm dữ liệu cá nhân như mật khẩu và số thẻ tín dụng. Bạn có muốn sử dụng tiện ích này không?</translation>
@@ -4385,6 +4393,7 @@
 <translation id="7508054832109420082">Cấp quyền truy cập vào máy in</translation>
 <translation id="7510943789645525906">Cảnh báo bạn nếu mật khẩu bạn sử dụng bị ảnh hưởng trong một vụ rò rỉ dữ liệu</translation>
 <translation id="7513029293694390567">Tự động đăng nhập vào các trang web bằng thông tin đăng nhập được lưu trữ. Nếu tính năng này tắt, bạn sẽ luôn được yêu cầu xác nhận trước khi đăng nhập vào trang web.</translation>
+<translation id="7514239104543605883">Sao chép vào thiết bị của bạn</translation>
 <translation id="7514365320538308">Tải xuống</translation>
 <translation id="7521387064766892559">JavaScript</translation>
 <translation id="7522255036471229694">Nói “Ok Google”</translation>
@@ -4634,7 +4643,7 @@
 <translation id="7851457902707056880">Đăng nhập chỉ bị hạn chế đối với tài khoản chủ sở hữu. Hãy khởi động lại và đăng nhập bằng tài khoản chủ sở hữu. Máy sẽ tự động khởi động lại sau 30 giây.</translation>
 <translation id="7851716364080026749">Luôn chặn truy cập vào máy ảnh và micrô</translation>
 <translation id="7851720427268294554">Trình phân tích cú pháp IPP</translation>
-<translation id="78526636422538552">Đã tắt tính năng thêm Tài khoản Google khác</translation>
+<translation id="78526636422538552">Tính năng thêm Tài khoản Google khác đã bị tắt</translation>
 <translation id="7853747251428735">Côn&amp;g cụ khác</translation>
 <translation id="7857117644404132472">Thêm ngoại lệ</translation>
 <translation id="7857949311770343000">Đây có phải là trang tab mới bạn muốn không?</translation>
@@ -4941,6 +4950,7 @@
 <translation id="8274332263553132018">Truyền tệp</translation>
 <translation id="8274924778568117936">Không tắt hoặc đóng <ph name="DEVICE_TYPE" /> cho đến khi cập nhật xong. <ph name="DEVICE_TYPE" /> của bạn sẽ khởi động lại sau khi cài đặt xong.</translation>
 <translation id="8275038454117074363">Nhập</translation>
+<translation id="8275080796245127762">Gọi bằng Thiết bị của bạn</translation>
 <translation id="8276560076771292512">Làm trống bộ nhớ đệm và tải lại cứng</translation>
 <translation id="8281886186245836920">Bỏ qua</translation>
 <translation id="8282947398454257691">Biết số nhận dạng thiết bị duy nhất của bạn</translation>
@@ -5261,6 +5271,7 @@
 <translation id="8758418656925882523">Bật tính năng nhập bằng giọng nói (nói để nhập)</translation>
 <translation id="8759408218731716181">Không thể thiết lập đăng nhập nhiều tài khoản</translation>
 <translation id="8759753423332885148">Tìm hiểu thêm.</translation>
+<translation id="8761945298804995673">Người dùng này đã tồn tại</translation>
 <translation id="8762886931014513155">Bạn cần cập nhật <ph name="DEVICE_TYPE" /></translation>
 <translation id="8763927697961133303">Thiết bị USB</translation>
 <translation id="8767621466733104912">Tự động cập nhật Chrome cho tất cả người dùng</translation>
@@ -5349,6 +5360,7 @@
 <translation id="8879284080359814990">&amp;Hiển thị Dưới dạng Tab</translation>
 <translation id="8879921471468674457">Ghi nhớ thông tin đăng nhập</translation>
 <translation id="8881020143150461183">Vui lòng thử lại. Nếu cần hỗ trợ kỹ thuật, hãy liên hệ với <ph name="CARRIER_NAME" />.</translation>
+<translation id="8883273463630735858">Bật tính năng tăng tốc bàn di chuột</translation>
 <translation id="8884570509232205463">Giờ đây, thiết bị của bạn sẽ khóa lúc <ph name="UNLOCK_TIME" />.</translation>
 <translation id="8885197664446363138">Smart Lock không khả dụng</translation>
 <translation id="8888253246822647887">Ứng dụng sẽ mở khi nâng cấp xong. Quá trình nâng cấp có thể mất vài phút.</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index ab5e2dc..ca0d70a 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -1488,7 +1488,7 @@
       Save detected printers to your profile, or add a new printer.
     </message>
     <message name="IDS_SETTINGS_PRINTING_CUPS_PRINTERS_AVAILABLE_PRINTERS" desc="In CUPS printing settings subpage, title for the nearby printers list.">
-      Available printers to save
+      Add printers to your profile
     </message>
     <message name="IDS_SETTINGS_PRINTING_CUPS_PRINTERS_EDIT" desc="Text for the drop down menu which allows the user to edit the printer details.">
       Edit
@@ -4972,6 +4972,9 @@
     <message name="IDS_SETTINGS_MULTIDEVICE_FORGET_DEVICE_DIALOG_MESSAGE" desc="Text of a dialog that lets the user choose if their Chromebook should forget their phone. This means they will no longer have access to multidevice features.">
       Disconnect your phone from your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. They will no longer connect automatically.
     </message>
+    <message name="IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE_DISCONNECT" desc="Text for the button that lets the user choose if their Chromebook should forget their phone. This means they will no longer have access to multidevice features.">
+      Disconnect
+    </message>
   </if>
 
   <!-- Password protection -->
diff --git a/chrome/browser/OWNERS b/chrome/browser/OWNERS
index d26ca3d5..040bb33 100644
--- a/chrome/browser/OWNERS
+++ b/chrome/browser/OWNERS
@@ -71,3 +71,8 @@
 # For security review.
 per-file chrome_browser_interface_binders.cc=set noparent
 per-file chrome_browser_interface_binders.cc=file://ipc/SECURITY_OWNERS
+
+# BackForwardCache
+per-file chrome_back_forward_cache_browsertest.cc=arthursonzogni@chromium.org
+per-file chrome_back_forward_cache_browsertest.cc=altimin@chromium.org
+per-file chrome_back_forward_cache_browsertest.cc=file://content/OWNERS
diff --git a/chrome/browser/android/devtools_manager_delegate_android.cc b/chrome/browser/android/devtools_manager_delegate_android.cc
index f805a46..127db9c 100644
--- a/chrome/browser/android/devtools_manager_delegate_android.cc
+++ b/chrome/browser/android/devtools_manager_delegate_android.cc
@@ -252,9 +252,8 @@
 }
 
 std::string DevToolsManagerDelegateAndroid::GetDiscoveryPageHTML() {
-  return ui::ResourceBundle::GetSharedInstance()
-      .GetRawDataResource(IDR_DEVTOOLS_DISCOVERY_PAGE_HTML)
-      .as_string();
+  return ui::ResourceBundle::GetSharedInstance().DecompressDataResource(
+      IDR_DEVTOOLS_DISCOVERY_PAGE_HTML);
 }
 
 bool DevToolsManagerDelegateAndroid::IsBrowserTargetDiscoverable() {
diff --git a/chrome/browser/autofill/manual_filling_controller_impl.cc b/chrome/browser/autofill/manual_filling_controller_impl.cc
index 1f64d03..f395a92 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl.cc
+++ b/chrome/browser/autofill/manual_filling_controller_impl.cc
@@ -285,10 +285,7 @@
 
 void ManualFillingControllerImpl::UpdateVisibility() {
   if (ShouldShowAccessory()) {
-    if (available_sources_.contains(FillingSource::TOUCH_TO_FILL))
-      view_->ShowTouchToFillSheet();
-    else
-      view_->ShowWhenKeyboardIsVisible();
+    view_->ShowWhenKeyboardIsVisible();
   } else {
     view_->Hide();
   }
diff --git a/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc b/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
index 031cd56..30b8204 100644
--- a/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
+++ b/chrome/browser/autofill/manual_filling_controller_impl_unittest.cc
@@ -171,15 +171,6 @@
   FocusFieldAndClearExpectations(FocusedFieldType::kFillablePasswordField);
 }
 
-TEST_F(ManualFillingControllerTest, TouchToFillSheetHasPreference) {
-  controller()->RefreshSuggestions(
-      populate_sheet(AccessoryTabType::TOUCH_TO_FILL));
-  controller()->RefreshSuggestions(populate_sheet(AccessoryTabType::PASSWORDS));
-
-  EXPECT_CALL(*view(), ShowTouchToFillSheet());
-  FocusFieldAndClearExpectations(FocusedFieldType::kFillablePasswordField);
-}
-
 TEST_F(ManualFillingControllerTest,
        HidesAccessoryWithoutSuggestionsOnNonPasswordFields) {
   SetSuggestionsAndClearExpectations(
diff --git a/chrome/browser/autofill/manual_filling_view_interface.h b/chrome/browser/autofill/manual_filling_view_interface.h
index f9e540b..10f8435 100644
--- a/chrome/browser/autofill/manual_filling_view_interface.h
+++ b/chrome/browser/autofill/manual_filling_view_interface.h
@@ -69,10 +69,6 @@
   // Shows the accessory bar when the keyboard is also shown.
   virtual void ShowWhenKeyboardIsVisible() = 0;
 
-  // Requests to show the touch to fill sheet. This will hide the keyboard if
-  // shown.
-  virtual void ShowTouchToFillSheet() = 0;
-
   // Hides the accessory bar and the accessory sheet (if open).
   virtual void Hide() = 0;
 
diff --git a/chrome/browser/autofill/mock_manual_filling_view.h b/chrome/browser/autofill/mock_manual_filling_view.h
index be21dfb..4f220cd 100644
--- a/chrome/browser/autofill/mock_manual_filling_view.h
+++ b/chrome/browser/autofill/mock_manual_filling_view.h
@@ -19,7 +19,6 @@
   MOCK_METHOD0(CloseAccessorySheet, void());
   MOCK_METHOD0(SwapSheetWithKeyboard, void());
   MOCK_METHOD0(ShowWhenKeyboardIsVisible, void());
-  MOCK_METHOD0(ShowTouchToFillSheet, void());
   MOCK_METHOD0(Hide, void());
 
  private:
diff --git a/chrome/browser/banners/app_banner_manager.cc b/chrome/browser/banners/app_banner_manager.cc
index 78965fa..01de2d00 100644
--- a/chrome/browser/banners/app_banner_manager.cc
+++ b/chrome/browser/banners/app_banner_manager.cc
@@ -550,11 +550,8 @@
   // installable_web_app_check_result_ to kNo.
   if (installable_web_app_check_result_ != InstallableWebAppCheckResult::kNo &&
       state_ != State::INACTIVE) {
-    web_contents()
-        ->GetController()
-        .GetBackForwardCache()
-        .DisableForRenderFrameHost(handle->GetPreviousRenderFrameHostId(),
-                                   "banners::AppBannerManager");
+    content::BackForwardCache::DisableForRenderFrameHost(
+        handle->GetPreviousRenderFrameHostId(), "banners::AppBannerManager");
   }
 
   if (state_ != State::COMPLETE && state_ != State::INACTIVE)
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index 81ad6d17..bcde3bc5 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -145,7 +145,7 @@
       <if expr="enable_printing">
         <include name="IDR_CLOUDPRINT_MANIFEST" file="resources\cloud_print_app\manifest.json" type="BINDATA" />
       </if>
-      <include name="IDR_DEVTOOLS_DISCOVERY_PAGE_HTML" file="devtools\frontend\devtools_discovery_page.html" type="BINDATA"/>
+      <include name="IDR_DEVTOOLS_DISCOVERY_PAGE_HTML" file="devtools\frontend\devtools_discovery_page.html" type="BINDATA" compress="gzip"/>
       <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_HTML" file="resources\domain_reliability_internals\domain_reliability_internals.html" compress="gzip" type="BINDATA" />
       <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_CSS" file="resources\domain_reliability_internals\domain_reliability_internals.css" compress="gzip" type="BINDATA" />
       <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_JS" file="resources\domain_reliability_internals\domain_reliability_internals.js" compress="gzip" type="BINDATA" />
@@ -288,16 +288,6 @@
       <include name="IDR_LOCAL_STATE_HTML" file="resources\local_state\local_state.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
       <include name="IDR_LOCAL_STATE_JS" file="resources\local_state\local_state.js" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
       <include name="IDR_DESKTOP_HATS_HTML" file="resources\hats\hats.html" type="BINDATA" />
-      <include name="IDR_OMNIBOX_HTML" file="resources\omnibox\omnibox.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_CSS" file="resources\omnibox\omnibox.css" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_INPUT_CSS" file="resources\omnibox\omnibox_input.css" type="BINDATA" compress="gzip" />
-      <include name="IDR_OUTPUT_RESULTS_GROUP_CSS" file="resources\omnibox\output_results_group.css" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_OUTPUT_COLUMN_WIDTHS_CSS" file="resources\omnibox\omnibox_output_column_widths.css" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_ELEMENT_JS" file="resources\omnibox\omnibox_element.js" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_INPUT_JS" file="resources\omnibox\omnibox_input.js" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_OUTPUT_JS" file="resources\omnibox\omnibox_output.js" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_JS" file="resources\omnibox\omnibox.js" type="BINDATA" compress="gzip" />
-      <include name="IDR_OMNIBOX_MOJO_JS" file="${root_gen_dir}\chrome\browser\ui\webui\omnibox\omnibox.mojom-lite.js" use_base_dir="false" type="BINDATA" compress="gzip" />
       <include name="IDR_ORIGIN_MOJO_JS" file="${root_gen_dir}\url\mojom\origin.mojom-lite.js" use_base_dir="false" type="BINDATA" compress="gzip"/>
       <include name="IDR_COMPONENTS_HTML" file="resources\components.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" compress="gzip" />
       <include name="IDR_COMPONENTS_JS" file="resources\components.js" type="BINDATA" compress="gzip" />
diff --git a/chrome/browser/chrome_back_forward_cache_browsertest.cc b/chrome/browser/chrome_back_forward_cache_browsertest.cc
new file mode 100644
index 0000000..36041b6
--- /dev/null
+++ b/chrome/browser/chrome_back_forward_cache_browsertest.cc
@@ -0,0 +1,146 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/macros.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "content/public/common/content_features.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_utils.h"
+#include "net/dns/mock_host_resolver.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+
+class ChromeBackForwardCacheBrowserTest : public InProcessBrowserTest {
+ public:
+  ChromeBackForwardCacheBrowserTest() {
+    scoped_feature_list_.InitAndEnableFeatureWithParameters(
+        features::kBackForwardCache,
+        {
+            // Set a very long TTL before expiration (longer than the test
+            // timeout) so tests that are expecting deletion don't pass when
+            // they shouldn't.
+            {"TimeToLiveInBackForwardCacheInSeconds", "3600"},
+        });
+  }
+  ~ChromeBackForwardCacheBrowserTest() override {}
+
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+  }
+
+  // At the chrome layer, an outstanding request to /favicon.ico is made. It is
+  // made by the renderer on behalf of the browser process. It counts as an
+  // outstanding request, which prevents the page from entering the
+  // BackForwardCache, as long as it hasn't resolved.
+  //
+  // There are no real way to wait for this to complete. Not waiting would make
+  // the test potentially flaky. To prevent this, the no-favicon.html page is
+  // used, the image is not loaded from the network.
+  GURL GetURL(const std::string& host) {
+    return embedded_test_server()->GetURL(
+        host, "/back_forward_cache/no-favicon.html");
+  }
+
+ protected:
+  content::WebContents* web_contents() const {
+    return browser()->tab_strip_model()->GetActiveWebContents();
+  }
+
+  content::RenderFrameHost* current_frame_host() {
+    return web_contents()->GetMainFrame();
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  DISALLOW_COPY_AND_ASSIGN(ChromeBackForwardCacheBrowserTest);
+};
+
+IN_PROC_BROWSER_TEST_F(ChromeBackForwardCacheBrowserTest, Basic) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(content::NavigateToURL(web_contents(), GetURL("a.com")));
+  content::RenderFrameHost* rfh_a = current_frame_host();
+  content::RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+  EXPECT_TRUE(content::ExecJs(rfh_a, "token = 'rfh_a'"));
+
+  // 2) Navigate to B.
+  EXPECT_TRUE(content::NavigateToURL(web_contents(), GetURL("b.com")));
+  content::RenderFrameHost* rfh_b = current_frame_host();
+  content::RenderFrameDeletedObserver delete_observer_rfh_b(rfh_b);
+  EXPECT_TRUE(content::ExecJs(rfh_b, "token = 'rfh_b'"));
+
+  // A is frozen in the BackForwardCache.
+  EXPECT_FALSE(delete_observer_rfh_a.deleted());
+
+  // 3) Navigate back.
+  web_contents()->GetController().GoBack();
+  content::WaitForLoadStop(web_contents());
+
+  // A is restored, B is stored.
+  EXPECT_FALSE(delete_observer_rfh_a.deleted());
+  EXPECT_FALSE(delete_observer_rfh_b.deleted());
+
+  EXPECT_EQ("rfh_a", content::EvalJs(rfh_a, "token"));
+
+  // 4) Navigate forward.
+  web_contents()->GetController().GoForward();
+  content::WaitForLoadStop(web_contents());
+
+  // A is stored, B is restored.
+  EXPECT_FALSE(delete_observer_rfh_a.deleted());
+  EXPECT_FALSE(delete_observer_rfh_b.deleted());
+
+  EXPECT_EQ("rfh_b", content::EvalJs(rfh_b, "token"));
+}
+
+IN_PROC_BROWSER_TEST_F(ChromeBackForwardCacheBrowserTest, BasicIframe) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  // 1) Navigate to A.
+  EXPECT_TRUE(content::NavigateToURL(web_contents(), GetURL("a.com")));
+  content::RenderFrameHost* rfh_a = current_frame_host();
+  content::RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
+  EXPECT_TRUE(content::ExecJs(rfh_a, "token = 'rfh_a'"));
+
+  // 2) Add an iframe B.
+  EXPECT_TRUE(content::ExecJs(rfh_a, R"(
+    let url = new URL(location.href);
+    url.hostname = 'b.com';
+    let iframe = document.createElement('iframe');
+    iframe.url = url;
+    document.body.appendChild(iframe);
+  )"));
+  content::WaitForLoadStop(web_contents());
+
+  content::RenderFrameHost* rfh_b = nullptr;
+  for (content::RenderFrameHost* rfh : web_contents()->GetAllFrames()) {
+    if (rfh != rfh_a)
+      rfh_b = rfh;
+  }
+  content::RenderFrameDeletedObserver delete_observer_rfh_b(rfh_b);
+
+  EXPECT_TRUE(content::ExecJs(rfh_a, "token = 'rfh_a'"));
+  EXPECT_TRUE(content::ExecJs(rfh_b, "token = 'rfh_b'"));
+
+  // 2) Navigate to C.
+  EXPECT_TRUE(content::NavigateToURL(web_contents(), GetURL("c.com")));
+
+  // A and B are frozen. The page A(B) is stored in the BackForwardCache.
+  EXPECT_FALSE(delete_observer_rfh_a.deleted());
+  EXPECT_FALSE(delete_observer_rfh_b.deleted());
+
+  // 3) Navigate back.
+  web_contents()->GetController().GoBack();
+  content::WaitForLoadStop(web_contents());
+
+  // The page A(B) is restored.
+  EXPECT_FALSE(delete_observer_rfh_a.deleted());
+  EXPECT_FALSE(delete_observer_rfh_b.deleted());
+  EXPECT_EQ("rfh_a", content::EvalJs(rfh_a, "token"));
+  EXPECT_EQ("rfh_b", content::EvalJs(rfh_b, "token"));
+}
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 2474f7b..d2cf979 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2239,7 +2239,7 @@
 #if defined(OS_CHROMEOS)
   if (ChromeCrashReporterClient::ShouldPassCrashLoopBefore(process_type)) {
     static const char* const kSwitchNames[] = {
-        switches::kCrashLoopBefore,
+        crash_reporter::switches::kCrashLoopBefore,
     };
     command_line->CopySwitchesFrom(browser_command_line, kSwitchNames,
                                    base::size(kSwitchNames));
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 051fa09..7c704a8 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -263,6 +263,7 @@
     "//third_party/blink/public/common",
     "//third_party/cacheinvalidation",
     "//third_party/icu",
+    "//third_party/libipp",
     "//third_party/metrics_proto",
     "//third_party/protobuf:protobuf_lite",
     "//third_party/protobuf:protoc($host_toolchain)",
@@ -1971,6 +1972,10 @@
     "printing/printers_map.h",
     "printing/printers_sync_bridge.cc",
     "printing/printers_sync_bridge.h",
+    "printing/server_printers_fetcher.cc",
+    "printing/server_printers_fetcher.h",
+    "printing/server_printers_provider.cc",
+    "printing/server_printers_provider.h",
     "printing/specifics_translation.cc",
     "printing/specifics_translation.h",
     "printing/synced_printers_manager.cc",
diff --git a/chrome/browser/chromeos/DEPS b/chrome/browser/chromeos/DEPS
index 8aaf75e..f68c057 100644
--- a/chrome/browser/chromeos/DEPS
+++ b/chrome/browser/chromeos/DEPS
@@ -62,4 +62,8 @@
     # for Mash. https://crbug.com/756059
     "+ui/keyboard/keyboard_controller.h",
   ],
+  "server_printers_fetcher\.cc": [
+    # IPP protocol; it is needed for communication with print servers.
+    "+third_party/libipp/libipp/ipp.h",
+  ],
 }
diff --git a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc
index 8593cc0..02b2568 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc
+++ b/chrome/browser/chromeos/arc/input_method_manager/arc_input_method_manager_service.cc
@@ -142,7 +142,6 @@
   }
   void OnCompositionBoundsChanged(
       const std::vector<gfx::Rect>& bounds) override {}
-  bool IsInterestedInKeyEvent() const override { return true; }
   void OnSurroundingTextChanged(const std::string& engine_id,
                                 const std::string& text,
                                 int cursor_pos,
diff --git a/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc b/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc
index 09eacfe..1ebdc2f 100644
--- a/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc
+++ b/chrome/browser/chromeos/arc/input_method_manager/input_connection_impl_unittest.cc
@@ -38,7 +38,6 @@
   void OnDeactivated(const std::string& engine_id) override {}
   void OnCompositionBoundsChanged(
       const std::vector<gfx::Rect>& bounds) override {}
-  bool IsInterestedInKeyEvent() const override { return true; }
   void OnSurroundingTextChanged(const std::string& engine_id,
                                 const std::string& text,
                                 int cursor_pos,
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
index cad1e0a..750b69a 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
@@ -92,7 +92,6 @@
     calls_bitmap_ |= ONFOCUS;
   }
   void OnBlur(int context_id) override { calls_bitmap_ |= ONBLUR; }
-  bool IsInterestedInKeyEvent() const override { return true; }
   void OnKeyEvent(
       const std::string& engine_id,
       const InputMethodEngineBase::KeyboardEvent& event,
diff --git a/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc b/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc
index ccd7410..be57aba2 100644
--- a/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc
+++ b/chrome/browser/chromeos/lock_screen_apps/lock_screen_profile_creator_impl_unittest.cc
@@ -178,8 +178,9 @@
   }
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& path) override {
-    return new TestingProfile(path, NULL);
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
+    return std::make_unique<TestingProfile>(path);
   }
 
   std::unique_ptr<Profile> CreateProfileAsyncHelper(
diff --git a/chrome/browser/chromeos/login/users/user_manager_unittest.cc b/chrome/browser/chromeos/login/users/user_manager_unittest.cc
index e51e1fa..68b8e19 100644
--- a/chrome/browser/chromeos/login/users/user_manager_unittest.cc
+++ b/chrome/browser/chromeos/login/users/user_manager_unittest.cc
@@ -44,12 +44,11 @@
       : ::ProfileManagerWithoutInit(user_data_dir) {}
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& file_path) override {
-    if (!base::PathExists(file_path)) {
-      if (!base::CreateDirectory(file_path))
-        return NULL;
-    }
-    return new TestingProfile(file_path, NULL);
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
+    if (!base::PathExists(path) && !base::CreateDirectory(path))
+      return nullptr;
+    return std::make_unique<TestingProfile>(path);
   }
 };
 
diff --git a/chrome/browser/chromeos/printing/cups_printers_manager.cc b/chrome/browser/chromeos/printing/cups_printers_manager.cc
index 1f6c1aa..844397d 100644
--- a/chrome/browser/chromeos/printing/cups_printers_manager.cc
+++ b/chrome/browser/chromeos/printing/cups_printers_manager.cc
@@ -21,6 +21,7 @@
 #include "chrome/browser/chromeos/printing/printer_event_tracker.h"
 #include "chrome/browser/chromeos/printing/printer_event_tracker_factory.h"
 #include "chrome/browser/chromeos/printing/printers_map.h"
+#include "chrome/browser/chromeos/printing/server_printers_provider.h"
 #include "chrome/browser/chromeos/printing/synced_printers_manager.h"
 #include "chrome/browser/chromeos/printing/synced_printers_manager_factory.h"
 #include "chrome/browser/chromeos/printing/usb_printer_detector.h"
@@ -46,20 +47,19 @@
  public:
   // Identifiers for each of the underlying PrinterDetectors this
   // class observes.
-  enum DetectorIds {
-    kUsbDetector,
-    kZeroconfDetector,
-  };
+  enum DetectorIds { kUsbDetector, kZeroconfDetector, kPrintServerDetector };
 
-  CupsPrintersManagerImpl(SyncedPrintersManager* synced_printers_manager,
-                          std::unique_ptr<PrinterDetector> usb_detector,
-                          std::unique_ptr<PrinterDetector> zeroconf_detector,
-                          scoped_refptr<PpdProvider> ppd_provider,
-                          std::unique_ptr<PrinterConfigurer> printer_configurer,
-                          std::unique_ptr<UsbPrinterNotificationController>
-                              usb_notification_controller,
-                          PrinterEventTracker* event_tracker,
-                          PrefService* pref_service)
+  CupsPrintersManagerImpl(
+      SyncedPrintersManager* synced_printers_manager,
+      std::unique_ptr<PrinterDetector> usb_detector,
+      std::unique_ptr<PrinterDetector> zeroconf_detector,
+      scoped_refptr<PpdProvider> ppd_provider,
+      std::unique_ptr<PrinterConfigurer> printer_configurer,
+      std::unique_ptr<UsbPrinterNotificationController>
+          usb_notification_controller,
+      std::unique_ptr<ServerPrintersProvider> server_printers_provider,
+      PrinterEventTracker* event_tracker,
+      PrefService* pref_service)
       : synced_printers_manager_(synced_printers_manager),
         synced_printers_manager_observer_(this),
         usb_detector_(std::move(usb_detector)),
@@ -69,6 +69,7 @@
         auto_usb_printer_configurer_(std::move(printer_configurer),
                                      this,
                                      usb_notification_controller_.get()),
+        server_printers_provider_(std::move(server_printers_provider)),
         event_tracker_(event_tracker) {
     // Add the |auto_usb_printer_configurer_| as an observer.
     AddObserver(&auto_usb_printer_configurer_);
@@ -102,6 +103,10 @@
                             weak_ptr_factory_.GetWeakPtr(), kZeroconfDetector));
     OnPrintersFound(kZeroconfDetector, zeroconf_detector_->GetPrinters());
 
+    server_printers_provider_->RegisterPrintersFoundCallback(
+        base::BindRepeating(&CupsPrintersManagerImpl::OnPrintersUpdated,
+                            weak_ptr_factory_.GetWeakPtr()));
+
     native_printers_allowed_.Init(prefs::kUserNativePrintersAllowed,
                                   pref_service);
     send_username_and_filename_.Init(
@@ -267,10 +272,19 @@
       case kZeroconfDetector:
         zeroconf_detections_ = printers;
         break;
+      case kPrintServerDetector:
+        servers_detections_ = printers;
+        break;
     }
     RebuildDetectedLists();
   }
 
+  // Callback for ServerPrintersProvider.
+  void OnPrintersUpdated(bool complete) {
+    OnPrintersFound(kPrintServerDetector,
+                    server_printers_provider_->GetPrinters());
+  }
+
  private:
   base::Optional<Printer> GetEnterprisePrinter(const std::string& id) const {
     return printers_.Get(PrinterClass::kEnterprise, id);
@@ -444,6 +458,7 @@
     ResetNearbyPrintersLists();
     AddDetectedList(usb_detections_);
     AddDetectedList(zeroconf_detections_);
+    AddDetectedList(servers_detections_);
     NotifyObservers({PrinterClass::kAutomatic, PrinterClass::kDiscovered});
   }
 
@@ -483,6 +498,7 @@
   // Source lists for detected printers.
   std::vector<PrinterDetector::DetectedPrinter> usb_detections_;
   std::vector<PrinterDetector::DetectedPrinter> zeroconf_detections_;
+  std::vector<PrinterDetector::DetectedPrinter> servers_detections_;
 
   // Not owned.
   SyncedPrintersManager* const synced_printers_manager_;
@@ -504,6 +520,8 @@
 
   AutomaticUsbPrinterConfigurer auto_usb_printer_configurer_;
 
+  std::unique_ptr<ServerPrintersProvider> server_printers_provider_;
+
   // Not owned
   PrinterEventTracker* const event_tracker_;
 
@@ -545,6 +563,7 @@
       UsbPrinterDetector::Create(), ZeroconfPrinterDetector::Create(),
       CreatePpdProvider(profile), PrinterConfigurer::Create(profile),
       UsbPrinterNotificationController::Create(profile),
+      ServerPrintersProvider::Create(profile),
       PrinterEventTrackerFactory::GetInstance()->GetForBrowserContext(profile),
       profile->GetPrefs());
 }
@@ -558,13 +577,14 @@
     std::unique_ptr<PrinterConfigurer> printer_configurer,
     std::unique_ptr<UsbPrinterNotificationController>
         usb_notification_controller,
+    std::unique_ptr<ServerPrintersProvider> server_printers_provider,
     PrinterEventTracker* event_tracker,
     PrefService* pref_service) {
   return std::make_unique<CupsPrintersManagerImpl>(
       synced_printers_manager, std::move(usb_detector),
       std::move(zeroconf_detector), std::move(ppd_provider),
       std::move(printer_configurer), std::move(usb_notification_controller),
-      event_tracker, pref_service);
+      std::move(server_printers_provider), event_tracker, pref_service);
 }
 
 // static
diff --git a/chrome/browser/chromeos/printing/cups_printers_manager.h b/chrome/browser/chromeos/printing/cups_printers_manager.h
index e10d17f4..c59d51a 100644
--- a/chrome/browser/chromeos/printing/cups_printers_manager.h
+++ b/chrome/browser/chromeos/printing/cups_printers_manager.h
@@ -26,6 +26,7 @@
 class PrinterConfigurer;
 class PrinterDetector;
 class PrinterEventTracker;
+class ServerPrintersProvider;
 class SyncedPrintersManager;
 class UsbPrinterNotificationController;
 
@@ -63,6 +64,7 @@
       std::unique_ptr<PrinterConfigurer> printer_configurer,
       std::unique_ptr<UsbPrinterNotificationController>
           usb_notification_controller,
+      std::unique_ptr<ServerPrintersProvider> server_printers_provider,
       PrinterEventTracker* event_tracker,
       PrefService* pref_service);
 
diff --git a/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc b/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc
index 52f8965..6855ed8 100644
--- a/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc
+++ b/chrome/browser/chromeos/printing/cups_printers_manager_unittest.cc
@@ -21,6 +21,7 @@
 #include "chrome/browser/chromeos/printing/printer_configurer.h"
 #include "chrome/browser/chromeos/printing/printer_event_tracker.h"
 #include "chrome/browser/chromeos/printing/printers_map.h"
+#include "chrome/browser/chromeos/printing/server_printers_provider.h"
 #include "chrome/browser/chromeos/printing/synced_printers_manager.h"
 #include "chrome/browser/chromeos/printing/usb_printer_detector.h"
 #include "chrome/browser/chromeos/printing/usb_printer_notification_controller.h"
@@ -334,6 +335,19 @@
   base::flat_set<std::string> configuration_notifications_;
 };
 
+class FakeServerPrintersProvider : public ServerPrintersProvider {
+ public:
+  FakeServerPrintersProvider() = default;
+  ~FakeServerPrintersProvider() override = default;
+
+  void RegisterPrintersFoundCallback(OnPrintersUpdateCallback cb) override {}
+
+  std::vector<PrinterDetector::DetectedPrinter> GetPrinters() override {
+    std::vector<PrinterDetector::DetectedPrinter> printers;
+    return printers;
+  }
+};
+
 class CupsPrintersManagerTest : public testing::Test,
                                 public CupsPrintersManager::Observer {
  public:
@@ -351,6 +365,9 @@
     auto usb_notif_controller =
         std::make_unique<FakeUsbPrinterNotificationController>();
     usb_notif_controller_ = usb_notif_controller.get();
+    auto server_printers_provider =
+        std::make_unique<FakeServerPrintersProvider>();
+    server_printers_provider_ = server_printers_provider.get();
 
     // Register the pref |UserNativePrintersAllowed|
     CupsPrintersManager::RegisterProfilePrefs(pref_service_.registry());
@@ -359,7 +376,7 @@
         &synced_printers_manager_, std::move(usb_detector),
         std::move(zeroconf_detector), ppd_provider_,
         std::move(printer_configurer), std::move(usb_notif_controller),
-        &event_tracker_, &pref_service_);
+        std::move(server_printers_provider), &event_tracker_, &pref_service_);
     manager_->AddObserver(this);
   }
 
@@ -399,6 +416,7 @@
   FakePrinterDetector* zeroconf_detector_;     // Not owned.
   FakePrinterConfigurer* printer_configurer_;  // Not owned.
   FakeUsbPrinterNotificationController* usb_notif_controller_;  // Not owned.
+  FakeServerPrintersProvider* server_printers_provider_;        // Not owned.
   scoped_refptr<FakePpdProvider> ppd_provider_;
 
   // This is unused, it's just here for memory ownership.
diff --git a/chrome/browser/chromeos/printing/server_printers_fetcher.cc b/chrome/browser/chromeos/printing/server_printers_fetcher.cc
new file mode 100644
index 0000000..3b42e0f8
--- /dev/null
+++ b/chrome/browser/chromeos/printing/server_printers_fetcher.cc
@@ -0,0 +1,214 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/printing/server_printers_fetcher.h"
+
+#include <string>
+
+#include "base/hash/md5.h"
+#include "base/memory/scoped_refptr.h"
+#include "base/sequence_checker.h"
+#include "base/sequenced_task_runner.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/task/post_task.h"
+#include "base/task/task_traits.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/net/system_network_context_manager.h"
+#include "net/base/load_flags.h"
+#include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/cpp/simple_url_loader.h"
+#include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
+#include "third_party/libipp/libipp/ipp.h"
+#include "url/gurl.h"
+
+namespace chromeos {
+
+namespace {
+
+std::string ServerPrinterId(const std::string& url) {
+  base::MD5Context ctx;
+  base::MD5Init(&ctx);
+  base::MD5Update(&ctx, url);
+  base::MD5Digest digest;
+  base::MD5Final(&digest, &ctx);
+  return "server-" + base::MD5DigestToBase16(digest);
+}
+
+}  // namespace
+
+class ServerPrintersFetcher::PrivateImplementation
+    : public network::SimpleURLLoaderStreamConsumer {
+ public:
+  PrivateImplementation(const ServerPrintersFetcher* owner,
+                        const GURL& server_url,
+                        ServerPrintersFetcher::OnPrintersFetchedCallback cb)
+      : owner_(owner),
+        server_url_(server_url),
+        callback_(std::move(cb)),
+        task_runner_(base::CreateSequencedTaskRunner(
+            {base::ThreadPool(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {
+    DETACH_FROM_SEQUENCE(sequence_checker_);
+    CHECK(base::SequencedTaskRunnerHandle::IsSet());
+    task_runner_for_callback_ = base::SequencedTaskRunnerHandle::Get();
+    // Post task to execute.
+    task_runner_->PostTask(FROM_HERE,
+                           base::BindOnce(&PrivateImplementation::SendQuery,
+                                          base::Unretained(this)));
+  }
+
+  ~PrivateImplementation() override = default;
+
+  // Schedule the given object for deletion. May be called from any
+  // sequence/thread.
+  void Delete() { task_runner_->DeleteSoon(FROM_HERE, this); }
+
+  // Implementation of network::SimpleURLLoaderStreamConsumer.
+  void OnDataReceived(base::StringPiece part_of_payload,
+                      base::OnceClosure resume) override {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    response_.append(part_of_payload.begin(), part_of_payload.end());
+    std::move(resume).Run();
+  }
+
+  // Implementation of network::SimpleURLLoaderStreamConsumer.
+  void OnComplete(bool success) override {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    if (!success) {
+      // Some error occurred. Call the callback with an empty vector.
+      PostResponse({});
+      return;
+    }
+    // Try to parse the response.
+    std::vector<uint8_t> data(response_.begin(), response_.end());
+    ipp::Client client;
+    ipp::Response_CUPS_Get_Printers response;
+    if (!client.ReadResponseFrameFrom(data) ||
+        !client.ParseResponseAndSaveTo(&response)) {
+      // Parser has failed. Dump errors to the log.
+      std::string message = "Cannot parse response from the print server " +
+                            server_url_.spec() + ". Parser log:";
+      for (const auto& entry : client.GetErrorLog()) {
+        message += "\n * " + entry.message;
+      }
+      LOG(WARNING) << message;
+      // Call the callback with an empty vector and exit.
+      PostResponse({});
+      return;
+    }
+    // The response parsed successfully. Retrieve the list of printers.
+    std::vector<PrinterDetector::DetectedPrinter> printers(
+        response.printer_attributes.GetSize());
+    for (size_t i = 0; i < printers.size(); ++i) {
+      const std::string& name =
+          response.printer_attributes[i].printer_name.Get().value;
+      InitializePrinter(&(printers[i].printer), name);
+    }
+    // Call the callback with queried printers.
+    PostResponse(std::move(printers));
+  }
+
+  // Implementation of network::SimpleURLLoaderStreamConsumer.
+  void OnRetry(base::OnceClosure start_retry) override {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    response_.clear();
+    std::move(start_retry).Run();
+  }
+
+ private:
+  // The main task. It is scheduled in the constructor.
+  void SendQuery() {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+    // Preparation of the IPP frame.
+    ipp::Request_CUPS_Get_Printers request;
+    request.operation_attributes.requested_attributes.Set(
+        {ipp::E_requested_attributes::printer_description});
+    ipp::Client client;
+    client.BuildRequestFrom(&request);
+    std::vector<uint8_t> request_frame;
+    client.WriteRequestFrameTo(&request_frame);
+
+    // Send request.
+    auto resource_request = std::make_unique<network::ResourceRequest>();
+    resource_request->url = server_url_;
+    resource_request->method = "POST";
+    resource_request->headers.SetHeader(net::HttpRequestHeaders::kContentType,
+                                        "application/ipp");
+    resource_request->load_flags =
+        net::LOAD_BYPASS_CACHE | net::LOAD_DISABLE_CACHE |
+        net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES;
+    resource_request->request_body =
+        network::ResourceRequestBody::CreateFromBytes(
+            reinterpret_cast<char*>(request_frame.data()),
+            request_frame.size());
+    // TODO(pawliczek): create a traffic annotation for printing network traffic
+    simple_url_loader_ = network::SimpleURLLoader::Create(
+        std::move(resource_request), MISSING_TRAFFIC_ANNOTATION);
+    network::mojom::URLLoaderFactory* loader_factory =
+        g_browser_process->system_network_context_manager()
+            ->GetURLLoaderFactory();
+    simple_url_loader_->DownloadAsStream(loader_factory, this);
+  }
+
+  // Posts a response with a list of printers.
+  void PostResponse(std::vector<PrinterDetector::DetectedPrinter>&& printers) {
+    task_runner_for_callback_->PostNonNestableTask(
+        FROM_HERE, base::BindOnce(callback_, owner_, server_url_, printers));
+  }
+
+  // Set an object |printer| to represent a server printer with a name |name|.
+  // The printer is provided by the current print server.
+  void InitializePrinter(Printer* printer, const std::string& name) {
+    // All server printers are configured with IPP Everywhere.
+    printer->mutable_ppd_reference()->autoconf = true;
+
+    // As a display name we use the name fetched from the print server.
+    printer->set_display_name(name);
+
+    // Build printer's URL: we have to convert http/https to ipp/ipps because
+    // some third-party components require ipp schema. E.g.:
+    // * http://myprinter:123/abc =>  ipp://myprinter:123/abc
+    // * http://myprinter/abc     =>  ipp://myprinter:80/abc
+    // * https://myprinter/abc    =>  ipps://myprinter:443/abc
+    std::string url = "ipp";
+    if (server_url_.SchemeIs("https"))
+      url += "s";
+    url += "://";
+    url += server_url_.HostNoBrackets();
+    url += ":";
+    url += base::NumberToString(server_url_.EffectiveIntPort());
+    url += "/printers/" + name;
+    printer->set_uri(url);
+    printer->set_id(ServerPrinterId(url));
+  }
+
+  const ServerPrintersFetcher* owner_;
+  const GURL server_url_;
+
+  scoped_refptr<base::SequencedTaskRunner> task_runner_for_callback_;
+  ServerPrintersFetcher::OnPrintersFetchedCallback callback_;
+
+  // Raw payload of the HTTP response.
+  std::string response_;
+
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+
+  std::unique_ptr<network::SimpleURLLoader> simple_url_loader_;
+  SEQUENCE_CHECKER(sequence_checker_);
+  DISALLOW_COPY_AND_ASSIGN(PrivateImplementation);
+};
+
+ServerPrintersFetcher::ServerPrintersFetcher(const GURL& server_url,
+                                             OnPrintersFetchedCallback cb)
+    : pim_(new PrivateImplementation(this, server_url, std::move(cb)),
+           PimDeleter()) {}
+
+void ServerPrintersFetcher::PimDeleter::operator()(
+    PrivateImplementation* pim) const {
+  pim->Delete();
+}
+
+ServerPrintersFetcher::~ServerPrintersFetcher() = default;
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/server_printers_fetcher.h b/chrome/browser/chromeos/printing/server_printers_fetcher.h
new file mode 100644
index 0000000..d7963ad
--- /dev/null
+++ b/chrome/browser/chromeos/printing/server_printers_fetcher.h
@@ -0,0 +1,53 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_PRINTING_SERVER_PRINTERS_FETCHER_H_
+#define CHROME_BROWSER_CHROMEOS_PRINTING_SERVER_PRINTERS_FETCHER_H_
+
+#include <memory>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/macros.h"
+#include "chrome/browser/chromeos/printing/printer_detector.h"
+
+class GURL;
+
+namespace chromeos {
+
+// Instances of this class are used to query list of available printers from
+// given print server. The constructor posts to an internal task runner
+// a procedure responsible for building and sending the query request. When the
+// response is obtained and parsed, the callback passed as a constructor's
+// parameter is posted on the same sequence that constructor was called from.
+// The object can be safely destroyed during query execution and on any
+// sequence/thread.
+class ServerPrintersFetcher {
+ public:
+  // The callback: |sender| is a pointer to the object calling the callback,
+  // |printers| is a list of queried printers.
+  using OnPrintersFetchedCallback = base::RepeatingCallback<void(
+      const ServerPrintersFetcher* sender,
+      const GURL& server_url,
+      std::vector<PrinterDetector::DetectedPrinter>&& printers)>;
+
+  ServerPrintersFetcher(const GURL& server_url, OnPrintersFetchedCallback cb);
+  virtual ~ServerPrintersFetcher();
+
+ private:
+  // Forward declaration of a type of an internal object.
+  class PrivateImplementation;
+  // Deleter of the internal object (called when unique_ptr is deleted).
+  struct PimDeleter {
+    void operator()(PrivateImplementation* pim) const;
+  };
+  // Internal object.
+  std::unique_ptr<PrivateImplementation, PimDeleter> pim_;
+
+  DISALLOW_COPY_AND_ASSIGN(ServerPrintersFetcher);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_PRINTING_SERVER_PRINTERS_FETCHER_H_
diff --git a/chrome/browser/chromeos/printing/server_printers_provider.cc b/chrome/browser/chromeos/printing/server_printers_provider.cc
new file mode 100644
index 0000000..c8f51f5
--- /dev/null
+++ b/chrome/browser/chromeos/printing/server_printers_provider.cc
@@ -0,0 +1,177 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/printing/server_printers_provider.h"
+
+#include <map>
+#include <memory>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/sequenced_task_runner.h"
+#include "base/stl_util.h"
+#include "base/task/post_task.h"
+#include "chrome/browser/chromeos/printing/print_server.h"
+#include "chrome/browser/chromeos/printing/print_servers_provider.h"
+#include "chrome/browser/chromeos/printing/print_servers_provider_factory.h"
+#include "chrome/browser/chromeos/printing/server_printers_fetcher.h"
+#include "chrome/browser/profiles/profile.h"
+#include "url/gurl.h"
+
+namespace chromeos {
+
+namespace {
+
+// Internal structure representing print server.
+struct PrintServerWithPrinters {
+  explicit PrintServerWithPrinters(const PrintServer& ps) : server(ps) {}
+
+  PrintServer server;
+  std::vector<PrinterDetector::DetectedPrinter> printers;  // queried printers
+};
+
+class ServerPrintersProviderImpl
+    : public ServerPrintersProvider,
+      public PrintServersProvider::Observer,
+      public base::SupportsWeakPtr<ServerPrintersProviderImpl> {
+ public:
+  explicit ServerPrintersProviderImpl(Profile* profile)
+      : servers_provider_(
+            PrintServersProviderFactory::Get()->GetForProfile(profile)) {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    servers_provider_->AddObserver(this);
+  }
+
+  ~ServerPrintersProviderImpl() override {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    servers_provider_->RemoveObserver(this);
+  }
+
+  void RegisterPrintersFoundCallback(OnPrintersUpdateCallback cb) override {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    callback_ = std::move(cb);
+  }
+
+  std::vector<PrinterDetector::DetectedPrinter> GetPrinters() override {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    std::vector<PrinterDetector::DetectedPrinter> printers;
+    for (auto& server : servers_) {
+      printers.insert(printers.end(), server.second.printers.begin(),
+                      server.second.printers.end());
+    }
+    return printers;
+  }
+
+  // PrintServersProvider::Observer implementation.
+  void OnServersChanged(bool servers_are_complete,
+                        const std::vector<PrintServer>& servers) override {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    // Save previous state.
+    const bool previous_complete = IsComplete();
+    // Initialize new state.
+    servers_are_complete_ = servers_are_complete;
+    // Fill new map with new servers and compare with the old map.
+    std::map<GURL, PrintServerWithPrinters> new_servers;
+    for (const auto& server : servers) {
+      const GURL& url = server.GetUrl();
+      auto it_new = new_servers.emplace(url, server).first;
+      auto it_old = servers_.find(url);
+      if (it_old != servers_.end()) {
+        // This server already exists: copy content and erase it from the
+        // old map.
+        it_new->second.printers = std::move(it_old->second.printers);
+        servers_.erase(it_old);
+      } else {
+        // This is a new print server: query for printers.
+        fetchers_.emplace(
+            url, std::make_unique<ServerPrintersFetcher>(
+                     url, base::BindRepeating(
+                              &ServerPrintersProviderImpl::OnPrintersFetched,
+                              weak_ptr_factory_.GetWeakPtr())));
+      }
+    }
+    // The rest of servers in the old map are going to be deleted.
+    // Check if there are any server printers or fetchers to delete.
+    bool change_in_printers = false;
+    for (const auto& server : servers_) {
+      if (!server.second.printers.empty()) {
+        change_in_printers = true;
+      }
+      fetchers_.erase(server.first);
+    }
+    // Replace the old map of servers with the new one.
+    servers_ = std::move(new_servers);
+    // Notify the observer if something changed.
+    if (callback_) {
+      const bool current_complete = IsComplete();
+      if (change_in_printers || (previous_complete != current_complete)) {
+        callback_.Run(current_complete);
+      }
+    }
+  }
+
+  // A callback from ServerPrintersFetcher.
+  void OnPrintersFetched(
+      const ServerPrintersFetcher* sender,
+      const GURL& server_url,
+      std::vector<PrinterDetector::DetectedPrinter>&& printers) {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    const bool previous_complete = IsComplete();
+    auto it = fetchers_.find(server_url);
+    // Do nothing if the fetcher is obsolete.
+    if (it == fetchers_.end() || it->second.get() != sender) {
+      return;
+    }
+    // Remove the fetcher from the list.
+    fetchers_.erase(it);
+    // When old and new printers are empty and there is no change in
+    // completeness status we leave here.
+    DCHECK(base::Contains(servers_, server_url));
+    if (servers_.at(server_url).printers.empty() && printers.empty() &&
+        previous_complete == IsComplete()) {
+      return;
+    }
+    // Save printers.
+    servers_.at(server_url).printers = printers;
+    // Notify the observer.
+    if (callback_) {
+      callback_.Run(IsComplete());
+    }
+  }
+
+ private:
+  // Returns true <=> all policies have been parsed and applied and all servers
+  // have been queried (even when some errors occurred).
+  bool IsComplete() const {
+    return (servers_are_complete_ && fetchers_.empty());
+  }
+
+  // A callback to propagate update of the resultant list of server printers.
+  OnPrintersUpdateCallback callback_;
+
+  // True <=> the list of print servers is complete.
+  bool servers_are_complete_ = false;
+
+  // All print servers (with printers).
+  std::map<GURL, PrintServerWithPrinters> servers_;
+
+  // URLs that are being queried now with corresponding fetcher objects.
+  std::map<GURL, std::unique_ptr<ServerPrintersFetcher>> fetchers_;
+
+  base::WeakPtr<PrintServersProvider> servers_provider_;
+  SEQUENCE_CHECKER(sequence_checker_);
+  base::WeakPtrFactory<ServerPrintersProviderImpl> weak_ptr_factory_{this};
+  DISALLOW_COPY_AND_ASSIGN(ServerPrintersProviderImpl);
+};
+
+}  // namespace
+
+// static
+std::unique_ptr<ServerPrintersProvider> ServerPrintersProvider::Create(
+    Profile* profile) {
+  return std::make_unique<ServerPrintersProviderImpl>(profile);
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/printing/server_printers_provider.h b/chrome/browser/chromeos/printing/server_printers_provider.h
new file mode 100644
index 0000000..98c2333
--- /dev/null
+++ b/chrome/browser/chromeos/printing/server_printers_provider.h
@@ -0,0 +1,48 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_PRINTING_SERVER_PRINTERS_PROVIDER_H_
+#define CHROME_BROWSER_CHROMEOS_PRINTING_SERVER_PRINTERS_PROVIDER_H_
+
+#include <memory>
+#include <vector>
+
+#include "base/macros.h"
+#include "chrome/browser/chromeos/printing/printer_detector.h"
+
+class Profile;
+
+namespace chromeos {
+
+// Uses classes PrintServersProvider and ServerPrintersFetcher to track list of
+// external print servers and printers exposed by them. These printers are
+// called server printers. All changes in the final list of available server
+// printers are signaled through a callback registered with the method
+// RegisterPrintersFoundCallback(...). All methods must be called from the UI
+// sequence, the callback is also called from this sequence.
+class ServerPrintersProvider {
+ public:
+  // |profile| is a user profile, it cannot be nullptr.
+  static std::unique_ptr<ServerPrintersProvider> Create(Profile* profile);
+  virtual ~ServerPrintersProvider() = default;
+
+  using OnPrintersUpdateCallback = base::RepeatingCallback<void(bool complete)>;
+
+  // Register a callback to call. If there is already a callback registered, it
+  // will be replaced by the new one. You may also set an empty callback to
+  // unregister the current one.
+  virtual void RegisterPrintersFoundCallback(OnPrintersUpdateCallback cb) = 0;
+
+  virtual std::vector<PrinterDetector::DetectedPrinter> GetPrinters() = 0;
+
+ protected:
+  ServerPrintersProvider() = default;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ServerPrintersProvider);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_PRINTING_SERVER_PRINTERS_PROVIDER_H_
diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
index d34abfa..3564def 100644
--- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
+++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc
@@ -227,9 +227,8 @@
 }
 
 std::string ChromeDevToolsManagerDelegate::GetDiscoveryPageHTML() {
-  return ui::ResourceBundle::GetSharedInstance()
-      .GetRawDataResource(IDR_DEVTOOLS_DISCOVERY_PAGE_HTML)
-      .as_string();
+  return ui::ResourceBundle::GetSharedInstance().DecompressDataResource(
+      IDR_DEVTOOLS_DISCOVERY_PAGE_HTML);
 }
 
 std::vector<content::BrowserContext*>
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.cc b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
index f4157fa..573d7eb 100644
--- a/chrome/browser/extensions/api/input_ime/input_ime_api.cc
+++ b/chrome/browser/extensions/api/input_ime/input_ime_api.cc
@@ -154,10 +154,6 @@
 void ImeObserver::OnCompositionBoundsChanged(
     const std::vector<gfx::Rect>& bounds) {}
 
-bool ImeObserver::IsInterestedInKeyEvent() const {
-  return ShouldForwardKeyEvent();
-}
-
 void ImeObserver::OnSurroundingTextChanged(const std::string& component_id,
                                            const std::string& text,
                                            int cursor_pos,
diff --git a/chrome/browser/extensions/api/input_ime/input_ime_api.h b/chrome/browser/extensions/api/input_ime/input_ime_api.h
index 549523b..30e8382 100644
--- a/chrome/browser/extensions/api/input_ime/input_ime_api.h
+++ b/chrome/browser/extensions/api/input_ime/input_ime_api.h
@@ -58,7 +58,6 @@
   void OnDeactivated(const std::string& component_id) override;
   void OnCompositionBoundsChanged(
       const std::vector<gfx::Rect>& bounds) override;
-  bool IsInterestedInKeyEvent() const override;
   void OnSurroundingTextChanged(const std::string& component_id,
                                 const std::string& text,
                                 int cursor_pos,
diff --git a/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc b/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
index 72e7569..4b4a28ad 100644
--- a/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
+++ b/chrome/browser/extensions/api/virtual_keyboard_private/chrome_virtual_keyboard_delegate.cc
@@ -257,7 +257,7 @@
 
   base::RecordAction(base::UserMetricsAction("OpenLanguageOptionsDialog"));
   chrome::ShowSettingsSubPageForProfile(ProfileManager::GetActiveUserProfile(),
-                                        chrome::kLanguageOptionsSubPage);
+                                        chrome::kLanguageSubPage);
   return true;
 }
 
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc
index 553304b..8e9b385 100644
--- a/chrome/browser/extensions/service_worker_apitest.cc
+++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -1621,6 +1621,7 @@
   }
 
   void OnDestruct(content::ServiceWorkerContext* context) override {
+    context_->RemoveObserver(this);
     context_ = nullptr;
   }
 
diff --git a/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc b/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc
index 334f0a4..b2d850b 100644
--- a/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc
+++ b/chrome/browser/media/webrtc/tab_desktop_media_list_unittest.cc
@@ -39,8 +39,8 @@
 
 namespace {
 
-static const int kDefaultSourceCount = 2;
-static const int kThumbnailSize = 50;
+constexpr int kDefaultSourceCount = 2;
+constexpr int kThumbnailSize = 50;
 
 class UnittestProfileManager : public ::ProfileManagerWithoutInit {
  public:
@@ -48,12 +48,11 @@
       : ::ProfileManagerWithoutInit(user_data_dir) {}
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& file_path) override {
-    if (!base::PathExists(file_path)) {
-      if (!base::CreateDirectory(file_path))
-        return NULL;
-    }
-    return new TestingProfile(file_path, NULL);
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
+    if (!base::PathExists(path) && !base::CreateDirectory(path))
+      return nullptr;
+    return std::make_unique<TestingProfile>(path);
   }
 };
 
diff --git a/chrome/browser/permissions/permission_request_manager.cc b/chrome/browser/permissions/permission_request_manager.cc
index 2418f97..4a94f59 100644
--- a/chrome/browser/permissions/permission_request_manager.cc
+++ b/chrome/browser/permissions/permission_request_manager.cc
@@ -24,6 +24,7 @@
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
 #include "components/url_formatter/elide_url.h"
+#include "content/public/browser/back_forward_cache.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_handle.h"
@@ -185,6 +186,20 @@
     return;
   }
 
+  if (!queued_requests_.empty() || !requests_.empty()) {
+    // |queued_requests_| and |requests_| will be deleted below, which
+    // might be a problem for back-forward cache — the page might be restored
+    // later, but the requests won't be.
+    // Disable bfcache here if we have any requests here to prevent this
+    // from happening.
+    web_contents()
+        ->GetController()
+        .GetBackForwardCache()
+        .DisableForRenderFrameHost(
+            navigation_handle->GetPreviousRenderFrameHostId(),
+            "PermissionRequestManager");
+  }
+
   CleanUpRequests();
   main_frame_has_fully_loaded_ = false;
 }
diff --git a/chrome/browser/permissions/permission_request_manager_browsertest.cc b/chrome/browser/permissions/permission_request_manager_browsertest.cc
index 9ba24b9..0adf3ce 100644
--- a/chrome/browser/permissions/permission_request_manager_browsertest.cc
+++ b/chrome/browser/permissions/permission_request_manager_browsertest.cc
@@ -34,6 +34,7 @@
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
+#include "content/public/test/back_forward_cache_util.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "content/public/test/test_utils.h"
@@ -662,6 +663,30 @@
   EXPECT_EQ(1, bubble_factory()->TotalRequestCount());
 }
 
+IN_PROC_BROWSER_TEST_F(PermissionRequestManagerBrowserTest,
+                       PendingRequestsDisableBackForwardCache) {
+  content::BackForwardCacheDisabledTester back_forward_cache_tester;
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
+      browser(),
+      embedded_test_server()->GetURL(
+          "/permissions/requests-before-after-load.html"),
+      1);
+  bubble_factory()->WaitForPermissionBubble();
+
+  content::RenderFrameHost* main_frame =
+      browser()->tab_strip_model()->GetActiveWebContents()->GetMainFrame();
+  int main_frame_process_id = main_frame->GetProcess()->GetID();
+  int main_frame_routing_id = main_frame->GetRoutingID();
+
+  ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
+      browser(), embedded_test_server()->GetURL("b.com", "/title1.html"), 1);
+  EXPECT_TRUE(back_forward_cache_tester.IsDisabledForFrameWithReason(
+      main_frame_process_id, main_frame_routing_id,
+      "PermissionRequestManager"));
+}
+
 // Test bubbles showing when tabs move between windows. Simulates a situation
 // that could result in permission bubbles not being dismissed, and a problem
 // referencing a temporary drag window. See http://crbug.com/754552.
diff --git a/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc b/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc
index 72258d6..941e60c 100644
--- a/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc
+++ b/chrome/browser/previews/previews_lite_page_redirect_browsertest.cc
@@ -1341,17 +1341,6 @@
   }
 
   {
-    // Verify the preview is not triggered when the server responds with 403.
-    base::HistogramTester histogram_tester;
-    ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kAuthFailure));
-    VerifyPreviewNotLoaded();
-    ClearDeciderState();
-    histogram_tester.ExpectBucketCount(
-        "Previews.ServerLitePage.ServerResponse",
-        previews::LitePageRedirectServerResponse::kAuthFailure, 1);
-  }
-
-  {
     // Verify the preview is not triggered when the server responds with 503.
     base::HistogramTester histogram_tester;
     ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kLoadshed));
@@ -1363,6 +1352,27 @@
   }
 }
 
+IN_PROC_BROWSER_TEST_P(
+    PreviewsLitePageRedirectServerBrowserTest,
+    DISABLE_ON_WIN_MAC_CHROMESOS(LitePagePreviewsAuthFailure)) {
+  // Verify the preview is not triggered when the server responds with 403.
+  base::HistogramTester histogram_tester;
+  ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kAuthFailure));
+  VerifyPreviewNotLoaded();
+  ClearDeciderState();
+  histogram_tester.ExpectBucketCount(
+      "Previews.ServerLitePage.ServerResponse",
+      previews::LitePageRedirectServerResponse::kAuthFailure, 1);
+
+  // DRP config is invalid, a subsequent preview page load should fail.
+  ui_test_utils::NavigateToURL(browser(), HttpsLitePageURL(kSuccess));
+  VerifyPreviewNotLoaded();
+
+  histogram_tester.ExpectBucketCount(
+      "Previews.ServerLitePage.IneligibleReasons",
+      previews::LitePageRedirectIneligibleReason::kInvalidProxyHeaders, 1);
+}
+
 IN_PROC_BROWSER_TEST_P(PreviewsLitePageRedirectServerBrowserTest,
                        DISABLE_ON_WIN_MAC_CHROMESOS(LitePagePreviewsLoadshed)) {
   PreviewsService* previews_service =
diff --git a/chrome/browser/previews/previews_lite_page_redirect_serving_url_loader.cc b/chrome/browser/previews/previews_lite_page_redirect_serving_url_loader.cc
index c07a4ad..1b3d1b1 100644
--- a/chrome/browser/previews/previews_lite_page_redirect_serving_url_loader.cc
+++ b/chrome/browser/previews/previews_lite_page_redirect_serving_url_loader.cc
@@ -20,11 +20,15 @@
 #include "base/task/task_traits.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
+#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings.h"
+#include "chrome/browser/data_reduction_proxy/data_reduction_proxy_chrome_settings_factory.h"
 #include "chrome/browser/previews/previews_lite_page_redirect_decider.h"
 #include "chrome/browser/previews/previews_lite_page_redirect_url_loader_interceptor.h"
 #include "chrome/browser/previews/previews_service.h"
 #include "chrome/browser/previews/previews_service_factory.h"
 #include "chrome/browser/profiles/profile.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h"
 #include "components/previews/core/previews_experiments.h"
 #include "components/previews/core/previews_lite_page_redirect.h"
@@ -114,6 +118,35 @@
                      original_bytes, std::move(host), frame_tree_node_id));
 }
 
+void InvalidateDRPConfigOnUIThread(int frame_tree_node_id) {
+  auto* web_contents =
+      content::WebContents::FromFrameTreeNodeId(frame_tree_node_id);
+  // If the WebContents has been closed this may be null.
+  if (!web_contents)
+    return;
+
+  DataReductionProxyChromeSettings* drp_settings =
+      DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
+          web_contents->GetBrowserContext());
+
+  if (!drp_settings)
+    return;
+  if (!drp_settings->data_reduction_proxy_service())
+    return;
+  if (!drp_settings->data_reduction_proxy_service()->config_client())
+    return;
+
+  drp_settings->data_reduction_proxy_service()
+      ->config_client()
+      ->InvalidateAndRetrieveNewConfig();
+}
+
+void InvalidateDRPConfig(int frame_tree_node_id) {
+  base::PostTask(
+      FROM_HERE, {content::BrowserThread::UI, base::TaskPriority::USER_VISIBLE},
+      base::BindOnce(&InvalidateDRPConfigOnUIThread, frame_tree_node_id));
+}
+
 const base::TimeDelta kBlacklistDuration = base::TimeDelta::FromDays(30);
 
 const net::NetworkTrafficAnnotationTag kPreviewsTrafficAnnotation =
@@ -271,6 +304,11 @@
       UMA_HISTOGRAM_ENUMERATION(
           "Previews.ServerLitePage.ServerResponse",
           previews::LitePageRedirectServerResponse::kAuthFailure);
+
+      // This should disable future preview attempts until a new DRP Session Key
+      // is retrieved since the PreviewsLitePageRedirectDecider checks for valid
+      // session keys before triggering the preview.
+      InvalidateDRPConfig(frame_tree_node_id_);
     } else {
       UMA_HISTOGRAM_ENUMERATION(
           "Previews.ServerLitePage.ServerResponse",
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 6dec91d4..b33706fd 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -267,28 +267,24 @@
     params->system_key_slot_use_type = SystemKeySlotUseType::kUseForClientAuth;
   }
 
-  user_manager::UserManager* user_manager = user_manager::UserManager::Get();
-  if (user_manager) {
-    const user_manager::User* user =
-        chromeos::ProfileHelper::Get()->GetUserByProfile(profile);
-    // No need to initialize NSS for users with empty username hash:
-    // Getters for a user's NSS slots always return NULL slot if the user's
-    // username hash is empty, even when the NSS is not initialized for the
-    // user.
-    if (user && !user->username_hash().empty()) {
-      params->username_hash = user->username_hash();
-      DCHECK(!params->username_hash.empty());
-      base::PostTask(
-          FROM_HERE, {BrowserThread::IO},
-          base::BindOnce(&StartNSSInitOnIOThread, user->GetAccountId(),
-                         user->username_hash(), profile->GetPath()));
+  const user_manager::User* user =
+      chromeos::ProfileHelper::Get()->GetUserByProfile(profile);
+  // No need to initialize NSS for users with empty username hash:
+  // Getters for a user's NSS slots always return a null slot if the user's
+  // username hash is empty, even when the NSS is not initialized for the
+  // user.
+  if (user && !user->username_hash().empty()) {
+    params->username_hash = user->username_hash();
+    DCHECK(!params->username_hash.empty());
+    base::PostTask(FROM_HERE, {BrowserThread::IO},
+                   base::BindOnce(&StartNSSInitOnIOThread, user->GetAccountId(),
+                                  user->username_hash(), profile->GetPath()));
 
-      // Use the device-wide system key slot only if the user is affiliated on
-      // the device.
-      if (user->IsAffiliated()) {
-        params->system_key_slot_use_type =
-            SystemKeySlotUseType::kUseForClientAuthAndCertManagement;
-      }
+    // Use the device-wide system key slot only if the user is affiliated on
+    // the device.
+    if (user->IsAffiliated()) {
+      params->system_key_slot_use_type =
+          SystemKeySlotUseType::kUseForClientAuthAndCertManagement;
     }
   }
 
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc
index 2fccd26..5e4950d5 100644
--- a/chrome/browser/profiles/profile_manager.cc
+++ b/chrome/browser/profiles/profile_manager.cc
@@ -371,7 +371,7 @@
 // static
 void ProfileManager::ShutdownSessionServices() {
   ProfileManager* pm = g_browser_process->profile_manager();
-  if (!pm)  // Is NULL when running unit tests.
+  if (!pm)  // Is nullptr when running unit tests.
     return;
   std::vector<Profile*> profiles(pm->GetLoadedProfiles());
   for (size_t i = 0; i < profiles.size(); ++i)
@@ -549,13 +549,13 @@
   // Make sure that this profile is not pending deletion.
   if (IsProfileDirectoryMarkedForDeletion(profile_path)) {
     if (!callback.is_null())
-      callback.Run(NULL, Profile::CREATE_STATUS_LOCAL_FAIL);
+      callback.Run(nullptr, Profile::CREATE_STATUS_LOCAL_FAIL);
     return;
   }
 
   // Create the profile if needed and collect its ProfileInfo.
   auto iter = profiles_info_.find(profile_path);
-  ProfileInfo* info = NULL;
+  ProfileInfo* info = nullptr;
 
   if (iter != profiles_info_.end()) {
     info = iter->second.get();
@@ -1133,7 +1133,7 @@
     if (go_off_the_record)
       profile = profile->GetOffTheRecordProfile();
   } else {
-    profile = NULL;
+    profile = nullptr;
     profiles_info_.erase(iter);
   }
 
@@ -1154,11 +1154,12 @@
                          Profile::CREATE_STATUS_LOCAL_FAIL);
 }
 
-Profile* ProfileManager::CreateProfileHelper(const base::FilePath& path) {
+std::unique_ptr<Profile> ProfileManager::CreateProfileHelper(
+    const base::FilePath& path) {
   TRACE_EVENT0("browser", "ProfileManager::CreateProfileHelper");
 
-  return Profile::CreateProfile(path, nullptr, Profile::CREATE_MODE_SYNCHRONOUS)
-      .release();
+  return Profile::CreateProfile(path, nullptr,
+                                Profile::CREATE_MODE_SYNCHRONOUS);
 }
 
 std::unique_ptr<Profile> ProfileManager::CreateProfileAsyncHelper(
@@ -1392,12 +1393,14 @@
   // already started loading the profile but it is not fully initialized yet,
   // which would make Bad Things happen if we returned it.
   CHECK(!GetProfileByPathInternal(profile_dir));
-  Profile* profile = CreateProfileHelper(profile_dir);
-  if (profile) {
-    bool result = AddProfile(base::WrapUnique(profile));
-    DCHECK(result);
-  }
-  return profile;
+  std::unique_ptr<Profile> profile = CreateProfileHelper(profile_dir);
+  if (!profile)
+    return nullptr;
+
+  Profile* profile_ptr = profile.get();
+  bool result = AddProfile(std::move(profile));
+  DCHECK(result);
+  return profile_ptr;
 }
 
 #if !defined(OS_ANDROID)
@@ -1410,8 +1413,7 @@
   const base::FilePath guest_profile_path = GetGuestProfilePath();
   Profile* last_used_profile = GetProfileByPath(last_used_profile_path);
   if (last_used_profile_path != profile_dir &&
-      last_used_profile_path != guest_profile_path &&
-      last_used_profile != nullptr &&
+      last_used_profile_path != guest_profile_path && last_used_profile &&
       !last_used_profile->IsLegacySupervised()) {
     FinishDeletingProfile(profile_dir, last_used_profile_path);
     return;
@@ -1563,8 +1565,8 @@
 
 ProfileManager::ProfileInfo* ProfileManager::GetProfileInfoByPath(
     const base::FilePath& path) const {
-  auto iter = profiles_info_.find(path);
-  return (iter == profiles_info_.end()) ? NULL : iter->second.get();
+  auto it = profiles_info_.find(path);
+  return it != profiles_info_.end() ? it->second.get() : nullptr;
 }
 
 void ProfileManager::AddProfileToStorage(Profile* profile) {
diff --git a/chrome/browser/profiles/profile_manager.h b/chrome/browser/profiles/profile_manager.h
index 87ecf1f..b60df76d 100644
--- a/chrome/browser/profiles/profile_manager.h
+++ b/chrome/browser/profiles/profile_manager.h
@@ -36,9 +36,9 @@
 class ProfileManager : public content::NotificationObserver,
                        public Profile::Delegate {
  public:
-  typedef base::RepeatingCallback<void(Profile*, Profile::CreateStatus)>
-      CreateCallback;
-  typedef base::OnceCallback<void(Profile*)> ProfileLoadedCallback;
+  using CreateCallback =
+      base::RepeatingCallback<void(Profile*, Profile::CreateStatus)>;
+  using ProfileLoadedCallback = base::OnceCallback<void(Profile*)>;
 
   explicit ProfileManager(const base::FilePath& user_data_dir);
   ~ProfileManager() override;
@@ -254,7 +254,8 @@
   // Creates a new profile by calling into the profile's profile creation
   // method. Virtual so that unittests can return a TestingProfile instead
   // of the Profile's result. Returns null if creation fails.
-  virtual Profile* CreateProfileHelper(const base::FilePath& path);
+  virtual std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path);
 
   // Creates a new profile asynchronously by calling into the profile's
   // asynchronous profile creation method. Virtual so that unittests can return
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc
index 279c9c1..742c02e9 100644
--- a/chrome/browser/profiles/profile_manager_unittest.cc
+++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -89,12 +89,11 @@
   ~UnittestProfileManager() override = default;
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& file_path) override {
-    if (!base::PathExists(file_path)) {
-      if (!base::CreateDirectory(file_path))
-        return nullptr;
-    }
-    return new TestingProfile(file_path, nullptr);
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
+    if (!base::PathExists(path) && !base::CreateDirectory(path))
+      return nullptr;
+    return std::make_unique<TestingProfile>(path);
   }
 
   std::unique_ptr<Profile> CreateProfileAsyncHelper(
@@ -579,12 +578,12 @@
       : UnittestProfileManager(user_data_dir) {}
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& file_path) override {
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
     TestingProfile::Builder builder;
     builder.SetGuestSession();
-    builder.SetPath(file_path);
-    TestingProfile* testing_profile = builder.Build().release();
-    return testing_profile;
+    builder.SetPath(path);
+    return builder.Build();
   }
 };
 
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn
index 725a38c..8001353 100644
--- a/chrome/browser/resources/BUILD.gn
+++ b/chrome/browser/resources/BUILD.gn
@@ -362,10 +362,12 @@
 
   sources = [
     "$root_gen_dir/chrome/bluetooth_internals_resources.pak",
+    "$root_gen_dir/chrome/omnibox_resources.pak",
     "$root_gen_dir/chrome/usb_internals_resources.pak",
   ]
   deps = [
     "//chrome/browser/resources/bluetooth_internals:resources",
+    "//chrome/browser/resources/omnibox:resources",
     "//chrome/browser/resources/usb_internals:resources",
   ]
 }
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html
index b1c65f8f..786ece5 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html
@@ -4,6 +4,7 @@
 
 <dom-module id="assistant-get-more">
   <template>
+    <link rel="stylesheet" href="../login/oobe_dialog_host.css">
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
     <link rel="stylesheet" href="assistant_get_more.css">
     <link rel="stylesheet" href="assistant_shared_styles.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html
index 15c7ade..5941f7f 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html
@@ -7,6 +7,7 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-progress/paper-progress.html">
 <dom-module id="assistant-loading">
   <template>
+    <link rel="stylesheet" href="../login/oobe_dialog_host.css">
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
     <link rel="stylesheet" href="assistant_loading.css">
     <link rel="stylesheet" href="assistant_shared_styles.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html
index 4b37c66..c5dc263 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html
@@ -4,6 +4,7 @@
 
 <dom-module id="assistant-third-party">
   <template>
+    <link rel="stylesheet" href="../login/oobe_dialog_host.css">
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
     <link rel="stylesheet" href="../login/oobe_popup_overlay.css">
     <link rel="stylesheet" href="assistant_shared_styles.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.html
index 0015a0a..855db01 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_value_prop.html
@@ -6,6 +6,7 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
 <dom-module id="assistant-value-prop">
   <template>
+    <link rel="stylesheet" href="../login/oobe_dialog_host.css">
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
     <link rel="stylesheet" href="../login/oobe_popup_overlay.css">
     <link rel="stylesheet" href="assistant_shared_styles.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_voice_match.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_voice_match.html
index 14512fb..7cc0a423 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_voice_match.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_voice_match.html
@@ -7,6 +7,7 @@
 <link rel="import" href="chrome://resources/cr_elements/chromeos/cr_lottie/cr_lottie.html">
 <dom-module id="assistant-voice-match">
   <template>
+    <link rel="stylesheet" href="../login/oobe_dialog_host.css">
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
     <link rel="stylesheet" href="assistant_shared_styles.css">
     <link rel="stylesheet" href="assistant_voice_match.css">
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb
index b7c2e0fc..55debb3 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_fa.xtb
@@ -26,7 +26,7 @@
 <translation id="3183731565330012717">نوع جدول</translation>
 <translation id="3227137524299004712">میکروفن</translation>
 <translation id="3259149966178251584">وضوح دوربین</translation>
-<translation id="3517926952904427380">عدم‌امکان گرفتن عکس چهره</translation>
+<translation id="3517926952904427380">عکس عمودی ممکن نیست</translation>
 <translation id="3569311554794739032">واقعاً می‌خواهید <ph name="FILE" /> را بردارید؟</translation>
 <translation id="3810838688059735925">فیلم</translation>
 <translation id="4279490309300973883">بازتاب می‌شود</translation>
@@ -69,7 +69,7 @@
 <translation id="8428213095426709021">تنظیمات</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
 <translation id="8732462232047530626">پیش‌نمایش فراداده</translation>
-<translation id="8815966864175525708">تغییر وضعیت به گرفتن عکس چهره</translation>
+<translation id="8815966864175525708">تغییر به گرفتن عکس عمودی</translation>
 <translation id="8870695351537079478">شروع ضبط انجام نشد</translation>
 <translation id="9045155556724273246">۱۰ ثانیه</translation>
 <translation id="945522503751344254">ارسال بازخورد</translation>
diff --git a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_vi.xtb b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_vi.xtb
index ea2211b..df58ded 100644
--- a/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_vi.xtb
+++ b/chrome/browser/resources/chromeos/camera/src/strings/camera_strings_vi.xtb
@@ -22,6 +22,7 @@
 
         Ứng dụng có quyền truy cập vào bộ nhớ sẽ có quyền truy cập vào ảnh và video của bạn.</translation>
 <translation id="3081586908890909590">Chuyển sang quay video</translation>
+<translation id="313467653172006084">30 khung hình/giây</translation>
 <translation id="3183731565330012717">Loại lưới</translation>
 <translation id="3227137524299004712">Micrô</translation>
 <translation id="3259149966178251584">Độ phân giải của máy ảnh</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
index 35fc8c0d..a44ef8b 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ar.xtb
@@ -148,7 +148,7 @@
 <translation id="2009187674653301682">ليست نصوصًا مرتفعة</translation>
 <translation id="2010555995361223825">‏قوائم ChromeVox</translation>
 <translation id="2045490512405922022">غير محدد</translation>
-<translation id="2049107626739254612">إنشاء المعلومات</translation>
+<translation id="2049107626739254612">معلومات عن المؤلف</translation>
 <translation id="20601713649439366">ليس هناك تعبير رياضي سابق.</translation>
 <translation id="2063539687800151747">عبارة مقتبسة</translation>
 <translation id="207477615537953741">تم إيقاف الدلالات</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
index 84b187c..077cf60c 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
@@ -328,7 +328,7 @@
 <translation id="3241638166094654466">تعداد سلول‌ها در هر خط:</translation>
 <translation id="3244209481693235975"><ph name="LANGUAGE" />: <ph name="CONTENT" /></translation>
 <translation id="3260949043575829030">مورد مشابه قبلی</translation>
-<translation id="3286372614333682499">چهره</translation>
+<translation id="3286372614333682499">عمودی</translation>
 <translation id="3286390186030710347">اسلایدر</translation>
 <translation id="3299925995433437805">پیوند بازدید شده بعدی وجود ندارد.</translation>
 <translation id="3300348286427369683">‏پشتیبانی از نوشتار غنی. ChromeVox اکنون از فیلدهای نوشتار غنی (مثل فرمان‌های پرش، مسیریابی مکان‌نمای بریل، انتخاب و غیره) پشتیبانی می‌کند.</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
index 5f73a008..e9c0bbfd 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_vi.xtb
@@ -20,7 +20,7 @@
 <translation id="1087788677726983142">Ẩn các bộ lọc luồng sự kiện</translation>
 <translation id="1088219014394087294">Không có tiêu đề nào.</translation>
 <translation id="1106741348836243114">Bật hoặc tắt phản hồi bằng âm thanh (kết nối tai nghe).</translation>
-<translation id="1114836634143403764">Thay đổi đề xuất</translation>
+<translation id="1114836634143403764">Đề xuất</translation>
 <translation id="1120743664840974483">{"a": "alpha", "b": "bravo", "c": "charlie", "d": "delta", "e": "echo", "f": "foxtrot", "g": "golf", "h": "hotel", "i": "india", "j": "juliet","k": "kilo", "l": "lima", "m": "mike", "n": "november", "o": "oscar","p": "papa", "q": "quebec", "r": "romeo", "s": "sierra", "t": "tango", "u": "uniform", "v": "victor", "w": "whiskey","x": "xray", "y": "yankee", "z": "zulu"}</translation>
 <translation id="1120938014254001895">Vuốt lên trên bằng hai ngón tay</translation>
 <translation id="1124771028211010580">Kiểu hiển thị hiện tại là song song.</translation>
@@ -265,7 +265,7 @@
 <translation id="2911433807131383493">Mở hướng dẫn ChromeVox</translation>
 <translation id="2912405967290226587">Vuốt sang phải bằng ba ngón tay</translation>
 <translation id="2932083475399492303">Chuyển đổi loại dòng giữa cấu trúc hoặc bố cục</translation>
-<translation id="293796669683825859">Bình luận</translation>
+<translation id="293796669683825859">Nhận xét</translation>
 <translation id="2942710183375260152">Màu lam xám đen đậm</translation>
 <translation id="2943596527105977722">Màu vàng nghệ đậm</translation>
 <translation id="2944762337049891859">Tự động đọc trang sau khi tải xong.</translation>
@@ -327,6 +327,7 @@
 <translation id="3241052487511142956">Liên kết đã truy cập trước đó</translation>
 <translation id="3241638166094654466">Số ô mỗi dòng:</translation>
 <translation id="3244209481693235975"><ph name="LANGUAGE" />: <ph name="CONTENT" /></translation>
+<translation id="3260949043575829030">Mục tương tự trước</translation>
 <translation id="3286372614333682499">dọc</translation>
 <translation id="3286390186030710347">Thanh trượt</translation>
 <translation id="3299925995433437805">Không có liên kết đã truy cập tiếp theo nào.</translation>
@@ -509,6 +510,7 @@
 <translation id="4517854969512651305">Tăng giá trị</translation>
 <translation id="4529987814483543472">Sơ đồ bàn phím cổ điển</translation>
 <translation id="4532633738839459153">{COUNT,plural, =1{dấu gạch chéo}other{# dấu gạch chéo}}</translation>
+<translation id="4537277403911487429">Mục tương tự tiếp theo</translation>
 <translation id="4547556996012970016">Tiêu đề cấp 5 tiếp theo</translation>
 <translation id="4562381607973973258">Tiêu đề</translation>
 <translation id="4569941707103739422">Nhấn phím mũi tên lên hoặc xuống để di chuyển; nhấn Enter để kích hoạt.</translation>
diff --git a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
index 04e2815..6ba35ea 100644
--- a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
+++ b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
@@ -117,6 +117,8 @@
           loadTimeData.getString('networkListItemConnectingTo'),
       networkListItemInitializing:
           loadTimeData.getString('networkListItemInitializing'),
+      networkListItemNotAvailable:
+          loadTimeData.getString('networkListItemNotAvailable'),
       networkListItemScanning:
           loadTimeData.getString('networkListItemScanning'),
       networkListItemSimCardLocked:
diff --git a/chrome/browser/resources/chromeos/login/app_downloading.html b/chrome/browser/resources/chromeos/login/app_downloading.html
index e4127d2..9728a02e 100644
--- a/chrome/browser/resources/chromeos/login/app_downloading.html
+++ b/chrome/browser/resources/chromeos/login/app_downloading.html
@@ -8,6 +8,7 @@
 
 <dom-module id="app-downloading">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="app_downloading.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog id="app-downloading-dialog" role="dialog" has-buttons
diff --git a/chrome/browser/resources/chromeos/login/arc_terms_of_service.html b/chrome/browser/resources/chromeos/login/arc_terms_of_service.html
index 253ea772..35d655d1 100644
--- a/chrome/browser/resources/chromeos/login/arc_terms_of_service.html
+++ b/chrome/browser/resources/chromeos/login/arc_terms_of_service.html
@@ -8,6 +8,7 @@
 
 <dom-module id="arc-tos-root">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="arc_terms_of_service.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog id="arc-tos-dialog" has-buttons class="arc-tos-loading">
diff --git a/chrome/browser/resources/chromeos/login/demo_preferences.html b/chrome/browser/resources/chromeos/login/demo_preferences.html
index f9c0ba8..1762690 100644
--- a/chrome/browser/resources/chromeos/login/demo_preferences.html
+++ b/chrome/browser/resources/chromeos/login/demo_preferences.html
@@ -27,6 +27,7 @@
 
 <dom-module id="demo-preferences-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="demo_preferences.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog role="dialog" has-buttons
@@ -82,4 +83,4 @@
       </div>
     </oobe-dialog>
   </template>
-</dom-module>
\ No newline at end of file
+</dom-module>
diff --git a/chrome/browser/resources/chromeos/login/demo_setup.html b/chrome/browser/resources/chromeos/login/demo_setup.html
index b29c5ab..728809e 100644
--- a/chrome/browser/resources/chromeos/login/demo_setup.html
+++ b/chrome/browser/resources/chromeos/login/demo_setup.html
@@ -24,6 +24,7 @@
 
 <dom-module id="demo-setup-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="demo_setup.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
 
diff --git a/chrome/browser/resources/chromeos/login/discover/discover_ui.css b/chrome/browser/resources/chromeos/login/discover/discover_ui.css
deleted file mode 100644
index e6780c4..0000000
--- a/chrome/browser/resources/chromeos/login/discover/discover_ui.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Copyright 2018 The Chromium Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file. */
-
-:host {
-  display: block;
-  height: 640px;
-  width: 768px;
-}
diff --git a/chrome/browser/resources/chromeos/login/discover/discover_ui.html b/chrome/browser/resources/chromeos/login/discover/discover_ui.html
index 30260ef..ceb83c8 100644
--- a/chrome/browser/resources/chromeos/login/discover/discover_ui.html
+++ b/chrome/browser/resources/chromeos/login/discover/discover_ui.html
@@ -27,7 +27,6 @@
 -->
 <dom-module id="discover-ui">
   <template>
-    <link rel="stylesheet" href="discover_ui.css">
     <link rel="stylesheet" href="../oobe_fonts.css">
     <discover-welcome id="discoverWelcome"
         on-module-continue="startLinearFlow_" on-module-skip="end_">
diff --git a/chrome/browser/resources/chromeos/login/encryption_migration.html b/chrome/browser/resources/chromeos/login/encryption_migration.html
index 972d1ca..f5b2b59 100644
--- a/chrome/browser/resources/chromeos/login/encryption_migration.html
+++ b/chrome/browser/resources/chromeos/login/encryption_migration.html
@@ -10,6 +10,7 @@
 
 <dom-module id="encryption-migration">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="encryption_migration.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <template is="dom-if" if="[[isInitial_(uiState)]]">
diff --git a/chrome/browser/resources/chromeos/login/enrollment_license_card.html b/chrome/browser/resources/chromeos/login/enrollment_license_card.html
index 8abebff..277abae 100644
--- a/chrome/browser/resources/chromeos/login/enrollment_license_card.html
+++ b/chrome/browser/resources/chromeos/login/enrollment_license_card.html
@@ -29,6 +29,7 @@
     <style
         include="shared-style iron-flex iron-flex-alignment iron-positioning">
     </style>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="oobe_iron_flex_layout_fix.css">
 
     <oobe-dialog id="license-selection-prompt-card" has-buttons>
diff --git a/chrome/browser/resources/chromeos/login/fingerprint_setup.html b/chrome/browser/resources/chromeos/login/fingerprint_setup.html
index 4a9b5484..dae574f 100644
--- a/chrome/browser/resources/chromeos/login/fingerprint_setup.html
+++ b/chrome/browser/resources/chromeos/login/fingerprint_setup.html
@@ -34,6 +34,7 @@
 
 <dom-module id="fingerprint-setup">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="fingerprint_setup.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog id="setupFingerprint" role="dialog" has-buttons
diff --git a/chrome/browser/resources/chromeos/login/marketing_opt_in.html b/chrome/browser/resources/chromeos/login/marketing_opt_in.html
index fe801ba..6983497 100644
--- a/chrome/browser/resources/chromeos/login/marketing_opt_in.html
+++ b/chrome/browser/resources/chromeos/login/marketing_opt_in.html
@@ -38,6 +38,7 @@
 
 <dom-module id="marketing-opt-in">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="marketing_opt_in.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog id="marketingOptInOverviewDialog" role="dialog" has-buttons
diff --git a/chrome/browser/resources/chromeos/login/network_select_login.js b/chrome/browser/resources/chromeos/login/network_select_login.js
index 47b1e7c..7914d0c2 100644
--- a/chrome/browser/resources/chromeos/login/network_select_login.js
+++ b/chrome/browser/resources/chromeos/login/network_select_login.js
@@ -123,6 +123,8 @@
             loadTimeData.getString('networkListItemConnectingTo'),
         networkListItemInitializing:
             loadTimeData.getString('networkListItemInitializing'),
+        networkListItemNotAvailable:
+            loadTimeData.getString('networkListItemNotAvailable'),
         networkListItemScanning:
             loadTimeData.getString('networkListItemScanning'),
         networkListItemSimCardLocked:
diff --git a/chrome/browser/resources/chromeos/login/offline_ad_login.html b/chrome/browser/resources/chromeos/login/offline_ad_login.html
index c5d5e7e..963fd28 100644
--- a/chrome/browser/resources/chromeos/login/offline_ad_login.html
+++ b/chrome/browser/resources/chromeos/login/offline_ad_login.html
@@ -48,6 +48,7 @@
   <template>
     <style include="md-select iron-flex iron-flex-alignment iron-positioning">
     </style>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="oobe_iron_flex_layout_fix.css">
     <link rel="stylesheet" href="offline_ad_login.css">
     <oobe-dialog id="unlockStep" hidden="[[!unlockPasswordStep]]"
diff --git a/chrome/browser/resources/chromeos/login/oobe_dialog.html b/chrome/browser/resources/chromeos/login/oobe_dialog.html
index 03868ceb..2934fa87 100644
--- a/chrome/browser/resources/chromeos/login/oobe_dialog.html
+++ b/chrome/browser/resources/chromeos/login/oobe_dialog.html
@@ -16,7 +16,10 @@
   focused.
     2. 'show-dialog' is fired.
 
+  Please include oobe_dialog_host.css if you use oobe-dialog.
+
   Example:
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <oobe-dialog on-show-dialog="onTestDialogShown_" has-buttons>
       <iron-icon ... slot="oobe-icon">
       <h1 slot="title">Title</h1>
diff --git a/chrome/browser/resources/chromeos/login/oobe_eula.html b/chrome/browser/resources/chromeos/login/oobe_eula.html
index c81c471..6cbcb42 100644
--- a/chrome/browser/resources/chromeos/login/oobe_eula.html
+++ b/chrome/browser/resources/chromeos/login/oobe_eula.html
@@ -39,6 +39,7 @@
 
 <dom-module id="oobe-eula-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="chrome://resources/css/throbber.css">
     <link rel="stylesheet" href="oobe_eula.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
diff --git a/chrome/browser/resources/chromeos/login/oobe_hid_detection.html b/chrome/browser/resources/chromeos/login/oobe_hid_detection.html
index 7795be9..ed85aa2 100644
--- a/chrome/browser/resources/chromeos/login/oobe_hid_detection.html
+++ b/chrome/browser/resources/chromeos/login/oobe_hid_detection.html
@@ -48,6 +48,7 @@
 
 <dom-module id="oobe-hid-detection-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="oobe_hid_detection.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog has-buttons>
diff --git a/chrome/browser/resources/chromeos/login/oobe_network.html b/chrome/browser/resources/chromeos/login/oobe_network.html
index 72c8f1a..1b017b3 100644
--- a/chrome/browser/resources/chromeos/login/oobe_network.html
+++ b/chrome/browser/resources/chromeos/login/oobe_network.html
@@ -4,6 +4,7 @@
 
 <dom-module id="oobe-network-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <link rel="stylesheet" href="oobe_network.css">
     <oobe-dialog id="networkDialog" role="dialog" on-show-dialog="onShown_"
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset.html b/chrome/browser/resources/chromeos/login/oobe_reset.html
index 5d127fb..0030feb5 100644
--- a/chrome/browser/resources/chromeos/login/oobe_reset.html
+++ b/chrome/browser/resources/chromeos/login/oobe_reset.html
@@ -40,6 +40,7 @@
 
 <dom-module id="oobe-reset-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="chrome://resources/css/throbber.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <link rel="stylesheet" href="oobe_reset.css">
diff --git a/chrome/browser/resources/chromeos/login/oobe_supervision_transition.html b/chrome/browser/resources/chromeos/login/oobe_supervision_transition.html
index 088c2ad..221004c 100644
--- a/chrome/browser/resources/chromeos/login/oobe_supervision_transition.html
+++ b/chrome/browser/resources/chromeos/login/oobe_supervision_transition.html
@@ -4,6 +4,7 @@
 
 <dom-module id="supervision-transition-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <link rel="stylesheet" href="oobe_supervision_transition.css">
     <oobe-dialog id="supervisionTransitionDialog" role="alert"
diff --git a/chrome/browser/resources/chromeos/login/oobe_update.html b/chrome/browser/resources/chromeos/login/oobe_update.html
index f1afb3c..f4bd86de 100644
--- a/chrome/browser/resources/chromeos/login/oobe_update.html
+++ b/chrome/browser/resources/chromeos/login/oobe_update.html
@@ -24,6 +24,7 @@
 
 <dom-module id="oobe-update-md">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <link rel="stylesheet" href="oobe_update.css">
     <oobe-dialog hidden="[[!checkingForUpdate]]" tabindex="0"
diff --git a/chrome/browser/resources/chromeos/login/recommend_apps.html b/chrome/browser/resources/chromeos/login/recommend_apps.html
index b581001..e98ccc1 100644
--- a/chrome/browser/resources/chromeos/login/recommend_apps.html
+++ b/chrome/browser/resources/chromeos/login/recommend_apps.html
@@ -8,6 +8,7 @@
 
 <dom-module id="recommend-apps">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="recommend_apps.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog id="recommend-apps-dialog" role="dialog" has-buttons
diff --git a/chrome/browser/resources/chromeos/login/screen_error_message.html b/chrome/browser/resources/chromeos/login/screen_error_message.html
index 5405142..e2aecd1 100644
--- a/chrome/browser/resources/chromeos/login/screen_error_message.html
+++ b/chrome/browser/resources/chromeos/login/screen_error_message.html
@@ -1,6 +1,7 @@
 <link rel="import" href="chrome://oobe/custom_elements.html">
 
 <div id="error-message" class="step hidden show-offline-error" hidden>
+  <link rel="stylesheet" href="oobe_dialog_host.css">
   <link rel="stylesheet" href="oobe_flex_layout.css">
 
   <iron-iconset-svg name="error-message-24" size="24">
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.css b/chrome/browser/resources/chromeos/login/screen_gaia_signin.css
index 47d8c1c..423807a 100644
--- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.css
+++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.css
@@ -117,8 +117,7 @@
   display: none;
 }
 
-:host(.saml) #signin-frame {
-  height: 516px;
+:host(.saml) #signin-frame-container {
   padding-top: 44px;
 }
 
diff --git a/chrome/browser/resources/chromeos/login/screen_recommend_apps.html b/chrome/browser/resources/chromeos/login/screen_recommend_apps.html
index 443cda32..6f5c0eb 100644
--- a/chrome/browser/resources/chromeos/login/screen_recommend_apps.html
+++ b/chrome/browser/resources/chromeos/login/screen_recommend_apps.html
@@ -3,6 +3,7 @@
      found in the LICENSE file. -->
 
 <div class="step right hidden" id="recommend-apps" hidden>
+  <link rel="stylesheet" href="oobe_dialog_host.css">
   <recommend-apps id="recommend-apps-screen" hidden></recommend-apps>
   <oobe-dialog id="recommend-apps-loading" role="dialog" no-header
                no-footer-padding>
diff --git a/chrome/browser/resources/chromeos/login/screen_sync_consent.html b/chrome/browser/resources/chromeos/login/screen_sync_consent.html
index b1a6aa22..a71bdb2 100644
--- a/chrome/browser/resources/chromeos/login/screen_sync_consent.html
+++ b/chrome/browser/resources/chromeos/login/screen_sync_consent.html
@@ -4,6 +4,7 @@
 <link rel="import" href="chrome://oobe/custom_elements.html">
 
 <div class="step right hidden" id="sync-consent" hidden>
+  <link rel="stylesheet" href="oobe_dialog_host.css">
   <sync-consent id="sync-consent-impl"></sync-consent>
   <oobe-dialog id="sync-loading" role="dialog" no-header no-footer-padding
       hidden>
diff --git a/chrome/browser/resources/chromeos/login/sync_consent.html b/chrome/browser/resources/chromeos/login/sync_consent.html
index bdbfb87..47cf7cc 100644
--- a/chrome/browser/resources/chromeos/login/sync_consent.html
+++ b/chrome/browser/resources/chromeos/login/sync_consent.html
@@ -12,6 +12,7 @@
 
 <dom-module id="sync-consent">
   <template>
+    <link rel="stylesheet" href="oobe_dialog_host.css">
     <link rel="stylesheet" href="sync_consent.css">
     <link rel="stylesheet" href="oobe_flex_layout.css">
     <oobe-dialog id="syncConsentOverviewDialog" role="dialog" has-buttons
diff --git a/chrome/browser/resources/chromeos/network_ui/network_ui.js b/chrome/browser/resources/chromeos/network_ui/network_ui.js
index f2178ab..6b70e10 100644
--- a/chrome/browser/resources/chromeos/network_ui/network_ui.js
+++ b/chrome/browser/resources/chromeos/network_ui/network_ui.js
@@ -38,6 +38,8 @@
         loadTimeData.getString('networkListItemConnectingTo'),
     networkListItemInitializing:
         loadTimeData.getString('networkListItemInitializing'),
+    networkListItemNotAvailable:
+        loadTimeData.getString('networkListItemNotAvailable'),
     networkListItemScanning: loadTimeData.getString('networkListItemScanning'),
     networkListItemSimCardLocked:
         loadTimeData.getString('networkListItemSimCardLocked'),
diff --git a/chrome/browser/resources/inline_login/inline_login.html b/chrome/browser/resources/inline_login/inline_login.html
index 3bc61db7..ba073ce 100644
--- a/chrome/browser/resources/inline_login/inline_login.html
+++ b/chrome/browser/resources/inline_login/inline_login.html
@@ -1,6 +1,7 @@
 <!doctype html>
 <html dir="$i18n{textdirection}" lang="$i18n{language}">
 <head>
+  <meta charset="utf-8">
   <title>$i18n{title}</title>
   <link rel="import" href="chrome://resources/html/polymer.html">
   <link rel="import" href="chrome://resources/cr_elements/icons.html">
diff --git a/ui/resources/default_100_percent/common/close_3_mask.png b/chrome/browser/resources/local_ntp/icons/dont_show.png
similarity index 100%
rename from ui/resources/default_100_percent/common/close_3_mask.png
rename to chrome/browser/resources/local_ntp/icons/dont_show.png
Binary files differ
diff --git a/ui/resources/default_200_percent/common/close_3_mask.png b/chrome/browser/resources/local_ntp/icons/dont_show_2x.png
similarity index 100%
rename from ui/resources/default_200_percent/common/close_3_mask.png
rename to chrome/browser/resources/local_ntp/icons/dont_show_2x.png
Binary files differ
diff --git a/chrome/browser/resources/local_ntp/local_ntp_resources.grd b/chrome/browser/resources/local_ntp/local_ntp_resources.grd
index ade6f64..f4b5358 100644
--- a/chrome/browser/resources/local_ntp/local_ntp_resources.grd
+++ b/chrome/browser/resources/local_ntp/local_ntp_resources.grd
@@ -27,6 +27,8 @@
       <include name="IDR_LOCAL_NTP_UTILS_JS" file="utils.js" flattenhtml="true" type="BINDATA" />
       <include name="IDR_LOCAL_NTP_VOICE_CSS" file="voice.css" flattenhtml="true" type="BINDATA" />
       <include name="IDR_LOCAL_NTP_VOICE_JS" file="voice.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_DONT_SHOW_PNG" file="icons\dont_show.png" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_DONT_SHOW_2X_PNG" file="icons\dont_show_2x.png" type="BINDATA" />
       <include name="IDR_MOST_VISITED_IFRAME_CSS" file="most_visited_iframe.css" type="BINDATA" />
       <include name="IDR_MOST_VISITED_SINGLE_CSS" file="most_visited_single.css" type="BINDATA" />
       <include name="IDR_MOST_VISITED_SINGLE_HTML" file="most_visited_single.html" type="BINDATA" />
diff --git a/chrome/browser/resources/local_ntp/most_visited_single.css b/chrome/browser/resources/local_ntp/most_visited_single.css
index 3a73a79..9728403 100644
--- a/chrome/browser/resources/local_ntp/most_visited_single.css
+++ b/chrome/browser/resources/local_ntp/most_visited_single.css
@@ -297,9 +297,10 @@
 /* We use ::after without content to provide the masked X element. */
 .md-menu::after {
   --mask-width: calc(var(--md-menu-size) - 2);
+  /* TODO(crbug.com/1012065): Use SVG for the "X" icon. */
   -webkit-mask-image: -webkit-image-set(
-      url(chrome-search://local-ntp/images/close_3_mask.png) 1x,
-      url(chrome-search://local-ntp/images/close_3_mask.png@2x) 2x);
+      url(chrome-search://most-visited/dont_show.png) 1x,
+      url(chrome-search://most-visited/dont_show_2x.png) 2x);
   -webkit-mask-repeat: no-repeat;
   -webkit-mask-size: var(--mask-width);
   background-color: rgb(var(--GG600-rgb));
diff --git a/chrome/browser/resources/omnibox/BUILD.gn b/chrome/browser/resources/omnibox/BUILD.gn
index 0465f91..c3634a0 100644
--- a/chrome/browser/resources/omnibox/BUILD.gn
+++ b/chrome/browser/resources/omnibox/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//third_party/closure_compiler/compile_js.gni")
+import("//tools/grit/grit_rule.gni")
 
 js_type_check("closure_compile") {
   deps = [
@@ -32,3 +33,23 @@
   ]
   externs_list = [ "$externs_path/pending.js" ]
 }
+
+grit("resources") {
+  source = "resources.grd"
+
+  # The .grd contains references to generated files.
+  source_is_generated = true
+  outputs = [
+    "grit/omnibox_resources.h",
+    "omnibox_resources.pak",
+  ]
+  output_dir = "$root_gen_dir/chrome"
+  depfile_dir = target_gen_dir
+  grit_flags = [
+    "-E",
+    "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
+  ]
+  deps = [
+    "//chrome/browser/ui/webui/omnibox:mojo_bindings_js",
+  ]
+}
diff --git a/chrome/browser/resources/omnibox/resources.grd b/chrome/browser/resources/omnibox/resources.grd
new file mode 100644
index 0000000..d6011a8
--- /dev/null
+++ b/chrome/browser/resources/omnibox/resources.grd
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0"
+      current_release="1"
+      output_all_resource_defines="false">
+  <outputs>
+    <output filename="grit/omnibox_resources.h" type="rc_header">
+      <emit emit_type='prepend'></emit>
+    </output>
+    <output filename="omnibox_resources.pak" type="data_package" />
+  </outputs>
+  <release seq="1">
+    <includes>
+      <include name="IDR_OMNIBOX_HTML"
+               file="omnibox.html"
+               flattenhtml="true"
+               allowexternalscript="true"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_CSS"
+               file="omnibox.css"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_INPUT_CSS"
+               file="omnibox_input.css"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OUTPUT_RESULTS_GROUP_CSS"
+               file="output_results_group.css"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_OUTPUT_COLUMN_WIDTHS_CSS"
+               file="omnibox_output_column_widths.css"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_ELEMENT_JS"
+               file="omnibox_element.js"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_INPUT_JS"
+               file="omnibox_input.js"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_OUTPUT_JS"
+               file="omnibox_output.js"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_JS"
+               file="omnibox.js"
+               type="BINDATA"
+               compress="gzip" />
+      <include name="IDR_OMNIBOX_MOJO_JS"
+               file="${root_gen_dir}\chrome\browser\ui\webui\omnibox\omnibox.mojom-lite.js"
+               use_base_dir="false"
+               type="BINDATA"
+               compress="gzip" />
+    </includes>
+  </release>
+</grit>
diff --git a/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html b/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html
index 92bf3fb3..ccc488cb 100644
--- a/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html
+++ b/chrome/browser/resources/settings/a11y_page/manage_a11y_page.html
@@ -80,31 +80,35 @@
         label="$i18n{screenMagnifierLabel}"
         disabled="[[prefs.ash.docked_magnifier.enabled.value]]">
     </settings-toggle-button>
-    <div class="settings-box continuation">
-      <div class="start sub-item settings-box-text">
-        $i18n{screenMagnifierZoomLabel}
+    <template is="dom-if" if="[[prefs.settings.a11y.screen_magnifier.value]]">
+      <div class="settings-box continuation">
+        <div class="start sub-item settings-box-text">
+          $i18n{screenMagnifierZoomLabel}
+        </div>
+        <settings-dropdown-menu label="$i18n{screenMagnifierZoomLabel}"
+            pref="{{prefs.settings.a11y.screen_magnifier_scale}}"
+            menu-options="[[screenMagnifierZoomOptions_]]"
+            disabled="[[!prefs.settings.a11y.screen_magnifier.value]]">
+        </settings-dropdown-menu>
       </div>
-      <settings-dropdown-menu label="$i18n{screenMagnifierZoomLabel}"
-          pref="{{prefs.settings.a11y.screen_magnifier_scale}}"
-          menu-options="[[screenMagnifierZoomOptions_]]"
-          disabled="[[!prefs.settings.a11y.screen_magnifier.value]]">
-      </settings-dropdown-menu>
-    </div>
+    </template>
     <settings-toggle-button
         pref="{{prefs.ash.docked_magnifier.enabled}}"
         label="$i18n{dockedMagnifierLabel}"
         disabled="[[prefs.settings.a11y.screen_magnifier.value]]">
     </settings-toggle-button>
-    <div class="settings-box continuation">
-      <div class="start sub-item settings-box-text">
-        $i18n{dockedMagnifierZoomLabel}
+    <template is="dom-if" if="[[prefs.ash.docked_magnifier.enabled.value]]">
+      <div class="settings-box continuation">
+        <div class="start sub-item settings-box-text">
+          $i18n{dockedMagnifierZoomLabel}
+        </div>
+        <settings-dropdown-menu label="$i18n{dockedMagnifierZoomLabel}"
+            pref="{{prefs.ash.docked_magnifier.scale}}"
+            menu-options="[[screenMagnifierZoomOptions_]]"
+            disabled="[[!prefs.ash.docked_magnifier.enabled.value]]">
+        </settings-dropdown-menu>
       </div>
-      <settings-dropdown-menu label="$i18n{dockedMagnifierZoomLabel}"
-          pref="{{prefs.ash.docked_magnifier.scale}}"
-          menu-options="[[screenMagnifierZoomOptions_]]"
-          disabled="[[!prefs.ash.docked_magnifier.enabled.value]]">
-      </settings-dropdown-menu>
-    </div>
+    </template>
     <cr-link-row class="hr" label="$i18n{displaySettingsTitle}"
         on-click="onDisplayTap_" sub-label="$i18n{displaySettingsDescription}"
         embedded></cr-link-row>
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js b/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js
index c542b1a..5b20701 100644
--- a/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js
+++ b/chrome/browser/resources/settings/chromeos/os_settings_ui/os_settings_ui.js
@@ -160,6 +160,8 @@
           loadTimeData.getString('networkListItemConnectingTo'),
       networkListItemInitializing:
           loadTimeData.getString('networkListItemInitializing'),
+      networkListItemNotAvailable:
+          loadTimeData.getString('networkListItemNotAvailable'),
       networkListItemScanning:
           loadTimeData.getString('networkListItemScanning'),
       networkListItemSimCardLocked:
diff --git a/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.html b/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.html
index 2e75dd9..55a72bcb 100644
--- a/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.html
+++ b/chrome/browser/resources/settings/multidevice_page/multidevice_subpage.html
@@ -31,10 +31,6 @@
       #feature-items-container {
         @apply --settings-list-frame-padding;
       }
-
-      #forget-device-container {
-        border-top: var(--cr-separator-line);
-      }
     </style>
     <div class="settings-box first">
       <div id="status-text-container"
@@ -99,11 +95,17 @@
         </template>
       </div>
     </template>
-    <div id="forget-device-container">
-      <cr-link-row id="forget-device" class="hr"
-          on-click="handleForgetDeviceClick_"
-          label="$i18n{multideviceForgetDevice}"
-          sub-label="$i18n{multideviceForgetDeviceSummary}"></cr-link-row>
+    <div class="settings-box two-line">
+        <div id="forget-device-label" class="start">
+            $i18n{multideviceForgetDevice}
+            <div class="secondary">
+                $i18n{multideviceForgetDeviceSummary}
+            </div>
+        </div>
+        <cr-button on-click="handleForgetDeviceClick_"
+          aria-labelledby="forgetDeviceLabel">
+           $i18n{multideviceForgetDeviceDisconnect}
+        </cr-button>
     </div>
     <cr-dialog id="forgetDeviceDialog">
       <div slot="title">$i18n{multideviceForgetDevice}</div>
@@ -120,7 +122,7 @@
         <cr-button id="confirmButton"
             class="action-button"
             on-click="onForgetDeviceDialogConfirmClick_">
-          $i18n{confirm}
+          $i18n{multideviceForgetDeviceDisconnect}
         </cr-button>
       </div>
     </cr-dialog>
diff --git a/chrome/browser/resources/settings/printing_page/cups_nearby_printers.html b/chrome/browser/resources/settings/printing_page/cups_nearby_printers.html
index 7d6bf1824..923cb42 100644
--- a/chrome/browser/resources/settings/printing_page/cups_nearby_printers.html
+++ b/chrome/browser/resources/settings/printing_page/cups_nearby_printers.html
@@ -8,20 +8,9 @@
 
 <dom-module id="settings-cups-nearby-printers">
   <template>
-    <style include="settings-shared">
-      #noPrinterMessage {
-        margin-inline-start: 60px;
-        margin-top: 20px;
-      }
-    </style>
     <settings-cups-printers-entry-list printers="[[nearbyPrinters_]]"
         search-term="[[searchTerm]]">
     </settings-cups-printers-entry-list>
-    <div class="secondary" id="noPrinterMessage"
-        hidden="[[!shouldShowNoNearbyPrinterMessage_(searchTerm,
-                                                     nearbyPrinters_)]]">
-        $i18n{noPrinterNearbyMessage}
-    </div>
   </template>
   <script src="cups_nearby_printers.js"></script>
 </dom-module>
diff --git a/chrome/browser/resources/settings/printing_page/cups_nearby_printers.js b/chrome/browser/resources/settings/printing_page/cups_nearby_printers.js
index aa4912c..9f6f7b6 100644
--- a/chrome/browser/resources/settings/printing_page/cups_nearby_printers.js
+++ b/chrome/browser/resources/settings/printing_page/cups_nearby_printers.js
@@ -137,13 +137,5 @@
         'show-cups-printer-toast',
         {resultCode: PrinterSetupResult.PRINTER_UNREACHABLE,
          printerName: printer.printerName});
-  },
-
-  /**
-   * @return {boolean} Returns true if noPrinterMessage should be visible.
-   * @private
-   */
-  shouldShowNoNearbyPrinterMessage_: function() {
-    return !this.searchTerm && !this.nearbyPrinters_.length;
   }
 });
\ No newline at end of file
diff --git a/chrome/browser/resources/settings/settings_ui/settings_ui.js b/chrome/browser/resources/settings/settings_ui/settings_ui.js
index 1be9ab85..f3b8d60 100644
--- a/chrome/browser/resources/settings/settings_ui/settings_ui.js
+++ b/chrome/browser/resources/settings/settings_ui/settings_ui.js
@@ -152,6 +152,8 @@
           loadTimeData.getString('networkListItemConnectingTo'),
       networkListItemInitializing:
           loadTimeData.getString('networkListItemInitializing'),
+      networkListItemNotAvailable:
+          loadTimeData.getString('networkListItemNotAvailable'),
       networkListItemScanning:
           loadTimeData.getString('networkListItemScanning'),
       networkListItemSimCardLocked:
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc
index 187ddfc6..312cbede 100644
--- a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc
+++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate.cc
@@ -235,6 +235,10 @@
   if (!base::FeatureList::IsEnabled(kDeepScanningOfUploads))
     return false;
 
+  // If this is an incognitio profile, don't perform scans.
+  if (profile->IsOffTheRecord())
+    return false;
+
   // If there's no DM token, the upload will fail.
   if (GetDMToken().empty())
     return false;
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate_unittest.cc b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate_unittest.cc
index 5d7dff9..f2136e4 100644
--- a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate_unittest.cc
+++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_dialog_delegate_unittest.cc
@@ -68,7 +68,7 @@
     updater->GetList().emplace_back(url.host());
   }
 
-  Profile* profile() { return profile_; }
+  TestingProfile* profile() { return profile_; }
 
  private:
   content::BrowserTaskEnvironment task_environment_;
@@ -230,6 +230,22 @@
   EXPECT_TRUE(data.do_malware_scan);
 }
 
+TEST_F(DeepScanningDialogDelegateIsEnabledTest, NoScanInIncognito) {
+  GURL url(kTestUrl);
+  EnableFeatures({kDeepScanningOfUploads});
+  SetDMToken(kDmToken);
+  SetDlpPolicy(CHECK_UPLOADS_AND_DOWNLOADS);
+  SetMalwarePolicy(SEND_UPLOADS_AND_DOWNLOADS);
+  AddUrlToList(prefs::kDomainsToCheckForMalwareOfUploadedContent, url);
+
+  DeepScanningDialogDelegate::Data data;
+  EXPECT_TRUE(DeepScanningDialogDelegate::IsEnabled(profile(), url, &data));
+
+  // The same URL should not trigger a scan in incognito.
+  EXPECT_FALSE(DeepScanningDialogDelegate::IsEnabled(
+      profile()->GetOffTheRecordProfile(), url, &data));
+}
+
 class DeepScanningDialogDelegateAuditOnlyTest : public BaseTest {
  protected:
   void RunUntilDone() { run_loop_.Run(); }
diff --git a/chrome/browser/safe_browsing/services_delegate.h b/chrome/browser/safe_browsing/services_delegate.h
index 0708e293..3bc1b73 100644
--- a/chrome/browser/safe_browsing/services_delegate.h
+++ b/chrome/browser/safe_browsing/services_delegate.h
@@ -148,16 +148,16 @@
   // Unowned pointer
   ServicesCreator* const services_creator_;
 
-  // TODO(xinghuilu@): Change it to base::map<>
   // Tracks existing Profiles, and their corresponding
   // ChromePasswordProtectionService instances.
   // Accessed on UI thread.
-  std::map<Profile*, std::unique_ptr<ChromePasswordProtectionService>>
+  base::flat_map<Profile*, std::unique_ptr<ChromePasswordProtectionService>>
       password_protection_service_map_;
 
   // Tracks existing Profiles, and their corresponding VerdictCacheManager
   // instances. Accessed on UI thread.
-  std::map<Profile*, std::unique_ptr<VerdictCacheManager>> cache_manager_map_;
+  base::flat_map<Profile*, std::unique_ptr<VerdictCacheManager>>
+      cache_manager_map_;
 };
 
 }  // namespace safe_browsing
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index 333146e..3147051 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -117,7 +117,6 @@
     {"customize.js", IDR_LOCAL_NTP_CUSTOMIZE_JS, "application/javascript"},
     {"doodles.css", IDR_LOCAL_NTP_DOODLES_CSS, "text/css"},
     {"doodles.js", IDR_LOCAL_NTP_DOODLES_JS, "application/javascript"},
-    {"images/close_3_mask.png", IDR_CLOSE_3_MASK, "image/png"},
     {"images/ntp_default_favicon.png", IDR_NTP_DEFAULT_FAVICON, "image/png"},
     {"local-ntp.css", IDR_LOCAL_NTP_CSS, "text/css"},
     {"local-ntp.js", IDR_LOCAL_NTP_JS, "application/javascript"},
diff --git a/chrome/browser/search/most_visited_iframe_source.cc b/chrome/browser/search/most_visited_iframe_source.cc
index d89b02d..4243f74e 100644
--- a/chrome/browser/search/most_visited_iframe_source.cc
+++ b/chrome/browser/search/most_visited_iframe_source.cc
@@ -28,6 +28,8 @@
 // Multi-iframe version, used by third party remote NTPs.
 const char kAssertJsPath[] = "/assert.js";
 const char kCommonCSSPath[] = "/common.css";
+const char kDontShowPngPath[] = "/dont_show.png";
+const char kDontShow2XPngPath[] = "/dont_show_2x.png";
 const char kTitleHTMLPath[] = "/title.html";
 const char kTitleCSSPath[] = "/title.css";
 const char kTitleJSPath[] = "/title.js";
@@ -81,6 +83,10 @@
     SendJSWithOrigin(IDR_MOST_VISITED_UTIL_JS, wc_getter, callback);
   } else if (path == kCommonCSSPath) {
     SendResource(IDR_MOST_VISITED_IFRAME_CSS, callback);
+  } else if (path == kDontShowPngPath) {
+    SendResource(IDR_MOST_VISITED_DONT_SHOW_PNG, callback);
+  } else if (path == kDontShow2XPngPath) {
+    SendResource(IDR_MOST_VISITED_DONT_SHOW_2X_PNG, callback);
   } else if (path == kEditHTMLPath) {
     SendResource(IDR_CUSTOM_LINKS_EDIT_HTML, callback);
   } else if (path == kEditCSSPath) {
@@ -151,7 +157,8 @@
          path == kAddWhiteSvgPath || path == kEditMenuSvgPath ||
          path == kLocalNTPCommonCSSPath || path == kAnimationsCSSPath ||
          path == kAnimationsJSPath || path == kLocalNTPUtilsJSPath ||
-         path == kAssertJsPath;
+         path == kAssertJsPath || path == kDontShowPngPath ||
+         path == kDontShow2XPngPath;
 }
 
 void MostVisitedIframeSource::SendResource(
diff --git a/chrome/browser/sync/profile_sync_service_factory_unittest.cc b/chrome/browser/sync/profile_sync_service_factory_unittest.cc
index 409272c..14955926 100644
--- a/chrome/browser/sync/profile_sync_service_factory_unittest.cc
+++ b/chrome/browser/sync/profile_sync_service_factory_unittest.cc
@@ -45,7 +45,7 @@
 
   // Returns the collection of default datatypes.
   std::vector<syncer::ModelType> DefaultDatatypes() {
-    static_assert(39 == syncer::ModelType::NUM_ENTRIES,
+    static_assert(42 == syncer::ModelType::NUM_ENTRIES,
                   "When adding a new type, you probably want to add it here as "
                   "well (assuming it is already enabled).");
 
diff --git a/chrome/browser/touch_to_fill/android/internal/java/res/drawable-night/touch_to_fill_header_image.xml b/chrome/browser/touch_to_fill/android/internal/java/res/drawable-night/touch_to_fill_header_image.xml
new file mode 100644
index 0000000..806d86d5
--- /dev/null
+++ b/chrome/browser/touch_to_fill/android/internal/java/res/drawable-night/touch_to_fill_header_image.xml
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2019 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<!-- VectorRaster is ignored because:
+     1. The image should be shown rarely enough to prioritize binary size over inflation time.
+     2. Area-wise it's less than 63% of the recommended 200dp x 200dp limit. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:width="224dp"
+    android:height="112dp"
+    android:viewportWidth="312"
+    android:viewportHeight="156"
+    tools:targetApi="21"
+    tools:ignore="VectorRaster">
+
+    <path
+        android:pathData="M146.385,114.133a24.772,2.241 0,1 0,49.544 0a24.772,2.241 0,1 0,-49.544 0z"
+        android:strokeAlpha="0.16272135"
+        android:strokeWidth="1"
+        android:fillColor="#EDEDED"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.16272135"/>
+    <path
+        android:pathData="M17.659,117.572a24.772,2.241 0,1 0,49.544 0a24.772,2.241 0,1 0,-49.544 0z"
+        android:strokeAlpha="0.16272135"
+        android:strokeWidth="1"
+        android:fillColor="#EDEDED"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.16272135"/>
+    <path
+        android:pathData="M178.655,132.136l0,4.446l43.19,0l0,-8.884z"
+        android:strokeAlpha="0.16272135"
+        android:strokeWidth="1"
+        android:fillColor="#EDEDED"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.16272135"/>
+    <path
+        android:pathData="M168.243,109.143L168.243,50.86C168.243,48.354 170.275,46.323 172.782,46.323L179.363,46.323L179.363,109.143L168.243,109.143Z"
+        android:strokeWidth="1"
+        android:fillColor="#414447"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M178.455,47.23L178.455,108.235L169.151,108.235L169.151,50.86C169.151,48.855 170.777,47.23 172.782,47.23L178.455,47.23L178.455,47.23ZM180.271,45.415L172.782,45.415C169.774,45.415 167.336,47.853 167.336,50.86L167.336,110.05L180.271,110.05L180.271,45.415Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M172.555,109.143L172.555,50.86C172.555,48.354 174.587,46.323 177.094,46.323L248.097,46.323C250.604,46.323 252.636,48.354 252.636,50.86L252.636,109.143L172.555,109.143Z"
+        android:strokeWidth="1"
+        android:fillColor="#414447"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M248.097,47.23C250.102,47.23 251.728,48.855 251.728,50.86L251.728,108.235L173.463,108.235L173.463,50.86C173.463,48.855 175.088,47.23 177.094,47.23L248.097,47.23L248.097,47.23ZM248.097,45.415L177.094,45.415C174.086,45.415 171.647,47.853 171.647,50.86L171.647,110.05L253.543,110.05L253.543,50.86C253.543,47.853 251.105,45.415 248.097,45.415Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M172.782,115.603C170.275,115.603 168.243,113.572 168.243,111.066L168.243,108.807L224.623,108.807L224.623,115.603L172.782,115.603Z"
+        android:strokeWidth="1"
+        android:fillColor="#414447"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M223.715,109.714L223.715,114.696L172.782,114.696C170.777,114.696 169.151,113.071 169.151,111.066L169.151,109.714L223.715,109.714L223.715,109.714ZM225.531,107.899L167.336,107.899L167.336,111.066C167.336,114.073 169.774,116.511 172.782,116.511L225.531,116.511L225.531,107.899L225.531,107.899Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M222.354,115.603C219.847,115.603 217.815,113.572 217.815,111.066L217.815,108.807L300.092,108.807L300.092,111.066C300.092,113.572 298.06,115.603 295.554,115.603L222.354,115.603Z"
+        android:strokeWidth="1"
+        android:fillColor="#414447"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M299.185,109.714L299.185,111.066C299.185,113.071 297.559,114.696 295.554,114.696L222.39,114.696C220.385,114.696 218.759,113.071 218.759,111.066L218.759,109.714L299.185,109.714L299.185,109.714ZM301,107.899L216.943,107.899L216.943,111.066C216.943,114.073 219.382,116.511 222.39,116.511L295.554,116.511C298.562,116.511 301,114.073 301,111.066L301,107.899Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M266.397,112.21L251.474,112.21C250.594,112.21 249.749,111.859 249.128,111.236C248.506,110.613 248.158,109.768 248.161,108.889L248.161,107.899L269.71,107.899L269.71,108.87C269.718,109.753 269.372,110.603 268.75,111.23C268.127,111.857 267.28,112.21 266.397,112.21L266.397,112.21Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M179.018,52.793h67.154v49.889h-67.154z"
+        android:strokeWidth="1"
+        android:fillColor="#303030"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M245.265,53.7L245.265,101.793L179.908,101.793L179.908,53.7L245.265,53.7L245.265,53.7ZM247.08,51.885L178.092,51.885L178.092,103.607L247.08,103.607L247.08,51.885Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M213.738,75.995L229.952,75.995A0.58,0.58 0,0 1,230.532 76.575L230.532,76.586A0.58,0.58 0,0 1,229.952 77.166L213.738,77.166A0.58,0.58 0,0 1,213.158 76.586L213.158,76.575A0.58,0.58 0,0 1,213.738 75.995z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M213.684,78.182L226.72,78.182A0.526,0.526 0,0 1,227.246 78.708L227.246,78.708A0.526,0.526 0,0 1,226.72 79.234L213.684,79.234A0.526,0.526 0,0 1,213.158 78.708L213.158,78.708A0.526,0.526 0,0 1,213.684 78.182z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M202.61,82.256C201.246,82.259 199.971,81.577 199.215,80.441C199.215,79.316 201.476,78.699 202.61,78.699C203.745,78.699 205.987,79.316 206.005,80.441C205.25,81.577 203.975,82.259 202.61,82.256L202.61,82.256ZM202.61,74.216C203.301,74.213 203.926,74.626 204.193,75.263C204.46,75.9 204.317,76.636 203.829,77.125C203.342,77.615 202.607,77.763 201.968,77.499C201.33,77.236 200.913,76.613 200.913,75.922C200.91,75.471 201.088,75.037 201.407,74.717C201.725,74.396 202.158,74.216 202.61,74.216L202.61,74.216ZM202.61,72.52C199.482,72.52 196.946,75.055 196.946,78.182C196.946,81.309 199.482,83.844 202.61,83.844C205.739,83.844 208.275,81.309 208.275,78.182C208.27,75.057 205.736,72.525 202.61,72.52Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M61.047,44.98L103.696,44.98A5,5 0,0 1,108.696 49.98L108.696,114.387A5,5 0,0 1,103.696 119.387L61.047,119.387A5,5 0,0 1,56.047 114.387L56.047,49.98A5,5 0,0 1,61.047 44.98z"
+        android:strokeWidth="1"
+        android:fillColor="#414447"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M104.157,45.887C106.162,45.887 107.788,47.512 107.788,49.517L107.788,114.85C107.788,116.855 106.162,118.48 104.157,118.48L60.586,118.48C58.58,118.48 56.955,116.855 56.955,114.85L56.955,49.517C56.955,47.512 58.58,45.887 60.586,45.887L104.157,45.887L104.157,45.887ZM104.157,44.072L60.586,44.072C57.578,44.072 55.139,46.51 55.139,49.517L55.139,114.85C55.139,117.857 57.578,120.295 60.586,120.295L104.157,120.295C107.165,120.295 109.603,117.857 109.603,114.85L109.603,49.517C109.603,46.51 107.165,44.072 104.157,44.072Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M61.493,50.424h41.756v63.519h-41.756z"
+        android:strokeWidth="1"
+        android:fillColor="#303030"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M102.342,51.332L102.342,113.035L62.401,113.035L62.401,51.332L102.342,51.332L102.342,51.332ZM104.157,49.517L60.586,49.517L60.586,114.85L104.157,114.85L104.157,49.517Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M39.261,63.128L60.124,63.128A5,5 0,0 1,65.124 68.128L65.124,114.387A5,5 0,0 1,60.124 119.387L39.261,119.387A5,5 0,0 1,34.261 114.387L34.261,68.128A5,5 0,0 1,39.261 63.128z"
+        android:strokeWidth="1"
+        android:fillColor="#414447"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M60.586,64.035C62.591,64.035 64.217,65.66 64.217,67.665L64.217,114.85C64.217,116.855 62.591,118.48 60.586,118.48L38.8,118.48C36.795,118.48 35.169,116.855 35.169,114.85L35.169,67.665C35.169,65.66 36.795,64.035 38.8,64.035L60.586,64.035L60.586,64.035ZM60.586,62.221L38.8,62.221C35.792,62.221 33.353,64.658 33.353,67.665L33.353,114.85C33.353,117.857 35.792,120.295 38.8,120.295L60.586,120.295C63.594,120.295 66.032,117.857 66.032,114.85L66.032,67.665C66.032,64.658 63.594,62.221 60.586,62.221Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M33.353,71.295h32.679v1.815h-32.679z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M33.353,111.221h32.679v1.815h-32.679z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M35.169,73.109h29.048v38.111h-29.048z"
+        android:strokeWidth="1"
+        android:fillColor="#303030"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M43.338,66.758L56.047,66.758A0.907,0.907 0,0 1,56.955 67.665L56.955,67.665A0.907,0.907 0,0 1,56.047 68.572L43.338,68.572A0.907,0.907 0,0 1,42.431 67.665L42.431,67.665A0.907,0.907 0,0 1,43.338 66.758z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M44.372,94.361L55.013,94.361A0.58,0.58 0,0 1,55.593 94.941L55.593,94.951A0.58,0.58 0,0 1,55.013 95.531L44.372,95.531A0.58,0.58 0,0 1,43.792 94.951L43.792,94.941A0.58,0.58 0,0 1,44.372 94.361z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M45.435,96.539L53.95,96.539A0.526,0.526 0,0 1,54.476 97.065L54.476,97.065A0.526,0.526 0,0 1,53.95 97.591L45.435,97.591A0.526,0.526 0,0 1,44.909 97.065L44.909,97.065A0.526,0.526 0,0 1,45.435 96.539z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M77.051,78.327L87.692,78.327A0.58,0.58 0,0 1,88.272 78.907L88.272,78.918A0.58,0.58 0,0 1,87.692 79.498L77.051,79.498A0.58,0.58 0,0 1,76.471 78.918L76.471,78.907A0.58,0.58 0,0 1,77.051 78.327z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M78.114,80.514L86.629,80.514A0.526,0.526 0,0 1,87.155 81.04L87.155,81.04A0.526,0.526 0,0 1,86.629 81.566L78.114,81.566A0.526,0.526 0,0 1,77.588 81.04L77.588,81.04A0.526,0.526 0,0 1,78.114 80.514z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M49.693,88.671C48.422,88.672 47.235,88.035 46.534,86.975C46.534,85.931 48.64,85.359 49.693,85.359C50.746,85.359 52.843,85.931 52.852,86.975C52.15,88.035 50.964,88.672 49.693,88.671L49.693,88.671ZM49.693,81.194C50.332,81.194 50.907,81.579 51.152,82.169C51.396,82.759 51.261,83.438 50.81,83.89C50.358,84.341 49.678,84.476 49.088,84.232C48.498,83.988 48.113,83.412 48.113,82.773C48.113,81.901 48.82,81.194 49.693,81.194ZM49.693,79.616C47.558,79.612 45.632,80.895 44.813,82.866C43.994,84.837 44.445,87.107 45.954,88.615C47.464,90.124 49.735,90.575 51.706,89.757C53.678,88.938 54.961,87.013 54.958,84.879C54.958,81.972 52.6,79.616 49.693,79.616Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M82.371,69.534C81.081,69.536 79.876,68.888 79.167,67.81C79.167,66.749 81.3,66.168 82.371,66.168C83.442,66.168 85.567,66.749 85.576,67.81C84.867,68.889 83.662,69.537 82.371,69.534L82.371,69.534ZM82.371,61.948C83.022,61.948 83.608,62.341 83.857,62.942C84.105,63.543 83.966,64.235 83.504,64.693C83.043,65.152 82.35,65.287 81.75,65.036C81.15,64.784 80.761,64.196 80.765,63.545C80.765,63.12 80.934,62.713 81.236,62.413C81.537,62.113 81.946,61.946 82.371,61.948ZM82.371,60.342C80.206,60.328 78.245,61.62 77.406,63.616C76.567,65.612 77.015,67.917 78.542,69.453C80.068,70.989 82.37,71.453 84.373,70.628C86.375,69.803 87.682,67.852 87.682,65.687C87.682,62.749 85.31,60.362 82.371,60.342L82.371,60.342Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M143.79,50.334L143.79,39.445C143.79,38.892 143.343,38.445 142.79,38.445C142.238,38.445 141.79,38.892 141.79,39.445L141.79,50.334C141.79,50.886 142.238,51.334 142.79,51.334C143.343,51.334 143.79,50.886 143.79,50.334Z"
+        android:strokeWidth="1"
+        android:fillColor="#FED563"
+        android:strokeColor="#FED563"/>
+    <path
+        android:pathData="M95.977,62.92L87.218,54.163C86.827,53.773 86.194,53.773 85.803,54.164C85.413,54.554 85.413,55.187 85.804,55.578L94.563,64.334C94.954,64.725 95.587,64.725 95.977,64.334C96.368,63.943 96.368,63.31 95.977,62.92Z"
+        android:strokeWidth="1"
+        android:fillColor="#FED563"
+        android:strokeColor="#FED563"/>
+    <path
+        android:pathData="M191.008,64.335L199.777,55.578C200.167,55.188 200.168,54.555 199.778,54.164C199.387,53.773 198.754,53.773 198.363,54.163L189.595,62.919C189.204,63.31 189.203,63.943 189.594,64.334C189.984,64.724 190.617,64.725 191.008,64.335Z"
+        android:strokeWidth="1"
+        android:fillColor="#FED563"
+        android:strokeColor="#FED563"/>
+    <path
+        android:pathData="M26.684,36.882C22.714,38.091 20.001,41.752 20,45.9C20,46.452 20.447,46.9 21,46.9C21.552,46.9 22,46.453 22,45.9C22.001,42.632 24.138,39.748 27.266,38.795C30.394,37.843 33.778,39.045 35.602,41.758L36.015,42.373L36.724,42.156C37.096,42.042 37.482,41.984 37.87,41.982C38.905,41.982 39.903,42.395 40.638,43.13C41.373,43.865 41.786,44.861 41.786,45.9C41.786,46.452 42.233,46.9 42.786,46.9C43.338,46.9 43.786,46.452 43.786,45.9C43.786,44.331 43.162,42.825 42.052,41.715C40.941,40.605 39.436,39.982 37.866,39.982C37.523,39.984 37.182,40.014 36.848,40.073C34.459,37.034 30.427,35.742 26.684,36.882Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M37.893,39.982C36.323,39.982 34.817,40.607 33.708,41.719C33.318,42.11 33.319,42.743 33.71,43.133C34.101,43.523 34.734,43.522 35.124,43.131C35.858,42.396 36.854,41.982 37.893,41.982C38.445,41.982 38.893,41.534 38.893,40.982C38.893,40.43 38.445,39.982 37.893,39.982Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M80.182,23.374C78.614,23.371 77.106,23.993 75.995,25.104C74.884,26.215 74.261,27.722 74.264,29.294C74.265,29.846 74.713,30.293 75.266,30.292C75.818,30.291 76.265,29.842 76.264,29.29C76.262,28.251 76.674,27.253 77.409,26.519C78.144,25.784 79.142,25.372 80.182,25.374C80.573,25.373 80.96,25.429 81.332,25.54L82.037,25.751L82.448,25.14C84.273,22.426 87.658,21.224 90.787,22.179C93.916,23.134 96.052,26.021 96.05,29.291C96.049,29.843 96.496,30.291 97.049,30.292C97.601,30.292 98.049,29.845 98.05,29.292C98.053,25.142 95.341,21.478 91.371,20.266C87.625,19.123 83.589,20.416 81.199,23.459C80.864,23.402 80.524,23.373 80.182,23.374Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M80.19,25.373C81.233,25.367 82.235,25.78 82.968,26.52C83.357,26.913 83.99,26.915 84.383,26.526C84.775,26.138 84.778,25.505 84.389,25.112C83.276,23.99 81.758,23.363 80.177,23.374C79.625,23.377 79.18,23.828 79.184,24.38C79.187,24.932 79.638,25.377 80.19,25.373Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M273.957,67.244C270.689,67.244 268.039,69.893 268.039,73.162C268.039,73.714 268.486,74.162 269.039,74.162C269.591,74.162 270.039,73.714 270.039,73.162C270.039,70.998 271.793,69.244 273.958,69.244C274.348,69.243 274.734,69.3 275.106,69.411L275.812,69.622L276.223,69.011C278.047,66.297 281.433,65.095 284.562,66.049C287.69,67.004 289.827,69.891 289.824,73.161C289.824,73.714 290.271,74.162 290.823,74.162C291.376,74.162 291.824,73.715 291.824,73.163C291.828,69.013 289.116,65.348 285.146,64.136C281.399,62.993 277.363,64.287 274.974,67.329C274.638,67.272 274.298,67.243 273.957,67.244Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M273.956,69.244C274.982,69.247 275.966,69.659 276.688,70.39C277.076,70.782 277.709,70.786 278.102,70.398C278.495,70.01 278.498,69.377 278.11,68.984C277.014,67.875 275.521,67.249 273.961,67.244C273.409,67.242 272.96,67.689 272.958,68.241C272.957,68.793 273.403,69.242 273.956,69.244Z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M97.59,67.919L184.886,67.919A5.37,5.37 0,0 1,190.256 73.289L190.256,91.586A5.37,5.37 0,0 1,184.886 96.956L97.59,96.956A5.37,5.37 0,0 1,92.22 91.586L92.22,73.289A5.37,5.37 0,0 1,97.59 67.919z"
+        android:strokeWidth="1"
+        android:fillColor="#8AB4F8"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M174.824,73.364L174.824,73.364A0.908,0.908 0,0 1,175.732 74.271L175.732,90.604A0.908,0.908 0,0 1,174.824 91.512L174.824,91.512A0.908,0.908 0,0 1,173.917 90.604L173.917,74.271A0.908,0.908 0,0 1,174.824 73.364z"
+        android:strokeWidth="1"
+        android:fillColor="#F28B82"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M103.113,81.303h14.524v2.269h-14.524z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M107.725,75.583l7.262,12.573l-1.965,1.134l-7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M114.987,76.717l-7.262,12.573l-1.965,-1.134l7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M126.714,81.303h14.524v2.269h-14.524z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M131.327,75.58l7.262,12.573l-1.965,1.134l-7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M138.589,76.714l-7.262,12.573l-1.965,-1.134l7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M150.315,81.303h14.524v2.269h-14.524z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M154.928,75.586l7.262,12.573l-1.965,1.134l-7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M162.19,76.72l-7.262,12.573l-1.965,-1.134l7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#5F6368"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M186.308,120.417C184.774,120.647 182.788,122.647 179.9,126.527C177.035,130.381 176.077,132.137 176.361,133.732C176.677,135.615 178.436,136.273 181.425,135.998C182.325,135.916 183.274,135.754 184.359,135.518C184.799,135.422 186.275,135.072 186.529,135.021L208.909,130.636L208.909,117.526C208.904,117.524 208.898,117.523 208.893,117.521C208.6,117.438 208.272,117.354 207.918,117.276C206.849,117.041 205.778,116.906 204.789,116.922C203.675,116.941 202.745,117.153 202.057,117.58C201.224,118.097 200.56,118.868 199.628,120.263C199.566,120.355 199.052,121.135 198.901,121.358C197.785,123.005 196.966,123.777 195.794,123.93C194.65,124.079 194.132,123.822 191.339,122.087C189.135,120.718 187.787,120.201 186.308,120.417Z"
+        android:strokeWidth="1"
+        android:fillColor="#FED563"
+        android:strokeColor="#FED563"/>
+    <path
+        android:pathData="M175.85,133.815L209.391,127.699L209.391,123.552L176.885,130.04C176.885,130.04 175.442,132.672 175.85,133.815Z"
+        android:strokeAlpha="0.1"
+        android:strokeWidth="1"
+        android:fillColor="#231F20"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.1"/>
+    <path
+        android:pathData="M220.266,106.539C212.135,106.539 205.543,113.128 205.543,121.256C205.543,129.385 212.135,135.974 220.266,135.974C228.397,135.974 234.989,129.385 234.989,121.256C234.989,113.128 228.397,106.539 220.266,106.539ZM225.076,124.052C223.467,124.052 222.017,123.082 221.402,121.596C220.787,120.109 221.129,118.398 222.269,117.262C223.408,116.126 225.12,115.789 226.606,116.407C228.091,117.026 229.058,118.478 229.053,120.086C229.053,121.14 228.634,122.15 227.888,122.894C227.141,123.638 226.13,124.055 225.076,124.052Z"
+        android:strokeWidth="1"
+        android:fillColor="#FED563"
+        android:strokeColor="#FED563"/>
+    <path
+        android:pathData="M220.266,136.474C228.673,136.474 235.489,129.661 235.489,121.256C235.489,112.852 228.673,106.039 220.266,106.039L220.266,136.474ZM225.077,123.552C223.67,123.552 222.402,122.704 221.864,121.405C221.326,120.105 221.625,118.609 222.622,117.616C223.618,116.623 225.115,116.328 226.414,116.869C227.712,117.409 228.557,118.679 228.553,120.086C228.553,121.007 228.187,121.89 227.535,122.54C226.882,123.19 225.998,123.555 225.077,123.552Z"
+        android:strokeWidth="1"
+        android:fillColor="#FDE293"
+        android:strokeColor="#00000000"/>
+</vector>
diff --git a/chrome/browser/touch_to_fill/android/internal/java/res/drawable/touch_to_fill_header_image.xml b/chrome/browser/touch_to_fill/android/internal/java/res/drawable/touch_to_fill_header_image.xml
new file mode 100644
index 0000000..9a3f03f
--- /dev/null
+++ b/chrome/browser/touch_to_fill/android/internal/java/res/drawable/touch_to_fill_header_image.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2019 The Chromium Authors. All rights reserved.
+     Use of this source code is governed by a BSD-style license that can be
+     found in the LICENSE file. -->
+
+<!-- VectorRaster is ignored because:
+     1. The image should be shown rarely enough to prioritize binary size over inflation time.
+     2. Area-wise it's less than 63% of the recommended 200dp x 200dp limit. -->
+<vector
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:width="224dp"
+    android:height="112dp"
+    android:viewportWidth="312"
+    android:viewportHeight="156"
+    tools:targetApi="21"
+    tools:ignore="VectorRaster">
+
+    <path
+        android:pathData="M146.385,114.133a24.772,2.241 0,1 0,49.544 0a24.772,2.241 0,1 0,-49.544 0z"
+        android:strokeAlpha="0.04"
+        android:strokeWidth="1"
+        android:fillColor="#202124"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.04"/>
+    <path
+        android:pathData="M17.659,117.572a24.772,2.241 0,1 0,49.544 0a24.772,2.241 0,1 0,-49.544 0z"
+        android:strokeAlpha="0.04"
+        android:strokeWidth="1"
+        android:fillColor="#202124"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.04"/>
+    <path
+        android:pathData="M178.655,132.136l0,4.446l43.19,0l0,-8.884z"
+        android:strokeAlpha="0.04"
+        android:strokeWidth="1"
+        android:fillColor="#202124"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.04"/>
+    <path
+        android:pathData="M168.243,109.143L168.243,50.86C168.243,48.354 170.275,46.323 172.782,46.323L179.363,46.323L179.363,109.143L168.243,109.143Z"
+        android:strokeWidth="1"
+        android:fillColor="#F8F9FA"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M178.455,47.23L178.455,108.235L169.151,108.235L169.151,50.86C169.151,48.855 170.777,47.23 172.782,47.23L178.455,47.23L178.455,47.23ZM180.271,45.415L172.782,45.415C169.774,45.415 167.336,47.853 167.336,50.86L167.336,110.05L180.271,110.05L180.271,45.415Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M172.555,109.143L172.555,50.86C172.555,48.354 174.587,46.323 177.094,46.323L248.097,46.323C250.604,46.323 252.636,48.354 252.636,50.86L252.636,109.143L172.555,109.143Z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M248.097,47.23C250.102,47.23 251.728,48.855 251.728,50.86L251.728,108.235L173.463,108.235L173.463,50.86C173.463,48.855 175.088,47.23 177.094,47.23L248.097,47.23L248.097,47.23ZM248.097,45.415L177.094,45.415C174.086,45.415 171.647,47.853 171.647,50.86L171.647,110.05L253.543,110.05L253.543,50.86C253.543,47.853 251.105,45.415 248.097,45.415Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M172.782,115.603C170.275,115.603 168.243,113.572 168.243,111.066L168.243,108.807L224.623,108.807L224.623,115.603L172.782,115.603Z"
+        android:strokeWidth="1"
+        android:fillColor="#F8F9FA"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M223.715,109.714L223.715,114.696L172.782,114.696C170.777,114.696 169.151,113.071 169.151,111.066L169.151,109.714L223.715,109.714L223.715,109.714ZM225.531,107.899L167.336,107.899L167.336,111.066C167.336,114.073 169.774,116.511 172.782,116.511L225.531,116.511L225.531,107.899L225.531,107.899Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M222.354,115.603C219.847,115.603 217.815,113.572 217.815,111.066L217.815,108.807L300.092,108.807L300.092,111.066C300.092,113.572 298.06,115.603 295.554,115.603L222.354,115.603Z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M299.185,109.714L299.185,111.066C299.185,113.071 297.559,114.696 295.554,114.696L222.39,114.696C220.385,114.696 218.759,113.071 218.759,111.066L218.759,109.714L299.185,109.714L299.185,109.714ZM301,107.899L216.943,107.899L216.943,111.066C216.943,114.073 219.382,116.511 222.39,116.511L295.554,116.511C298.562,116.511 301,114.073 301,111.066L301,107.899Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M266.397,112.21L251.474,112.21C250.594,112.21 249.749,111.859 249.128,111.236C248.506,110.613 248.158,109.768 248.161,108.889L248.161,107.899L269.71,107.899L269.71,108.87C269.718,109.753 269.372,110.603 268.75,111.23C268.127,111.857 267.28,112.21 266.397,112.21L266.397,112.21Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M179.018,52.793h67.154v49.889h-67.154z"
+        android:strokeWidth="1"
+        android:fillColor="#F8F9FA"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M245.265,53.7L245.265,101.793L179.908,101.793L179.908,53.7L245.265,53.7L245.265,53.7ZM247.08,51.885L178.092,51.885L178.092,103.607L247.08,103.607L247.08,51.885Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M213.738,75.995L229.952,75.995A0.58,0.58 0,0 1,230.532 76.575L230.532,76.586A0.58,0.58 0,0 1,229.952 77.166L213.738,77.166A0.58,0.58 0,0 1,213.158 76.586L213.158,76.575A0.58,0.58 0,0 1,213.738 75.995z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M213.684,78.182L226.72,78.182A0.526,0.526 0,0 1,227.246 78.708L227.246,78.708A0.526,0.526 0,0 1,226.72 79.234L213.684,79.234A0.526,0.526 0,0 1,213.158 78.708L213.158,78.708A0.526,0.526 0,0 1,213.684 78.182z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M202.61,82.256C201.246,82.259 199.971,81.577 199.215,80.441C199.215,79.316 201.476,78.699 202.61,78.699C203.745,78.699 205.987,79.316 206.005,80.441C205.25,81.577 203.975,82.259 202.61,82.256L202.61,82.256ZM202.61,74.216C203.301,74.213 203.926,74.626 204.193,75.263C204.46,75.9 204.317,76.636 203.829,77.125C203.342,77.615 202.607,77.763 201.968,77.499C201.33,77.236 200.913,76.613 200.913,75.922C200.91,75.471 201.088,75.037 201.407,74.717C201.725,74.396 202.158,74.216 202.61,74.216L202.61,74.216ZM202.61,72.52C199.482,72.52 196.946,75.055 196.946,78.182C196.946,81.309 199.482,83.844 202.61,83.844C205.739,83.844 208.275,81.309 208.275,78.182C208.27,75.057 205.736,72.525 202.61,72.52Z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M61.047,44.98L103.696,44.98A5,5 0,0 1,108.696 49.98L108.696,114.387A5,5 0,0 1,103.696 119.387L61.047,119.387A5,5 0,0 1,56.047 114.387L56.047,49.98A5,5 0,0 1,61.047 44.98z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M104.157,45.887C106.162,45.887 107.788,47.512 107.788,49.517L107.788,114.85C107.788,116.855 106.162,118.48 104.157,118.48L60.586,118.48C58.58,118.48 56.955,116.855 56.955,114.85L56.955,49.517C56.955,47.512 58.58,45.887 60.586,45.887L104.157,45.887L104.157,45.887ZM104.157,44.072L60.586,44.072C57.578,44.072 55.139,46.51 55.139,49.517L55.139,114.85C55.139,117.857 57.578,120.295 60.586,120.295L104.157,120.295C107.165,120.295 109.603,117.857 109.603,114.85L109.603,49.517C109.603,46.51 107.165,44.072 104.157,44.072Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M61.493,50.424h41.756v63.519h-41.756z"
+        android:strokeWidth="1"
+        android:fillColor="#F8F9FA"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M102.342,51.332L102.342,113.035L62.401,113.035L62.401,51.332L102.342,51.332L102.342,51.332ZM104.157,49.517L60.586,49.517L60.586,114.85L104.157,114.85L104.157,49.517Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M39.261,63.128L60.124,63.128A5,5 0,0 1,65.124 68.128L65.124,114.387A5,5 0,0 1,60.124 119.387L39.261,119.387A5,5 0,0 1,34.261 114.387L34.261,68.128A5,5 0,0 1,39.261 63.128z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M60.586,64.035C62.591,64.035 64.217,65.66 64.217,67.665L64.217,114.85C64.217,116.855 62.591,118.48 60.586,118.48L38.8,118.48C36.795,118.48 35.169,116.855 35.169,114.85L35.169,67.665C35.169,65.66 36.795,64.035 38.8,64.035L60.586,64.035L60.586,64.035ZM60.586,62.221L38.8,62.221C35.792,62.221 33.353,64.658 33.353,67.665L33.353,114.85C33.353,117.857 35.792,120.295 38.8,120.295L60.586,120.295C63.594,120.295 66.032,117.857 66.032,114.85L66.032,67.665C66.032,64.658 63.594,62.221 60.586,62.221Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M33.353,71.295h32.679v1.815h-32.679z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M33.353,111.221h32.679v1.815h-32.679z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M35.169,73.109h29.048v38.111h-29.048z"
+        android:strokeWidth="1"
+        android:fillColor="#F8F9FA"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M43.338,66.758L56.047,66.758A0.907,0.907 0,0 1,56.955 67.665L56.955,67.665A0.907,0.907 0,0 1,56.047 68.572L43.338,68.572A0.907,0.907 0,0 1,42.431 67.665L42.431,67.665A0.907,0.907 0,0 1,43.338 66.758z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M44.372,94.361L55.013,94.361A0.58,0.58 0,0 1,55.593 94.941L55.593,94.951A0.58,0.58 0,0 1,55.013 95.531L44.372,95.531A0.58,0.58 0,0 1,43.792 94.951L43.792,94.941A0.58,0.58 0,0 1,44.372 94.361z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M45.435,96.539L53.95,96.539A0.526,0.526 0,0 1,54.476 97.065L54.476,97.065A0.526,0.526 0,0 1,53.95 97.591L45.435,97.591A0.526,0.526 0,0 1,44.909 97.065L44.909,97.065A0.526,0.526 0,0 1,45.435 96.539z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M77.051,78.327L87.692,78.327A0.58,0.58 0,0 1,88.272 78.907L88.272,78.918A0.58,0.58 0,0 1,87.692 79.498L77.051,79.498A0.58,0.58 0,0 1,76.471 78.918L76.471,78.907A0.58,0.58 0,0 1,77.051 78.327z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M78.114,80.514L86.629,80.514A0.526,0.526 0,0 1,87.155 81.04L87.155,81.04A0.526,0.526 0,0 1,86.629 81.566L78.114,81.566A0.526,0.526 0,0 1,77.588 81.04L77.588,81.04A0.526,0.526 0,0 1,78.114 80.514z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M49.693,88.671C48.422,88.672 47.235,88.035 46.534,86.975C46.534,85.931 48.64,85.359 49.693,85.359C50.746,85.359 52.843,85.931 52.852,86.975C52.15,88.035 50.964,88.672 49.693,88.671L49.693,88.671ZM49.693,81.194C50.332,81.194 50.907,81.579 51.152,82.169C51.396,82.759 51.261,83.438 50.81,83.89C50.358,84.341 49.678,84.476 49.088,84.232C48.498,83.988 48.113,83.412 48.113,82.773C48.113,81.901 48.82,81.194 49.693,81.194ZM49.693,79.616C47.558,79.612 45.632,80.895 44.813,82.866C43.994,84.837 44.445,87.107 45.954,88.615C47.464,90.124 49.735,90.575 51.706,89.757C53.678,88.938 54.961,87.013 54.958,84.879C54.958,81.972 52.6,79.616 49.693,79.616Z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M82.371,69.534C81.081,69.536 79.876,68.888 79.167,67.81C79.167,66.749 81.3,66.168 82.371,66.168C83.442,66.168 85.567,66.749 85.576,67.81C84.867,68.889 83.662,69.537 82.371,69.534L82.371,69.534ZM82.371,61.948C83.022,61.948 83.608,62.341 83.857,62.942C84.105,63.543 83.966,64.235 83.504,64.693C83.043,65.152 82.35,65.287 81.75,65.036C81.15,64.784 80.761,64.196 80.765,63.545C80.765,63.12 80.934,62.713 81.236,62.413C81.537,62.113 81.946,61.946 82.371,61.948ZM82.371,60.342C80.206,60.328 78.245,61.62 77.406,63.616C76.567,65.612 77.015,67.917 78.542,69.453C80.068,70.989 82.37,71.453 84.373,70.628C86.375,69.803 87.682,67.852 87.682,65.687C87.682,62.749 85.31,60.362 82.371,60.342L82.371,60.342Z"
+        android:strokeWidth="1"
+        android:fillColor="#DADCE0"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M144.29,50.334L144.29,39.445C144.29,38.616 143.619,37.945 142.79,37.945C141.962,37.945 141.29,38.616 141.29,39.445L141.29,50.334C141.29,51.162 141.962,51.834 142.79,51.834C143.619,51.834 144.29,51.162 144.29,50.334Z"
+        android:strokeWidth="1"
+        android:fillColor="#FBBC04"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M96.331,62.566L87.571,53.81C86.985,53.224 86.035,53.224 85.45,53.81C84.864,54.396 84.864,55.346 85.45,55.931L94.21,64.688C94.796,65.274 95.745,65.273 96.331,64.688C96.917,64.102 96.917,63.152 96.331,62.566Z"
+        android:strokeWidth="1"
+        android:fillColor="#FBBC04"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M191.361,64.688L200.13,55.932C200.716,55.347 200.717,54.397 200.131,53.811C199.546,53.224 198.596,53.224 198.01,53.809L189.241,62.566C188.655,63.151 188.655,64.101 189.24,64.687C189.825,65.273 190.775,65.274 191.361,64.688Z"
+        android:strokeWidth="1"
+        android:fillColor="#FBBC04"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M26.684,36.882C22.714,38.091 20.001,41.752 20,45.9C20,46.452 20.447,46.9 21,46.9C21.552,46.9 22,46.453 22,45.9C22.001,42.632 24.138,39.748 27.266,38.795C30.394,37.843 33.778,39.045 35.602,41.758L36.015,42.373L36.724,42.156C37.096,42.042 37.482,41.984 37.87,41.982C38.905,41.982 39.903,42.395 40.638,43.13C41.373,43.865 41.786,44.861 41.786,45.9C41.786,46.452 42.233,46.9 42.786,46.9C43.338,46.9 43.786,46.452 43.786,45.9C43.786,44.331 43.162,42.825 42.052,41.715C40.941,40.605 39.436,39.982 37.866,39.982C37.523,39.984 37.182,40.014 36.848,40.073C34.459,37.034 30.427,35.742 26.684,36.882Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M37.893,39.982C36.323,39.982 34.817,40.607 33.708,41.719C33.318,42.11 33.319,42.743 33.71,43.133C34.101,43.523 34.734,43.522 35.124,43.131C35.858,42.396 36.854,41.982 37.893,41.982C38.445,41.982 38.893,41.534 38.893,40.982C38.893,40.43 38.445,39.982 37.893,39.982Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M80.182,23.374C78.614,23.371 77.106,23.993 75.995,25.104C74.884,26.215 74.261,27.722 74.264,29.294C74.265,29.846 74.713,30.293 75.266,30.292C75.818,30.291 76.265,29.842 76.264,29.29C76.262,28.251 76.674,27.253 77.409,26.519C78.144,25.784 79.142,25.372 80.182,25.374C80.573,25.373 80.96,25.429 81.332,25.54L82.037,25.751L82.448,25.14C84.273,22.426 87.658,21.224 90.787,22.179C93.916,23.134 96.052,26.021 96.05,29.291C96.049,29.843 96.496,30.291 97.049,30.292C97.601,30.292 98.049,29.845 98.05,29.292C98.053,25.142 95.341,21.478 91.371,20.266C87.625,19.123 83.589,20.416 81.199,23.459C80.864,23.402 80.524,23.373 80.182,23.374Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M80.19,25.373C81.233,25.367 82.235,25.78 82.968,26.52C83.357,26.913 83.99,26.915 84.383,26.526C84.775,26.138 84.778,25.505 84.389,25.112C83.276,23.99 81.758,23.363 80.177,23.374C79.625,23.377 79.18,23.828 79.184,24.38C79.187,24.932 79.638,25.377 80.19,25.373Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M273.957,67.244C270.689,67.244 268.039,69.893 268.039,73.162C268.039,73.714 268.486,74.162 269.039,74.162C269.591,74.162 270.039,73.714 270.039,73.162C270.039,70.998 271.793,69.244 273.958,69.244C274.348,69.243 274.734,69.3 275.106,69.411L275.812,69.622L276.223,69.011C278.047,66.297 281.433,65.095 284.562,66.049C287.69,67.004 289.827,69.891 289.824,73.161C289.824,73.714 290.271,74.162 290.823,74.162C291.376,74.162 291.824,73.715 291.824,73.163C291.828,69.013 289.116,65.348 285.146,64.136C281.399,62.993 277.363,64.287 274.974,67.329C274.638,67.272 274.298,67.243 273.957,67.244Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M273.956,69.244C274.982,69.247 275.966,69.659 276.688,70.39C277.076,70.782 277.709,70.786 278.102,70.398C278.495,70.01 278.498,69.377 278.11,68.984C277.014,67.875 275.521,67.249 273.961,67.244C273.409,67.242 272.96,67.689 272.958,68.241C272.957,68.793 273.403,69.242 273.956,69.244Z"
+        android:strokeWidth="1"
+        android:fillColor="#E8EAED"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M97.59,67.919L184.886,67.919A5.37,5.37 0,0 1,190.256 73.289L190.256,91.586A5.37,5.37 0,0 1,184.886 96.956L97.59,96.956A5.37,5.37 0,0 1,92.22 91.586L92.22,73.289A5.37,5.37 0,0 1,97.59 67.919z"
+        android:strokeWidth="1"
+        android:fillColor="#1A73E8"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M174.824,73.364L174.824,73.364A0.908,0.908 0,0 1,175.732 74.271L175.732,90.604A0.908,0.908 0,0 1,174.824 91.512L174.824,91.512A0.908,0.908 0,0 1,173.917 90.604L173.917,74.271A0.908,0.908 0,0 1,174.824 73.364z"
+        android:strokeWidth="1"
+        android:fillColor="#EA4335"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M103.113,81.303h14.524v2.269h-14.524z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M107.725,75.583l7.262,12.573l-1.965,1.134l-7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M114.987,76.717l-7.262,12.573l-1.965,-1.134l7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M126.714,81.303h14.524v2.269h-14.524z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M131.327,75.58l7.262,12.573l-1.965,1.134l-7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M138.589,76.714l-7.262,12.573l-1.965,-1.134l7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M150.315,81.303h14.524v2.269h-14.524z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M154.928,75.586l7.262,12.573l-1.965,1.134l-7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M162.19,76.72l-7.262,12.573l-1.965,-1.134l7.262,-12.573z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M186.235,119.923C184.229,120.222 181.769,123.18 179.499,126.229C177.475,128.951 175.487,131.674 175.868,133.815C176.64,138.416 184.528,135.929 186.625,135.512L209.409,131.047L209.409,117.155C209.409,117.155 204.453,115.504 201.793,117.155C199.134,118.806 198.162,123.117 195.73,123.434C193.297,123.752 190.011,119.369 186.235,119.923Z"
+        android:strokeWidth="1"
+        android:fillColor="#F6A81B"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M175.85,133.815L209.391,127.699L209.391,123.552L176.885,130.04C176.885,130.04 175.442,132.672 175.85,133.815Z"
+        android:strokeAlpha="0.1"
+        android:strokeWidth="1"
+        android:fillColor="#231F20"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.1"/>
+    <path
+        android:pathData="M220.266,106.039C211.858,106.039 205.043,112.852 205.043,121.256C205.043,129.661 211.858,136.474 220.266,136.474C228.673,136.474 235.489,129.661 235.489,121.256C235.489,112.852 228.673,106.039 220.266,106.039ZM225.077,123.552C223.67,123.552 222.402,122.704 221.864,121.405C221.326,120.105 221.625,118.609 222.622,117.616C223.618,116.623 225.115,116.328 226.414,116.869C227.712,117.409 228.557,118.679 228.553,120.086C228.553,121.007 228.187,121.89 227.535,122.54C226.882,123.19 225.998,123.555 225.077,123.552Z"
+        android:strokeWidth="1"
+        android:fillColor="#FAB505"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M220.266,136.474C228.673,136.474 235.489,129.661 235.489,121.256C235.489,112.852 228.673,106.039 220.266,106.039L220.266,136.474ZM225.077,123.552C223.67,123.552 222.402,122.704 221.864,121.405C221.326,120.105 221.625,118.609 222.622,117.616C223.618,116.623 225.115,116.328 226.414,116.869C227.712,117.409 228.557,118.679 228.553,120.086C228.553,121.007 228.187,121.89 227.535,122.54C226.882,123.19 225.998,123.555 225.077,123.552Z"
+        android:strokeAlpha="0.2"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:strokeColor="#00000000"
+        android:fillAlpha="0.2"/>
+</vector>
diff --git a/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_credential_item.xml b/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_credential_item.xml
index 1725f55..745ffca7 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_credential_item.xml
+++ b/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_credential_item.xml
@@ -41,11 +41,4 @@
             android:singleLine="true"
             android:textAppearance="@style/TextAppearance.BlackBody" />
     </LinearLayout>
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginEnd="16dp"
-        android:singleLine="true"
-        android:textAppearance="@style/TextAppearance.BlueButtonText2"
-        android:text="@string/touch_to_fill_use_credential"/>
 </LinearLayout>
diff --git a/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_sheet.xml b/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_sheet.xml
index 4a02419..5ca6258 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_sheet.xml
+++ b/chrome/browser/touch_to_fill/android/internal/java/res/layout/touch_to_fill_sheet.xml
@@ -18,23 +18,30 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_horizontal"
-        android:layout_marginTop="8dp"
-        android:layout_marginBottom="8dp"
+        android:layout_marginTop="6dp"
+        android:layout_marginBottom="6dp"
         android:importantForAccessibility="no"
         app:srcCompat="@drawable/drag_handlebar" />
 
-    <org.chromium.ui.widget.TextViewWithLeading
-        android:layout_width="match_parent"
+    <ImageView
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textAlignment="center"
+        android:layout_gravity="center_horizontal"
+        android:importantForAccessibility="no"
+        app:srcCompat="@drawable/touch_to_fill_header_image" />
+
+    <org.chromium.ui.widget.TextViewWithLeading
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal"
         android:text="@string/touch_to_fill_sheet_title"
         android:textAppearance="@style/TextAppearance.BlackHeadline" />
 
     <org.chromium.ui.widget.TextViewWithLeading
         android:id="@+id/touch_to_fill_sheet_subtitle"
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textAlignment="center"
+        android:layout_gravity="center_horizontal"
         android:textAppearance="@style/TextAppearance.BlackHint1" />
 
     <ListView
@@ -42,8 +49,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:divider="@null"
-        android:dividerHeight="6dp"
+        android:dividerHeight="8dp"
         android:paddingTop="16dp"
-        android:paddingBottom="16dp"
         tools:listitem="@layout/touch_to_fill_credential_item"/>
 </LinearLayout>
diff --git a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillBridge.java b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillBridge.java
index 0a0902a..b0376631 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillBridge.java
+++ b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillBridge.java
@@ -44,8 +44,10 @@
 
     @CalledByNative
     private static void insertCredential(Credential[] credentials, int index, String username,
-            String password, String originUrl, boolean isPublicSuffixMatch) {
-        credentials[index] = new Credential(username, password, originUrl, isPublicSuffixMatch);
+            String password, String formattedUsername, String originUrl,
+            boolean isPublicSuffixMatch) {
+        credentials[index] = new Credential(
+                username, password, formattedUsername, originUrl, isPublicSuffixMatch);
     }
 
     @CalledByNative
@@ -55,8 +57,7 @@
 
     @Override
     public void onDismissed() {
-        TouchToFillBridgeJni.get().onDismiss(mNativeView);
-        mNativeView = 0; // The native view shouldn't be used after it's dismissed.
+        if (mNativeView != 0) TouchToFillBridgeJni.get().onDismiss(mNativeView);
     }
 
     @Override
diff --git a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java
index 8d297be6..9d8758e 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java
+++ b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillView.java
@@ -39,6 +39,13 @@
             mEventListener.onDismissed();
             mBottomSheetController.getBottomSheet().removeObserver(mBottomSheetObserver);
         }
+
+        @Override
+        public void onSheetFullyPeeked() {
+            super.onSheetFullyPeeked();
+            // Since isPeekStateEnabled doesn't seem to skip the Peek state, force-expand the sheet.
+            mBottomSheetController.expandSheet();
+        }
     };
 
     /**
@@ -61,7 +68,6 @@
      */
     void setEventListener(TouchToFillProperties.ViewEventListener viewEventListener) {
         mEventListener = viewEventListener;
-        mBottomSheetController.getBottomSheet().addObserver(mBottomSheetObserver);
     }
 
     /**
@@ -70,10 +76,8 @@
      */
     void setVisible(boolean isVisible) {
         if (isVisible) {
+            mBottomSheetController.getBottomSheet().addObserver(mBottomSheetObserver);
             mBottomSheetController.requestShowContent(this, false);
-            // Even though isPeekStateEnabled always returns false, the sheet will peek by default.
-            // Calling expand forces it into Half-open state.
-            mBottomSheetController.expandSheet();
         } else {
             mBottomSheetController.hideContent(this, false);
         }
@@ -137,7 +141,7 @@
 
     @Override
     public boolean isPeekStateEnabled() {
-        return false;
+        return true; // For some reason, false isn't working properly. Extend it explicitly!
     }
 
     @Override
diff --git a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java
index f9d7ee7..644da774 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java
+++ b/chrome/browser/touch_to_fill/android/internal/java/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewBinder.java
@@ -42,7 +42,7 @@
      */
     static void bindCredentialView(View view, Credential credential) {
         TextView usernameText = view.findViewById(R.id.username);
-        usernameText.setText(credential.getUsername());
+        usernameText.setText(credential.getFormattedUsername());
 
         TextView passwordText = view.findViewById(R.id.password);
         passwordText.setText(credential.getPassword());
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd
index 37fd6e9..7c63bd8 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings.grd
@@ -108,10 +108,10 @@
     <messages fallback_to_english="true">
       <!-- Touch To Fill -->
       <message name="IDS_TOUCH_TO_FILL_SHEET_TITLE" desc="Header for Touch To Fill sheet where users can pick a credential to fill into a form to.">
-        Pick your account
+        Choose an account
       </message>
       <message name="IDS_TOUCH_TO_FILL_SHEET_SUBTITLE" desc="Subtitle for Touch To Fill sheet where users can pick a credential to fill into a form to.">
-        Sign in to <ph name="SITE_NAME">%1$s<ex>airbnb.com</ex></ph> using Chrome
+        for <ph name="SITE_NAME">%1$s<ex>airbnb.com</ex></ph>
       </message>
       <message name="IDS_TOUCH_TO_FILL_CONTENT_DESCRIPTION" desc="Accessibility string read when the Touch To Fill bottom sheet is opened. It describes the bottom sheet where a user can pick a credential to fill into a password form.">
         List of credentials to be filled on touch.
@@ -125,9 +125,6 @@
       <message name="IDS_TOUCH_TO_FILL_SHEET_CLOSED" desc="Accessibility string read when the Touch To Fill bottom sheet showing a list of the user's credentials is closed.">
         List of credentials to be filled on touch is closed.
       </message>
-      <message name="IDS_TOUCH_TO_FILL_USE_CREDENTIAL" desc="Text that is shown on every credential entry in Touch To Fill bottom sheet. Tapping on the credential entry will use that credential entry to sign into the currently opened website.">
-        Use
-      </message>
     </messages>
   </release>
 </grit>
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_CONTENT_DESCRIPTION.png.sha1 b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_CONTENT_DESCRIPTION.png.sha1
index 56ae816..f21889cc1 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_CONTENT_DESCRIPTION.png.sha1
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_CONTENT_DESCRIPTION.png.sha1
@@ -1 +1 @@
-246ec121718cc9220b1ed5ebb804b689c51ede80
\ No newline at end of file
+5c2d04c928c95b168528a69cc3f53e433c66eb7d
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1 b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1
index 56ae816..f21889cc1 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_CLOSED.png.sha1
@@ -1 +1 @@
-246ec121718cc9220b1ed5ebb804b689c51ede80
\ No newline at end of file
+5c2d04c928c95b168528a69cc3f53e433c66eb7d
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_FULL_HEIGHT.png.sha1 b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_FULL_HEIGHT.png.sha1
index 56ae816..f21889cc1 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_FULL_HEIGHT.png.sha1
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_FULL_HEIGHT.png.sha1
@@ -1 +1 @@
-246ec121718cc9220b1ed5ebb804b689c51ede80
\ No newline at end of file
+5c2d04c928c95b168528a69cc3f53e433c66eb7d
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_SUBTITLE.png.sha1 b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_SUBTITLE.png.sha1
index 56ae816..f21889cc1 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_SUBTITLE.png.sha1
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_SUBTITLE.png.sha1
@@ -1 +1 @@
-246ec121718cc9220b1ed5ebb804b689c51ede80
\ No newline at end of file
+5c2d04c928c95b168528a69cc3f53e433c66eb7d
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_TITLE.png.sha1 b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_TITLE.png.sha1
index 56ae816..f21889cc1 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_TITLE.png.sha1
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_SHEET_TITLE.png.sha1
@@ -1 +1 @@
-246ec121718cc9220b1ed5ebb804b689c51ede80
\ No newline at end of file
+5c2d04c928c95b168528a69cc3f53e433c66eb7d
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_USE_CREDENTIAL.png.sha1 b/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_USE_CREDENTIAL.png.sha1
deleted file mode 100644
index 56ae816..0000000
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/android_touch_to_fill_strings_grd/IDS_TOUCH_TO_FILL_USE_CREDENTIAL.png.sha1
+++ /dev/null
@@ -1 +0,0 @@
-246ec121718cc9220b1ed5ebb804b689c51ede80
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_am.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_am.xtb
index 830beeea..9454212f 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_am.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_am.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="am">
 <translation id="1717486229951421299">በግማሽ ቁመት ላይ ሲነካ የሚሞሉ የመግቢያ ማስረጃዎች ዝርዝር።</translation>
 <translation id="207576718733492531">ሲነካ የሚሞሉ የመግቢያ ማስረጃዎች ተዘግቷል።</translation>
-<translation id="2410754283952462441">አንድ መለያ ይምረጡ</translation>
 <translation id="3399357656427473483">ሲነካ የሚሞሉ የመግቢያ ማስረጃዎች ዝርዝር።</translation>
 <translation id="5441504010984421144">በሙሉ ቁመት ላይ ሲነካ የሚሞሉ የመግቢያ ማስረጃዎች ዝርዝር።</translation>
-<translation id="5458743933922296641">በChrome ወደ <ph name="SITE_NAME" /> ይግቡ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ar.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ar.xtb
index 64ed69b2..e3530094 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ar.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ar.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ar">
 <translation id="1717486229951421299">تم فتح قائمة بيانات الاعتماد التي يتم ملؤها باللمس على طول النصف السفلي من الشاشة.</translation>
 <translation id="207576718733492531">تم إغلاق قائمة بيانات الاعتماد التي يتم ملؤها باللمس.</translation>
-<translation id="2410754283952462441">اختيار حساب</translation>
 <translation id="3399357656427473483">قائمة ببيانات الاعتماد التي يتم ملؤها باللمس</translation>
 <translation id="5441504010984421144">تم فتح قائمة بيانات الاعتماد التي يجب ملؤها باللمس على طول الشاشة.</translation>
-<translation id="5458743933922296641">‏تسجيل الدخول إلى <ph name="SITE_NAME" /> باستخدام Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bg.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bg.xtb
index 5bc6448..6b0409e0 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bg.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bg.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="bg">
 <translation id="1717486229951421299">Списъкът с идентификационни данни, които да бъдат попълнени при докосване, е отворен на половината височина.</translation>
 <translation id="207576718733492531">Списъкът с идентификационни данни, които да бъдат попълнени при докосване, е затворен.</translation>
-<translation id="2410754283952462441">Изберете профил</translation>
 <translation id="3399357656427473483">Списък с идентификационни данни, които да бъдат попълнени при докосване.</translation>
 <translation id="5441504010984421144">Списъкът с идентификационни данни, които да бъдат попълнени при докосване, е отворен на пълната височина.</translation>
-<translation id="5458743933922296641">Влизане в(ъв) <ph name="SITE_NAME" /> с Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bn.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bn.xtb
index 9bd0c8c..ca4eeda 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bn.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_bn.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="bn">
 <translation id="1717486229951421299">টাচ করে পূরণ করা যাবে এমন ক্রেডেনশিয়ালের তালিকা হাফ স্ক্রিন জুড়ে খুলেছে।</translation>
 <translation id="207576718733492531">টাচ করে পূরণ করা যাবে এমন ক্রেডেনশিয়ালের তালিকা বন্ধ রয়েছে।</translation>
-<translation id="2410754283952462441">একটি অ্যাকাউন্ট বেছে নিন</translation>
 <translation id="3399357656427473483">টাচ করে পূরণ করা যাবে এমন ক্রেডেনশিয়ালের তালিকা।</translation>
 <translation id="5441504010984421144">টাচ করে পূরণ করা যাবে এমন ক্রেডেনশিয়ালের তালিকা ফুল স্ক্রিন জুড়ে খুলেছে।</translation>
-<translation id="5458743933922296641">Chrome-এর মাধ্যমে <ph name="SITE_NAME" />-এ সাইন-ইন করুন</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb
index 72dcbf3..1d17316 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ca">
 <translation id="1717486229951421299">La llista de credencials que s'emplenaran amb un toc està oberta i ocupa la meitat inferior de la pantalla.</translation>
 <translation id="207576718733492531">La llista de credencials que s'emplenaran amb un toc està tancada.</translation>
-<translation id="2410754283952462441">Tria un compte</translation>
 <translation id="3399357656427473483">Llista de credencials que s'emplenaran amb un toc.</translation>
 <translation id="5441504010984421144">La llista de credencials que s'emplenaran amb un toc està oberta i ocupa tota la pantalla.</translation>
-<translation id="5458743933922296641">Inicia la sessió a <ph name="SITE_NAME" /> amb Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_cs.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_cs.xtb
index c1c4704..991a225 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_cs.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_cs.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="cs">
 <translation id="1717486229951421299">Seznam identifikačních údajů k vyplnění při klepnutí je otevřený na polovinu výšky.</translation>
 <translation id="207576718733492531">Seznam identifikačních údajů k vyplnění při klepnutí je zavřený.</translation>
-<translation id="2410754283952462441">Vyberte účet</translation>
 <translation id="3399357656427473483">Seznam identifikačních údajů k vyplnění při klepnutí.</translation>
 <translation id="5441504010984421144">Seznam identifikačních údajů k vyplnění při klepnutí je otevřený na celou výšku.</translation>
-<translation id="5458743933922296641">Přihlaste se na web <ph name="SITE_NAME" /> pomocí Chromu</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_da.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_da.xtb
index 0cacabf0..615c6df1 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_da.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_da.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="da">
 <translation id="1717486229951421299">Listen over loginoplysninger, der udfyldes ved berøring, er åbnet i halv højde.</translation>
 <translation id="207576718733492531">Listen over loginoplysninger, der udfyldes ved berøring, er lukket.</translation>
-<translation id="2410754283952462441">Vælg en konto</translation>
 <translation id="3399357656427473483">Liste over loginoplysninger, der udfyldes ved berøring.</translation>
 <translation id="5441504010984421144">Listen over loginoplysninger, der udfyldes ved berøring, er åbnet i fuld højde.</translation>
-<translation id="5458743933922296641">Log ind på <ph name="SITE_NAME" /> med Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_de.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_de.xtb
index ef7a8cb..44b709c0 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_de.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_de.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="de">
 <translation id="1717486229951421299">Die Liste der Anmeldedaten, die bei Berührung ausgefüllt werden, ist halb geöffnet.</translation>
 <translation id="207576718733492531">Die Liste der Anmeldedaten, die bei Berührung ausgefüllt werden, ist geschlossen.</translation>
-<translation id="2410754283952462441">Konto auswählen</translation>
 <translation id="3399357656427473483">Die Liste der Anmeldedaten, die bei Berührung ausgefüllt werden, ist geöffnet.</translation>
 <translation id="5441504010984421144">Die Liste der Anmeldedaten, die bei Berührung ausgefüllt werden, ist ganz geöffnet.</translation>
-<translation id="5458743933922296641">Mit Chrome in <ph name="SITE_NAME" /> anmelden</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_el.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_el.xtb
index 5e15cc9..1e3ecce9 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_el.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_el.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="el">
 <translation id="1717486229951421299">Η λίστα με τα διαπιστευτήρια για συμπλήρωση μέσω αφής είναι ανοιχτή στο κάτω μισό της οθόνης.</translation>
 <translation id="207576718733492531">Η λίστα με τα διαπιστευτήρια για συμπλήρωση μέσω αφής είναι κλειστή.</translation>
-<translation id="2410754283952462441">Επιλέξτε λογαριασμό</translation>
 <translation id="3399357656427473483">Η λίστα με τα διαπιστευτήρια για συμπλήρωση μέσω αφής.</translation>
 <translation id="5441504010984421144">Η λίστα με τα διαπιστευτήρια για συμπλήρωση μέσω αφής είναι ανοιχτή σε όλη την οθόνη.</translation>
-<translation id="5458743933922296641">Συνδεθείτε στο <ph name="SITE_NAME" /> με το Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_en-GB.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_en-GB.xtb
index cc8dc9c..a9a2ded 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_en-GB.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_en-GB.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="en-GB">
 <translation id="1717486229951421299">List of credentials to be filled in on touch opened at half height.</translation>
 <translation id="207576718733492531">List of credentials to be filled in on touch is closed.</translation>
-<translation id="2410754283952462441">Choose an account</translation>
 <translation id="3399357656427473483">List of credentials to be filled in on touch.</translation>
 <translation id="5441504010984421144">List of credentials to be filled in on touch opened at full height.</translation>
-<translation id="5458743933922296641">Sign in to <ph name="SITE_NAME" /> with Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es-419.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es-419.xtb
index 381cea7..da7f5c8 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es-419.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es-419.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="es-419">
 <translation id="1717486229951421299">La lista de credenciales que se debe tocar para completar está abierta a media altura.</translation>
 <translation id="207576718733492531">La lista de credenciales que se debe tocar para completar está cerrada.</translation>
-<translation id="2410754283952462441">Elegir una cuenta</translation>
 <translation id="3399357656427473483">Lista de credenciales que se debe tocar para completar.</translation>
 <translation id="5441504010984421144">La lista de credenciales que se debe tocar para completar está totalmente abierta.</translation>
-<translation id="5458743933922296641">Accede a <ph name="SITE_NAME" /> con Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es.xtb
index ebaeab5..b14f9d1 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_es.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="es">
 <translation id="1717486229951421299">La lista de credenciales que puedes rellenar con un toque está abierta y ocupa la mitad inferior de la pantalla.</translation>
 <translation id="207576718733492531">La lista de credenciales que puedes rellenar con un toque está cerrada.</translation>
-<translation id="2410754283952462441">Elegir una cuenta</translation>
 <translation id="3399357656427473483">Lista de credenciales que puedes rellenar con un toque.</translation>
 <translation id="5441504010984421144">La lista de credenciales que puedes rellenar con un toque está abierta y ocupa toda la pantalla.</translation>
-<translation id="5458743933922296641">Inicia sesión en <ph name="SITE_NAME" /> con Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_et.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_et.xtb
index c12f619..2130b37 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_et.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_et.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="et">
 <translation id="1717486229951421299">Loend mandaatidest, mis tuleb puudutusega täita, on avatud poolele kõrgusele.</translation>
 <translation id="207576718733492531">Loend mandaatidest, mis tuleb puudutusega täita, on suletud.</translation>
-<translation id="2410754283952462441">Konto valimine</translation>
 <translation id="3399357656427473483">Loend mandaatidest, mis tuleb puudutusega täita.</translation>
 <translation id="5441504010984421144">Loend mandaatidest, mis tuleb puudutusega täita, on avatud täiskõrgusele.</translation>
-<translation id="5458743933922296641">Logi saidile <ph name="SITE_NAME" /> Chrome'iga sisse</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fa.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fa.xtb
index 5b1b2683..aa5a5992 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fa.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fa.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="fa">
 <translation id="1717486229951421299">فهرست اطلاعات کاربری که باید با لمس کردن تکمیل شود، به‌صورت نیمه باز شده است.</translation>
 <translation id="207576718733492531">فهرست اطلاعات کاربری که باید با لمس کردن تکمیل شود بسته شده است.</translation>
-<translation id="2410754283952462441">انتخاب حساب</translation>
 <translation id="3399357656427473483">فهرست اطلاعات کاربری که باید با لمس کردن تکمیل شود.</translation>
 <translation id="5441504010984421144">فهرست اطلاعات کاربری که باید با لمس کردن تکمیل شود کاملاً باز شد.</translation>
-<translation id="5458743933922296641">‏ورود به سیستم <ph name="SITE_NAME" /> با Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fi.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fi.xtb
index 5ecd4dbb..8575afce 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fi.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fi.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="fi">
 <translation id="1717486229951421299">Kosketuksella täytettävien kirjautumistietojen lista avattu puolen näytön korkeudella.</translation>
 <translation id="207576718733492531">Kosketuksella täytettävien kirjautumistietojen lista on suljettu.</translation>
-<translation id="2410754283952462441">Valitse tili</translation>
 <translation id="3399357656427473483">Kosketuksella täytettävien kirjautumistietojen lista</translation>
 <translation id="5441504010984421144">Kosketuksella täytettävien kirjautumistietojen lista avattu koko näytön korkeudella.</translation>
-<translation id="5458743933922296641">Kirjaudu Chromella: <ph name="SITE_NAME" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fil.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fil.xtb
index 15bfe6a5..d5690c6 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fil.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fil.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="fil">
 <translation id="1717486229951421299">Nakabukas nang kalahati ang taas ang listahan ng mga kredensyal na pupunan kapag pinindot.</translation>
 <translation id="207576718733492531">Nakasara ang listahan ng mga kredensyal na pupunan kapag pinindot.</translation>
-<translation id="2410754283952462441">Pumili ng account</translation>
 <translation id="3399357656427473483">Listahan ng mga kredensyal na pupunan kapag pinindot.</translation>
 <translation id="5441504010984421144">Nakabukas nang buo ang taas ang listahan ng mga kredensyal na pupunan kapag pinindot.</translation>
-<translation id="5458743933922296641">Mag-sign in sa <ph name="SITE_NAME" /> gamit ang Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fr.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fr.xtb
index f510e2d..6c2e37f 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fr.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_fr.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="fr">
 <translation id="1717486229951421299">La liste des identifiants à renseigner de façon tactile est ouverte à mi-hauteur.</translation>
 <translation id="207576718733492531">La liste des identifiants à renseigner de façon tactile est fermée.</translation>
-<translation id="2410754283952462441">Sélectionner un compte</translation>
 <translation id="3399357656427473483">Liste des identifiants à renseigner de façon tactile.</translation>
 <translation id="5441504010984421144">La liste des identifiants à renseigner de façon tactile est ouverte à hauteur maximale.</translation>
-<translation id="5458743933922296641">Connectez-vous au site <ph name="SITE_NAME" /> avec Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_gu.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_gu.xtb
index 425cc4a..d472c90 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_gu.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_gu.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="gu">
 <translation id="1717486229951421299">Touch પર લૉગ ઇન વિગતો ભરવાની સૂચિ અડધી ઊંચાઈએ ખૂલી.</translation>
 <translation id="207576718733492531">Touch પર લૉગ ઇન વિગતો ભરવાની સૂચિ બંધ છે.</translation>
-<translation id="2410754283952462441">એકાઉન્ટ પસંદ કરો</translation>
 <translation id="3399357656427473483">Touch પર લૉગ ઇન વિગતો ભરવાની સૂચિ.</translation>
 <translation id="5441504010984421144">Touch પર લૉગ ઇન વિગતો ભરવાની સૂચિ સંપૂર્ણ ઊંચાઈએ ખૂલી.</translation>
-<translation id="5458743933922296641"><ph name="SITE_NAME" />માં Chrome વડે સાઇન ઇન કરો</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb
index bf5b14a39e..3a9b501 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="hi">
 <translation id="1717486229951421299">टच करके भरी जाने वाली क्रेडेंशियल की सूची आधी खुली हुई है.</translation>
 <translation id="207576718733492531">टच करके भरी जाने वाली क्रेडेंशियल की सूची बंद है.</translation>
-<translation id="2410754283952462441">कोई खाता चुनें</translation>
 <translation id="3399357656427473483">टच करके भरी जाने वाली क्रेडेंशियल की सूची.</translation>
 <translation id="5441504010984421144">टच करके भरी जाने वाली क्रेडेंशियल की सूची पूरी खुली हुई है.</translation>
-<translation id="5458743933922296641">Chrome पर <ph name="SITE_NAME" /> में साइन इन करें</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hr.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hr.xtb
index f30dc5e..a8f77e4 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hr.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hr.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="hr">
 <translation id="1717486229951421299">Popis vjerodajnica za unos dodirom otvoren je na pola visine.</translation>
 <translation id="207576718733492531">Popis vjerodajnica za unos dodirom zatvoren je.</translation>
-<translation id="2410754283952462441">Odabir računa</translation>
 <translation id="3399357656427473483">Popis vjerodajnica za unos dodirom.</translation>
 <translation id="5441504010984421144">Popis vjerodajnica za unos dodirom otvoren je preko cijelog zaslona.</translation>
-<translation id="5458743933922296641">Prijavite se na <ph name="SITE_NAME" /> putem Chromea</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hu.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hu.xtb
index 0dd85df..02f2b17 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hu.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hu.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="hu">
 <translation id="1717486229951421299">Az érintéssel kitöltendő hitelesítő adatok listája félmagasságban megnyitva.</translation>
 <translation id="207576718733492531">Az érintéssel kitölthető hitelesítési adatok listája be van zárva.</translation>
-<translation id="2410754283952462441">Válasszon fiókot</translation>
 <translation id="3399357656427473483">Az érintéssel kitöltendő hitelesítő adatok listája.</translation>
 <translation id="5441504010984421144">Az érintéssel kitöltendő hitelesítő adatok listája teljes magasságban megnyitva.</translation>
-<translation id="5458743933922296641">Bejelentkezés a Chrome használatával a következőre: <ph name="SITE_NAME" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_id.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_id.xtb
index 511aee8..66ef204 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_id.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_id.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="id">
 <translation id="1717486229951421299">Daftar kredensial yang terisi dengan gestur sentuhan sedang terbuka setengah.</translation>
 <translation id="207576718733492531">Daftar kredensial yang terisi dengan gestur sentuhan sedang tertutup.</translation>
-<translation id="2410754283952462441">Pilih akun</translation>
 <translation id="3399357656427473483">Daftar kredensial yang terisi dengan gestur sentuhan.</translation>
 <translation id="5441504010984421144">Daftar kredensial yang terisi dengan gestur sentuhan sedang terbuka sepenuhnya.</translation>
-<translation id="5458743933922296641">Login ke <ph name="SITE_NAME" /> dengan Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_it.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_it.xtb
index 4a0f6c3f..5970419 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_it.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_it.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="it">
 <translation id="1717486229951421299">Elenco di credenziali da compilare con il tocco aperte nella metà inferiore dello schermo.</translation>
 <translation id="207576718733492531">L'elenco di credenziali da compilare con il tocco è chiuso.</translation>
-<translation id="2410754283952462441">Scegli un account</translation>
 <translation id="3399357656427473483">Elenco di credenziali da compilare con il tocco.</translation>
 <translation id="5441504010984421144">Elenco di credenziali da compilare con il tocco aperte a schermo intero.</translation>
-<translation id="5458743933922296641">Accedi a <ph name="SITE_NAME" /> con Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_iw.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_iw.xtb
index 81b920c..dcb068a 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_iw.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_iw.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="iw">
 <translation id="1717486229951421299">רשימת פרטי הכניסה למילוי במגע פתוחה בחצי מגובה המסך.</translation>
 <translation id="207576718733492531">רשימת פרטי הכניסה למילוי במגע סגורה.</translation>
-<translation id="2410754283952462441">בחירת חשבון</translation>
 <translation id="3399357656427473483">רשימת פרטי הכניסה למילוי במגע.</translation>
 <translation id="5441504010984421144">רשימת פרטי הכניסה למילוי במגע פתוחה בגובה המלא של המסך.</translation>
-<translation id="5458743933922296641">‏כניסה אל <ph name="SITE_NAME" /> בעזרת Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ja.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ja.xtb
index 19de21ec..8335950 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ja.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ja.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ja">
 <translation id="1717486229951421299">タップ操作で入力する認証情報のリストが画面の下半分に表示されています。</translation>
 <translation id="207576718733492531">タップ操作で入力する認証情報のリストは閉じています。</translation>
-<translation id="2410754283952462441">アカウントの選択</translation>
 <translation id="3399357656427473483">タップ操作で入力する認証情報のリスト。</translation>
 <translation id="5441504010984421144">タップ操作で入力する認証情報のリストが画面全体に表示されています。</translation>
-<translation id="5458743933922296641">Chrome で <ph name="SITE_NAME" /> にログインする</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_kn.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_kn.xtb
index 22a6def..4df1421 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_kn.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_kn.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="kn">
 <translation id="1717486229951421299">ಸ್ಪರ್ಶಿಸಿ ಭರ್ತಿಮಾಡುವ ರುಜುವಾತುಗಳ ಪಟ್ಟಿಯನ್ನು ಅರ್ಧ ಎತ್ತರದಲ್ಲಿ ತೆರೆಯಲಾಗಿದೆ.</translation>
 <translation id="207576718733492531">ಸ್ಪರ್ಶಿಸಿ ಭರ್ತಿಮಾಡುವ ರುಜುವಾತುಗಳ ಪಟ್ಟಿಯನ್ನು ಮುಚ್ಚಲಾಗಿದೆ.</translation>
-<translation id="2410754283952462441">ಖಾತೆಯೊಂದನ್ನು ಆರಿಸಿ</translation>
 <translation id="3399357656427473483">ಸ್ಪರ್ಶಿಸಿ ಭರ್ತಿಮಾಡುವ ರುಜುವಾತುಗಳ ಪಟ್ಟಿ.</translation>
 <translation id="5441504010984421144">ಸ್ಪರ್ಶಿಸಿ ಭರ್ತಿಮಾಡುವ ರುಜುವಾತುಗಳ ಪಟ್ಟಿಯನ್ನು ಸಂಪೂರ್ಣ ಎತ್ತರದಲ್ಲಿ ತೆರೆಯಲಾಗಿದೆ.</translation>
-<translation id="5458743933922296641">Chrome ಮೂಲಕ <ph name="SITE_NAME" /> ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ko.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ko.xtb
index c1bc63b..cb6ca25 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ko.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ko.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ko">
 <translation id="1717486229951421299">터치 시 작성되는 사용자 인증 정보 목록이 절반 높이로 열렸습니다.</translation>
 <translation id="207576718733492531">터치 시 작성되는 사용자 인증 정보 목록이 닫혔습니다.</translation>
-<translation id="2410754283952462441">계정 선택</translation>
 <translation id="3399357656427473483">터치 시 작성되는 사용자 인증 정보 목록입니다.</translation>
 <translation id="5441504010984421144">터치 시 작성되는 사용자 인증 정보 목록이 전체 높이로 열렸습니다.</translation>
-<translation id="5458743933922296641">Chrome으로 <ph name="SITE_NAME" />에 로그인하세요.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lt.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lt.xtb
index eb79728..d28bb05 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lt.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lt.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="lt">
 <translation id="1717486229951421299">Prisijungimo duomenų, kuriuos galima užpildyti palietus, sąrašas atidarytas per pusę ekrano aukščio.</translation>
 <translation id="207576718733492531">Prisijungimo duomenų, kuriuos galima užpildyti palietus, sąrašas uždarytas.</translation>
-<translation id="2410754283952462441">Pasirinkite paskyrą</translation>
 <translation id="3399357656427473483">Prisijungimo duomenų, kuriuos galima užpildyti palietus, sąrašas.</translation>
 <translation id="5441504010984421144">Prisijungimo duomenų, kuriuos galima užpildyti palietus, sąrašas atidarytas per visą ekrano aukštį.</translation>
-<translation id="5458743933922296641">Prisijunkite prie <ph name="SITE_NAME" /> naudodami „Chrome“</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lv.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lv.xtb
index 6c62c7e..f23dbae9 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lv.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_lv.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="lv">
 <translation id="1717486229951421299">Pieskaroties aizpildāmo akreditācijas datu saraksts ir atvērts pusekrāna augstumā.</translation>
 <translation id="207576718733492531">Pieskaroties aizpildāmo akreditācijas datu saraksts ir aizvērts.</translation>
-<translation id="2410754283952462441">Konta izvēle</translation>
 <translation id="3399357656427473483">Pieskaroties aizpildāmo akreditācijas datu saraksts.</translation>
 <translation id="5441504010984421144">Pieskaroties aizpildāmo akreditācijas datu saraksts ir atvērts pilna ekrāna augstumā.</translation>
-<translation id="5458743933922296641">Pierakstīšanās vietnē <ph name="SITE_NAME" />, izmantojot pārlūku Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ml.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ml.xtb
index 5281679..90f9b4a3 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ml.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ml.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ml">
 <translation id="1717486229951421299">ടച്ച് ചെയ്യുമ്പോൾ പൂരിപ്പിക്കേണ്ട ക്രെഡൻഷ്യലുകളുടെ ലിസ്റ്റ് പകുതി ഉയരത്തിൽ തുറന്നിരിക്കുന്നു.</translation>
 <translation id="207576718733492531">ടച്ച് ചെയ്യുമ്പോൾ പൂരിപ്പിക്കേണ്ട ക്രെഡൻഷ്യലുകളുടെ ലിസ്റ്റ് അടച്ചിരിക്കുന്നു.</translation>
-<translation id="2410754283952462441">ഒരു അക്കൗണ്ട് തിരഞ്ഞെടുക്കൂ</translation>
 <translation id="3399357656427473483">ടച്ച് ചെയ്യുമ്പോൾ പൂരിപ്പിക്കേണ്ട ക്രെഡൻ‍ഷ്യലുകളുടെ ലിസ്‌റ്റ്.</translation>
 <translation id="5441504010984421144">ടച്ച് ചെയ്യുമ്പോൾ പൂരിപ്പിക്കേണ്ട ക്രെഡൻഷ്യലുകളുടെ ലിസ്റ്റ് പൂർണ്ണ ഉയരത്തിൽ തുറന്നിരിക്കുന്നു.</translation>
-<translation id="5458743933922296641">Chrome ഉപയോഗിച്ച് <ph name="SITE_NAME" /> എന്നതിൽ സൈൻ ഇൻ ചെയ്യുക</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_mr.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_mr.xtb
index 9aa7362..5f4ff521 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_mr.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_mr.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="mr">
 <translation id="1717486229951421299">स्पर्श करून भरायची असलेली क्रेडेंशियलची सूची अर्ध्या भागावर उघडली आहे.</translation>
 <translation id="207576718733492531">स्पर्श करून भरायची असलेली क्रेडेंशियलची सूची बंद आहे.</translation>
-<translation id="2410754283952462441">एक खाते निवडा</translation>
 <translation id="3399357656427473483">स्पर्श करून भरायची असलेली क्रेडेंशियलची सूची.</translation>
 <translation id="5441504010984421144">स्पर्श करून भरायची असलेली क्रेडेंशियलची सूची संपूर्ण भागावर उघडली आहे.</translation>
-<translation id="5458743933922296641">Chrome वरून <ph name="SITE_NAME" /> मध्ये साइन इन करा</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ms.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ms.xtb
index 58fe5a9..6fd9ba3 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ms.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ms.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ms">
 <translation id="1717486229951421299">Senarai bukti kelayakan untuk diisi apabila disentuh, dibuka pada ketinggian separuh.</translation>
 <translation id="207576718733492531">Senarai bukti kelayakan untuk diisi apabila disentuh telah ditutup.</translation>
-<translation id="2410754283952462441">Pilih akaun</translation>
 <translation id="3399357656427473483">Senarai bukti kelayakan untuk diisi apabila disentuh.</translation>
 <translation id="5441504010984421144">Senarai bukti kelayakan untuk diisi apabila disentuh, dibuka pada ketinggian penuh.</translation>
-<translation id="5458743933922296641">Log masuk ke <ph name="SITE_NAME" /> dengan Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_nl.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_nl.xtb
index 5361c2d..50b7fd07 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_nl.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_nl.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="nl">
 <translation id="1717486229951421299">De lijst met gegevens die moeten worden ingevuld als je tikt, is op halve hoogte geopend.</translation>
 <translation id="207576718733492531">De lijst met gegevens die moeten worden ingevuld als je tikt, is gesloten.</translation>
-<translation id="2410754283952462441">Een account selecteren</translation>
 <translation id="3399357656427473483">De lijst met gegevens die moeten worden ingevuld als je tikt.</translation>
 <translation id="5441504010984421144">De lijst met gegevens die moeten worden ingevuld als je tikt, is op volledige hoogte geopend.</translation>
-<translation id="5458743933922296641">Log in bij <ph name="SITE_NAME" /> met Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb
index 3ae66c4..3bf71f5 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="no">
 <translation id="1717486229951421299">Listen over legitimasjon som kan fylles ut ved å trykke, er åpnet i halv høyde.</translation>
 <translation id="207576718733492531">Listen over legitimasjon som kan fylles ut ved å trykke, er lukket.</translation>
-<translation id="2410754283952462441">Velg en konto</translation>
 <translation id="3399357656427473483">Listen over legitimasjon som kan fylles ut ved å trykke.</translation>
 <translation id="5441504010984421144">Listen over legitimasjon som kan fylles ut ved å trykke, er åpnet i full høyde.</translation>
-<translation id="5458743933922296641">Logg på <ph name="SITE_NAME" /> med Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pl.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pl.xtb
index 4f067fe..a8e90376 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pl.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pl.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="pl">
 <translation id="1717486229951421299">Lista uprawnień do wypełnienia po kliknięciu jest otwarta do połowy wysokości.</translation>
 <translation id="207576718733492531">Lista uprawnień do wypełnienia po kliknięciu jest zamknięta.</translation>
-<translation id="2410754283952462441">Wybierz konto</translation>
 <translation id="3399357656427473483">Lista uprawnień do wypełnienia po kliknięciu.</translation>
 <translation id="5441504010984421144">Lista uprawnień do wypełnienia po kliknięciu jest otwarta na całą wysokość.</translation>
-<translation id="5458743933922296641">Zaloguj się na <ph name="SITE_NAME" /> w Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-BR.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-BR.xtb
index 5dbce8f..13804499 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-BR.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-BR.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="pt-BR">
 <translation id="1717486229951421299">Lista de credenciais a serem preenchidas por toque aberta na metade da altura.</translation>
 <translation id="207576718733492531">A lista de credenciais a serem preenchidas por toque está fechada.</translation>
-<translation id="2410754283952462441">Escolher uma conta</translation>
 <translation id="3399357656427473483">Lista de credenciais a serem preenchidas por toque.</translation>
 <translation id="5441504010984421144">Lista de credenciais a serem preenchidas por toque aberta no tamanho máximo.</translation>
-<translation id="5458743933922296641">Fazer login em <ph name="SITE_NAME" /> com o Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-PT.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-PT.xtb
index d6595df6..67c09f8 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-PT.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_pt-PT.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="pt-PT">
 <translation id="1717486229951421299">Lista de credenciais a preencher com o toque aberta a meia altura.</translation>
 <translation id="207576718733492531">A lista de credenciais a preencher com o toque está fechada.</translation>
-<translation id="2410754283952462441">Selecione uma conta</translation>
 <translation id="3399357656427473483">Lista de credenciais a preencher com o toque.</translation>
-<translation id="5441504010984421144">Lista de credenciais a preencher com o toque aberta à altura total.</translation>
-<translation id="5458743933922296641">Inicie sessão no site <ph name="SITE_NAME" /> com o Chrome.</translation>
+<translation id="5441504010984421144">Lista de credenciais a preencher com o toque aberta em ecrã cheio.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ro.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ro.xtb
index c8a00f1..e87edb4 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ro.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ro.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ro">
 <translation id="1717486229951421299">Lista datelor de conectare care trebuie completate la atingere este deschisă la jumătate din înălțime.</translation>
 <translation id="207576718733492531">Lista datelor de conectare care trebuie completate la atingere s-a închis.</translation>
-<translation id="2410754283952462441">Alege un cont</translation>
 <translation id="3399357656427473483">Lista datelor de conectare care trebuie completate la atingere.</translation>
 <translation id="5441504010984421144">Lista datelor de conectare care trebuie completate la atingere este deschisă la înălțimea completă.</translation>
-<translation id="5458743933922296641">Conectează-te la <ph name="SITE_NAME" /> cu Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ru.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ru.xtb
index 8f4db74..2eff195d 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ru.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ru.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ru">
 <translation id="1717486229951421299">Список учетных данных, которые можно ввести прикосновением, развернут на половину экрана.</translation>
 <translation id="207576718733492531">Список учетных данных, которые можно ввести прикосновением, закрыт.</translation>
-<translation id="2410754283952462441">Выберите аккаунт</translation>
 <translation id="3399357656427473483">Список учетных данных, которые можно ввести прикосновением.</translation>
 <translation id="5441504010984421144">Список учетных данных, которые можно ввести прикосновением, развернут на весь экран.</translation>
-<translation id="5458743933922296641">Входите на сайт <ph name="SITE_NAME" /> с помощью Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sk.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sk.xtb
index ff92046..3497799ff 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sk.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sk.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="sk">
 <translation id="1717486229951421299">Zoznam prihlasovacích údajov na vyplnenie po klepnutí je otvorený na polovičnú výšku.</translation>
 <translation id="207576718733492531">Zoznam prihlasovacích údajov na vyplnenie po klepnutí je zatvorený.</translation>
-<translation id="2410754283952462441">Výber účtu</translation>
 <translation id="3399357656427473483">Zoznam prihlasovacích údajov na vyplnenie po klepnutí.</translation>
 <translation id="5441504010984421144">Zoznam prihlasovacích údajov na vyplnenie po klepnutí je otvorený na úplnú výšku.</translation>
-<translation id="5458743933922296641">Prihláste sa pomocou Chromu na <ph name="SITE_NAME" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sl.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sl.xtb
index a5fa5b10..292f4dc 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sl.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sl.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="sl">
 <translation id="1717486229951421299">Seznam poverilnic, ki naj se izpolnijo ob dotiku, odprt pri polovični višini.</translation>
 <translation id="207576718733492531">Seznam poverilnic, ki naj se izpolnijo ob dotiku, je zaprt.</translation>
-<translation id="2410754283952462441">Izbira računa</translation>
 <translation id="3399357656427473483">Seznam poverilnic, ki naj se izpolnijo ob dotiku.</translation>
 <translation id="5441504010984421144">Seznam poverilnic, ki naj se izpolnijo ob dotiku, odprt pri polni višini.</translation>
-<translation id="5458743933922296641">Prijava na spletnem mestu <ph name="SITE_NAME" /> s Chromom</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sr.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sr.xtb
index 6fefff9..c2d566d 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sr.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sr.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="sr">
 <translation id="1717486229951421299">Листа акредитива који треба да се унесу на додир се отворила до половине екрана.</translation>
 <translation id="207576718733492531">Листа акредитива који треба да се унесу на додир је затворена.</translation>
-<translation id="2410754283952462441">Изаберите налог</translation>
 <translation id="3399357656427473483">Листа акредитива који треба да се унесу на додир.</translation>
 <translation id="5441504010984421144">Листа акредитива који треба да се унесу на додир се отворила на целом екрану,</translation>
-<translation id="5458743933922296641">Пријавите се на <ph name="SITE_NAME" /> помоћу Chrome-а</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sv.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sv.xtb
index 58c96d8..a0f6985 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sv.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sv.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="sv">
 <translation id="1717486229951421299">Listan över användaruppgifter som ska fyllas i med ett tryck har öppnats över halva skärmen.</translation>
 <translation id="207576718733492531">Listan över användaruppgifter som ska fyllas i med ett tryck är stängd.</translation>
-<translation id="2410754283952462441">Välj ett konto</translation>
 <translation id="3399357656427473483">Lista över användaruppgifter som ska fyllas i med ett tryck.</translation>
 <translation id="5441504010984421144">Listan över användaruppgifter som ska fyllas i med ett tryck har öppnats över hela skärmen.</translation>
-<translation id="5458743933922296641">Logga in på <ph name="SITE_NAME" /> med Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sw.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sw.xtb
index bd96da4..a4863d5 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sw.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_sw.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="sw">
 <translation id="1717486229951421299">Orodha ya vitambulisho vya kujaza kwa kugusa imefunguliwa kwenye nusu ya skrini.</translation>
 <translation id="207576718733492531">Orodha ya vitambulisho vya kujaza kwa kugusa imefungwa.</translation>
-<translation id="2410754283952462441">Chagua akaunti</translation>
 <translation id="3399357656427473483">Orodha ya vitambulisho vya kujaza kwa kugusa.</translation>
 <translation id="5441504010984421144">Orodha ya vitambulisho vya kujaza kwa kugusa imefunguliwa kwenye skrini nzima.</translation>
-<translation id="5458743933922296641">Ingia katika akaunti ya <ph name="SITE_NAME" /> ukitumia Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ta.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ta.xtb
index 68305b6..2ec7e98 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ta.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ta.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="ta">
 <translation id="1717486229951421299">தொட்டால் நிரப்பப்பட வேண்டிய அனுமதிச் சான்றுகளின் பட்டியல் பாதித் திரையில் திறக்கப்பட்டுள்ளது.</translation>
 <translation id="207576718733492531">தொட்டால் நிரப்பப்பட வேண்டிய அனுமதிச் சான்றுகளின் பட்டியல் மூடப்பட்டுள்ளது.</translation>
-<translation id="2410754283952462441">கணக்கைத் தேர்வு செய்யவும்</translation>
 <translation id="3399357656427473483">தொட்டால் நிரப்பப்பட வேண்டிய அனுமதிச் சான்றுகளின் பட்டியல்.</translation>
 <translation id="5441504010984421144">தொட்டால் நிரப்பப்பட வேண்டிய அனுமதிச் சான்றுகளின் பட்டியல் முழுத் திரையில் திறக்கப்பட்டுள்ளது.</translation>
-<translation id="5458743933922296641">Chromeமைப் பயன்படுத்தி <ph name="SITE_NAME" />இல் உள்நுழையுங்கள்</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_te.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_te.xtb
index 9de62d3..efb45d0 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_te.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_te.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="te">
 <translation id="1717486229951421299">'టచ్ చేసి నింపాల్సిన ఆధారాల జాబితా' సగం ఎత్తులో తెరవబడింది.</translation>
 <translation id="207576718733492531">'టచ్ చేసి నింపాల్సిన ఆధారాల జాబితా' మూసివేయబడింది.</translation>
-<translation id="2410754283952462441">ఖాతాను ఎంచుకోండి</translation>
 <translation id="3399357656427473483">'ట‌చ్ చేసి నింపాల్సిన ఆధారాల జాబితా'.</translation>
 <translation id="5441504010984421144">'ట‌చ్ చేసి నింపాల్సిన ఆధారాల జాబితా' పూర్తి ఎత్తులో తెరవబడింది.</translation>
-<translation id="5458743933922296641">Chromeతో <ph name="SITE_NAME" />కు సైన్ ఇన్ చేయండి</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_th.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_th.xtb
index 61e82a6..7065826e 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_th.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_th.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="th">
 <translation id="1717486229951421299">รายการข้อมูลเข้าสู่ระบบที่จะกรอกเมื่อแตะเปิดอยู่ที่ระดับความสูงครึ่งหนึ่งของหน้าจอ</translation>
 <translation id="207576718733492531">รายการข้อมูลเข้าสู่ระบบที่จะกรอกเมื่อแตะปิดอยู่</translation>
-<translation id="2410754283952462441">เลือกบัญชี</translation>
 <translation id="3399357656427473483">รายการข้อมูลเข้าสู่ระบบที่จะกรอกเมื่อแตะ</translation>
 <translation id="5441504010984421144">รายการข้อมูลเข้าสู่ระบบที่จะกรอกเมื่อแตะเปิดอยู่ที่ระดับความสูงเต็มหน้าจอ</translation>
-<translation id="5458743933922296641">ลงชื่อเข้าใช้ <ph name="SITE_NAME" /> ด้วย Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_tr.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_tr.xtb
index 12ddb59..e770c456 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_tr.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_tr.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="tr">
 <translation id="1717486229951421299">Dokunarak doldurulacak kimlik bilgisi listesi ekranın yarısında açıldı.</translation>
 <translation id="207576718733492531">Dokunarak doldurulacak kimlik bilgisi listesi kapatıldı.</translation>
-<translation id="2410754283952462441">Bir hesap seçin</translation>
 <translation id="3399357656427473483">Dokunarak doldurulacak kimlik bilgisi listesi.</translation>
 <translation id="5441504010984421144">Dokunarak doldurulacak kimlik bilgisi listesi tam ekranda açıldı.</translation>
-<translation id="5458743933922296641">Chrome ile <ph name="SITE_NAME" /> sitesinde oturum açın</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_uk.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_uk.xtb
index 73734db..85e5279 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_uk.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_uk.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="uk">
 <translation id="1717486229951421299">Список облікових даних, які вставляються дотиком, відкрито на половину висоти екрана.</translation>
 <translation id="207576718733492531">Список облікових даних, які вставляються дотиком, закритий.</translation>
-<translation id="2410754283952462441">Виберіть обліковий запис</translation>
 <translation id="3399357656427473483">Список облікових даних, які вставляються дотиком.</translation>
 <translation id="5441504010984421144">Список облікових даних, які вставляються дотиком, відкрито на всю висоту екрана.</translation>
-<translation id="5458743933922296641">Увійдіть в обліковий запис на сайті <ph name="SITE_NAME" /> у Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb
index deea7e07..26a46fd 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_vi.xtb
@@ -1,10 +1,8 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="vi">
-<translation id="1717486229951421299">Danh sách các thông tin xác thực mà bạn có thể chạm để điền đã mở ở nửa dưới của màn hình.</translation>
-<translation id="207576718733492531">Danh sách các thông tin xác thực mà bạn có thể chạm để điền đã đóng.</translation>
-<translation id="2410754283952462441">Chọn một tài khoản</translation>
-<translation id="3399357656427473483">Danh sách các thông tin xác thực mà bạn có thể chạm để điền.</translation>
-<translation id="5441504010984421144">Danh sách các thông tin xác thực mà bạn có thể chạm để điền đã mở trên toàn màn hình.</translation>
-<translation id="5458743933922296641">Đăng nhập vào <ph name="SITE_NAME" /> bằng Chrome</translation>
+<translation id="1717486229951421299">Danh sách thông tin đăng nhập mà bạn có thể chạm để điền đã được mở ở nửa dưới của màn hình.</translation>
+<translation id="207576718733492531">Danh sách thông tin đăng nhập mà bạn có thể chạm để điền đã bị đóng.</translation>
+<translation id="3399357656427473483">Danh sách các thông tin đăng nhập mà bạn có thể chạm để điền.</translation>
+<translation id="5441504010984421144">Danh sách các thông tin xác thực mà bạn có thể chạm để điền đã được mở ở toàn độ cao.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-CN.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-CN.xtb
index 68723ada..b1119b5d 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-CN.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-CN.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="zh-CN">
 <translation id="1717486229951421299">轻触即可填充的凭据的列表已半屏打开。</translation>
 <translation id="207576718733492531">轻触即可填充的凭据的列表已关闭。</translation>
-<translation id="2410754283952462441">选择帐号</translation>
 <translation id="3399357656427473483">轻触即可填充的凭据的列表。</translation>
 <translation id="5441504010984421144">轻触即可填充的凭据的列表已全屏打开。</translation>
-<translation id="5458743933922296641">使用 Chrome 登录 <ph name="SITE_NAME" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-TW.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-TW.xtb
index 7540df0..07d60bc 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-TW.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_zh-TW.xtb
@@ -3,8 +3,6 @@
 <translationbundle lang="zh-TW">
 <translation id="1717486229951421299">輕觸即可填入的憑證清單已開啟,顯示在畫面下半部。</translation>
 <translation id="207576718733492531">輕觸即可填入的憑證清單已關閉。</translation>
-<translation id="2410754283952462441">選擇帳戶</translation>
 <translation id="3399357656427473483">輕觸即可填入的憑證清單。</translation>
 <translation id="5441504010984421144">輕觸即可填入的憑證清單已開啟,顯示於整個畫面。</translation>
-<translation id="5458743933922296641">使用 Chrome 登入 <ph name="SITE_NAME" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/touch_to_fill/android/java/src/org/chromium/chrome/browser/touch_to_fill/data/Credential.java b/chrome/browser/touch_to_fill/android/java/src/org/chromium/chrome/browser/touch_to_fill/data/Credential.java
index 5eba53d..eb3ed519 100644
--- a/chrome/browser/touch_to_fill/android/java/src/org/chromium/chrome/browser/touch_to_fill/data/Credential.java
+++ b/chrome/browser/touch_to_fill/android/java/src/org/chromium/chrome/browser/touch_to_fill/data/Credential.java
@@ -12,6 +12,7 @@
 public class Credential {
     private final String mUsername;
     private final String mPassword;
+    private final String mFormattedUsername;
     private final String mOriginUrl;
     private final boolean mIsPublicSuffixMatch;
 
@@ -21,10 +22,11 @@
      * @param originUrl Origin URL shown to the user in case this credential is a PSL match.
      * @param isPublicSuffixMatch Indicating whether the credential is a PSL match.
      */
-    public Credential(
-            String username, String password, String originUrl, boolean isPublicSuffixMatch) {
+    public Credential(String username, String password, String formattedUsername, String originUrl,
+            boolean isPublicSuffixMatch) {
         mUsername = username;
         mPassword = password;
+        mFormattedUsername = formattedUsername;
         mOriginUrl = originUrl;
         mIsPublicSuffixMatch = isPublicSuffixMatch;
     }
@@ -39,6 +41,10 @@
         return mPassword;
     }
 
+    public String getFormattedUsername() {
+        return mFormattedUsername;
+    }
+
     @CalledByNative
     public String getOriginUrl() {
         return mOriginUrl;
diff --git a/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillIntegrationTest.java b/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillIntegrationTest.java
index 4546368..517dd9a 100644
--- a/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillIntegrationTest.java
+++ b/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillIntegrationTest.java
@@ -46,8 +46,9 @@
 public class TouchToFillIntegrationTest {
     private static final String EXAMPLE_URL = "www.example.xyz";
     private static final String MOBILE_URL = "m.example.xyz";
-    private static final Credential ANA = new Credential("Ana", "S3cr3t", EXAMPLE_URL, false);
-    private static final Credential BOB = new Credential("Bob", "*****", MOBILE_URL, true);
+    private static final Credential ANA =
+            new Credential("Ana", "S3cr3t", "Ana", EXAMPLE_URL, false);
+    private static final Credential BOB = new Credential("Bob", "*****", "Bob", MOBILE_URL, true);
 
     private final TouchToFillComponent mTouchToFill = new TouchToFillCoordinator();
 
diff --git a/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java b/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java
index aa2b3c53..f1c82c6 100644
--- a/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java
+++ b/chrome/browser/touch_to_fill/android/javatests/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillViewTest.java
@@ -111,8 +111,8 @@
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mTouchToFillView.setVisible(true);
             mModel.get(CREDENTIAL_LIST)
-                    .addAll(Arrays.asList(new Credential("Ana", "S3cr3t", null, false),
-                            new Credential("Bob", "***", "m.example.xyz", true)));
+                    .addAll(Arrays.asList(new Credential("Ana", "S3cr3t", "Ana", null, false),
+                            new Credential("", "***", "No Username", "m.example.xyz", true)));
         });
 
         pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
@@ -121,7 +121,7 @@
         assertThat(getCredentialPasswordAt(0).getText(), is("S3cr3t"));
         assertThat(getCredentialPasswordAt(0).getTransformationMethod(),
                 instanceOf(PasswordTransformationMethod.class));
-        assertThat(getCredentialNameAt(1).getText(), is("Bob"));
+        assertThat(getCredentialNameAt(1).getText(), is("No Username"));
         assertThat(getCredentialPasswordAt(1).getText(), is("***"));
         assertThat(getCredentialPasswordAt(1).getTransformationMethod(),
                 instanceOf(PasswordTransformationMethod.class));
@@ -132,8 +132,8 @@
     public void testCredentialsAreClickable() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             mModel.get(CREDENTIAL_LIST)
-                    .addAll(Arrays.asList(new Credential("Carl", "G3h3!m", "", false),
-                            new Credential("Bob", "***", "m.example.xyz", true)));
+                    .addAll(Arrays.asList(new Credential("Carl", "G3h3!m", "Carl", "", false),
+                            new Credential("Bob", "***", "Bob", "m.example.xyz", true)));
             mModel.set(VISIBLE, true);
         });
         pollUiThread(() -> getBottomSheetState() == SheetState.FULL);
diff --git a/chrome/browser/touch_to_fill/android/junit/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillControllerTest.java b/chrome/browser/touch_to_fill/android/junit/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillControllerTest.java
index 919e67a..878b27c 100644
--- a/chrome/browser/touch_to_fill/android/junit/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillControllerTest.java
+++ b/chrome/browser/touch_to_fill/android/junit/src/org/chromium/chrome/browser/touch_to_fill/TouchToFillControllerTest.java
@@ -36,9 +36,10 @@
 public class TouchToFillControllerTest {
     private static final String TEST_URL = "www.example.xyz";
     private static final String TEST_MOBILE_URL = "www.example.xyz";
-    private static final Credential ANA = new Credential("Ana", "S3cr3t", null, false);
-    private static final Credential BOB = new Credential("Bob", "*****", TEST_MOBILE_URL, true);
-    private static final Credential CARL = new Credential("Carl", "G3h3!m", "", false);
+    private static final Credential ANA = new Credential("Ana", "S3cr3t", "Ana", null, false);
+    private static final Credential BOB =
+            new Credential("Bob", "*****", "Bob", TEST_MOBILE_URL, true);
+    private static final Credential CARL = new Credential("Carl", "G3h3!m", "Carl", "", false);
 
     @Mock
     private TouchToFillComponent.Delegate mMockDelegate;
diff --git a/chrome/browser/touch_to_fill/android/touch_to_fill_view_impl.cc b/chrome/browser/touch_to_fill/android/touch_to_fill_view_impl.cc
index c2ab592..1b90366c 100644
--- a/chrome/browser/touch_to_fill/android/touch_to_fill_view_impl.cc
+++ b/chrome/browser/touch_to_fill/android/touch_to_fill_view_impl.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/password_manager/touch_to_fill_controller.h"
 #include "chrome/browser/touch_to_fill/android/jni_headers/Credential_jni.h"
 #include "chrome/browser/touch_to_fill/android/jni_headers/TouchToFillBridge_jni.h"
+#include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
 #include "components/password_manager/core/browser/origin_credential_store.h"
 #include "ui/android/view_android.h"
 #include "ui/android/window_android.h"
@@ -70,6 +71,7 @@
         env, credential_array, i,
         ConvertUTF16ToJavaString(env, credential.username),
         ConvertUTF16ToJavaString(env, credential.password),
+        ConvertUTF16ToJavaString(env, GetDisplayUsername(credential)),
         ConvertUTF8ToJavaString(env, credential.origin_url.spec()),
         credential.is_public_suffix_match);
   }
@@ -81,7 +83,6 @@
 
 void TouchToFillViewImpl::OnDismiss() {
   // TODO(crbug.com/957532): Implement.
-  NOTIMPLEMENTED();
 }
 
 void TouchToFillViewImpl::OnCredentialSelected(
diff --git a/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc b/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc
index a6b03f36..1fc3ff4 100644
--- a/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc
+++ b/chrome/browser/tracing/chrome_tracing_delegate_browsertest.cc
@@ -159,16 +159,9 @@
       base::Closure(), content::BackgroundTracingManager::NO_DATA_FILTERING));
 }
 
-// Flaky on Linux and Windows. See https://crbug.com/723933.
-#if defined(OS_LINUX) || defined(OS_WIN)
-#define MAYBE_BackgroundTracingThrottleTimeElapsed \
-  DISABLED_BackgroundTracingThrottleTimeElapsed
-#else
-#define MAYBE_BackgroundTracingThrottleTimeElapsed \
-  BackgroundTracingThrottleTimeElapsed
-#endif
+// Flaky. See https://crbug.com/723933 and https://crbug.com/1012218.
 IN_PROC_BROWSER_TEST_F(ChromeTracingDelegateBrowserTest,
-                       MAYBE_BackgroundTracingThrottleTimeElapsed) {
+                       DISABLED_BackgroundTracingThrottleTimeElapsed) {
   base::RunLoop wait_for_upload;
 
   EXPECT_TRUE(StartPreemptiveScenario(
@@ -224,18 +217,12 @@
       base::Closure(), content::BackgroundTracingManager::ANONYMIZE_DATA));
 }
 
-#if defined(OS_MACOSX) && defined(ADDRESS_SANITIZER)
 // Flaky on ASAN on Mac. See https://crbug.com/674497.
-#define MAYBE_NewIncognitoSessionBlockingTraceFinalization \
-  DISABLED_NewIncognitoSessionBlockingTraceFinalization
-#else
-#define MAYBE_NewIncognitoSessionBlockingTraceFinalization \
-  NewIncognitoSessionBlockingTraceFinalization
-#endif
+// Flaky in general. See https://crbug.com/1012218.
 // If we need a PII-stripped trace, any new OTR session during tracing should
 // block the finalization of the trace.
 IN_PROC_BROWSER_TEST_F(ChromeTracingDelegateBrowserTest,
-                       MAYBE_NewIncognitoSessionBlockingTraceFinalization) {
+                       DISABLED_NewIncognitoSessionBlockingTraceFinalization) {
   EXPECT_TRUE(StartPreemptiveScenario(
       base::Closure(), content::BackgroundTracingManager::ANONYMIZE_DATA));
 
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index c8fae10..b09b98f 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -400,6 +400,7 @@
     "//chrome/browser/media:mojo_bindings",
     "//chrome/browser/notifications/scheduler/public",
     "//chrome/browser/profiling_host",
+    "//chrome/browser/resources/omnibox:resources",
     "//chrome/browser/resources/usb_internals:resources",
     "//chrome/browser/safe_browsing",
     "//chrome/browser/ssl:proto",
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
index 8170efe..0e74ad66 100644
--- a/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
+++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.cc
@@ -85,11 +85,6 @@
       base::android::AttachCurrentThread(), java_object_);
 }
 
-void ManualFillingViewAndroid::ShowTouchToFillSheet() {
-  Java_ManualFillingComponentBridge_showTouchToFillSheet(
-      base::android::AttachCurrentThread(), java_object_);
-}
-
 void ManualFillingViewAndroid::Hide() {
   Java_ManualFillingComponentBridge_hide(base::android::AttachCurrentThread(),
                                          java_object_);
diff --git a/chrome/browser/ui/android/passwords/manual_filling_view_android.h b/chrome/browser/ui/android/passwords/manual_filling_view_android.h
index a7ee675..ec4aba0 100644
--- a/chrome/browser/ui/android/passwords/manual_filling_view_android.h
+++ b/chrome/browser/ui/android/passwords/manual_filling_view_android.h
@@ -32,7 +32,6 @@
   void CloseAccessorySheet() override;
   void SwapSheetWithKeyboard() override;
   void ShowWhenKeyboardIsVisible() override;
-  void ShowTouchToFillSheet() override;
   void Hide() override;
 
   // Called from Java via JNI:
diff --git a/chrome/browser/ui/apps/chrome_app_delegate.cc b/chrome/browser/ui/apps/chrome_app_delegate.cc
index f1c004ec..3f0d4fc6 100644
--- a/chrome/browser/ui/apps/chrome_app_delegate.cc
+++ b/chrome/browser/ui/apps/chrome_app_delegate.cc
@@ -46,6 +46,7 @@
 #include "extensions/common/constants.h"
 #include "extensions/common/extension_messages.h"
 #include "extensions/common/mojom/app_window.mojom.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "printing/buildflags/buildflags.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 
@@ -323,8 +324,9 @@
   // RenderViewHost may be NULL during shutdown.
   content::RenderFrameHost* host = web_contents->GetMainFrame();
   if (host) {
-    extensions::mojom::AppWindowPtr app_window;
-    host->GetRemoteInterfaces()->GetInterface(&app_window);
+    mojo::Remote<extensions::mojom::AppWindow> app_window;
+    host->GetRemoteInterfaces()->GetInterface(
+        app_window.BindNewPipeAndPassReceiver());
     app_window->SetVisuallyDeemphasized(blocked);
   }
 }
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc
index 75043d8..38fcad7 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -78,7 +78,7 @@
      {ChromePage::CHANGEPICTURE, chrome::kChangePictureSubPage},
      {ChromePage::CUPSPRINTERS, chrome::kNativePrintingSettingsSubPage},
      {ChromePage::KEYBOARDOVERLAY, chrome::kKeyboardOverlaySubPage},
-     {ChromePage::LANGUAGES, chrome::kLanguageOptionsSubPage},
+     {ChromePage::LANGUAGES, chrome::kLanguageSubPage},
      {ChromePage::LOCKSCREEN, chrome::kLockScreenSubPage},
      {ChromePage::MANAGEACCESSIBILITY, chrome::kManageAccessibilitySubPage},
      {ChromePage::NETWORKSTYPEVPN, chrome::kVPNSettingsSubPage},
diff --git a/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc b/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc
index 7d01314..2db8b2c8 100644
--- a/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc
+++ b/chrome/browser/ui/ash/chrome_new_window_client_browsertest.cc
@@ -290,7 +290,7 @@
   TestOpenChromePage(ChromePage::KEYBOARDOVERLAY,
                      base_url.Resolve(chrome::kKeyboardOverlaySubPage));
   TestOpenChromePage(ChromePage::LANGUAGES,
-                     base_url.Resolve(chrome::kLanguageOptionsSubPage));
+                     base_url.Resolve(chrome::kLanguageSubPage));
   TestOpenChromePage(ChromePage::LOCKSCREEN,
                      base_url.Resolve(chrome::kLockScreenSubPage));
   TestOpenChromePage(ChromePage::MANAGEACCESSIBILITY,
diff --git a/chrome/browser/ui/ash/system_tray_client.cc b/chrome/browser/ui/ash/system_tray_client.cc
index de3609c..65bbfd7 100644
--- a/chrome/browser/ui/ash/system_tray_client.cc
+++ b/chrome/browser/ui/ash/system_tray_client.cc
@@ -244,7 +244,7 @@
 
 void SystemTrayClient::ShowIMESettings() {
   base::RecordAction(base::UserMetricsAction("OpenLanguageOptionsDialog"));
-  ShowSettingsSubPageForActiveUser(chrome::kLanguageOptionsSubPage);
+  ShowSettingsSubPageForActiveUser(chrome::kLanguageSubPage);
 }
 
 void SystemTrayClient::ShowConnectedDevicesSettings() {
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc
index 1e00104..f2c5ac6 100644
--- a/chrome/browser/ui/chrome_pages.cc
+++ b/chrome/browser/ui/chrome_pages.cc
@@ -96,7 +96,7 @@
 
 #if defined(OS_CHROMEOS) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
 void LaunchReleaseNotesInTab(Profile* profile) {
-  GURL url(kChromeReleaseNotesURL);
+  GURL url(BuildQueryString(profile));
   auto displayer = std::make_unique<ScopedTabbedBrowserDisplayer>(profile);
   ShowSingletonTab(displayer->browser(), url);
 }
diff --git a/chrome/browser/ui/cocoa/history_menu_cocoa_controller.mm b/chrome/browser/ui/cocoa/history_menu_cocoa_controller.mm
index 91dc543..399404b 100644
--- a/chrome/browser/ui/cocoa/history_menu_cocoa_controller.mm
+++ b/chrome/browser/ui/cocoa/history_menu_cocoa_controller.mm
@@ -56,7 +56,18 @@
     DCHECK(node->url.is_valid());
     WindowOpenDisposition disposition =
         ui::WindowOpenDispositionFromNSEvent([NSApp currentEvent]);
-    NavigateParams params(bridge_->profile(), node->url,
+    Profile* target_profile = bridge_->profile();
+
+    // Allow a history menu item to open in an active incognito window.
+    // Specifically, if the active window has the same root profile as the
+    // bridge, target the active profile. Without this, history menu items open
+    // in the nearest non-incognito window, or create one.
+    if (auto* active_browser = chrome::FindBrowserWithActiveWindow()) {
+      if (active_browser->profile()->GetOriginalProfile() == target_profile)
+        target_profile = active_browser->profile();
+    }
+
+    NavigateParams params(target_profile, node->url,
                           ui::PAGE_TRANSITION_AUTO_BOOKMARK);
     params.disposition = disposition;
     Navigate(&params);
diff --git a/chrome/browser/ui/input_method/input_method_engine_base.h b/chrome/browser/ui/input_method/input_method_engine_base.h
index 4862d1e..43884168 100644
--- a/chrome/browser/ui/input_method/input_method_engine_base.h
+++ b/chrome/browser/ui/input_method/input_method_engine_base.h
@@ -98,9 +98,6 @@
     virtual void OnCompositionBoundsChanged(
         const std::vector<gfx::Rect>& bounds) = 0;
 
-    // Returns whether the observer is interested in key events.
-    virtual bool IsInterestedInKeyEvent() const = 0;
-
     // Called when a surrounding text is changed.
     virtual void OnSurroundingTextChanged(const std::string& engine_id,
                                           const std::string& text,
diff --git a/chrome/browser/ui/input_method/input_method_engine_unittest.cc b/chrome/browser/ui/input_method/input_method_engine_unittest.cc
index 3c968276..b6af519f 100644
--- a/chrome/browser/ui/input_method/input_method_engine_unittest.cc
+++ b/chrome/browser/ui/input_method/input_method_engine_unittest.cc
@@ -102,7 +102,6 @@
     calls_bitmap_ |= ONCOMPOSITIONBOUNDSCHANGED;
     composition_bounds_ = bounds;
   }
-  bool IsInterestedInKeyEvent() const override { return true; }
   void OnSurroundingTextChanged(const std::string& engine_id,
                                 const std::string& text,
                                 int cursor_pos,
diff --git a/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc
index b6c45cd..548e43b 100644
--- a/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_state_unittest.cc
@@ -116,7 +116,7 @@
     const std::vector<const PasswordForm*>& federated_matches) {
   auto form_manager = std::make_unique<MockPasswordFormManagerForUI>();
   EXPECT_CALL(*form_manager, GetBestMatches())
-      .WillOnce(testing::ReturnRef(*best_matches));
+      .WillOnce(testing::Return(*best_matches));
   EXPECT_CALL(*form_manager, GetFederatedMatches())
       .WillOnce(Return(federated_matches));
   EXPECT_CALL(*form_manager, GetOrigin())
diff --git a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc
index 4b5db527..993d7481 100644
--- a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc
+++ b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc
@@ -27,12 +27,11 @@
   ~UnittestProfileManager() override = default;
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& file_path) override {
-    if (!base::PathExists(file_path)) {
-      if (!base::CreateDirectory(file_path))
-        return nullptr;
-    }
-    return new TestingProfile(file_path, nullptr);
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
+    if (!base::PathExists(path) && !base::CreateDirectory(path))
+      return nullptr;
+    return std::make_unique<TestingProfile>(path);
   }
 
   std::unique_ptr<Profile> CreateProfileAsyncHelper(
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
index 9d6a177..d6c8fe50 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_editor_view.cc
@@ -364,7 +364,7 @@
   column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::LEADING,
                         views::GridLayout::kFixedSize,
                         views::GridLayout::USE_PREF, 0, 0);
-  column_set->LinkColumnSizes(0, 2, 4, -1);
+  column_set->LinkColumnSizes({0, 2, 4});
 
   layout->StartRow(views::GridLayout::kFixedSize, labels_column_set_id);
   layout->AddView(std::make_unique<views::Label>(
diff --git a/chrome/browser/ui/views/collected_cookies_views.cc b/chrome/browser/ui/views/collected_cookies_views.cc
index 0a3c528..8ad14d1 100644
--- a/chrome/browser/ui/views/collected_cookies_views.cc
+++ b/chrome/browser/ui/views/collected_cookies_views.cc
@@ -79,7 +79,7 @@
   column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER,
                         views::GridLayout::kFixedSize,
                         views::GridLayout::USE_PREF, 0, 0);
-  column_set->LinkColumnSizes(0, 2, -1);
+  column_set->LinkColumnSizes({0, 2});
   column_set->set_linked_column_size_limit(button_size_limit);
   layout->StartRow(views::GridLayout::kFixedSize, column_layout_id);
 }
diff --git a/chrome/browser/ui/views/extensions/extension_popup.cc b/chrome/browser/ui/views/extensions/extension_popup.cc
index 12b77ca..d61bc7c 100644
--- a/chrome/browser/ui/views/extensions/extension_popup.cc
+++ b/chrome/browser/ui/views/extensions/extension_popup.cc
@@ -95,10 +95,6 @@
   }
 }
 
-bool ExtensionPopup::ShouldHaveRoundCorners() const {
-  return false;
-}
-
 #if defined(USE_AURA)
 void ExtensionPopup::OnWidgetDestroying(views::Widget* widget) {
   BubbleDialogDelegateView::OnWidgetDestroying(widget);
@@ -178,6 +174,8 @@
                                views::BubbleBorder::SMALL_SHADOW),
       host_(std::move(host)),
       show_action_(show_action) {
+  DialogDelegate::set_use_round_corners(false);
+
   set_margins(gfx::Insets());
   SetLayoutManager(std::make_unique<views::FillLayout>());
   AddChildView(GetExtensionView());
diff --git a/chrome/browser/ui/views/extensions/extension_popup.h b/chrome/browser/ui/views/extensions/extension_popup.h
index 597cbfa..87e9837 100644
--- a/chrome/browser/ui/views/extensions/extension_popup.h
+++ b/chrome/browser/ui/views/extensions/extension_popup.h
@@ -76,7 +76,6 @@
   void AddedToWidget() override;
   int GetDialogButtons() const override;
   void OnWidgetActivationChanged(views::Widget* widget, bool active) override;
-  bool ShouldHaveRoundCorners() const override;
 #if defined(USE_AURA)
   void OnWidgetDestroying(views::Widget* widget) override;
 
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index af42012..2450bd5 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -513,7 +513,17 @@
 
 // static
 BrowserView* BrowserView::GetBrowserViewForBrowser(const Browser* browser) {
-  return static_cast<BrowserView*>(browser->window());
+  // It might look like this method should be implemented as:
+  //   return static_cast<BrowserView*>(browser->window())
+  // but in fact in unit tests browser->window() may not be a BrowserView even
+  // in Views Browser builds. Always go through the ForNativeWindow path, which
+  // is robust against being given any kind of native window.
+  //
+  // Also, tests don't always have a non-null NativeWindow backing the
+  // BrowserWindow, so be sure to check for that as well.
+  if (!browser->window()->GetNativeWindow())
+    return nullptr;
+  return GetBrowserViewForNativeWindow(browser->window()->GetNativeWindow());
 }
 
 // static
diff --git a/chrome/browser/ui/views/frame/browser_view_unittest.cc b/chrome/browser/ui/views/frame/browser_view_unittest.cc
index de78cc9..d9362b9c 100644
--- a/chrome/browser/ui/views/frame/browser_view_unittest.cc
+++ b/chrome/browser/ui/views/frame/browser_view_unittest.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/chromium_strings.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
 #include "chrome/test/base/testing_profile_manager.h"
 #include "components/version_info/channel.h"
 #include "content/public/test/test_service_manager_context.h"
@@ -354,3 +355,12 @@
   EXPECT_EQ(browser_view()->GetFindBarBoundingBox().y(),
             browser_view()->frame()->GetTopInset());
 }
+
+using BrowserViewWindowTypeTest = BrowserWithTestWindowTest;
+
+TEST_F(BrowserViewWindowTypeTest, TestWindowIsNotReturned) {
+  // Check that BrowserView::GetBrowserViewForBrowser does not return a
+  // non-BrowserView BrowserWindow instance - in this case, a TestBrowserWindow.
+  EXPECT_NE(nullptr, browser()->window());
+  EXPECT_EQ(nullptr, BrowserView::GetBrowserViewForBrowser(browser()));
+}
diff --git a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
index a25e8f64..571ea40 100644
--- a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
@@ -7,6 +7,7 @@
 #include "build/build_config.h"
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h"
 #include "chrome/browser/ui/in_product_help/global_media_controls_in_product_help.h"
 #include "chrome/browser/ui/in_product_help/global_media_controls_in_product_help_factory.h"
 #include "chrome/browser/ui/views/feature_promos/global_media_controls_promo_controller.h"
@@ -27,7 +28,9 @@
     const Browser* browser)
     : ToolbarButton(this),
       connector_(connector),
-      controller_(source_id, connector_, this),
+      controller_(std::make_unique<MediaToolbarButtonController>(source_id,
+                                                                 connector_,
+                                                                 this)),
       browser_(browser) {
   GlobalMediaControlsInProductHelp* in_product_help =
       GlobalMediaControlsInProductHelpFactory::GetForProfile(
@@ -48,7 +51,12 @@
   SetVisible(false);
 }
 
-MediaToolbarButtonView::~MediaToolbarButtonView() = default;
+MediaToolbarButtonView::~MediaToolbarButtonView() {
+  // When |controller_| is destroyed, it may call
+  // |MediaToolbarButtonView::Hide()|, so we want to be sure it's destroyed
+  // before any of our other members.
+  controller_.reset();
+}
 
 void MediaToolbarButtonView::AddObserver(MediaToolbarButtonObserver* observer) {
   observers_.AddObserver(observer);
@@ -64,7 +72,7 @@
   if (MediaDialogView::IsShowing()) {
     MediaDialogView::HideDialog();
   } else {
-    MediaDialogView::ShowDialog(this, &controller_, connector_);
+    MediaDialogView::ShowDialog(this, controller_.get(), connector_);
 
     // Inform observers. Since the promo controller cares about the dialog
     // showing, we need to ensure that it's created.
diff --git a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
index 9ec9cf6..57036f2 100644
--- a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
+++ b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
@@ -6,7 +6,6 @@
 #define CHROME_BROWSER_UI_VIEWS_GLOBAL_MEDIA_CONTROLS_MEDIA_TOOLBAR_BUTTON_VIEW_H_
 
 #include "base/macros.h"
-#include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h"
 #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_button.h"
 
@@ -20,6 +19,7 @@
 
 class Browser;
 class GlobalMediaControlsPromoController;
+class MediaToolbarButtonController;
 class MediaToolbarButtonObserver;
 
 // Media icon shown in the trusted area of toolbar. Its lifetime is tied to that
@@ -82,7 +82,7 @@
   bool is_promo_showing_ = false;
 
   service_manager::Connector* const connector_;
-  MediaToolbarButtonController controller_;
+  std::unique_ptr<MediaToolbarButtonController> controller_;
   const Browser* const browser_;
 
   base::ObserverList<MediaToolbarButtonObserver> observers_;
diff --git a/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc b/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc
index 70698957..99c9df4 100644
--- a/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc
@@ -36,6 +36,7 @@
     {"networkListItemConnecting", IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING},
     {"networkListItemConnectingTo", IDS_NETWORK_LIST_CONNECTING_TO},
     {"networkListItemInitializing", IDS_NETWORK_LIST_INITIALIZING},
+    {"networkListItemNotAvailable", IDS_NETWORK_LIST_NOT_AVAILABLE},
     {"networkListItemScanning", IDS_SETTINGS_INTERNET_MOBILE_SEARCH},
     {"networkListItemSimCardLocked", IDS_NETWORK_LIST_SIM_CARD_LOCKED},
     {"networkListItemNotConnected", IDS_NETWORK_LIST_NOT_CONNECTED},
diff --git a/chrome/browser/ui/webui/flags_ui.cc b/chrome/browser/ui/webui/flags_ui.cc
index 190d064..55b6c62e 100644
--- a/chrome/browser/ui/webui/flags_ui.cc
+++ b/chrome/browser/ui/webui/flags_ui.cc
@@ -128,6 +128,7 @@
   source->AddLocalizedString("enabled", IDS_FLAGS_UI_ENABLED_FEATURE);
   source->AddLocalizedString("experiment-enabled",
                              IDS_FLAGS_UI_EXPERIMENT_ENABLED);
+  source->AddLocalizedString("heading", IDS_FLAGS_UI_TITLE);
   source->AddLocalizedString("no-results", IDS_FLAGS_UI_NO_RESULTS);
   source->AddLocalizedString("not-available-platform",
                              IDS_FLAGS_UI_NOT_AVAILABLE_ON_PLATFORM);
@@ -161,11 +162,11 @@
                              IDS_DEPRECATED_FEATURES_ENABLED_FEATURE);
   source->AddLocalizedString("experiment-enabled",
                              IDS_DEPRECATED_UI_EXPERIMENT_ENABLED);
+  source->AddLocalizedString("heading", IDS_DEPRECATED_FEATURES_HEADING);
   source->AddLocalizedString("no-results", IDS_DEPRECATED_FEATURES_NO_RESULTS);
   source->AddLocalizedString("not-available-platform",
                              IDS_DEPRECATED_FEATURES_NOT_AVAILABLE_ON_PLATFORM);
-  source->AddLocalizedString("page-warning",
-                             IDS_DEPRECATED_FEATURES_PAGE_WARNING);
+  source->AddString("page-warning", std::string());
   source->AddLocalizedString("page-warning-explanation",
                              IDS_DEPRECATED_FEATURES_PAGE_WARNING_EXPLANATION);
   source->AddLocalizedString("relaunch", IDS_DEPRECATED_FEATURES_RELAUNCH);
diff --git a/chrome/browser/ui/webui/omnibox/omnibox_ui.cc b/chrome/browser/ui/webui/omnibox/omnibox_ui.cc
index 2fac6c96..0b5b49c 100644
--- a/chrome/browser/ui/webui/omnibox/omnibox_ui.cc
+++ b/chrome/browser/ui/webui/omnibox/omnibox_ui.cc
@@ -12,7 +12,7 @@
 #include "chrome/browser/ui/webui/version_handler.h"
 #include "chrome/browser/ui/webui/version_ui.h"
 #include "chrome/common/url_constants.h"
-#include "chrome/grit/browser_resources.h"
+#include "chrome/grit/omnibox_resources.h"
 #include "content/public/browser/web_ui.h"
 #include "content/public/browser/web_ui_controller.h"
 #include "content/public/browser/web_ui_data_source.h"
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index 9b2af53..52b2098 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -3221,6 +3221,8 @@
       {"multideviceForgetDevice", IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE},
       {"multideviceSmartLockOptions",
        IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOCK},
+      {"multideviceForgetDeviceDisconnect",
+       IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE_DISCONNECT},
   };
   AddLocalizedStringsBulk(html_source, kLocalizedStrings,
                           base::size(kLocalizedStrings));
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
index 876f3b3..a13b196 100644
--- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
+++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
@@ -101,10 +101,11 @@
       : ProfileManagerWithoutInit(user_data_dir) {}
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& file_path) override {
-    if (!base::PathExists(file_path) && !base::CreateDirectory(file_path))
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
+    if (!base::PathExists(path) && !base::CreateDirectory(path))
       return nullptr;
-    return BuildTestingProfile(file_path, /*delegate=*/nullptr).release();
+    return BuildTestingProfile(path, /*delegate=*/nullptr);
   }
 
   std::unique_ptr<Profile> CreateProfileAsyncHelper(
diff --git a/chrome/browser/util/android/BUILD.gn b/chrome/browser/util/android/BUILD.gn
index 8c5b7c5..413fd23 100644
--- a/chrome/browser/util/android/BUILD.gn
+++ b/chrome/browser/util/android/BUILD.gn
@@ -20,6 +20,7 @@
     "java/src/org/chromium/chrome/browser/util/PlatformUtil.java",
     "java/src/org/chromium/chrome/browser/util/UrlConstants.java",
     "java/src/org/chromium/chrome/browser/util/UrlUtilities.java",
+    "java/src/org/chromium/chrome/browser/util/ViewUtils.java",
   ]
   deps = [
     "//base:base_java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/ViewUtils.java b/chrome/browser/util/android/java/src/org/chromium/chrome/browser/util/ViewUtils.java
similarity index 78%
rename from chrome/android/java/src/org/chromium/chrome/browser/util/ViewUtils.java
rename to chrome/browser/util/android/java/src/org/chromium/chrome/browser/util/ViewUtils.java
index 99761ac..c8e1e71 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/util/ViewUtils.java
+++ b/chrome/browser/util/android/java/src/org/chromium/chrome/browser/util/ViewUtils.java
@@ -16,17 +16,13 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import org.chromium.base.ApiCompatibilityUtils;
 import org.chromium.base.ContextUtils;
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
 
 /**
  * View-related utility methods.
  */
 public class ViewUtils {
     private static final int[] sLocationTmp = new int[2];
-    public static int DEFAULT_FAVICON_CORNER_RADIUS = -1;
 
     /**
      * Invalidates a view and all of its descendants.
@@ -161,46 +157,13 @@
     }
 
     /**
-     * Creates a {@link RoundedIconGenerator} that uses default styles.
-     * @param resources The {@link Resources} for accessing color and dimen resources.
-     * @param circularIcon Whether the generated icons should be circles.
-     * @return A {@link RoundedIconGenerator} that uses the default rounded icon style. Intended for
-     *         monograms, e.g. a rounded rectangle or a circle with character(s) in the center.
-     */
-    public static RoundedIconGenerator createDefaultRoundedIconGenerator(
-            Resources resources, boolean circularIcon) {
-        int iconColor =
-                ApiCompatibilityUtils.getColor(resources, R.color.default_favicon_background_color);
-        int displayedIconSize;
-        int cornerRadius;
-        int textSize;
-
-        if (circularIcon) {
-            displayedIconSize = resources.getDimensionPixelSize(R.dimen.circular_monogram_size);
-            cornerRadius = displayedIconSize / 2;
-            textSize = resources.getDimensionPixelSize(R.dimen.circular_monogram_text_size);
-        } else {
-            displayedIconSize = resources.getDimensionPixelSize(R.dimen.default_favicon_size);
-            cornerRadius = resources.getDimensionPixelSize(R.dimen.default_favicon_corner_radius);
-            textSize = resources.getDimensionPixelSize(R.dimen.default_favicon_icon_text_size);
-        }
-
-        return new RoundedIconGenerator(
-                displayedIconSize, displayedIconSize, cornerRadius, iconColor, textSize);
-    }
-
-    /**
      * Creates a {@link RoundedBitmapDrawable} using the provided {@link Bitmap} and cornerRadius.
      * @param icon The {@link Bitmap} to round.
-     * @param cornerRadius The corner radius or {@link #DEFAULT_FAVICON_CORNER_RADIUS} if the
-     *                     default should be used.
+     * @param cornerRadius The corner radius.
      * @return A {@link RoundedBitmapDrawable} for the provided {@link Bitmap}.
      */
     public static RoundedBitmapDrawable createRoundedBitmapDrawable(Bitmap icon, int cornerRadius) {
         Resources resources = ContextUtils.getApplicationContext().getResources();
-        if (cornerRadius == DEFAULT_FAVICON_CORNER_RADIUS) {
-            cornerRadius = resources.getDimensionPixelSize(R.dimen.default_favicon_corner_radius);
-        }
         RoundedBitmapDrawable roundedIcon = RoundedBitmapDrawableFactory.create(resources, icon);
         roundedIcon.setCornerRadius(cornerRadius);
         return roundedIcon;
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
index fde6ad37..a3519c85 100644
--- a/chrome/common/BUILD.gn
+++ b/chrome/common/BUILD.gn
@@ -288,6 +288,7 @@
 
   deps = [
     "//build:branding_buildflags",
+    "//components/crash/content/app",
     "//components/metrics:call_stack_profile_builder",
     "//components/page_load_metrics/common:common",
   ]
diff --git a/chrome/common/crash_keys.cc b/chrome/common/crash_keys.cc
index 8072b8aa..4b9d1c3 100644
--- a/chrome/common/crash_keys.cc
+++ b/chrome/common/crash_keys.cc
@@ -20,6 +20,7 @@
 
 #if defined(OS_CHROMEOS)
 #include "chrome/common/chrome_switches.h"
+#include "components/crash/content/app/crash_switches.h"
 #include "gpu/command_buffer/service/gpu_switches.h"
 #include "ui/gl/gl_switches.h"
 #endif
@@ -42,7 +43,7 @@
     // --crash-loop-before is a "boring" switch because it is redundant;
     // crash_reporter separately informs the crash server if it is doing
     // crash-loop handling.
-    switches::kCrashLoopBefore,
+    crash_reporter::switches::kCrashLoopBefore,
     switches::kPpapiFlashArgs,
     switches::kPpapiFlashPath,
     switches::kRegisterPepperPlugins,
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index 43b1d0d5..fce988c 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -402,6 +402,7 @@
 const char kInternetSubPage[] = "internet";
 const char kKerberosAccountsSubPage[] = "kerberosAccounts";
 const char kKeyboardOverlaySubPage[] = "keyboard-overlay";
+const char kLanguageSubPage[] = "languages/details";
 const char kLockScreenSubPage[] = "lockScreen";
 const char kManageAccessibilitySubPage[] = "manageAccessibility";
 const char kManageAccessibilityTtsSubPage[] = "manageAccessibility/tts";
@@ -447,7 +448,7 @@
       kKerberosAccountsSubPage,
       kKeyboardOverlaySubPage,
       // language is both an OS and browser sub page, but prefer the OS version
-      kLanguageOptionsSubPage,
+      kLanguageSubPage,
       kLockScreenSubPage,
       kManageAccessibilitySubPage,
       kManageAccessibilityTtsSubPage,
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index 215d9387..1c17c6e 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -356,6 +356,7 @@
 extern const char kInternetSubPage[];
 extern const char kKerberosAccountsSubPage[];
 extern const char kKeyboardOverlaySubPage[];
+extern const char kLanguageSubPage[];
 extern const char kLockScreenSubPage[];
 extern const char kManageAccessibilitySubPage[];
 extern const char kMultideviceSubPage[];
diff --git a/chrome/renderer/extensions/DEPS b/chrome/renderer/extensions/DEPS
index 68eb7e4..747331d 100644
--- a/chrome/renderer/extensions/DEPS
+++ b/chrome/renderer/extensions/DEPS
@@ -1,4 +1,5 @@
 include_rules = [
   "+media/audio",
   "+services/network/public/cpp",
+  "+services/network/public/mojom",
 ]
diff --git a/chrome/renderer/extensions/extension_localization_peer.cc b/chrome/renderer/extensions/extension_localization_peer.cc
index 403fd48..f1cc030 100644
--- a/chrome/renderer/extensions/extension_localization_peer.cc
+++ b/chrome/renderer/extensions/extension_localization_peer.cc
@@ -61,14 +61,14 @@
 
 bool ExtensionLocalizationPeer::OnReceivedRedirect(
     const net::RedirectInfo& redirect_info,
-    const network::ResourceResponseInfo& info) {
+    network::mojom::URLResponseHeadPtr head) {
   NOTREACHED();
   return false;
 }
 
 void ExtensionLocalizationPeer::OnReceivedResponse(
-    const network::ResourceResponseInfo& info) {
-  response_info_ = info;
+    network::mojom::URLResponseHeadPtr head) {
+  response_head_ = std::move(head);
 }
 
 void ExtensionLocalizationPeer::OnStartLoadingResponseBody(
@@ -180,7 +180,7 @@
     return;
   }
 
-  original_peer_->OnReceivedResponse(response_info_);
+  original_peer_->OnReceivedResponse(std::move(response_head_));
   original_peer_->OnStartLoadingResponseBody(std::move(consumer_to_send));
 
   data_pipe_state_.destination_watcher_.Watch(
diff --git a/chrome/renderer/extensions/extension_localization_peer.h b/chrome/renderer/extensions/extension_localization_peer.h
index a9a679c..757c3ba 100644
--- a/chrome/renderer/extensions/extension_localization_peer.h
+++ b/chrome/renderer/extensions/extension_localization_peer.h
@@ -14,8 +14,8 @@
 #include "content/public/renderer/request_peer.h"
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "mojo/public/cpp/system/simple_watcher.h"
-#include "services/network/public/cpp/resource_response_info.h"
 #include "services/network/public/cpp/url_loader_completion_status.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
 
 namespace IPC {
 class Sender;
@@ -56,8 +56,8 @@
   // content::RequestPeer methods.
   void OnUploadProgress(uint64_t position, uint64_t size) override;
   bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
-                          const network::ResourceResponseInfo& info) override;
-  void OnReceivedResponse(const network::ResourceResponseInfo& info) override;
+                          network::mojom::URLResponseHeadPtr head) override;
+  void OnReceivedResponse(network::mojom::URLResponseHeadPtr head) override;
   void OnStartLoadingResponseBody(
       mojo::ScopedDataPipeConsumerHandle body) override;
   void OnTransferSizeUpdated(int transfer_size_diff) override;
@@ -87,7 +87,7 @@
   std::unique_ptr<content::RequestPeer> original_peer_;
 
   // We just pass though the response info. This holds the copy of the original.
-  network::ResourceResponseInfo response_info_;
+  network::mojom::URLResponseHeadPtr response_head_;
 
   struct DataPipeState {
     DataPipeState();
diff --git a/chrome/renderer/extensions/extension_localization_peer_unittest.cc b/chrome/renderer/extensions/extension_localization_peer_unittest.cc
index 9ad8580..96c8519c 100644
--- a/chrome/renderer/extensions/extension_localization_peer_unittest.cc
+++ b/chrome/renderer/extensions/extension_localization_peer_unittest.cc
@@ -71,9 +71,9 @@
   MOCK_METHOD2(OnUploadProgress, void(uint64_t position, uint64_t size));
   MOCK_METHOD2(OnReceivedRedirect,
                bool(const net::RedirectInfo& redirect_info,
-                    const network::ResourceResponseInfo& info));
+                    network::mojom::URLResponseHeadPtr head));
   MOCK_METHOD1(OnReceivedResponse,
-               void(const network::ResourceResponseInfo& info));
+               void(network::mojom::URLResponseHeadPtr head));
   void OnStartLoadingResponseBody(
       mojo::ScopedDataPipeConsumerHandle body) override {
     body_handle_ = std::move(body);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 5614ae1..2fe8390 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -42,7 +42,9 @@
   import("//chrome/android/features/dev_ui/dev_ui_module.gni")
   import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
 } else {
-  include_js_tests = !(is_asan || is_msan || is_tsan)
+  # js_tests don't work in cross builds, https://crbug.com/1010561
+  include_js_tests =
+      !(is_asan || is_msan || is_tsan || (is_win && host_os != "win"))
 }
 
 # This target exists to reference other test executables to bring these files
@@ -843,6 +845,7 @@
       "../browser/browsing_data/counters/passwords_counter_browsertest.cc",
       "../browser/browsing_data/counters/sync_aware_counter_browsertest.cc",
       "../browser/browsing_data/navigation_entry_remover_browsertest.cc",
+      "../browser/chrome_back_forward_cache_browsertest.cc",
       "../browser/chrome_content_browser_client_browsertest.cc",
       "../browser/chrome_do_not_track_browsertest.cc",
       "../browser/chrome_find_request_manager_browsertest.cc",
diff --git a/chrome/test/base/testing_profile_manager.cc b/chrome/test/base/testing_profile_manager.cc
index f0aecd7..55a0c4f 100644
--- a/chrome/test/base/testing_profile_manager.cc
+++ b/chrome/test/base/testing_profile_manager.cc
@@ -36,8 +36,9 @@
       : ::ProfileManagerWithoutInit(user_data_dir) {}
 
  protected:
-  Profile* CreateProfileHelper(const base::FilePath& file_path) override {
-    return new TestingProfile(file_path);
+  std::unique_ptr<Profile> CreateProfileHelper(
+      const base::FilePath& path) override {
+    return std::make_unique<TestingProfile>(path);
   }
 };
 
diff --git a/chrome/test/data/back_forward_cache/no-favicon.html b/chrome/test/data/back_forward_cache/no-favicon.html
new file mode 100644
index 0000000..e884520b
--- /dev/null
+++ b/chrome/test/data/back_forward_cache/no-favicon.html
@@ -0,0 +1 @@
+<link rel="icon" href="data:,">
diff --git a/chrome/test/data/webui/cr_elements/cr_toolbar_search_field_tests.js b/chrome/test/data/webui/cr_elements/cr_toolbar_search_field_tests.js
index 2512a4e..3907a0a 100644
--- a/chrome/test/data/webui/cr_elements/cr_toolbar_search_field_tests.js
+++ b/chrome/test/data/webui/cr_elements/cr_toolbar_search_field_tests.js
@@ -86,9 +86,7 @@
     const clearSearch = field.$$('#clearSearch');
     clearSearch.focus();
     clearSearch.click();
-    Polymer.dom.flush();
-
-    assertFalse(field.showingSearch);
+    assertTrue(field.showingSearch);
     assertEquals('', field.getValue());
     assertEquals(field.$.searchInput, field.root.activeElement);
     assertFalse(field.hasSearchText);
@@ -101,8 +99,7 @@
     assertEquals('query1', field.getValue());
 
     field.$$('#clearSearch').click();
-    Polymer.dom.flush();
-    assertFalse(field.showingSearch);
+    assertTrue(field.showingSearch);
     assertEquals('', field.getValue());
 
     simulateSearch('query2');
diff --git a/chrome/test/data/webui/settings/chromeos/cups_printer_landing_page_tests.js b/chrome/test/data/webui/settings/chromeos/cups_printer_landing_page_tests.js
index 79fd4650..f65305e 100644
--- a/chrome/test/data/webui/settings/chromeos/cups_printer_landing_page_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/cups_printer_landing_page_tests.js
@@ -730,30 +730,4 @@
         });
   });
 
-  test('No Nearby Printers', function() {
-    const automaticPrinterList = [];
-    const discoveredPrinterList = [createCupsPrinterInfo('test3', '3', 'id3')];
-
-    return test_util.flushTasks().then(() => {
-      nearbyPrintersElement = page.$$('settings-cups-nearby-printers');
-      assertTrue(!!nearbyPrintersElement);
-
-      // Assert that there are no nearby printers.
-      let nearbyPrinterEntries = getPrinterEntries(nearbyPrintersElement);
-      assertEquals(0, nearbyPrinterEntries.length);
-
-      // Check that the "No available printers" message is shown.
-      assertFalse(nearbyPrintersElement.$$('#noPrinterMessage').hidden);
-
-      // Simuluate finding nearby printers.
-      cr.webUIListenerCallback(
-          'on-nearby-printers-changed', automaticPrinterList,
-          discoveredPrinterList);
-
-      Polymer.dom.flush();
-
-      // Check that the "No available printers" message is not shown.
-      assertTrue(nearbyPrintersElement.$$('#noPrinterMessage').hidden);
-    });
-  });
 });
diff --git a/chromecast/browser/webview/proto/webview.proto b/chromecast/browser/webview/proto/webview.proto
index 1c83a85..541e806 100644
--- a/chromecast/browser/webview/proto/webview.proto
+++ b/chromecast/browser/webview/proto/webview.proto
@@ -171,6 +171,7 @@
 
 message NavigationRequestEvent {
   string url = 1;
+  bool is_for_main_frame = 2;
 }
 
 enum NavigationDecision {
diff --git a/chromecast/browser/webview/webview_controller.cc b/chromecast/browser/webview/webview_controller.cc
index 717c15fa..f790dcf 100644
--- a/chromecast/browser/webview/webview_controller.cc
+++ b/chromecast/browser/webview/webview_controller.cc
@@ -193,11 +193,13 @@
 }
 
 void WebviewController::SendNavigationEvent(WebviewNavigationThrottle* throttle,
-                                            const GURL& gurl) {
+                                            const GURL& gurl,
+                                            bool is_in_main_frame) {
   DCHECK(!current_navigation_throttle_);
   std::unique_ptr<webview::WebviewResponse> response =
       std::make_unique<webview::WebviewResponse>();
   response->mutable_navigation_event()->set_url(gurl.spec());
+  response->mutable_navigation_event()->set_is_for_main_frame(is_in_main_frame);
   current_navigation_throttle_ = throttle;
   client_->EnqueueSend(std::move(response));
 }
diff --git a/chromecast/browser/webview/webview_controller.h b/chromecast/browser/webview/webview_controller.h
index f321dc1..107da04 100644
--- a/chromecast/browser/webview/webview_controller.h
+++ b/chromecast/browser/webview/webview_controller.h
@@ -66,7 +66,8 @@
   void AttachTo(aura::Window* window, int window_id);
 
   void SendNavigationEvent(WebviewNavigationThrottle* throttle,
-                           const GURL& url);
+                           const GURL& url,
+                           bool is_in_main_frame);
 
  private:
   webview::AsyncPageEvent_State current_state();
diff --git a/chromecast/browser/webview/webview_navigation_throttle.cc b/chromecast/browser/webview/webview_navigation_throttle.cc
index 2130754..1bfaa5c 100644
--- a/chromecast/browser/webview/webview_navigation_throttle.cc
+++ b/chromecast/browser/webview/webview_navigation_throttle.cc
@@ -16,13 +16,14 @@
     WebviewController* controller)
     : NavigationThrottle(handle),
       url_(handle->GetURL()),
+      is_in_main_frame_(handle->IsInMainFrame()),
       controller_(controller) {}
 
 WebviewNavigationThrottle::~WebviewNavigationThrottle() = default;
 
 content::NavigationThrottle::ThrottleCheckResult
 WebviewNavigationThrottle::WillStartRequest() {
-  controller_->SendNavigationEvent(this, url_);
+  controller_->SendNavigationEvent(this, url_, is_in_main_frame_);
 
   return content::NavigationThrottle::DEFER;
 }
diff --git a/chromecast/browser/webview/webview_navigation_throttle.h b/chromecast/browser/webview/webview_navigation_throttle.h
index 8961381..53d9e7b2 100644
--- a/chromecast/browser/webview/webview_navigation_throttle.h
+++ b/chromecast/browser/webview/webview_navigation_throttle.h
@@ -35,6 +35,7 @@
   scoped_refptr<base::SequencedTaskRunner> response_task_runner_;
 
   const GURL url_;
+  bool is_in_main_frame_;
   WebviewController* controller_;
 
   DISALLOW_COPY_AND_ASSIGN(WebviewNavigationThrottle);
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index 13aa39a3..dd41ba3 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-12575.0.0
\ No newline at end of file
+12576.0.0
\ No newline at end of file
diff --git a/components/autofill_assistant/browser/website_login_fetcher_impl.cc b/components/autofill_assistant/browser/website_login_fetcher_impl.cc
index 8352ced..84d2fc0e 100644
--- a/components/autofill_assistant/browser/website_login_fetcher_impl.cc
+++ b/components/autofill_assistant/browser/website_login_fetcher_impl.cc
@@ -85,9 +85,9 @@
   // From PendingRequest:
   void OnFetchCompleted() override {
     std::vector<Login> logins;
-    for (const auto& match : form_fetcher_->GetBestMatches()) {
-      logins.emplace_back(match.second->origin,
-                          base::UTF16ToUTF8(match.second->username_value));
+    for (const auto* match : form_fetcher_->GetBestMatches()) {
+      logins.emplace_back(match->origin,
+                          base::UTF16ToUTF8(match->username_value));
     }
     std::move(callback_).Run(logins);
     PendingRequest::OnFetchCompleted();
diff --git a/components/content_capture/browser/content_capture_receiver_test.cc b/components/content_capture/browser/content_capture_receiver_test.cc
index 6677993..39060fe0 100644
--- a/components/content_capture/browser/content_capture_receiver_test.cc
+++ b/components/content_capture/browser/content_capture_receiver_test.cc
@@ -359,7 +359,14 @@
             content_capture_receiver_manager_helper()->captured_data());
 }
 
-TEST_F(ContentCaptureReceiverTest, DISABLED_DidCaptureContentWithUpdate) {
+// TODO(https://crbug.com/1010179): Fix flakes on win10_chromium_x64_rel_ng and
+// re-enable this test.
+#if defined(OS_WIN)
+#define MAYBE_DidCaptureContentWithUpdate DISABLED_DidCaptureContentWithUpdate
+#else
+#define MAYBE_DidCaptureContentWithUpdate DidCaptureContentWithUpdate
+#endif
+TEST_F(ContentCaptureReceiverTest, MAYBE_DidCaptureContentWithUpdate) {
   DidCaptureContent(test_data(), true /* first_data */);
   // Verifies to get test_data() with correct frame content id.
   EXPECT_TRUE(
@@ -380,7 +387,14 @@
             content_capture_receiver_manager_helper()->captured_data());
 }
 
-TEST_F(ContentCaptureReceiverTest, DISABLED_DidUpdateContent) {
+// TODO(https://crbug.com/1011204): Fix flakes on win10_chromium_x64_rel_ng and
+// re-enable this test.
+#if defined(OS_WIN)
+#define MAYBE_DidUpdateContent DISABLED_DidUpdateContent
+#else
+#define MAYBE_DidUpdateContent DidUpdateContent
+#endif
+TEST_F(ContentCaptureReceiverTest, MAYBE_DidUpdateContent) {
   DidCaptureContent(test_data(), true /* first_data */);
   EXPECT_TRUE(
       content_capture_receiver_manager_helper()->parent_session().empty());
diff --git a/components/crash/content/app/BUILD.gn b/components/crash/content/app/BUILD.gn
index ca1bd87..9346d1e 100644
--- a/components/crash/content/app/BUILD.gn
+++ b/components/crash/content/app/BUILD.gn
@@ -100,10 +100,7 @@
   }
 
   if (is_linux) {
-    deps += [
-      "//content/public/common",
-      "//third_party/breakpad:client",
-    ]
+    deps += [ "//third_party/breakpad:client" ]
   }
 
   if (is_win) {
diff --git a/components/crash/content/app/breakpad_linux.cc b/components/crash/content/app/breakpad_linux.cc
index 505156ad..7e561db0 100644
--- a/components/crash/content/app/breakpad_linux.cc
+++ b/components/crash/content/app/breakpad_linux.cc
@@ -63,7 +63,7 @@
 #include "third_party/lss/linux_syscall_support.h"
 
 #if defined(OS_CHROMEOS)
-#include "content/public/common/content_switches.h"      // nogncheck
+#include "components/crash/content/app/crash_switches.h"
 #include "services/service_manager/embedder/switches.h"  // nogncheck
 #endif
 
@@ -1154,8 +1154,8 @@
 void SetCrashLoopBeforeTime(const std::string& process_type,
                             const base::CommandLine& parsed_command_line) {
 #if defined(OS_CHROMEOS)
-  std::string crash_loop_before =
-      parsed_command_line.GetSwitchValueASCII(switches::kCrashLoopBefore);
+  std::string crash_loop_before = parsed_command_line.GetSwitchValueASCII(
+      crash_reporter::switches::kCrashLoopBefore);
   if (crash_loop_before.empty()) {
     return;
   }
diff --git a/components/crash/content/app/crash_switches.cc b/components/crash/content/app/crash_switches.cc
index ea2d477f..8f6b3e9 100644
--- a/components/crash/content/app/crash_switches.cc
+++ b/components/crash/content/app/crash_switches.cc
@@ -20,5 +20,13 @@
 const char kCrashpadHandlerPid[] = "crashpad-handler-pid";
 #endif
 
+#if defined(OS_CHROMEOS)
+// A time_t. Passed by session_manager into the Chrome user session, indicating
+// that if Chrome crashes before the indicated time, session_manager will
+// consider this to be a crash-loop situation and log the user out. Chrome
+// mostly just passes this to crash_reporter if it crashes.
+const char kCrashLoopBefore[] = "crash-loop-before";
+#endif
+
 }  // namespace switches
 }  // namespace crash_reporter
diff --git a/components/crash/content/app/crash_switches.h b/components/crash/content/app/crash_switches.h
index 73d6e0fe..ae16dfd 100644
--- a/components/crash/content/app/crash_switches.h
+++ b/components/crash/content/app/crash_switches.h
@@ -16,6 +16,10 @@
 extern const char kCrashpadHandlerPid[];
 #endif  // OS_LINUX
 
+#if defined(OS_CHROMEOS)
+extern const char kCrashLoopBefore[];
+#endif
+
 }  // namespace switches
 }  // namespace crash_reporter
 
diff --git a/components/crash/content/app/crashpad_linux.cc b/components/crash/content/app/crashpad_linux.cc
index 8df2da2..56908c48 100644
--- a/components/crash/content/app/crashpad_linux.cc
+++ b/components/crash/content/app/crashpad_linux.cc
@@ -4,9 +4,13 @@
 
 #include "components/crash/content/app/crashpad.h"
 
+#include <pthread.h>
+#include <sys/prctl.h>
+
 #include <limits>
 
 #include "base/command_line.h"
+#include "base/logging.h"
 #include "base/path_service.h"
 #include "base/posix/global_descriptors.h"
 #include "base/strings/string_number_conversions.h"
@@ -14,7 +18,6 @@
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/content/app/crash_switches.h"
 #include "content/public/common/content_descriptors.h"
-#include "content/public/common/content_switches.h"
 #include "sandbox/linux/services/namespace_sandbox.h"
 #include "third_party/crashpad/crashpad/client/crashpad_client.h"
 
@@ -37,6 +40,16 @@
   return crashpad::CrashpadClient::GetHandlerSocket(fd, pid);
 }
 
+void SetPtracerAtFork() {
+  pid_t pid;
+  if (!GetHandlerSocket(nullptr, &pid)) {
+    return;
+  }
+  if (pid > 0 && prctl(PR_SET_PTRACER, pid, 0, 0, 0) != 0) {
+    PLOG(ERROR) << "prctl";
+  }
+}
+
 namespace internal {
 
 base::FilePath PlatformCrashpadInitialization(
@@ -57,7 +70,7 @@
 #if defined(OS_CHROMEOS)
   std::string crash_loop_before =
       base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
-          ::switches::kCrashLoopBefore);
+          switches::kCrashLoopBefore);
   if (!crash_loop_before.empty()) {
     uint64_t crash_loop_before_time;
     if (!base::StringToUint64(crash_loop_before, &crash_loop_before_time)) {
@@ -131,6 +144,7 @@
                             annotations, arguments, false, false);
     DCHECK(result);
 
+    pthread_atfork(nullptr, nullptr, SetPtracerAtFork);
     return database_path;
   }
 
@@ -151,6 +165,7 @@
 
   client.SetHandlerSocket(crashpad::ScopedFileHandle(fd), pid);
 
+  pthread_atfork(nullptr, nullptr, SetPtracerAtFork);
   return base::FilePath();
 }
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
index 29b1b97..84da0c1 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
@@ -243,6 +243,22 @@
   enabled_ = enabled;
 }
 
+void DataReductionProxyConfigServiceClient::InvalidateAndRetrieveNewConfig() {
+  DCHECK(thread_checker_.CalledOnValidThread());
+
+  InvalidateConfig();
+  DCHECK(config_->GetProxiesForHttp().empty());
+
+  if (fetch_in_progress_) {
+    // If a client config fetch is already in progress, then do not start
+    // another fetch since starting a new fetch will cause extra data
+    // usage, and also cancel the ongoing fetch.
+    return;
+  }
+
+  RetrieveConfig();
+}
+
 void DataReductionProxyConfigServiceClient::RetrieveConfig() {
   DCHECK(thread_checker_.CalledOnValidThread());
   if (!enabled_)
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
index 6dfacba..3a034f3 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
@@ -29,7 +29,7 @@
 class HttpResponseHeaders;
 struct LoadTimingInfo;
 class ProxyServer;
-}
+}  // namespace net
 
 namespace network {
 class SharedURLLoaderFactory;
@@ -106,6 +106,10 @@
   // operation takes place asynchronously.
   void RetrieveConfig();
 
+  // Invalidates the current Data Reduction Proxy configuration and requests the
+  // retrieval of the Data Reduction Proxy configuration
+  void InvalidateAndRetrieveNewConfig();
+
   // Takes a serialized Data Reduction Proxy configuration and sets it as the
   // current Data Reduction Proxy configuration. If a remote configuration has
   // already been retrieved, the remote configuration takes precedence.
diff --git a/components/dom_distiller/core/dom_distiller_model.cc b/components/dom_distiller/core/dom_distiller_model.cc
index ea60747e..f49d625 100644
--- a/components/dom_distiller/core/dom_distiller_model.cc
+++ b/components/dom_distiller/core/dom_distiller_model.cc
@@ -89,47 +89,6 @@
   return entries_list;
 }
 
-void DomDistillerModel::CalculateChangesForMerge(
-    const SyncDataList& data,
-    SyncChangeList* changes_to_apply,
-    SyncChangeList* changes_missing) {
-  typedef std::unordered_set<std::string> StringSet;
-  StringSet entries_to_change;
-  for (auto it = data.begin(); it != data.end(); ++it) {
-    std::string entry_id = GetEntryIdFromSyncData(*it);
-    std::pair<StringSet::iterator, bool> insert_result =
-        entries_to_change.insert(entry_id);
-
-    DCHECK(insert_result.second);
-
-    SyncChange::SyncChangeType change_type = SyncChange::ACTION_ADD;
-    if (GetEntryById(entry_id, nullptr)) {
-      change_type = SyncChange::ACTION_UPDATE;
-    }
-    changes_to_apply->push_back(SyncChange(FROM_HERE, change_type, *it));
-  }
-
-  for (EntryMap::const_iterator it = entries_.begin(); it != entries_.end();
-       ++it) {
-    if (entries_to_change.find(it->second.entry_id()) ==
-        entries_to_change.end()) {
-      changes_missing->push_back(SyncChange(FROM_HERE, SyncChange::ACTION_ADD,
-                                            CreateLocalData(it->second)));
-    }
-  }
-}
-
-void DomDistillerModel::ApplyChangesToModel(const SyncChangeList& changes,
-                                            SyncChangeList* changes_applied,
-                                            SyncChangeList* changes_missing) {
-  DCHECK(changes_applied);
-  DCHECK(changes_missing);
-
-  for (auto it = changes.begin(); it != changes.end(); ++it) {
-    ApplyChangeToModel(*it, changes_applied, changes_missing);
-  }
-}
-
 void DomDistillerModel::AddEntry(const ArticleEntry& entry) {
   const std::string& entry_id = entry.entry_id();
   KeyType key = next_key_++;
@@ -141,56 +100,4 @@
   }
 }
 
-void DomDistillerModel::RemoveEntry(const ArticleEntry& entry) {
-  const std::string& entry_id = entry.entry_id();
-  KeyType key = 0;
-  bool success = GetKeyById(entry_id, &key);
-  DCHECK(success);
-
-  entries_.erase(key);
-  entry_id_to_key_map_.erase(entry_id);
-  for (int i = 0; i < entry.pages_size(); ++i) {
-    url_to_key_map_.erase(entry.pages(i).url());
-  }
-}
-
-void DomDistillerModel::ApplyChangeToModel(const SyncChange& change,
-                                           SyncChangeList* changes_applied,
-                                           SyncChangeList* changes_missing) {
-  DCHECK(change.IsValid());
-  DCHECK(changes_applied);
-  DCHECK(changes_missing);
-
-  const std::string& entry_id = GetEntryIdFromSyncData(change.sync_data());
-
-  if (change.change_type() == SyncChange::ACTION_DELETE) {
-    ArticleEntry current_entry;
-    if (GetEntryById(entry_id, &current_entry)) {
-      RemoveEntry(current_entry);
-      changes_applied->push_back(SyncChange(
-          change.location(), SyncChange::ACTION_DELETE, change.sync_data()));
-    }
-    // If we couldn't find in sync db, we were deleting anyway so swallow the
-    // error.
-    return;
-  }
-
-  ArticleEntry entry = GetEntryFromChange(change);
-  ArticleEntry current_entry;
-  if (!GetEntryById(entry_id, &current_entry)) {
-    AddEntry(entry);
-    changes_applied->push_back(SyncChange(
-        change.location(), SyncChange::ACTION_ADD, change.sync_data()));
-  } else {
-    if (!AreEntriesEqual(current_entry, entry)) {
-      // Currently, conflicts are simply resolved by accepting the last one to
-      // arrive.
-      RemoveEntry(current_entry);
-      AddEntry(entry);
-      changes_applied->push_back(SyncChange(
-          change.location(), SyncChange::ACTION_UPDATE, change.sync_data()));
-    }
-  }
-}
-
 }  // namespace dom_distiller
diff --git a/components/dom_distiller/core/dom_distiller_model.h b/components/dom_distiller/core/dom_distiller_model.h
index 2b5d061..4914f88 100644
--- a/components/dom_distiller/core/dom_distiller_model.h
+++ b/components/dom_distiller/core/dom_distiller_model.h
@@ -40,30 +40,12 @@
   std::vector<ArticleEntry> GetEntries() const;
   size_t GetNumEntries() const;
 
-  // Convert a SyncDataList to a SyncChangeList of add or update changes based
-  // on the state of the model. Also calculate the entries missing from the
-  // SyncDataList.
-  void CalculateChangesForMerge(const syncer::SyncDataList& data,
-                                syncer::SyncChangeList* changes_to_apply,
-                                syncer::SyncChangeList* changes_missing);
-
-  // Applies the change list to the model, appending the actual changes made to
-  // the model to |changes_applied|. If conflict resolution does not apply the
-  // requested change, then adds the "diff" between what was requested and what
-  // was actually applied to |changes_missing|.
-  // Note: Currently conflicts are resolved by just applying the requested
-  // change. This means nothing will be added to |changes_missing|.
-  void ApplyChangesToModel(const syncer::SyncChangeList& change_list,
-                           syncer::SyncChangeList* changes_applied,
-                           syncer::SyncChangeList* changes_missing);
-
  private:
   typedef int32_t KeyType;
   typedef std::unordered_map<KeyType, ArticleEntry> EntryMap;
   typedef std::unordered_map<std::string, KeyType> StringToKeyMap;
 
   void AddEntry(const ArticleEntry& entry);
-  void RemoveEntry(const ArticleEntry& entry);
 
   // Lookup an entry's key by ID or URL. Returns whether a corresponding key was
   // found. On success, if |key| is not null, it will contain the entry.
@@ -74,10 +56,6 @@
   // to an entry in |entries_|.
   void GetEntryByKey(KeyType key, ArticleEntry* entry) const;
 
-  void ApplyChangeToModel(const syncer::SyncChange& change,
-                          syncer::SyncChangeList* changes_applied,
-                          syncer::SyncChangeList* changes_missing);
-
   KeyType next_key_;
   EntryMap entries_;
   StringToKeyMap url_to_key_map_;
diff --git a/components/dom_distiller/core/dom_distiller_model_unittest.cc b/components/dom_distiller/core/dom_distiller_model_unittest.cc
index bdf51e0..ad8328b 100644
--- a/components/dom_distiller/core/dom_distiller_model_unittest.cc
+++ b/components/dom_distiller/core/dom_distiller_model_unittest.cc
@@ -71,61 +71,4 @@
   EXPECT_FALSE(model.GetEntryByUrl(GURL("http://example.com/foo"), nullptr));
 }
 
-// This test ensures that the model handles the case where an URL maps to
-// multiple entries. In that case, the model is allowed to have an inconsistent
-// url-to-entry mapping, but it should not fail in other ways (i.e. id-to-entry
-// should be correct, shouldn't crash).
-TEST(DomDistillerModelTest, TestUrlToMultipleEntries) {
-  ArticleEntry entry1;
-  entry1.set_entry_id("id1");
-  entry1.set_title("title1");
-  ArticleEntryPage* page1 = entry1.add_pages();
-  page1->set_url("http://example.com/1");
-  ArticleEntryPage* page2 = entry1.add_pages();
-  page2->set_url("http://example.com/2");
-
-  ArticleEntry entry2;
-  entry2.set_entry_id("id2");
-  entry2.set_title("title1");
-  ArticleEntryPage* page3 = entry2.add_pages();
-  page3->set_url("http://example.com/1");
-
-  std::vector<ArticleEntry> initial_model;
-  initial_model.push_back(entry1);
-  initial_model.push_back(entry2);
-
-  DomDistillerModel model(initial_model);
-
-  EXPECT_TRUE(model.GetEntryByUrl(GURL(page1->url()), nullptr));
-  EXPECT_TRUE(model.GetEntryByUrl(GURL(page2->url()), nullptr));
-  EXPECT_TRUE(model.GetEntryByUrl(GURL(page3->url()), nullptr));
-
-  ArticleEntry found_entry;
-  EXPECT_TRUE(model.GetEntryById(entry1.entry_id(), &found_entry));
-  ASSERT_TRUE(IsEntryValid(found_entry));
-  EXPECT_TRUE(AreEntriesEqual(entry1, found_entry));
-
-  EXPECT_TRUE(model.GetEntryById(entry2.entry_id(), &found_entry));
-  ASSERT_TRUE(IsEntryValid(found_entry));
-  EXPECT_TRUE(AreEntriesEqual(entry2, found_entry));
-
-  syncer::SyncChangeList changes_to_apply;
-  syncer::SyncChangeList changes_applied;
-  syncer::SyncChangeList changes_missing;
-
-  entry2.mutable_pages(0)->set_url("http://example.com/foo1");
-  changes_to_apply.push_back(syncer::SyncChange(
-      FROM_HERE, syncer::SyncChange::ACTION_UPDATE, CreateLocalData(entry2)));
-  model.ApplyChangesToModel(changes_to_apply, &changes_applied,
-                            &changes_missing);
-
-  EXPECT_TRUE(model.GetEntryById(entry1.entry_id(), &found_entry));
-  ASSERT_TRUE(IsEntryValid(found_entry));
-  EXPECT_TRUE(AreEntriesEqual(entry1, found_entry));
-
-  EXPECT_TRUE(model.GetEntryById(entry2.entry_id(), &found_entry));
-  ASSERT_TRUE(IsEntryValid(found_entry));
-  EXPECT_TRUE(AreEntriesEqual(entry2, found_entry));
-}
-
 }  // namespace dom_distiller
diff --git a/components/flags_strings.grdp b/components/flags_strings.grdp
index 83a625d..0167b58 100644
--- a/components/flags_strings.grdp
+++ b/components/flags_strings.grdp
@@ -111,12 +111,11 @@
   <message name="IDS_DEPRECATED_FEATURES_TITLE" desc="The page title for the about:enterprise-settings page.">
     Deprecated Features
   </message>
-  <message name="IDS_DEPRECATED_FEATURES_PAGE_WARNING" desc="A warning stating that the features of the page are experimental.">
-    Warning: Deprecated features ahead!
+  <message name="IDS_DEPRECATED_FEATURES_HEADING" translateable="false" desc="The page heading for the about:flags page.">
+    Unsupported features
   </message>
   <message name="IDS_DEPRECATED_FEATURES_PAGE_WARNING_EXPLANATION" desc="Warning to users that features are deprecated. Shown prominently at the top of the page.">
-    By enabling these features, you will be using deprecated features
-    that will disappear in future versions.
+    These features are disabled by default. They will not be available in future versions of Chrome.
   </message>
   <message name="IDS_DEPRECATED_FEATURES_NO_RESULTS" desc="Message shown when searching and no results were found.">
     No matching features
diff --git a/components/flags_ui/resources/flags.html b/components/flags_ui/resources/flags.html
index 80a2385..65ce775e 100644
--- a/components/flags_ui/resources/flags.html
+++ b/components/flags_ui/resources/flags.html
@@ -45,7 +45,7 @@
 <div id="body-container" style="visibility:hidden">
   <div id="flagsTemplate">
     <div class="flex-container">
-      <div class="flex"><h1 class="section-header-title">$i18n{title}</h1></div>
+      <div class="flex"><h1 class="section-header-title">$i18n{heading}</h1></div>
       <span id="version" class="flex">$i18n{version}</span>
     </div>
     <div class="blurb-container">
diff --git a/components/grpc_support/bidirectional_stream.cc b/components/grpc_support/bidirectional_stream.cc
index 7f91c9dc..defabbf 100644
--- a/components/grpc_support/bidirectional_stream.cc
+++ b/components/grpc_support/bidirectional_stream.cc
@@ -114,7 +114,7 @@
 
   PostToNetworkThread(
       FROM_HERE, base::BindOnce(&BidirectionalStream::ReadDataOnNetworkThread,
-                                weak_this_, read_buffer, capacity));
+                                weak_this_, std::move(read_buffer), capacity));
   return true;
 }
 
@@ -130,7 +130,8 @@
   PostToNetworkThread(
       FROM_HERE,
       base::BindOnce(&BidirectionalStream::WriteDataOnNetworkThread, weak_this_,
-                     write_buffer, count, end_of_stream));
+                     std::move(write_buffer), count, end_of_stream));
+
   return true;
 }
 
diff --git a/components/navigation_interception/intercept_navigation_throttle_unittest.cc b/components/navigation_interception/intercept_navigation_throttle_unittest.cc
index 3f472df..ff0f702 100644
--- a/components/navigation_interception/intercept_navigation_throttle_unittest.cc
+++ b/components/navigation_interception/intercept_navigation_throttle_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/test/scoped_feature_list.h"
+#include "build/build_config.h"
 #include "components/navigation_interception/navigation_params.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/navigation_throttle.h"
@@ -121,8 +122,17 @@
   std::unique_ptr<MockInterceptCallbackReceiver> mock_callback_receiver_;
 };
 
+// TODO(https://crbug.com/1009359): Fix flakes on win10_chromium_x64_rel_ng and
+// re-enable this test.
+#if defined(OS_WIN)
+#define MAYBE_RequestCompletesIfNavigationNotIgnored \
+  DISABLED_RequestCompletesIfNavigationNotIgnored
+#else
+#define MAYBE_RequestCompletesIfNavigationNotIgnored \
+  RequestCompletesIfNavigationNotIgnored
+#endif
 TEST_P(InterceptNavigationThrottleTest,
-       DISABLED_RequestCompletesIfNavigationNotIgnored) {
+       MAYBE_RequestCompletesIfNavigationNotIgnored) {
   ON_CALL(*mock_callback_receiver_, ShouldIgnoreNavigation(_, _))
       .WillByDefault(Return(false));
   EXPECT_CALL(
@@ -134,9 +144,17 @@
   EXPECT_EQ(NavigationThrottle::PROCEED, result);
 }
 
-// Flaky. http://crbug.com/1010187
+// TODO(https://crbug.com/1010187): Fix flakes on win10_chromium_x64_rel_ng and
+// re-enable this test.
+#if defined(OS_WIN)
+#define MAYBE_RequestCancelledIfNavigationIgnored \
+  DISABLED_RequestCancelledIfNavigationIgnored
+#else
+#define MAYBE_RequestCancelledIfNavigationIgnored \
+  RequestCancelledIfNavigationIgnored
+#endif
 TEST_P(InterceptNavigationThrottleTest,
-       DISABLED_RequestCancelledIfNavigationIgnored) {
+       MAYBE_RequestCancelledIfNavigationIgnored) {
   ON_CALL(*mock_callback_receiver_, ShouldIgnoreNavigation(_, _))
       .WillByDefault(Return(true));
   EXPECT_CALL(
diff --git a/components/omnibox/browser/clipboard_provider.cc b/components/omnibox/browser/clipboard_provider.cc
index 435aae9..93fe02be5 100644
--- a/components/omnibox/browser/clipboard_provider.cc
+++ b/components/omnibox/browser/clipboard_provider.cc
@@ -129,22 +129,20 @@
   field_trial_triggered_ = false;
 
   // If the user started typing, do not offer clipboard based match.
-  if (!input.from_omnibox_focus()) {
+  if (!input.from_omnibox_focus())
     return;
-  }
 
   // Image matched was kicked off asynchronously, so proceed when that ends.
-  if (CreateImageMatch(input)) {
+  if (CreateImageMatch(input))
     return;
-  }
+
   base::Optional<AutocompleteMatch> optional_match = CreateURLMatch(input);
-  if (!optional_match) {
+  if (!optional_match)
     optional_match = CreateTextMatch(input);
-  }
+
   // The clipboard does not contain any suggestions
-  if (!optional_match) {
+  if (!optional_match)
     return;
-  }
 
   AddCreatedMatchWithTracking(input, std::move(optional_match).value(),
                               clipboard_content_->GetClipboardContentAge());
@@ -240,9 +238,9 @@
   // The clipboard does not contain a URL worth suggesting.
   base::Optional<GURL> optional_gurl =
       clipboard_content_->GetRecentURLFromClipboard();
-  if (!optional_gurl) {
+  if (!optional_gurl)
     return base::nullopt;
-  }
+
   GURL url = std::move(optional_gurl).value();
 
   // The URL on the page is the same as the URL in the clipboard.  Don't
@@ -281,15 +279,14 @@
 
   base::Optional<base::string16> optional_text =
       clipboard_content_->GetRecentTextFromClipboard();
-  if (!optional_text) {
+  if (!optional_text)
     return base::nullopt;
-  }
+
   base::string16 text = std::move(optional_text).value();
 
   // The clipboard can contain the empty string, which shouldn't be suggested.
-  if (text.empty()) {
+  if (text.empty())
     return base::nullopt;
-  }
 
   // The text in the clipboard is a url. We don't want to prompt the user to
   // search for a url.
@@ -301,6 +298,9 @@
                           AutocompleteMatchType::CLIPBOARD_TEXT);
   TemplateURLService* url_service = client_->GetTemplateURLService();
   const TemplateURL* default_url = url_service->GetDefaultSearchProvider();
+  if (!default_url)
+    return base::nullopt;
+
   DCHECK(!default_url->url().empty());
   DCHECK(default_url->url_ref().IsValid(url_service->search_terms_data()));
   TemplateURLRef::SearchTermsArgs search_args(text);
@@ -327,9 +327,9 @@
       "ClipboardProviderTextSuggestionsCounterfactualArm", false);
   field_trial_triggered_ = true;
   field_trial_triggered_in_session_ = true;
-  if (in_counterfactual_group) {
+  if (in_counterfactual_group)
     return base::nullopt;
-  }
+
   return match;
 }
 
@@ -342,9 +342,8 @@
 
   base::Optional<gfx::Image> optional_image =
       clipboard_content_->GetRecentImageFromClipboard();
-  if (!optional_image) {
+  if (!optional_image)
     return false;
-  }
 
   // Make sure current provider supports image search
   TemplateURLService* url_service = client_->GetTemplateURLService();
@@ -384,6 +383,7 @@
     base::TimeDelta clipboard_contents_age,
     scoped_refptr<base::RefCountedMemory> image_bytes) {
   const TemplateURL* default_url = url_service->GetDefaultSearchProvider();
+  DCHECK(default_url);
   // Add the clipboard match. The relevance is 800 to beat ZeroSuggest results.
   AutocompleteMatch match(this, 800, false,
                           AutocompleteMatchType::CLIPBOARD_IMAGE);
diff --git a/components/password_manager/core/browser/fake_form_fetcher.cc b/components/password_manager/core/browser/fake_form_fetcher.cc
index a5ad17a..838e29b 100644
--- a/components/password_manager/core/browser/fake_form_fetcher.cc
+++ b/components/password_manager/core/browser/fake_form_fetcher.cc
@@ -53,8 +53,8 @@
   return non_federated_same_scheme_;
 }
 
-const std::map<base::string16, const PasswordForm*>&
-FakeFormFetcher::GetBestMatches() const {
+const std::vector<const PasswordForm*>& FakeFormFetcher::GetBestMatches()
+    const {
   return best_matches_;
 }
 
diff --git a/components/password_manager/core/browser/fake_form_fetcher.h b/components/password_manager/core/browser/fake_form_fetcher.h
index 43cd1e6..3ba5a27 100644
--- a/components/password_manager/core/browser/fake_form_fetcher.h
+++ b/components/password_manager/core/browser/fake_form_fetcher.h
@@ -62,8 +62,8 @@
   const std::vector<const autofill::PasswordForm*>& GetAllRelevantMatches()
       const override;
 
-  const std::map<base::string16, const autofill::PasswordForm*>&
-  GetBestMatches() const override;
+  const std::vector<const autofill::PasswordForm*>& GetBestMatches()
+      const override;
 
   const autofill::PasswordForm* GetPreferredMatch() const override;
 
@@ -95,7 +95,7 @@
   std::vector<const autofill::PasswordForm*> non_federated_;
   std::vector<const autofill::PasswordForm*> federated_;
   std::vector<const autofill::PasswordForm*> non_federated_same_scheme_;
-  std::map<base::string16, const autofill::PasswordForm*> best_matches_;
+  std::vector<const autofill::PasswordForm*> best_matches_;
   const autofill::PasswordForm* preferred_match_ = nullptr;
   bool is_blacklisted_ = false;
 
diff --git a/components/password_manager/core/browser/form_fetcher.h b/components/password_manager/core/browser/form_fetcher.h
index 373ed1e..40460b0 100644
--- a/components/password_manager/core/browser/form_fetcher.h
+++ b/components/password_manager/core/browser/form_fetcher.h
@@ -5,7 +5,6 @@
 #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_FORM_FETCHER_H_
 #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_FORM_FETCHER_H_
 
-#include <map>
 #include <memory>
 #include <vector>
 
@@ -83,10 +82,10 @@
   GetAllRelevantMatches() const = 0;
 
   // Nonblacklisted matches obtained from the backend.
-  virtual const std::map<base::string16, const autofill::PasswordForm*>&
-  GetBestMatches() const = 0;
+  virtual const std::vector<const autofill::PasswordForm*>& GetBestMatches()
+      const = 0;
 
-  // Pointer to an preferred entry in the map returned by GetBestMatches().
+  // Pointer to a preferred entry in the vector returned by GetBestMatches().
   virtual const autofill::PasswordForm* GetPreferredMatch() const = 0;
 
   // Fetches stored matching logins. In addition the statistics is fetched on
diff --git a/components/password_manager/core/browser/form_fetcher_impl.cc b/components/password_manager/core/browser/form_fetcher_impl.cc
index d6b03ca..d3131c2 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.cc
+++ b/components/password_manager/core/browser/form_fetcher_impl.cc
@@ -116,8 +116,8 @@
   return non_federated_same_scheme_;
 }
 
-const std::map<base::string16, const PasswordForm*>&
-FormFetcherImpl::GetBestMatches() const {
+const std::vector<const PasswordForm*>& FormFetcherImpl::GetBestMatches()
+    const {
   return best_matches_;
 }
 
diff --git a/components/password_manager/core/browser/form_fetcher_impl.h b/components/password_manager/core/browser/form_fetcher_impl.h
index 5514a08..51d88e9 100644
--- a/components/password_manager/core/browser/form_fetcher_impl.h
+++ b/components/password_manager/core/browser/form_fetcher_impl.h
@@ -57,8 +57,8 @@
   const std::vector<const autofill::PasswordForm*>& GetAllRelevantMatches()
       const override;
 
-  const std::map<base::string16, const autofill::PasswordForm*>&
-  GetBestMatches() const override;
+  const std::vector<const autofill::PasswordForm*>& GetBestMatches()
+      const override;
 
   const autofill::PasswordForm* GetPreferredMatch() const override;
 
@@ -112,8 +112,8 @@
   std::vector<const autofill::PasswordForm*> non_federated_same_scheme_;
 
   // Set of nonblacklisted PasswordForms from the password store that best match
-  // the form being managed by |this|, indexed by username.
-  std::map<base::string16, const autofill::PasswordForm*> best_matches_;
+  // the form being managed by |this|.
+  std::vector<const autofill::PasswordForm*> best_matches_;
 
   // Convenience pointer to entry in |best_matches_| that is marked as
   // preferred. This is only allowed to be null if there are no best matches at
diff --git a/components/password_manager/core/browser/mock_password_form_manager_for_ui.h b/components/password_manager/core/browser/mock_password_form_manager_for_ui.h
index 2772682..de033415 100644
--- a/components/password_manager/core/browser/mock_password_form_manager_for_ui.h
+++ b/components/password_manager/core/browser/mock_password_form_manager_for_ui.h
@@ -18,9 +18,8 @@
   ~MockPasswordFormManagerForUI() override;
 
   MOCK_CONST_METHOD0(GetOrigin, const GURL&());
-  MOCK_CONST_METHOD0(
-      GetBestMatches,
-      const std::map<base::string16, const autofill::PasswordForm*>&());
+  MOCK_CONST_METHOD0(GetBestMatches,
+                     std::map<base::string16, const autofill::PasswordForm*>());
   MOCK_CONST_METHOD0(GetFederatedMatches,
                      std::vector<const autofill::PasswordForm*>());
   MOCK_CONST_METHOD0(GetPendingCredentials, const autofill::PasswordForm&());
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index dfc8b7f..51bd716 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -262,9 +262,12 @@
                                        : observed_form_.url;
 }
 
-const std::map<base::string16, const PasswordForm*>&
+std::map<base::string16, const PasswordForm*>
 PasswordFormManager::GetBestMatches() const {
-  return form_fetcher_->GetBestMatches();
+  std::map<base::string16, const PasswordForm*> best_matches;
+  for (const auto* match : form_fetcher_->GetBestMatches())
+    best_matches[match->username_value] = match;
+  return best_matches;
 }
 
 std::vector<const autofill::PasswordForm*>
@@ -316,8 +319,7 @@
     SanitizePossibleUsernames(&pending_credentials_);
     pending_credentials_.date_created = base::Time::Now();
     votes_uploader_.SendVotesOnSave(observed_form_, *parsed_submitted_form_,
-                                    form_fetcher_->GetBestMatches(),
-                                    &pending_credentials_);
+                                    GetBestMatches(), &pending_credentials_);
     SavePendingToStore(false /*update*/);
   } else {
     ProcessUpdate();
@@ -789,9 +791,9 @@
 #endif
 
   SendFillInformationToRenderer(
-      client_, driver_.get(), *observed_password_form.get(),
-      form_fetcher_->GetBestMatches(), form_fetcher_->GetFederatedMatches(),
-      form_fetcher_->GetPreferredMatch(), metrics_recorder_.get());
+      client_, driver_.get(), *observed_password_form.get(), GetBestMatches(),
+      form_fetcher_->GetFederatedMatches(), form_fetcher_->GetPreferredMatch(),
+      metrics_recorder_.get());
 }
 
 void PasswordFormManager::FillForm(const FormData& observed_form) {
@@ -896,7 +898,7 @@
 
   // Calculate the user's action based on existing matches and the submitted
   // form.
-  metrics_recorder_->CalculateUserAction(form_fetcher_->GetBestMatches(),
+  metrics_recorder_->CalculateUserAction(GetBestMatches(),
                                          *parsed_submitted_form_);
 
   // This function might be called multiple times so set variables that are
@@ -908,7 +910,7 @@
   // Look for the actually submitted credentials in the list of previously saved
   // credentials that were available to autofilling.
   const PasswordForm* saved_form = password_manager_util::GetMatchForUpdating(
-      *parsed_submitted_form_, form_fetcher_->GetBestMatches());
+      *parsed_submitted_form_, GetBestMatches());
   if (saved_form) {
     // A similar credential exists in the store already.
     pending_credentials_ = *saved_form;
@@ -1047,9 +1049,8 @@
   }
 
   if (pending_credentials_.times_used == 1) {
-    votes_uploader_.UploadFirstLoginVotes(form_fetcher_->GetBestMatches(),
-                                          pending_credentials_,
-                                          *parsed_submitted_form_);
+    votes_uploader_.UploadFirstLoginVotes(
+        GetBestMatches(), pending_credentials_, *parsed_submitted_form_);
   }
 }
 
@@ -1142,7 +1143,7 @@
 
 void PasswordFormManager::SavePendingToStore(bool update) {
   const PasswordForm* saved_form = password_manager_util::GetMatchForUpdating(
-      *parsed_submitted_form_, form_fetcher_->GetBestMatches());
+      *parsed_submitted_form_, GetBestMatches());
   if ((update || password_overridden_) &&
       !pending_credentials_.IsFederatedCredential()) {
     DCHECK(saved_form);
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h
index a9760c2..7fef82f 100644
--- a/components/password_manager/core/browser/password_form_manager.h
+++ b/components/password_manager/core/browser/password_form_manager.h
@@ -135,8 +135,8 @@
 
   // PasswordFormManagerForUI:
   const GURL& GetOrigin() const override;
-  const std::map<base::string16, const autofill::PasswordForm*>&
-  GetBestMatches() const override;
+  std::map<base::string16, const autofill::PasswordForm*> GetBestMatches()
+      const override;
   std::vector<const autofill::PasswordForm*> GetFederatedMatches()
       const override;
   const autofill::PasswordForm& GetPendingCredentials() const override;
diff --git a/components/password_manager/core/browser/password_form_manager_for_ui.h b/components/password_manager/core/browser/password_form_manager_for_ui.h
index 5ac8119..c0b8e59 100644
--- a/components/password_manager/core/browser/password_form_manager_for_ui.h
+++ b/components/password_manager/core/browser/password_form_manager_for_ui.h
@@ -32,8 +32,8 @@
   virtual const GURL& GetOrigin() const = 0;
 
   // Returns the best saved matches for the observed form.
-  // TODO(crbug.com/831123): it should return a vector.
-  virtual const std::map<base::string16, const autofill::PasswordForm*>&
+  // TODO(crbug.com/1011399): it should return a reference to a vector.
+  virtual std::map<base::string16, const autofill::PasswordForm*>
   GetBestMatches() const = 0;
 
   // Returns the federated saved matches for the observed form.
diff --git a/components/password_manager/core/browser/password_generation_state.cc b/components/password_manager/core/browser/password_generation_state.cc
index 4285874..8bfd600 100644
--- a/components/password_manager/core/browser/password_generation_state.cc
+++ b/components/password_manager/core/browser/password_generation_state.cc
@@ -47,8 +47,7 @@
 
   // PasswordFormManagerForUI:
   const GURL& GetOrigin() const override;
-  const std::map<base::string16, const PasswordForm*>& GetBestMatches()
-      const override;
+  std::map<base::string16, const PasswordForm*> GetBestMatches() const override;
   std::vector<const PasswordForm*> GetFederatedMatches() const override;
   const PasswordForm& GetPendingCredentials() const override;
   metrics_util::CredentialSourceType GetCredentialSource() const override;
@@ -96,7 +95,7 @@
   return pending_form_.origin;
 }
 
-const std::map<base::string16, const PasswordForm*>&
+std::map<base::string16, const PasswordForm*>
 PasswordDataForUI::GetBestMatches() const {
   return matches_;
 }
diff --git a/components/password_manager/core/browser/password_manager_util.cc b/components/password_manager/core/browser/password_manager_util.cc
index b9cb10d4..062c3d6 100644
--- a/components/password_manager/core/browser/password_manager_util.cc
+++ b/components/password_manager/core/browser/password_manager_util.cc
@@ -218,8 +218,8 @@
     const std::vector<const PasswordForm*>& non_federated_matches,
     PasswordForm::Scheme scheme,
     bool sort_matches_by_date_last_used,
-    std::vector<const autofill::PasswordForm*>* non_federated_same_scheme,
-    std::map<base::string16, const PasswordForm*>* best_matches,
+    std::vector<const PasswordForm*>* non_federated_same_scheme,
+    std::vector<const PasswordForm*>* best_matches,
     const PasswordForm** preferred_match) {
   DCHECK(std::all_of(
       non_federated_matches.begin(), non_federated_matches.end(),
@@ -246,11 +246,14 @@
             sort_matches_by_date_last_used ? IsBetterMatchUsingLastUsed
                                            : IsBetterMatch);
 
+  std::set<base::string16> usernames;
   for (const auto* match : *non_federated_same_scheme) {
     const base::string16& username = match->username_value;
     // The first match for |username| in the sorted array is best match.
-    if (best_matches->find(username) == best_matches->end())
-      best_matches->insert(std::make_pair(username, match));
+    if (!base::Contains(usernames, username)) {
+      usernames.insert(username);
+      best_matches->push_back(match);
+    }
   }
 
   *preferred_match = *non_federated_same_scheme->begin();
diff --git a/components/password_manager/core/browser/password_manager_util.h b/components/password_manager/core/browser/password_manager_util.h
index 97a7d13c..5c5cc98c 100644
--- a/components/password_manager/core/browser/password_manager_util.h
+++ b/components/password_manager/core/browser/password_manager_util.h
@@ -103,17 +103,17 @@
     const autofill::PasswordForm& form);
 
 // Given all non-blacklisted |non_federated_matches|, finds and populates
-// |best_matches| and |preferred_match_| accordingly. For comparing credentials
-// the following rule is used: non-psl match is better than psl match, preferred
-// match is better than non-preferred match. In case of tie, an arbitrary
-// credential from the tied ones is chosen for |best_matches| and
-// preferred_match.
+// |non_federated_same_scheme|, |best_matches|, and |preferred_match|
+// accordingly. For comparing credentials the following rule is used: non-psl
+// match is better than psl match, preferred match is better than non-preferred
+// match. In case of tie, an arbitrary credential from the tied ones is chosen
+// for |best_matches| and |preferred_match|.
 void FindBestMatches(
     const std::vector<const autofill::PasswordForm*>& non_federated_matches,
     autofill::PasswordForm::Scheme scheme,
     bool sort_matches_by_date_last_used,
     std::vector<const autofill::PasswordForm*>* non_federated_same_scheme,
-    std::map<base::string16, const autofill::PasswordForm*>* best_matches,
+    std::vector<const autofill::PasswordForm*>* best_matches,
     const autofill::PasswordForm** preferred_match);
 
 // If the user submits a form, they may have used existing credentials, new
diff --git a/components/password_manager/core/browser/password_manager_util_unittest.cc b/components/password_manager/core/browser/password_manager_util_unittest.cc
index 560427b..5dbb4e6f 100644
--- a/components/password_manager/core/browser/password_manager_util_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_util_unittest.cc
@@ -197,7 +197,7 @@
     for (const PasswordForm& match : owning_matches)
       matches.push_back(&match);
 
-    std::map<base::string16, const PasswordForm*> best_matches;
+    std::vector<const PasswordForm*> best_matches;
     const PasswordForm* preferred_match = nullptr;
 
     std::vector<const PasswordForm*> same_scheme_matches;
@@ -217,15 +217,14 @@
       ASSERT_EQ(test_case.expected_best_matches_indices.size(),
                 best_matches.size());
 
-      for (const auto& username_match : best_matches) {
-        std::string username = base::UTF16ToUTF8(username_match.first);
+      for (const PasswordForm* match : best_matches) {
+        std::string username = base::UTF16ToUTF8(match->username_value);
         ASSERT_NE(test_case.expected_best_matches_indices.end(),
                   test_case.expected_best_matches_indices.find(username));
         size_t expected_index =
             test_case.expected_best_matches_indices.at(username);
         size_t actual_index = std::distance(
-            matches.begin(),
-            std::find(matches.begin(), matches.end(), username_match.second));
+            matches.begin(), std::find(matches.begin(), matches.end(), match));
         EXPECT_EQ(expected_index, actual_index);
       }
     }
@@ -352,7 +351,7 @@
     for (const PasswordForm& match : owning_matches)
       matches.push_back(&match);
 
-    std::map<base::string16, const PasswordForm*> best_matches;
+    std::vector<const PasswordForm*> best_matches;
     const PasswordForm* preferred_match = nullptr;
 
     std::vector<const PasswordForm*> same_scheme_matches;
@@ -372,15 +371,14 @@
       ASSERT_EQ(test_case.expected_best_matches_indices.size(),
                 best_matches.size());
 
-      for (const auto& username_match : best_matches) {
-        std::string username = base::UTF16ToUTF8(username_match.first);
+      for (const PasswordForm* match : best_matches) {
+        std::string username = base::UTF16ToUTF8(match->username_value);
         ASSERT_NE(test_case.expected_best_matches_indices.end(),
                   test_case.expected_best_matches_indices.find(username));
         size_t expected_index =
             test_case.expected_best_matches_indices.at(username);
         size_t actual_index = std::distance(
-            matches.begin(),
-            std::find(matches.begin(), matches.end(), username_match.second));
+            matches.begin(), std::find(matches.begin(), matches.end(), match));
         EXPECT_EQ(expected_index, actual_index);
       }
     }
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc
index 7a848c0..01293d1 100644
--- a/components/password_manager/core/common/password_manager_features.cc
+++ b/components/password_manager/core/common/password_manager_features.cc
@@ -75,10 +75,6 @@
 const base::Feature kRecoverPasswordsForSyncUsers = {
     "RecoverPasswordsForSyncUsers", base::FEATURE_ENABLED_BY_DEFAULT};
 
-// Enables the touch to fill feature for Android.
-const base::Feature kTouchToFillAndroid = {"TouchToFillAndroid",
-                                           base::FEATURE_DISABLED_BY_DEFAULT};
-
 // Enables support of filling and saving on username first flow.
 const base::Feature kUsernameFirstFlow = {"UsernameFirstFlow",
                                           base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h
index 62781d11..c98561b 100644
--- a/components/password_manager/core/common/password_manager_features.h
+++ b/components/password_manager/core/common/password_manager_features.h
@@ -31,7 +31,6 @@
 extern const base::Feature kPasswordImport;
 extern const base::Feature kPasswordManagerOnboardingAndroid;
 extern const base::Feature kRecoverPasswordsForSyncUsers;
-extern const base::Feature kTouchToFillAndroid;
 extern const base::Feature kUsernameFirstFlow;
 extern const base::Feature kStickyBubble;
 
diff --git a/components/policy/core/common/config_dir_policy_loader_unittest.cc b/components/policy/core/common/config_dir_policy_loader_unittest.cc
index 51f7f50..1e5a127 100644
--- a/components/policy/core/common/config_dir_policy_loader_unittest.cc
+++ b/components/policy/core/common/config_dir_policy_loader_unittest.cc
@@ -246,7 +246,7 @@
     conflict_policy.value = std::make_unique<base::Value>("http://bar.com");
     expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
         .GetMutable(kHomepageLocation)
-        ->AddConflictingPolicy(conflict_policy);
+        ->AddConflictingPolicy(std::move(conflict_policy));
     expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
         .GetMutable(kHomepageLocation)
         ->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
diff --git a/components/policy/core/common/policy_bundle_unittest.cc b/components/policy/core/common/policy_bundle_unittest.cc
index eff687b..5191a25 100644
--- a/components/policy/core/common/policy_bundle_unittest.cc
+++ b/components/policy/core/common/policy_bundle_unittest.cc
@@ -194,9 +194,9 @@
   expected.Set(kPolicyClashing0, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
                POLICY_SOURCE_CLOUD, std::make_unique<base::Value>(0), nullptr);
   expected.GetMutable(kPolicyClashing0)
-      ->AddConflictingPolicy(*policy1.Get(kPolicyClashing0));
+      ->AddConflictingPolicy(policy1.Get(kPolicyClashing0)->DeepCopy());
   expected.GetMutable(kPolicyClashing0)
-      ->AddConflictingPolicy(*policy2.Get(kPolicyClashing0));
+      ->AddConflictingPolicy(policy2.Get(kPolicyClashing0)->DeepCopy());
   expected.GetMutable(kPolicyClashing0)
       ->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
   expected.GetMutable(kPolicyClashing0)
@@ -204,9 +204,9 @@
   expected.Set(kPolicyClashing1, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
                POLICY_SOURCE_CLOUD, std::make_unique<base::Value>(1), nullptr);
   expected.GetMutable(kPolicyClashing1)
-      ->AddConflictingPolicy(*policy0.Get(kPolicyClashing1));
+      ->AddConflictingPolicy(policy0.Get(kPolicyClashing1)->DeepCopy());
   expected.GetMutable(kPolicyClashing1)
-      ->AddConflictingPolicy(*policy2.Get(kPolicyClashing1));
+      ->AddConflictingPolicy(policy2.Get(kPolicyClashing1)->DeepCopy());
   expected.GetMutable(kPolicyClashing1)
       ->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
   expected.GetMutable(kPolicyClashing1)
diff --git a/components/policy/core/common/policy_loader_win_unittest.cc b/components/policy/core/common/policy_loader_win_unittest.cc
index 6fd6a14..e174229 100644
--- a/components/policy/core/common/policy_loader_win_unittest.cc
+++ b/components/policy/core/common/policy_loader_win_unittest.cc
@@ -464,7 +464,7 @@
                             std::make_unique<base::Value>("hkcu"), nullptr);
   expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
       .GetMutable(test_keys::kKeyString)
-      ->AddConflictingPolicy(conflict);
+      ->AddConflictingPolicy(std::move(conflict));
   EXPECT_TRUE(Matches(expected));
 }
 
@@ -530,9 +530,12 @@
   PolicyMap::Entry a_conflict_3(
       POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, POLICY_SOURCE_PLATFORM,
       std::make_unique<base::Value>(kUserRecommended), nullptr);
-  expected_policy.GetMutable("a")->AddConflictingPolicy(a_conflict_1);
-  expected_policy.GetMutable("a")->AddConflictingPolicy(a_conflict_2);
-  expected_policy.GetMutable("a")->AddConflictingPolicy(a_conflict_3);
+  expected_policy.GetMutable("a")->AddConflictingPolicy(
+      std::move(a_conflict_1));
+  expected_policy.GetMutable("a")->AddConflictingPolicy(
+      std::move(a_conflict_2));
+  expected_policy.GetMutable("a")->AddConflictingPolicy(
+      std::move(a_conflict_3));
 
   expected_policy.Set("b", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
                       POLICY_SOURCE_PLATFORM,
@@ -546,8 +549,10 @@
   PolicyMap::Entry b_conflict_2(
       POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, POLICY_SOURCE_PLATFORM,
       std::make_unique<base::Value>(kUserRecommended), nullptr);
-  expected_policy.GetMutable("b")->AddConflictingPolicy(b_conflict_1);
-  expected_policy.GetMutable("b")->AddConflictingPolicy(b_conflict_2);
+  expected_policy.GetMutable("b")->AddConflictingPolicy(
+      std::move(b_conflict_1));
+  expected_policy.GetMutable("b")->AddConflictingPolicy(
+      std::move(b_conflict_2));
 
   expected_policy.Set("c", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE,
                       POLICY_SOURCE_PLATFORM,
@@ -558,7 +563,8 @@
   PolicyMap::Entry c_conflict_1(
       POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, POLICY_SOURCE_PLATFORM,
       std::make_unique<base::Value>(kUserRecommended), nullptr);
-  expected_policy.GetMutable("c")->AddConflictingPolicy(c_conflict_1);
+  expected_policy.GetMutable("c")->AddConflictingPolicy(
+      std::move(c_conflict_1));
 
   expected_policy.Set("d", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
                       POLICY_SOURCE_PLATFORM,
diff --git a/components/policy/core/common/policy_map.cc b/components/policy/core/common/policy_map.cc
index 7698e3e..f6f10ac 100644
--- a/components/policy/core/common/policy_map.cc
+++ b/components/policy/core/common/policy_map.cc
@@ -55,34 +55,24 @@
 PolicyMap::Entry& PolicyMap::Entry::operator=(Entry&&) noexcept = default;
 
 PolicyMap::Entry PolicyMap::Entry::DeepCopy() const {
-  Entry copy;
-  copy.level = level;
-  copy.scope = scope;
-  copy.source = source;
-  if (value)
-    copy.value = value->CreateDeepCopy();
+  Entry copy(level, scope, source, value ? value->CreateDeepCopy() : nullptr,
+             external_data_fetcher
+                 ? std::make_unique<ExternalDataFetcher>(*external_data_fetcher)
+                 : nullptr);
   copy.error_strings_ = error_strings_;
   copy.error_message_ids_ = error_message_ids_;
   copy.warning_message_ids_ = warning_message_ids_;
-  if (external_data_fetcher) {
-    copy.external_data_fetcher.reset(
-        new ExternalDataFetcher(*external_data_fetcher));
-  }
+  copy.conflicts.reserve(conflicts.size());
   for (const auto& conflict : conflicts) {
-    copy.AddConflictingPolicy(conflict);
+    copy.AddConflictingPolicy(conflict.DeepCopy());
   }
   return copy;
 }
 
 bool PolicyMap::Entry::has_higher_priority_than(
     const PolicyMap::Entry& other) const {
-  if (level != other.level)
-    return level > other.level;
-
-  if (scope != other.scope)
-    return scope > other.scope;
-
-  return source > other.source;
+  return std::tie(level, scope, source) >
+         std::tie(other.level, other.scope, other.source);
 }
 
 bool PolicyMap::Entry::Equals(const PolicyMap::Entry& other) const {
@@ -116,19 +106,15 @@
   warning_message_ids_.insert(message_id);
 }
 
-void PolicyMap::Entry::AddConflictingPolicy(const Entry& conflict) {
-  Entry conflicted_policy_copy = conflict.DeepCopy();
-
-  for (const auto& conflict : conflicted_policy_copy.conflicts) {
-    AddConflictingPolicy(conflict);
-  }
+void PolicyMap::Entry::AddConflictingPolicy(Entry&& conflict) {
+  // Move all of the newly conflicting Entry's conflicts into this Entry.
+  std::move(conflict.conflicts.begin(), conflict.conflicts.end(),
+            std::back_inserter(conflicts));
 
   // Avoid conflict nesting
-  conflicted_policy_copy.conflicts.clear();
-  conflicted_policy_copy.error_message_ids_.clear();
-  conflicted_policy_copy.warning_message_ids_.clear();
-  conflicted_policy_copy.error_strings_.clear();
-  conflicts.push_back(std::move(conflicted_policy_copy));
+  conflicts.emplace_back(conflict.level, conflict.scope, conflict.source,
+                         std::move(conflict.value),
+                         std::move(conflict.external_data_fetcher));
 }
 
 void PolicyMap::Entry::ClearConflicts() {
@@ -278,35 +264,37 @@
 }
 
 void PolicyMap::MergeFrom(const PolicyMap& other) {
-  for (const auto& it : other) {
-    Entry* current_policy = GetMutableUntrusted(it.first);
-    auto other_policy = it.second.DeepCopy();
+  for (const auto& policy_and_entry : other) {
+    Entry* current_policy = GetMutableUntrusted(policy_and_entry.first);
+    Entry other_policy = policy_and_entry.second.DeepCopy();
 
     if (!current_policy) {
-      Set(it.first, std::move(other_policy));
+      Set(policy_and_entry.first, std::move(other_policy));
       continue;
     }
 
-    auto& new_policy = other_policy.has_higher_priority_than(*current_policy)
-                           ? other_policy
-                           : *current_policy;
-    auto& conflict =
-        current_policy == &new_policy ? other_policy : *current_policy;
+    const bool other_is_higher_priority =
+        policy_and_entry.second.has_higher_priority_than(*current_policy);
 
-    bool overwriting_default_policy =
-        new_policy.source != conflict.source &&
-        conflict.source == POLICY_SOURCE_ENTERPRISE_DEFAULT;
+    Entry& higher_policy =
+        other_is_higher_priority ? other_policy : *current_policy;
+    Entry& conflicting_policy =
+        other_is_higher_priority ? *current_policy : other_policy;
+
+    const bool overwriting_default_policy =
+        higher_policy.source != conflicting_policy.source &&
+        conflicting_policy.source == POLICY_SOURCE_ENTERPRISE_DEFAULT;
     if (!overwriting_default_policy) {
-      new_policy.AddConflictingPolicy(conflict);
-      new_policy.AddWarning(
+      higher_policy.AddConflictingPolicy(std::move(conflicting_policy));
+      higher_policy.AddWarning(
           (current_policy->value &&
-           it.second.value->Equals(current_policy->value.get()))
+           *policy_and_entry.second.value == *current_policy->value)
               ? IDS_POLICY_CONFLICT_SAME_VALUE
               : IDS_POLICY_CONFLICT_DIFF_VALUE);
     }
 
-    if (current_policy != &new_policy)
-      Set(it.first, std::move(new_policy));
+    if (other_is_higher_priority)
+      *current_policy = std::move(other_policy);
   }
 }
 
diff --git a/components/policy/core/common/policy_map.h b/components/policy/core/common/policy_map.h
index 9d01d45d..7b8e60252 100644
--- a/components/policy/core/common/policy_map.h
+++ b/components/policy/core/common/policy_map.h
@@ -73,7 +73,7 @@
     void AddWarning(int message_id);
 
     // Adds a conflicting policy.
-    void AddConflictingPolicy(const Entry& conflict);
+    void AddConflictingPolicy(Entry&& conflict);
 
     // Removes all the conflicts.
     void ClearConflicts();
diff --git a/components/policy/core/common/policy_map_unittest.cc b/components/policy/core/common/policy_map_unittest.cc
index cbd9c7b..bd7b7a4 100644
--- a/components/policy/core/common/policy_map_unittest.cc
+++ b/components/policy/core/common/policy_map_unittest.cc
@@ -264,31 +264,34 @@
         POLICY_SOURCE_CLOUD, std::make_unique<base::Value>("chromium.org"),
         nullptr);
   c.GetMutable(kTestPolicyName1)->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
-  c.GetMutable(kTestPolicyName1)->AddConflictingPolicy(conflicted_policy_1);
+  c.GetMutable(kTestPolicyName1)
+      ->AddConflictingPolicy(std::move(conflicted_policy_1));
   // |a| has precedence over |b|.
   c.Set(kTestPolicyName2, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
         POLICY_SOURCE_CLOUD, std::make_unique<base::Value>(true), nullptr);
   c.GetMutable(kTestPolicyName2)->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
   c.GetMutable(kTestPolicyName2)
-      ->AddConflictingPolicy(*b.Get(kTestPolicyName2));
+      ->AddConflictingPolicy(b.Get(kTestPolicyName2)->DeepCopy());
   c.Set(kTestPolicyName3, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
         POLICY_SOURCE_ENTERPRISE_DEFAULT, nullptr,
         CreateExternalDataFetcher("a"));
   c.GetMutable(kTestPolicyName3)->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
   c.GetMutable(kTestPolicyName3)
-      ->AddConflictingPolicy(*b.Get(kTestPolicyName3));
+      ->AddConflictingPolicy(b.Get(kTestPolicyName3)->DeepCopy());
   // POLICY_SCOPE_MACHINE over POLICY_SCOPE_USER for POLICY_LEVEL_RECOMMENDED.
   c.Set(kTestPolicyName4, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE,
         POLICY_SOURCE_DEVICE_LOCAL_ACCOUNT_OVERRIDE,
         std::make_unique<base::Value>(true), nullptr);
   c.GetMutable(kTestPolicyName4)->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
-  c.GetMutable(kTestPolicyName4)->AddConflictingPolicy(conflicted_policy_4);
+  c.GetMutable(kTestPolicyName4)
+      ->AddConflictingPolicy(std::move(conflicted_policy_4));
   // POLICY_LEVEL_MANDATORY over POLICY_LEVEL_RECOMMENDED.
   c.Set(kTestPolicyName5, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
         POLICY_SOURCE_PLATFORM, std::make_unique<base::Value>(std::string()),
         nullptr);
   c.GetMutable(kTestPolicyName5)->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
-  c.GetMutable(kTestPolicyName5)->AddConflictingPolicy(conflicted_policy_5);
+  c.GetMutable(kTestPolicyName5)
+      ->AddConflictingPolicy(std::move(conflicted_policy_5));
   // Merge new ones.
   c.Set(kTestPolicyName6, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
         POLICY_SOURCE_CLOUD, std::make_unique<base::Value>(true), nullptr);
@@ -302,7 +305,8 @@
         POLICY_SOURCE_ACTIVE_DIRECTORY,
         std::make_unique<base::Value>("blocked AD policy"), nullptr);
   c.GetMutable(kTestPolicyName8)->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
-  c.GetMutable(kTestPolicyName8)->AddConflictingPolicy(conflicted_policy_8);
+  c.GetMutable(kTestPolicyName8)
+      ->AddConflictingPolicy(std::move(conflicted_policy_8));
   c.GetMutable(kTestPolicyName8)->SetBlocked();
 
   EXPECT_TRUE(a.Equals(c));
@@ -363,7 +367,7 @@
   PolicyMap::Entry expected_case1(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
                                   POLICY_SOURCE_MERGED,
                                   std::make_unique<base::Value>(abcd), nullptr);
-  expected_case1.AddConflictingPolicy(case1);
+  expected_case1.AddConflictingPolicy(case1.DeepCopy());
 
   // Case 2 - kTestPolicyName2
   // Policies should only be merged with other policies with the same target,
@@ -383,7 +387,7 @@
   PolicyMap::Entry expected_case2(
       POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED,
       std::make_unique<base::Value>(int1234), nullptr);
-  expected_case2.AddConflictingPolicy(case2);
+  expected_case2.AddConflictingPolicy(case2.DeepCopy());
 
   // Case 3 - kTestPolicyName3
   // Trivial case with 2 sources.
@@ -400,7 +404,7 @@
                                   std::make_unique<base::Value>(abcd), nullptr);
   auto case3_blocked_by_group = expected_case3.DeepCopy();
   case3_blocked_by_group.SetIgnoredByPolicyAtomicGroup();
-  expected_case3.AddConflictingPolicy(case3);
+  expected_case3.AddConflictingPolicy(case3.DeepCopy());
 
   // Case 4 - kTestPolicyName4
   // Policies with a single source should stay the same.
@@ -410,7 +414,7 @@
   PolicyMap::Entry expected_case4(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
                                   POLICY_SOURCE_MERGED,
                                   std::make_unique<base::Value>(ef), nullptr);
-  expected_case4.AddConflictingPolicy(case4);
+  expected_case4.AddConflictingPolicy(case4.DeepCopy());
 
   // Case 5 - kTestPolicyName5
   // Policies that are not lists should not be merged.
@@ -440,7 +444,7 @@
   PolicyMap::Entry expected_case6(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
                                   POLICY_SOURCE_MERGED,
                                   std::make_unique<base::Value>(ab), nullptr);
-  expected_case6.AddConflictingPolicy(case6);
+  expected_case6.AddConflictingPolicy(case6.DeepCopy());
 
   // Case 7 - kTestPolicyName7
   // Lists of dictionaries should not have duplicates.
@@ -460,7 +464,7 @@
   PolicyMap::Entry expected_case7(
       POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, POLICY_SOURCE_MERGED,
       std::make_unique<base::Value>(list_dict_abcd), nullptr);
-  expected_case7.AddConflictingPolicy(case7);
+  expected_case7.AddConflictingPolicy(case7.DeepCopy());
 
   PolicyMap policy_not_merged;
   policy_not_merged.Set(kTestPolicyName1, case1.DeepCopy());
@@ -570,7 +574,7 @@
   PolicyMap::Entry expected_case1(
       POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED,
       base::Value::ToUniquePtrValue(merged_dict_case1.Clone()), nullptr);
-  expected_case1.AddConflictingPolicy(case1);
+  expected_case1.AddConflictingPolicy(case1.DeepCopy());
 
   // Case  - kTestPolicyName2
   // Policies should only be merged with other policies with the same target,
@@ -595,7 +599,7 @@
   PolicyMap::Entry expected_case2(
       POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED,
       base::Value::ToUniquePtrValue(merged_dict_case2.Clone()), nullptr);
-  expected_case2.AddConflictingPolicy(case2);
+  expected_case2.AddConflictingPolicy(case2.DeepCopy());
 
   // Case 3 - kTestPolicyName3
   // Enterprise default policies should not be merged with other sources.
@@ -624,7 +628,7 @@
   PolicyMap::Entry expected_case3(
       POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, POLICY_SOURCE_MERGED,
       base::Value::ToUniquePtrValue(merged_dict_case3.Clone()), nullptr);
-  expected_case3.AddConflictingPolicy(case3);
+  expected_case3.AddConflictingPolicy(case3.DeepCopy());
 
   // Case 4 - kTestPolicyName4
   // Policies with a single source should be merged.
@@ -635,7 +639,7 @@
   PolicyMap::Entry expected_case4(
       POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED,
       base::Value::ToUniquePtrValue(dict_a.Clone()), nullptr);
-  expected_case4.AddConflictingPolicy(case4);
+  expected_case4.AddConflictingPolicy(case4.DeepCopy());
 
   // Case 5 - kTestPolicyName5
   // Policies that are not dictionaries should not be merged.
@@ -666,7 +670,7 @@
   PolicyMap::Entry expected_case6(
       POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, POLICY_SOURCE_MERGED,
       base::Value::ToUniquePtrValue(dict_a.Clone()), nullptr);
-  expected_case6.AddConflictingPolicy(case6);
+  expected_case6.AddConflictingPolicy(case6.DeepCopy());
 
   // Case 7 - kTestPolicyName7
   // Policies that are not dictionaries should not be merged.
@@ -939,8 +943,8 @@
   PolicyMap::Entry entry_c = entry_a.DeepCopy();
   entry_c.source = POLICY_SOURCE_PLATFORM;
 
-  entry_b.AddConflictingPolicy(entry_c);
-  entry_a.AddConflictingPolicy(entry_b);
+  entry_b.AddConflictingPolicy(entry_c.DeepCopy());
+  entry_a.AddConflictingPolicy(entry_b.DeepCopy());
 
   EXPECT_TRUE(entry_a.conflicts.size() == 2);
   EXPECT_TRUE(entry_b.conflicts.size() == 1);
diff --git a/components/policy/core/common/policy_merger.cc b/components/policy/core/common/policy_merger.cc
index bf5b236..770bebb 100644
--- a/components/policy/core/common/policy_merger.cc
+++ b/components/policy/core/common/policy_merger.cc
@@ -122,7 +122,7 @@
     policy->value.reset(new_value);
   }
   policy->ClearConflicts();
-  policy->AddConflictingPolicy(new_conflict);
+  policy->AddConflictingPolicy(std::move(new_conflict));
   policy->source = POLICY_SOURCE_MERGED;
 }
 
@@ -212,7 +212,7 @@
     policy->value = base::Value::ToUniquePtrValue(std::move(merged_dictionary));
 
   policy->ClearConflicts();
-  policy->AddConflictingPolicy(new_conflict);
+  policy->AddConflictingPolicy(std::move(new_conflict));
   policy->source = POLICY_SOURCE_MERGED;
 }
 
diff --git a/components/policy/core/common/policy_service_impl_unittest.cc b/components/policy/core/common/policy_service_impl_unittest.cc
index 5e199c1..ba60b9f 100644
--- a/components/policy/core/common/policy_service_impl_unittest.cc
+++ b/components/policy/core/common/policy_service_impl_unittest.cc
@@ -403,8 +403,10 @@
   provider0_.UpdateChromePolicy(policy0_);
   provider1_.UpdateChromePolicy(policy1_);
   provider2_.UpdateChromePolicy(policy2_);
-  expected.GetMutable("aaa")->AddConflictingPolicy(*policy1_.Get("aaa"));
-  expected.GetMutable("aaa")->AddConflictingPolicy(*policy2_.Get("aaa"));
+  expected.GetMutable("aaa")->AddConflictingPolicy(
+      policy1_.Get("aaa")->DeepCopy());
+  expected.GetMutable("aaa")->AddConflictingPolicy(
+      policy2_.Get("aaa")->DeepCopy());
 
   EXPECT_TRUE(VerifyPolicies(
       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected));
@@ -414,7 +416,8 @@
   expected.GetMutable("aaa")->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
   policy0_.Erase("aaa");
   provider0_.UpdateChromePolicy(policy0_);
-  expected.GetMutable("aaa")->AddConflictingPolicy(*policy2_.Get("aaa"));
+  expected.GetMutable("aaa")->AddConflictingPolicy(
+      policy2_.Get("aaa")->DeepCopy());
   EXPECT_TRUE(VerifyPolicies(
       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected));
 
@@ -423,7 +426,8 @@
   expected.GetMutable("aaa")->AddWarning(IDS_POLICY_CONFLICT_SAME_VALUE);
   policy1_.Set("aaa", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER,
                POLICY_SOURCE_CLOUD, std::make_unique<base::Value>(1), nullptr);
-  expected.GetMutable("aaa")->AddConflictingPolicy(*policy2_.Get("aaa"));
+  expected.GetMutable("aaa")->AddConflictingPolicy(
+      policy2_.Get("aaa")->DeepCopy());
   provider1_.UpdateChromePolicy(policy2_);
   EXPECT_TRUE(VerifyPolicies(
       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()), expected));
@@ -577,12 +581,14 @@
       ->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
   expected.GetMutable(kSameLevelPolicy)
       ->AddConflictingPolicy(
-          *bundle1->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
-               .Get(kSameLevelPolicy));
+          bundle1->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
+              .Get(kSameLevelPolicy)
+              ->DeepCopy());
   expected.GetMutable(kSameLevelPolicy)
       ->AddConflictingPolicy(
-          *bundle2->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
-               .Get(kSameLevelPolicy));
+          bundle2->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
+              .Get(kSameLevelPolicy)
+              ->DeepCopy());
   // For policies with different levels and scopes, the highest priority
   // level/scope combination takes precedence, on every namespace.
   expected.Set(kDiffLevelPolicy, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE,
@@ -592,12 +598,14 @@
       ->AddWarning(IDS_POLICY_CONFLICT_DIFF_VALUE);
   expected.GetMutable(kDiffLevelPolicy)
       ->AddConflictingPolicy(
-          *bundle0->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
-               .Get(kDiffLevelPolicy));
+          bundle0->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
+              .Get(kDiffLevelPolicy)
+              ->DeepCopy());
   expected.GetMutable(kDiffLevelPolicy)
       ->AddConflictingPolicy(
-          *bundle1->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
-               .Get(kDiffLevelPolicy));
+          bundle1->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
+              .Get(kDiffLevelPolicy)
+              ->DeepCopy());
 
   provider0_.UpdatePolicy(std::move(bundle0));
   provider1_.UpdatePolicy(std::move(bundle1));
diff --git a/components/policy/core/common/schema_map_unittest.cc b/components/policy/core/common/schema_map_unittest.cc
index ee19642..6bc9f5e 100644
--- a/components/policy/core/common/schema_map_unittest.cc
+++ b/components/policy/core/common/schema_map_unittest.cc
@@ -186,7 +186,7 @@
   expected_bundle.Get(chrome_ns)
       .GetMutable("ChromePolicy")
       ->AddConflictingPolicy(
-          *expected_bundle.Get(chrome_ns).Get("ChromePolicy"));
+          expected_bundle.Get(chrome_ns).Get("ChromePolicy")->DeepCopy());
   expected_bundle.Get(chrome_ns)
       .GetMutable("ChromePolicy")
       ->AddWarning(IDS_POLICY_CONFLICT_SAME_VALUE);
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 817c58a..39ed8e6 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -2554,7 +2554,6 @@
 <translation id="5447306928176905178">Weitergabe von Speicherinformationen (JS-Heap-Größe) an Seite aktivieren (veraltet)</translation>
 <translation id="5457065417344056871">Gastmodus im Browser aktivieren</translation>
 <translation id="5457924070961220141">Ermöglicht Ihnen die Konfiguration des Standard-HTML-Renderers, wenn <ph name="PRODUCT_FRAME_NAME" /> installiert ist. Wenn diese Richtlinie nicht konfiguriert ist, so kommt die Standardeinstellung zum Einsatz, wobei der Hostbrowser das Rendering übernimmt. Sie haben aber die Möglichkeit, dies zu ändern und <ph name="PRODUCT_FRAME_NAME" /> das Rendering der HTML-Seite übernehmen zu lassen.</translation>
-<translation id="5458584148602890023">Umschalten bei Leistungsspitzen aktivieren</translation>
 <translation id="5464816904705580310">Konfiguriert Einstellungen für verwaltete Nutzer</translation>
 <translation id="546726650689747237">Verzögerung für die Bildschirmabdunkelung im Netzbetrieb</translation>
 <translation id="5469143988693423708">Nutzer darf Crostini ausführen</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 369d45a..3a583e5 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -2541,7 +2541,6 @@
 <translation id="5447306928176905178">Habilitar el suministro de información sobre la memoria (tamaño de pila de archivos JavaScript) a las páginas (obsoleto)</translation>
 <translation id="5457065417344056871">Habilitar modo de invitado en el navegador</translation>
 <translation id="5457924070961220141">Te permite configurar el procesador HTML predeterminado cuando se instala <ph name="PRODUCT_FRAME_NAME" />. La configuración predeterminada que se usa cuando esta política no se configura es permitir que el navegador del host realice la representación, pero puedes anular esta opción y hacer que <ph name="PRODUCT_FRAME_NAME" /> muestre páginas HTML de forma predeterminada.</translation>
-<translation id="5458584148602890023">Habilitar el cambio de pico de consumo de energía</translation>
 <translation id="5464816904705580310">Permite establecer parámetros de configuración para los usuarios administrados.</translation>
 <translation id="546726650689747237">Demora de atenuación de pantalla con alimentación de CA</translation>
 <translation id="5469143988693423708">Permitir que el usuario ejecute Crostini</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 6c08a00..bee59412 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -2629,7 +2629,6 @@
 <translation id="5457065417344056871">Habilitar el modo invitados en el navegador</translation>
 <translation id="5457924070961220141">Permite configurar el procesador de HTML predeterminado si se ha instalado <ph name="PRODUCT_FRAME_NAME" />.
           Si no se establece esta política, se permitirá que el navegador del host muestre las páginas HTML de forma predeterminada, pero puedes anular esta opción para que <ph name="PRODUCT_FRAME_NAME" /> muestre las páginas HTML de forma predeterminada.</translation>
-<translation id="5458584148602890023">Habilitar Peak Shift</translation>
 <translation id="5464816904705580310">Permite establecer opciones de configuración de usuarios administrados.</translation>
 <translation id="546726650689747237">Retraso de atenuación de pantalla cuando el dispositivo está conectado a la red</translation>
 <translation id="5469143988693423708">El usuario tiene permiso para ejecutar Crostini</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index d864bf4..83b1357 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -2627,7 +2627,6 @@
 <translation id="5457924070961220141">Permet de configurer le moteur de rendu HTML par défaut lorsque <ph name="PRODUCT_FRAME_NAME" /> est installé. 
 
 Lorsque cette règle n'est pas configurée, le paramètre par défaut utilisé consiste à permettre au navigateur d'accueil d'effectuer le rendu. Mais vous avez la possibilité de remplacer ce paramètre et de demander que les pages HTML soient affichées par <ph name="PRODUCT_FRAME_NAME" /> par défaut.</translation>
-<translation id="5458584148602890023">Activer le passage à l'alimentation via la batterie</translation>
 <translation id="5464816904705580310">Configurer les paramètres des utilisateurs gérés</translation>
 <translation id="546726650689747237">Délai d'assombrissement de l'écran (secteur)</translation>
 <translation id="5469143988693423708">L'utilisateur est autorisé à exécuter Crostini</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 094a5ba7..a63ea4c 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -162,6 +162,7 @@
 <translation id="1219695476179627719">Menentukan apakah perangkat harus di-rollback ke versi yang disetel oleh <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> jika telah menjalankan versi lebih baru.
 
       Default adalah RollbackDisabled.</translation>
+<translation id="1220047093962987554">Memeriksa status Safe Browsing pada URL yang dikunjungi secara real time</translation>
 <translation id="1221359380862872747">Muat url yang ditentukan di proses masuk demo</translation>
 <translation id="1223789468190631420">Safe Browsing mengaktifkan status untuk sumber tepercaya</translation>
 <translation id="122899932962115297">Daftar yang diizinkan mengontrol mode buka kunci cepat mana yang dapat dikonfigurasi dan digunakan pengguna untuk membuka layar kunci.
@@ -182,11 +183,14 @@
 <translation id="1243570869342663665">Mengontrol pemfilteran konten khusus dewasa SafeSites.</translation>
 <translation id="1257550411839719984">Setel direktori download default</translation>
 <translation id="1265053460044691532">Batasi waktu bagi pengguna yang diautentikasi melalui SAML untuk dapat masuk saat offline.</translation>
+<translation id="127264587838521316">Mengaktifkan permintaan penginstalan ekstensi <ph name="PRODUCT_NAME" /></translation>
 <translation id="1290634681382861275">Mengontrol berbagai setelan antara lain USB, bluetooth, pembaruan kebijakan, mode developer, dan lainnya.</translation>
 <translation id="1291880496936992484">Peringatan: RC4 akan dihapus sepenuhnya dari <ph name="PRODUCT_NAME" /> setelah versi 52 (sekitar September 2016) dan sejak saat itu kebijakan ini tidak akan berlaku lagi.
 
       Jika kebijakan tidak disetel, atau disetel ke False, maka cipher suite RC4 di TLS tidak akan diaktifkan. Jika kebijakan disetel ke True, kebijakan akan tetap berlaku untuk mempertahankan kompatibilitas dengan server yang sudah usang. Tindakan ini hanya untuk sementara dan server sebaiknya dikonfigurasi ulang.</translation>
+<translation id="1295737447968372331">Mengaktifkan dikte di layar login</translation>
 <translation id="1297182715641689552">Gunakan skrip proxy .pac</translation>
+<translation id="1297961932043741908">Menetapkan batas megabyte memori yang dapat digunakan oleh satu instance Chrome.</translation>
 <translation id="1304973015437969093">ID Ekstensi/Aplikasi dan URL pembaruan akan dipasang di latar belakang</translation>
 <translation id="1307454923744766368">Asal atau pola hostname yang semestinya tidak dikenai pembatasan untuk asal yang tidak aman</translation>
 <translation id="1312799700549720683">Mengontrol setelan tampilan.</translation>
@@ -577,6 +581,7 @@
       Jika setelan ini diaktifkan atau dinonaktifkan, pengguna tidak dapat mengubah atau menggantinya di <ph name="PRODUCT_NAME" />.
 
       Jika setelan ini tidak ditetapkan, pengguna dapat memutuskan untuk menggunakan fungsi ini atau tidak.</translation>
+<translation id="1999000620918508488">Memaksa layar login untuk menampilkan atau menyembunyikan informasi sistem.</translation>
 <translation id="2006530844219044261">Pengelolaan daya</translation>
 <translation id="2014757022750736514">Mengontrol perilaku layar login tempat pengguna login ke akun. Setelan mencakup siapa saja yang dapat login, jenis akun yang diizinkan, metode autentikasi yang harus digunakan, serta aksesibilitas umum, metode masukan, dan setelan lokal.</translation>
 <translation id="201557587962247231">Frekuensi upload laporan status perangkat</translation>
@@ -592,12 +597,18 @@
 <translation id="2024476116966025075">Mengonfigurasi nama domain yang diperlukan untuk klien akses jarak jauh</translation>
 <translation id="2030905906517501646">Kata kunci penyedia penelusuran default</translation>
 <translation id="203096360153626918">Kebijakan ini tidak memengaruhi aplikasi Android. Aplikasi akan dapat memasuki mode layar penuh meski kebijakan ini disetel ke <ph name="FALSE" />.</translation>
+<translation id="2043749682619281558">Mengaktifkan sorotan kursor di layar login</translation>
 <translation id="2043770014371753404">Menonaktifkan printer perusahaan</translation>
 <translation id="2050629715135525072">Mengontrol kemampuan pengguna yang terhubung ke host akses jarak jauh untuk mentransfer file antara klien dan host. Kebijakan ini tidak berlaku untuk sambungan bantuan jarak jauh, yang tidak mendukung transfer file.
 
           Jika setelan ini dinonaktifkan, transfer file tidak akan diizinkan. Jika setelan ini diaktifkan atau tidak disetel, transfer file akan diizinkan.</translation>
 <translation id="2057317273526988987">Izinkan akses ke daftar URL</translation>
 <translation id="2061810934846663491">Mengonfigurasi nama domain wajib untuk host akses jarak jauh</translation>
+<translation id="2063663607822994541">Mengonfigurasi jumlah memori yang dapat digunakan oleh satu instance <ph name="PRODUCT_NAME" /> sebelum tab mulai dihapus (artinya, memori yang digunakan oleh tab akan dibebaskan dan tab harus dimuat ulang saat dialihkan) untuk menghemat memori.
+
+      Jika kebijakan ini ditetapkan, browser akan mulai menghapus tab untuk menghemat memori setelah melampaui batas. Namun, tidak ada jaminan bahwa browser selalu berjalan di bawah batas. Setiap nilai yang kurang dari 2048 akan dibulatkan ke 2048.
+
+      Jika kebijakan ini tidak ditetapkan, browser hanya akan mulai mencoba menghemat memori setelah mendeteksi bahwa perangkatnya memiliki jumlah memori fisik yang rendah.</translation>
 <translation id="206623763829450685">Menentukan skema autentikasi HTTP yang didukung oleh <ph name="PRODUCT_NAME" />.
 
           Nilai yang mungkin adalah 'basic', 'digest', 'ntlm', dan 'negotiate'. Pisahkan beberapa nilai dengan koma.
@@ -608,6 +619,7 @@
 <translation id="2077129598763517140">Gunakan akselerasi hardware jika tersedia</translation>
 <translation id="2077273864382355561">Penundaan mematikan layar saat menggunakan daya baterai</translation>
 <translation id="2082205219176343977">Mengonfigurasi versi minimum Chrome yang diizinkan untuk perangkat.</translation>
+<translation id="2084647819368766928">Daftar domain dengan konten yang diupload yang tidak perlu mendapat pemeriksaan pelanggaran aturan perlindungan data sensitif</translation>
 <translation id="209586405398070749">Saluran stabil</translation>
 <translation id="2098658257603918882">Aktifkan laporan data penggunaan dan yang terkait error</translation>
 <translation id="2104418465060359056">Melaporkan informasi Ekstensi dan Plugin</translation>
@@ -764,6 +776,16 @@
       Jika setelan ini diaktifkan, histori penjelajahan tidak disimpan. Setelan ini juga menonaktifkan sinkronisasi tab.
 
       Jika setelan ini dinonaktifkan atau tidak disetel, histori penjelajahan akan disimpan.</translation>
+<translation id="2423038190900972331">Mengontrol cara <ph name="PRODUCT_NAME" /> memeriksa pelanggaran aturan perlindungan data sensitif pada data yang diupload, didownload, ditempelkan dari papan klip, atau ditarik lalu dilepaskan.
+
+      Jika kebijakan ini tidak ditetapkan atau ditetapkan ke 'Tidak ada', <ph name="PRODUCT_NAME" /> tidak akan memeriksa pelanggaran aturan perlindungan kebijakan data sensitif pada data apa pun.
+
+      Jika kebijakan ini ditetapkan ke 'Periksa download' dan pengguna berusaha mendownload file dari URL dalam kebijakan <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> akan memeriksa kepatuhan data yang didownload terhadap aturan perusahaan.
+
+      Jika kebijakan ini ditetapkan ke 'Periksa upload' dan pengguna berusaha mengupload file ke domain yang tidak ada di <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> akan memeriksa kepatuhan file yang diupload, data yang ditempelkan dari papan klip, atau data yang ditarik lalu dilepaskan, terhadap aturan perusahaan.
+
+      Jika kebijakan ini ditetapkan ke 'Periksa upload dan download', <ph name="PRODUCT_NAME" /> akan berperilaku sesuai dengan aturan yang dijelaskan di 'Periksa download' dan 'Periksa upload'.
+      </translation>
 <translation id="2426782419955104525">Mengaktifkan fitur Instan <ph name="PRODUCT_NAME" /> dan mencegah pengguna mengubah setelan ini.
 
       Jika Anda mengaktifkan setelan ini, <ph name="PRODUCT_NAME" /> Instan akan diaktifkan.
@@ -904,6 +926,10 @@
       Jika kebijakan ini disetel, pengguna tidak dapat mengubah atau menggantinya.
 
       Setelah mengaktifkan Bluetooth, pengguna harus keluar dan masuk lagi untuk menerapkan perubahan (langkah ini tidak diperlukan ketika menonaktifkan Bluetooth).</translation>
+<translation id="2570498106495954914">Daftar domain dengan konten yang didownload yang perlu mendapat pemeriksaan pelanggaran aturan perlindungan data sensitif sebelum disimpan di penyimpanan lokal.  Kebijakan ini hanya digunakan jika <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> ditetapkan ke aktif.
+
+      Jika kebijakan ini tidak ditetapkan atau ditetapkan ke daftar domain kosong, tidak ada konten yang didownload yang akan mendapat pemeriksaan pelanggaran aturan perlindungan data sensitif.
+      </translation>
 <translation id="2571066091915960923">Mengaktifkan atau menonaktifkan proxy kompresi data dan mencegah agar pengguna tidak mengubah setelan ini.
 
       Jika Anda mengaktifkan atau menonaktifkan setelan ini, pengguna tidak dapat mengubah atau mengganti setelan ini.
@@ -969,6 +995,23 @@
 <translation id="268577405881275241">Aktifkan fitur proxy kompresi data</translation>
 <translation id="2693108589792503178">Mengonfigurasi URL ubah sandi.</translation>
 <translation id="2694143893026486692">Kaca pembesar yang dipasang ke dok diaktifkan</translation>
+<translation id="2694188263972877487">Mengonfigurasi jenis download yang akan sepenuhnya diblokir oleh <ph name="PRODUCT_NAME" />, tanpa mengizinkan pengguna mengganti keputusan keamanan.
+
+      Jika kebijakan ini ditetapkan, <ph name="PRODUCT_NAME" /> akan mencegah jenis download tertentu, dan tidak akan mengizinkan pengguna mengabaikan peringatan keamanan.
+
+      Saat opsi 'Blokir download berbahaya' dipilih, semua download diizinkan, kecuali yang menyertakan peringatan Safe Browsing.
+
+      Saat opsi 'Blokir download yang berpotensi berbahaya' dipilih, semua download diizinkan, kecuali yang menyertakan peringatan Safe Browsing tentang download yang berpotensi berbahaya.
+
+      Saat opsi 'Blokir semua download' dipilih, semua download akan diblokir.
+
+      Saat opsi 'Blokir download berbahaya' dipilih, semua download diizinkan, kecuali yang dinilai dengan kuat sebagai malware oleh Safe Browsing. Berbeda dengan download berbahaya, opsi ini tidak mempertimbangkan jenis file, tetapi mempertimbangkan host.
+
+      Saat kebijakan ini tidak ditetapkan, (atau opsi 'Tidak ada batasan khusus' dipilih), download akan melalui batasan keamanan yang biasa berdasarkan hasil analisis Safe Browsing.
+
+      Perlu diketahui bahwa batasan ini berlaku untuk download yang dipicu dari konten halaman web, serta dari opsi menu konteks 'download link...'. Batasan ini tidak berlaku untuk penyimpanan/download halaman yang sedang ditampilkan, maupun untuk penyimpanan sebagai PDF dari opsi pencetakan.
+
+      Lihat https://developers.google.com/safe-browsing untuk mengetahui info selengkapnya tentang Safe Browsing.</translation>
 <translation id="2706708761587205154">Hanya izinkan pencetakan dengan PIN</translation>
 <translation id="2710534340210290498">Jika kebijakan ini ditetapkan ke False, pengguna tidak akan dapat mengunci layar (hanya dapat logout dari sesi pengguna). Jika setelan ini ditetapkan ke True atau tidak ditetapkan, pengguna yang melakukan autentikasi dengan sandi dapat mengunci layar.</translation>
 <translation id="2731627323327011390">Menonaktifkan penggunaan sertifikat <ph name="PRODUCT_OS_NAME" /> untuk aplikasi ARC</translation>
@@ -1410,6 +1453,15 @@
           Jika kebijakan ini disetel ke False atau dibiarkan tidak disetel, penundaan pengelolaan daya dan batas lama sesi mulai berjalan langsung saat sesi dimulai.</translation>
 <translation id="3478024346823118645">Hapus data pengguna saat keluar</translation>
 <translation id="3480961938508521469">Mengisi baterai hingga penuh pada kecepatan standar.</translation>
+<translation id="348110646151632565">Mengaktifkan fitur aksesibilitas klik untuk diucapkan di layar login.
+
+          Jika kebijakan ini ditetapkan ke true, fitur klik untuk diucapkan akan selalu diaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan ke false, fitur klik untuk diucapkan akan selalu dinonaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, fitur klik untuk diucapkan mula-mula akan dinonaktifkan di layar login, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation>
 <translation id="3483729306380590354">Menetapkan nilai awal pengisian daya baterai kustom dalam persen.
 
           Baterai akan memulai pengisian daya jika sudah mencapai nilai awal pengisian daya baterai kustom.
@@ -1446,6 +1498,7 @@
 
           Kebijakan ini hanya dipatuhi jika kebijakan 'DefaultSearchProviderEnabled' diaktifkan.</translation>
 <translation id="350797926066071931">Aktifkan Terjemahan</translation>
+<translation id="3508047333410537654">Mengaktifkan audio mono di layar login</translation>
 <translation id="3513655665999652754">Quirks Server menyediakan file konfigurasi khusus hardware, seperti profil tampilan ICC untuk
        menyesuaikan kalibrasi monitor.
 
@@ -1495,6 +1548,7 @@
 <translation id="3591527072193107424">Mengaktifkan fitur Dukungan Browser Lama.</translation>
 <translation id="3591584750136265240">Mengonfigurasi perilaku autentikasi proses masuk</translation>
 <translation id="3617743504695003280">Mengizinkan halaman untuk melakukan permintaan XHR sinkron saat menutup halaman.</translation>
+<translation id="3624515566460517364">Memeriksa pelanggaran aturan perlindungan data sensitif pada file yang diupload dan didownload.</translation>
 <translation id="3627678165642179114">Mengaktifkan atau menonaktifkan layanan web memeriksa ejaan</translation>
 <translation id="3628480121685794414">Aktifkan pencetakan simpleks</translation>
 <translation id="3631099945620529777">Jika ditetapkan ke False, tombol 'Akhiri proses' akan dinonaktifkan di Pengelola Tugas.
@@ -1581,6 +1635,15 @@
       Jika kebijakan ini tidak disetel, direktori download default akan digunakan dan pengguna dapat mengubahnya.</translation>
 <translation id="3805659594028420438">Aktifkan ekstensi sertifikat terikat domain TLS (tidak lagi digunakan)</translation>
 <translation id="3808945828600697669">Tentukan daftar plugin yang dinonaktifkan</translation>
+<translation id="3810642039169532482">Mengaktifkan fitur aksesibilitas dikte di layar login.
+
+          Jika kebijakan ini ditetapkan ke true, dikte akan selalu diaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan ke false, dikte akan selalu dinonaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, dikte mula-mula akan dinonaktifkan di layar login, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation>
 <translation id="3811562426301733860">Izinkan iklan di semua situs</translation>
 <translation id="3816312845600780067">Aktifkan pintasan keyboard penyelamatan untuk masuk otomatis</translation>
 <translation id="3820526221169548563">Mengaktifkan fitur aksesibilitas keyboard di layar.
@@ -1648,6 +1711,7 @@
       Setiap entri cantuman berisi kamus yang harus menyertakan ID ekstensi dalam bidang 'extension-id', dan URL pembaruannya dalam bidang 'update-url'.</translation>
 <translation id="3874773863217952418">Aktifkan Ketuk untuk Menelusuri</translation>
 <translation id="3877517141460819966">Mode autentikasi faktor kedua yang terintegrasi</translation>
+<translation id="3879196885908353077">Memeriksa pelanggaran aturan perlindungan data sensitif pada download</translation>
 <translation id="3879208481373875102">Konfigurasi daftar Aplikasi Web yang diinstal otomatis</translation>
 <translation id="388237772682176890">Kebijakan ini sudah tidak digunakan di M53 dan dihapus di M54, karena dukungan SPDY/3.1 telah dihapus.
 
@@ -1756,6 +1820,7 @@
 <translation id="4027608872760987929">Aktifkan penyedia penelusuran default</translation>
 <translation id="4039085364173654945">Mengontrol apakah sub-konten pihak ketiga pada halaman diizinkan untuk memunculkan kotak dialog HTTP Otorisasi Dasar. Biasanya, kebijakan ini dinonaktifkan sebagai pertahanan atas phishing. Jika tidak disetel, kebijakan ini akan dinonaktifkan dan sub-konten pihak ketiga tidak akan diizinkan untuk memunculkan kotak dialog HTTP Otorisasi Dasar.</translation>
 <translation id="4056910949759281379">Nonaktifkan protokol SPDY</translation>
+<translation id="4075864623710596000">Hostname yang ditentukan dalam daftar ini akan dikecualikan dari pemeriksaan kebijakan HSTS yang berpotensi mengupgrade permintaan dari http ke https. Hanya hostname berlabel tunggal yang diizinkan dalam kebijakan ini. Hostname harus dikanonikalisasi: semua IDN harus dikonversi ke format berlabel A, dan semua huruf ASCII harus berupa huruf kecil. Kebijakan ini hanya berlaku untuk hostname tertentu yang sudah ditentukan; tidak berlaku untuk subdomain dari nama yang ditentukan.</translation>
 <translation id="408029843066770167">Izinkan kueri ke layanan waktu Google</translation>
 <translation id="408076456549153854">Aktifkan login browser</translation>
 <translation id="40853027210512570">Mengganti aturan pemilihan printer default <ph name="PRODUCT_NAME" />.
@@ -1853,6 +1918,15 @@
 <translation id="4171331498167688968">Jika kebijakan ini ditetapkan ke false, maka software pihak ketiga akan diizinkan untuk memasukkan kode executable ke dalam proses Chrome. Jika kebijakan ini tidak ditetapkan atau ditetapkan ke true, maka software pihak ketiga akan dicegah memasukkan kode executable ke dalam proses Chrome.
 
       Terlepas dari nilai kebijakan ini, saat ini browser tidak akan mencegah software pihak ketiga memasukkan kode executable ke dalam proses Chrome pada perangkat yang tergabung dalam domain <ph name="MS_AD_NAME" />.</translation>
+<translation id="417956245902013347">Mengaktifkan fitur aksesibilitas sorotan tanda sisipan di layar login.
+
+          Jika kebijakan ini ditetapkan ke true, sorotan tanda sisipan akan selalu diaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan ke false, sorotan tanda sisipan akan selalu dinonaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, sorotan tanda sisipan mula-mula akan dinonaktifkan di layar login, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation>
 <translation id="4183229833636799228">Setelan <ph name="FLASH_PLUGIN_NAME" /> default</translation>
 <translation id="4192388905594723944">URL untuk memvalidasi token autentikasi klien akses jarak jauh</translation>
 <translation id="420007931282384740">Menyetel status default fitur aksesibilitas keyboard di layar di layar login.
@@ -2057,6 +2131,7 @@
 
           Jika kebijakan disetel ke false, <ph name="PRODUCT_NAME" /> akan dinonaktifkan.</translation>
 <translation id="4510923771103268849">Pengguna diizinkan untuk memiliki akses root ke penampung Crostini</translation>
+<translation id="4513262269532252501">Daftar domain dengan konten yang didownload yang perlu mendapat pemeriksaan pelanggaran aturan perlindungan data sensitif</translation>
 <translation id="4515404363392014383">Aktifkan Safe Browsing untuk sumber tepercaya</translation>
 <translation id="4517928394515633751">Memindai download pengguna dengan Safe Browsing</translation>
 <translation id="4518251772179446575">Tanyakan setiap kali situs ingin melacak lokasi fisik pengguna</translation>
@@ -2097,6 +2172,14 @@
           Jika kebijakan ini disetel ke true, tombol baris teratas keyboard akan membuat perintah tombol fungsi per default. Tombol penelusuran harus ditekan untuk mengembalikan perilakunya ke tombol media.
 
           Jika kebijakan ini disetel ke false atau dibiarkan tidak disetel, keyboard akan membuat perintah tombol media per default dan perintah tombol fungsi saat tombol penelusuran ditahan.</translation>
+<translation id="4636613705027089602">Kebijakan ini mengontrol permintaan penginstalan ekstensi <ph name="PRODUCT_NAME" /> yang memungkinkan pengguna mengirim permintaan persetujuan ke konsol Google Admin.
+
+      Saat kebijakan ini tidak ditetapkan atau ditetapkan ke nonaktif, permintaan penginstalan ekstensi tidak akan dibuat atau diupload.
+      Saat kebijakan ini ditetapkan ke aktif, permintaan penginstalan ekstensi akan dibuat dan diupload ke konsol Google Admin.
+
+      Permintaan penginstalan ekstensi akan dibuat saat pengguna mencoba menginstal ekstensi yang tidak diizinkan oleh <ph name="EXTENSION_INSTALL_WHITELIST" /> atau <ph name="EXTENSION_SETTINGS" />.
+
+      Kebijakan ini hanya berlaku saat perangkat didaftarkan dengan <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> dan <ph name="CLOUD_REPORTING_ENABLED" /> diaktifkan.</translation>
 <translation id="4639407427807680016">Nama hosting perpesanan asli untuk dikeluarkan dari daftar hitam</translation>
 <translation id="4650759511838826572">Nonaktifkan skema protokol URL</translation>
 <translation id="465099050592230505">URL toko web perusahaan (tidak digunakan)</translation>
@@ -2202,6 +2285,10 @@
 <translation id="4874982543810021567">Blokir WebUSB di situs ini</translation>
 <translation id="4876805738539874299">Versi SSL maksimum diaktifkan</translation>
 <translation id="4887274746092315609">Mengaktifkan halaman untuk pengubahan sandi dalam-sesi bagi pengguna SAML</translation>
+<translation id="4887863670424903990">Saat kebijakan ini ditetapkan ke aktif, <ph name="PRODUCT_NAME" /> akan melaporkan peristiwa tidak aman seperti penggunaan ulang sandi, download malware, interstisial, pelanggaran aturan perlindungan data sensitif, dll. kepada Google untuk dianalisis.  Beberapa peristiwa tidak aman seperti pelanggaran aturan perlindungan data sensitif bergantung pada kebijakan lain yang mengaktifkan pemeriksaan tersebut.
+
+      Jika kebijakan ini ditetapkan ke nonaktif atau tidak ditetapkan, <ph name="PRODUCT_NAME" /> tidak akan melaporkan peristiwa tidak aman.
+      </translation>
 <translation id="4897928009230106190">Menentukan parameter yang digunakan saat melakukan penelusuran saran dengan POST. Terdiri dari pasangan nama/nilai yang dipisahkan koma. Jika nilai  parameter template, seperti {searchTerms} pada contoh di atas, akan diganti dengan data istilah penelusuran nyata.
 
           Kebijakan ini bersifat opsional. Jika tidak disetel, sarankan permintaan saran penelusuran akan dikirim menggunakan metode GET.
@@ -2220,6 +2307,17 @@
 <translation id="4906194810004762807">Segarkan peringkat untuk Kebijakan Perangkat</translation>
 <translation id="4917385247580444890">Kuat</translation>
 <translation id="4923806312383904642">Izinkan WebDriver Mengganti Kebijakan yang Tidak Kompatibel</translation>
+<translation id="4929721861648439998">Mengaktifkan fitur aksesibilitas audio mono di layar login.
+
+          Dengan fitur ini, Anda dapat mengalihkan mode perangkat dari audio stereo default ke audio mono.
+
+          Jika kebijakan ini ditetapkan ke true, audio mono akan selalu diaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan ke false, audio mono akan selalu dinonaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, audio mono mula-mula akan dinonaktifkan di layar login, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation>
 <translation id="494613465159630803">Penerima Cast</translation>
 <translation id="494924690085329212">Reboot saat pengguna logout jika Android telah dimulai.</translation>
 <translation id="4962262530309732070">Jika kebijakan ini disetel ke true atau tidak dikonfigurasi, <ph name="PRODUCT_NAME" /> akan mengizinkan setelan Tambahkan Pengguna dari pengelola pengguna.
@@ -2411,6 +2509,15 @@
 <translation id="5272684451155669299">Jika disetel ke true, pengguna dapat menggunakan hardware pada perangkat Chrome untuk membuktikan identitasnya dari jarak jauh ke CA privasi melalui <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> dengan menggunakan <ph name="CHALLENGE_USER_KEY_FUNCTION" />.
 
           Jika disetel ke false, atau tidak disetel, panggilan ke API akan gagal yang disertai kode error.</translation>
+<translation id="5273744932022326215">Mengaktifkan fitur aksesibilitas sorotan kursor di layar login.
+
+          Jika kebijakan ini ditetapkan ke true, sorotan kursor akan selalu diaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan ke false, sorotan kursor akan selalu dinonaktifkan di layar login.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, sorotan kursor mula-mula akan dinonaktifkan di layar login, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation>
 <translation id="5277806246014825877">Aktifkan pengguna ini untuk menjalankan Crostini.
 
       Jika kebijakan ini ditetapkan ke false, Crostini tidak diaktifkan untuk pengguna.
@@ -2418,6 +2525,7 @@
       Ketiga kebijakan ini, VirtualMachinesAllowed, CrostiniAllowed, dan DeviceUnaffiliatedCrostiniAllowed harus ditetapkan ke true jika ketiganya berlaku agar Crostini diizinkan berjalan.
       Jika diubah ke false, kebijakan ini berlaku untuk memulai container Crostini baru, namun tidak mematikan container yang sedang berjalan.</translation>
 <translation id="5283457834853986457">Nonaktifkan pencari plugin (tidak digunakan lagi)</translation>
+<translation id="5285315763984334157">Memblokir download berbahaya</translation>
 <translation id="5288772341821359899">Jika kebijakan disetel, rentang port UDP yang digunakan oleh WebRTC dibatasi ke interval port yang ditentukan (termasuk titik akhir).
 
       Jika kebijakan tidak disetel, atau jika disetel menjadi string kosong maupun rentang port yang tidak valid, WebRTC diizinkan untuk menggunakan port UDP lokal mana pun yang tersedia.</translation>
@@ -2462,6 +2570,17 @@
 
           Catatan: <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" /> akan mengganti kebijakan ini jika kebijakan tersebut ditentukan.</translation>
 <translation id="538108065117008131">Izinkan <ph name="PRODUCT_FRAME_NAME" /> menangani jenis konten berikut.</translation>
+<translation id="538768040137709073">Mengaktifkan fitur Papan Klip Bersama yang memungkinkan pengguna mengirim pesan teks antara Desktop Chrome dan perangkat Android saat Sinkronisasi diaktifkan dan pengguna Login.
+
+          Jika kebijakan ini ditetapkan ke true, kemampuan mengirim pesan teks antarperangkat bagi pengguna Chrome akan diaktifkan.
+
+          Jika kebijakan ini ditetapkan ke false, kemampuan mengirim pesan teks antarperangkat bagi pengguna Chrome akan dinonaktifkan.
+
+          Jika kebijakan ini ditetapkan, pengguna tidak dapat mengubah atau menggantinya.
+
+          Jika kebijakan ini tidak ditetapkan, fitur papan klip bersama akan diaktifkan secara default.
+
+          Penetapan kebijakan di semua platform yang diinginkan bergantung pada admin. Sebaiknya tetapkan kebijakan ini ke satu nilai di semua platform.</translation>
 <translation id="5391388690191341203">Akun lokal perangkat untuk login otomatis</translation>
 <translation id="5392172595902933844">Informasi tentang status Android dikirim kembali ke
       server.
@@ -2543,7 +2662,6 @@
 <translation id="5447306928176905178">Aktifkan pelaporan info memori (JS heap size) ke halaman (dipensiunkan)</translation>
 <translation id="5457065417344056871">Mengaktifkan mode tamu dalam browser</translation>
 <translation id="5457924070961220141">Memungkinkan Anda mengonfigurasi perender HTML default saat <ph name="PRODUCT_FRAME_NAME" /> dipasang. Setelan default yang digunakan ketika kebijakan ini tidak disetel adalah mengizinkan browser host melakukan rendering, tetapi Anda dapat menimpanya secara opsional dan membiarkan <ph name="PRODUCT_FRAME_NAME" /> merender halaman HTML secara default.</translation>
-<translation id="5458584148602890023">Mengaktifkan pergeseran puncak daya</translation>
 <translation id="5464816904705580310">Mengonfigurasi setelan untuk pengguna yang dikelola.</translation>
 <translation id="546726650689747237">Penundaan peredupan layar saat menggunakan daya AC</translation>
 <translation id="5469143988693423708">Pengguna diaktifkan untuk menjalankan Crostini</translation>
@@ -2702,6 +2820,7 @@
 
           Sebelum versi 75, penggunaan beberapa ID ekstensi yang dipisahkan koma tidak didukung dan akan dilewati. Bagian lainnya dari kebijakan ini akan tetap berlaku.</translation>
 <translation id="5645779841392247734">Izinkan cookie di situs ini</translation>
+<translation id="5656177735561364047">Mengaktifkan Fitur Papan Klip Bersama</translation>
 <translation id="5666457529647159548">Mengizinkan pengguna mengelola sertifikat klien yang terinstal.</translation>
 <translation id="5689430183304951538">Ukuran halaman pencetakan default</translation>
 <translation id="5693469654327063861">Izinkan migrasi data</translation>
@@ -2743,6 +2862,13 @@
       Jika kebijakan tidak disetel, atau disetel ke false, <ph name="PRODUCT_NAME" /> akan menggunakan setelan pemeriksaan pembatalan online yang ada.</translation>
 <translation id="5728154254076636808">Mengaktifkan pembuatan salinan roaming untuk data profil <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Mengimpor data formulir isi-otomatis dari browser default saat pertama kali dijalankan</translation>
+<translation id="574098933844699859">Menentukan apakah informasi sistem (misalnya, versi Chrome OS, nomor seri
+      perangkat) selalu ditampilkan (atau disembunyikan) di layar login atau tidak.
+
+      Jika kebijakan ditetapkan ke true, informasi sistem akan ditampilkan secara otomatis.
+      Jika kebijakan ditetapkan ke false, informasi sistem akan disembunyikan secara otomatis.
+      Jika kebijakan tidak ditetapkan, perilaku default (yang ditampilkan untuk Canary/Saluran dev)
+      akan berlaku. Pengguna dapat beralih visibilitas menurut operasi tertentu (misalnya, Alt-V).</translation>
 <translation id="5741810844420698449">Jika ditetapkan, kebijakan ini akan menentukan tindakan yang diambil <ph name="PRODUCT_OS_NAME" /> saat pengguna menutup penutup perangkat.
 
           Jika tidak ditetapkan, tindakan default akan diambil, yaitu suspend (tangguhkan).
@@ -2861,6 +2987,16 @@
 <translation id="6076099373507468537">Menjelaskan daftar perangkat USB yang diizinkan untuk dilepas dari driver kernelnya, agar dapat langsung digunakan melalui API chrome.usb dalam aplikasi web. Entri berupa pasangan Pengenal Vendor USB dan Pengenal Produk untuk mengidentifikasi hardware tertentu.
 
       Jika kebijakan ini tidak dikonfigurasi, daftar perangkat USB yang dapat dilepas akan kosong.</translation>
+<translation id="607726879389885889">Kebijakan ini mengontrol perilaku <ph name="PRODUCT_NAME" /> saat pengguna mencoba mengupload atau mendownload file yang berukuran terlalu besar untuk dikirim agar malware atau perlindungan data sensitif dapat dipindai (50 MB atau lebih besar).  Batasan ini hanya berlaku untuk file yang akan memerlukan pemindaian seperti ditentukan oleh <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" />, dan kebijakan yang mengontrol daftar domain yang dapat diperiksa.
+
+      Jika kebijakan ini tidak ditetapkan atau ditetapkan ke 'Tidak ada', <ph name="PRODUCT_NAME" /> akan mengizinkan pengguna mengupload atau mendownload file dalam berbagai ukuran.
+
+      Jika kebijakan ini ditetapkan ke 'Blokir download berukuran besar', file yang terlalu besar untuk dipindai akan dihapus sebelum tersedia untuk pengguna.  Karena ukuran tidak selalu dapat ditentukan sebelum mendownload, <ph name="PRODUCT_NAME" /> dapat mendownload file, kemudian menentukan apakah file tersebut melebihi batas ukuran yang diizinkan.
+
+      Jika kebijakan ini ditetapkan ke 'Blokir upload berukuran besar', file yang terlalu besar untuk dipindai tidak dapat diupload.
+
+      Jika kebijakan ini ditetapkan ke 'Blokir upload dan download berukuran besar', <ph name="PRODUCT_NAME" /> akan berperilaku sesuai dengan aturan yang dijelaskan pada 'Blokir download berukuran besar' dan 'Blokir upload berukuran besar'.
+      </translation>
 <translation id="6083631234867522991">Windows (klien Windows):</translation>
 <translation id="608788685013546076">Menetapkan ambang batas pergeseran puncak daya baterai dalam persen</translation>
 <translation id="6089679180657323464">Mengontrol setelan pengontrol diagnostik dan telemetri wilco.</translation>
@@ -2989,6 +3125,7 @@
 <translation id="637934607141010488">Melaporkan daftar pengguna perangkat yang saat ini masuk.
 
       Jika kebijakan disetel ke false, pengguna tidak akan dilaporkan.</translation>
+<translation id="638668187106406971">Memeriksa pelanggaran aturan perlindungan data sensitif pada file yang diupload</translation>
 <translation id="6394350458541421998">Kebijakan ini tidak lagi digunakan sejak <ph name="PRODUCT_OS_NAME" /> versi 29. Gunakan kebijakan PresentationScreenDimDelayScale sebagai gantinya.</translation>
 <translation id="6401669939808766804">Keluarkan pengguna</translation>
 <translation id="6406448383934634215">Jika 'Buka daftar URL' dipilih sebagai tindakan saat memulai, Anda dapat menentukan daftar URL yang dibuka. Jika dibiarkan tidak disetel, tidak ada URL yang akan dibuka saat memulai.
@@ -3236,6 +3373,7 @@
       </translation>
 <translation id="6922884955650325312">Blokir plugin <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="6923366716660828830">Menentukan nama penyedia penelusuran default. Jika dibiarkan kosong atau tidak disetel, nama host yang ditentukan oleh URL penelusuran akan digunakan. Kebijakan ini hanya dipertimbangkan jika kebijakan 'DefaultSearchProviderEnabled' diaktifkan.</translation>
+<translation id="6923731550900440989">Mengaktifkan sorotan tanda sisipan di layar login</translation>
 <translation id="6924223708804692571">Menonaktifkan secara paksa bahasa pemeriksaan ejaan. Bahasa yang tidak dikenal dalam daftar tersebut akan diabaikan.
 
       Jika kebijakan ini diaktifkan, fitur periksa ejaan akan dinonaktifkan untuk bahasa yang ditentukan. Pengguna masih dapat mengaktifkan atau menonaktifkan fitur periksa ejaan untuk bahasa yang tidak tercantum dalam daftar.
@@ -3603,6 +3741,7 @@
 <translation id="7433714841194914373">Aktifkan Instan</translation>
 <translation id="7434202861148928348">Mengonfigurasi nama domain wajib untuk klien akses jarak jauh</translation>
 <translation id="7443616896860707393">Permintaan Autentikasi Dasar HTTP lintas asal</translation>
+<translation id="7448430478749155471">Mengaktifkan fitur klik untuk diucapkan di layar login</translation>
 <translation id="7454519673779830548">Menambahkan akun Kerberos yang telah diisi. Jika kredensial Kerberos cocok dengan kredensial login, akun dapat dikonfigurasi untuk menggunakan kembali kredensial login dengan menentukan '${{LOGIN_EMAIL}}' dan '${{PASSWORD}}', masing-masing untuk principal dan sandi, sehingga tiket Kerberos dapat diambil secara otomatis kecuali autentikasi 2 langkah dikonfigurasi. Pengguna tidak dapat memodifikasi akun yang ditambahkan dengan kebijakan ini.
 
           Jika kebijakan ini diaktifkan, daftar akun yang ditentukan oleh kebijakan akan ditambahkan ke Setelan akun Kerberos.
@@ -3872,6 +4011,10 @@
 <translation id="7974114691960514888">Kebijakan ini tidak lagi didukung. Mengaktifkan penggunaan STUN dan server relay saat menyambungkan ke klien jarak jauh. Jika setelan ini diaktifkan, maka komputer ini dapat menemukan dan tersambung ke komputer host jarak jauh bahkan jika dipisahkan oleh firewall. Jika setelan ini dinonaktifkan dan sambungan UDP keluar difilter oleh firewall, maka komputer ini hanya dapat tersambung ke komputer host dalam jaringan lokal.</translation>
 <translation id="7976157349247117979">Nama tujuan <ph name="PRODUCT_NAME" /></translation>
 <translation id="7980227303582973781">Tidak ada batasan khusus</translation>
+<translation id="7983900606645681371">Daftar domain dengan file yang diupload, data yang ditempel dari papan klip, atau data yang ditarik lalu dilepaskan, yang tidak perlu mendapat pemeriksaan pelanggaran aturan perlindungan data sensitif.  Kebijakan ini hanya digunakan jika <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> ditetapkan ke aktif.
+
+      Jika kebijakan ini tidak ditetapkan atau ditetapkan ke daftar domain kosong, semua konten mendapat pemeriksaan pelanggaran aturan perlindungan data sensitif.
+      </translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="798856998567564266">Jika setelan ini diaktifkan, bookmark dapat ditambahkan, dihapus, atau diubah. Ini juga merupakan tindakan default jika kebijakan ini tidak ditetapkan.
 
@@ -3885,6 +4028,7 @@
       Jika kebijakan ini tidak ditetapkan pada perangkat terkelola, perangkat tidak diizinkan untuk menjalankan mesin virtual.
       Perangkat tidak terkelola diizinkan untuk menjalankan mesin virtual.</translation>
 <translation id="8001701200415781021">Batasi akun Google mana yang diizinkan untuk disetel sebagai akun utama browser di <ph name="PRODUCT_NAME" /></translation>
+<translation id="8003853057959146975">Mengirimkan file untuk pemeriksaan pelanggaran aturan perlindungan data sensitif</translation>
 <translation id="8009554972280451023">Jika Anda mengaktifkan setelan ini, setelan yang disimpan di profil <ph name="PRODUCT_NAME" /> seperti bookmark, data IsiOtomatis, sandi, dan informasi lainnya juga akan ditulis ke file yang disimpan di folder profil pengguna Roaming atau lokasi yang ditentukan oleh Administrator melalui kebijakan <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. Mengaktifkan kebijakan ini akan menonaktifkan sinkronisasi cloud. Jika kebijakan ini dinonaktifkan atau tidak disetel, hanya profil lokal reguler yang akan digunakan. Kebijakan <ph name="SYNC_DISABLED_POLICY_NAME" /> menonaktifkan semua sinkronisasi data, menggantikan <ph name="ROAMING_PROFILE_SUPPORT_ENABLED_POLICY_NAME" />.</translation>
 <translation id="802147957407376460">Putar layar sebesar 0 derajat</translation>
 <translation id="8033913082323846868">Kebijakan ini tidak digunakan lagi di M70. Sebagai gantinya, gunakan AutofillAddressEnabled dan AutofillCreditCardEnabled.
@@ -4349,6 +4493,7 @@
           Cara yang disarankan untuk mengunci layar saat menganggur adalah dengan mengaktifkan penangguhan penguncian layar dan meminta <ph name="PRODUCT_OS_NAME" /> menangguhkan setelah masa menganggur ditunda. Kebijakan ini seharusnya hanya digunakan saat penguncian layar harus berlangsung selama jumlah waktu signifikan yang lebih cepat daripada ditangguhkan atau saat penundaan pada masa menganggur tidak diinginkan sama sekali.
 
           Nilai kebijakan ini harus ditentukan dalam milidetik. Nilai dijepit menjadi lebih sedikit dari penundaan waktu menganggur.</translation>
+<translation id="8911348623012274122">Menetapkan batas memori untuk instance Chrome</translation>
 <translation id="891435090623616439">dienkode sebagai string JSON, untuk detailnya lihat <ph name="COMPLEX_POLICIES_URL" /></translation>
 <translation id="8917070657147922192">Izinkan pengguna mengelola sertifikat CA yang terinstal.</translation>
 <translation id="8934944553121392674">Mengontrol printer mana dari <ph name="DEVICE_PRINTERS_POLICY" /> yang tersedia bagi pengguna.
@@ -4372,6 +4517,7 @@
 <translation id="8942616385591203339">Kebijakan ini mengontrol apakah Izin Sinkronisasi dapat ditampilkan ke pengguna saat login pertama kali. Kebijakan ini harus disetel ke false jika Izin Sinkronisasi tidak diperlukan bagi pengguna.
       Jika disetel ke false, Izin Sinkronisasi tidak akan ditampilkan.
       Jika disetel ke true atau tidak disetel, Izin Sinkronisasi dapat ditampilkan.</translation>
+<translation id="8943934315109955032">Tidak memeriksa pelanggaran aturan perlindungan data sensitif</translation>
 <translation id="894510252300143386">Mengonfigurasi setelan pengelolaan ekstensi untuk <ph name="PRODUCT_NAME" />.
 
           Kebijakan ini mengontrol beberapa setelan, termasuk setelan yang dikontrol oleh semua kebijakan terkait ekstensi yang sudah ada. Kebijakan ini akan mengganti kebijakan yang lama jika keduanya tidak ditetapkan.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 6667322d..7d3222f 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -162,6 +162,7 @@
 <translation id="1219695476179627719">Consente di specificare se il dispositivo deve eseguire il rollback alla versione impostata da <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> nel caso in cui sia già in esecuzione una versione successiva.
 
       L'impostazione predefinita è RollbackDisabled.</translation>
+<translation id="1220047093962987554">Verifica lo stato degli URL visitati in tempo reale con Navigazione sicura</translation>
 <translation id="1221359380862872747">Carica gli URL specificati all'accesso demo</translation>
 <translation id="1223789468190631420">Stato attivazione Navigazione sicura per origini attendibili</translation>
 <translation id="122899932962115297">Una whitelist che consente di stabilire quali modalità di sblocco rapido possono essere configurate e usate dagli utenti per sbloccare la schermata di blocco.
@@ -182,11 +183,14 @@
 <translation id="1243570869342663665">Controlla il filtro dei contenuti per adulti di SafeSites.</translation>
 <translation id="1257550411839719984">Imposta directory di download predefinita</translation>
 <translation id="1265053460044691532">Limita il tempo per cui un utente autenticato tramite SAML può eseguire l'accesso offline</translation>
+<translation id="127264587838521316">Attiva le richieste di installazione delle estensioni di<ph name="PRODUCT_NAME" /></translation>
 <translation id="1290634681382861275">Consente di gestire varie impostazioni, tra cui USB, Bluetooth, aggiornamento delle norme, modalità sviluppatore e altre ancora.</translation>
 <translation id="1291880496936992484">Avviso. RC4 sarà rimosso completamente da <ph name="PRODUCT_NAME" /> dopo la versione 52 (nel periodo di settembre 2016), dopodiché questa norma non sarà più attiva.
 
       Se la norma non viene impostata o se viene impostata su false, i pacchetti di crittografia RC4 in TLS non saranno attivati. In alternativa, la norma può essere impostata su true per mantenere la compatibilità con un server obsoleto. Si tratta di una soluzione temporanea ed è necessario configurare nuovamente il server.</translation>
+<translation id="1295737447968372331">Attiva la dettatura sulla schermata di accesso</translation>
 <translation id="1297182715641689552">Utilizza uno script proxy .pac</translation>
+<translation id="1297961932043741908">Imposta un limite nei megabyte di memoria che una istanza singola di Chrome può usare.</translation>
 <translation id="1304973015437969093">ID app/estensioni e URL di aggiornamento da installare automaticamente</translation>
 <translation id="1307454923744766368">Origini o schemi di nomi host a cui non dovrebbero essere applicate limitazioni previste per le origini non sicure.</translation>
 <translation id="1312799700549720683">Consente di gestire le impostazioni di visualizzazione.</translation>
@@ -572,6 +576,7 @@
       Se attivi o disattivi questa impostazione, gli utenti non potranno modificarla o sostituirla in <ph name="PRODUCT_NAME" />.
 
       Se questa impostazione non è impostata, l'utente può decidere se usare o meno tale funzione.</translation>
+<translation id="1999000620918508488">Forza la schermata di accesso a visualizzare o nascondere le informazioni di sistema.</translation>
 <translation id="2006530844219044261">Gestione dell'alimentazione</translation>
 <translation id="2014757022750736514">Consente di stabilire il comportamento della schermata di accesso, da cui gli utenti possono accedere ai propri account. Le impostazioni consentono di decidere chi può accedere, che tipi di account sono consentiti, quali metodi di autenticazione devono essere usati. Sono disponibili anche impostazioni generali relative ad accessibilità, metodo di immissione e lingue.</translation>
 <translation id="201557587962247231">Frequenza dei caricamenti del rapporto sullo stato del dispositivo</translation>
@@ -587,12 +592,18 @@
 <translation id="2024476116966025075">Configura il nome di dominio richiesto per i client di accesso remoto</translation>
 <translation id="2030905906517501646">Parola chiave del provider di ricerca predefinito</translation>
 <translation id="203096360153626918">Questa norma non ha effetto sulle app Android, che saranno in grado di entrare in modalità a schermo intero anche se la norma viene impostata su <ph name="FALSE" />.</translation>
+<translation id="2043749682619281558">Attiva l'evidenziazione del cursore sulla schermata di accesso</translation>
 <translation id="2043770014371753404">Stampanti aziendali disattivate</translation>
 <translation id="2050629715135525072">Controlla la capacità di un utente connesso a un host di accesso remoto di trasferire file dal client all'host e viceversa. Questa norma non si applica alle connessioni di assistenza remota, le quali non supportano il trasferimento di file.
 
           Se questa impostazione è disattivata, il trasferimento di file non sarà concesso. Se questa impostazione è attivata o non configurata, il trasferimento di file sarà concesso.</translation>
 <translation id="2057317273526988987">Consenti l'accesso a un elenco di URL</translation>
 <translation id="2061810934846663491">Configura i nomi di dominio richiesti per gli host di accesso remoto</translation>
+<translation id="2063663607822994541">Consente di configurare la quantità di memoria che una singola istanza di <ph name="PRODUCT_NAME" /> può utilizzare prima che le schede vengano ignorate per risparmiare memoria, ossia la memoria utilizzata dalla scheda verrà liberata e la scheda dovrà essere ricaricata quando si passerà a tale scheda.
+
+      Se il criterio viene impostato, il browser inizierà a ignorare le schede per risparmiare memoria una volta superato il limite. Non vi è, tuttavia, alcuna garanzia che il browser venga sempre eseguito al di sotto di tale limite. Qualsiasi valore inferiore a 2048 verrà arrotondato per eccesso a 2048.
+
+      Se questo criterio non viene impostato, il browser farà dei tentativi per risparmiare memoria solo una volta rilevato che la memoria fisica del computer è in esaurimento.</translation>
 <translation id="206623763829450685">Consente di specificare gli schemi di autenticazione HTTP supportati da <ph name="PRODUCT_NAME" />.
 
           I valori possibili sono "basic", "digest", "ntlm" e "negotiate". Separa i valori con la virgola.
@@ -603,6 +614,7 @@
 <translation id="2077129598763517140">Usa accelerazione hardware quando disponibile</translation>
 <translation id="2077273864382355561">Ritardo disattivazione schermo in caso di utilizzo della batteria</translation>
 <translation id="2082205219176343977">Configura la versione minima di Chrome consentita per il dispositivo.</translation>
+<translation id="2084647819368766928">Elenco di domini per i quali non è necessario verificare eventuali violazioni delle regole relative alla protezione dei dati sensibili dei contenuti caricati.</translation>
 <translation id="209586405398070749">Canale stabile</translation>
 <translation id="2098658257603918882">Attiva rapporti sull'utilizzo e sui dati relativi agli arresti anomali</translation>
 <translation id="2104418465060359056">Segnala i dati delle estensioni e dei plug-in</translation>
@@ -758,6 +770,16 @@
       Se questa impostazione è attivata, la cronologia di navigazione non viene salvata. Con questa impostazione viene disattivata anche la sincronizzazione delle schede.
 
       Se questa impostazione è disattivata o non viene impostata, la cronologia di navigazione viene salvata.</translation>
+<translation id="2423038190900972331">Consente il controllo su come <ph name="PRODUCT_NAME" /> verifica i dati che vengono caricati, scaricati, incollati dagli appunti o trascinati per eventuali violazioni delle regole relative alla protezione dei dati sensibili.
+
+      Se questo criterio non è impostato o è impostato su "Nessuno", <ph name="PRODUCT_NAME" /> non verificherà nessun dato per eventuali violazioni delle regole relative alla protezione dei dati sensibili.
+
+      Se questo criterio è impostato su "Verifica download" e l'utente tenta di scaricare un file da un URL incluso nel criterio <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> verificherà la conformità dei dati scaricati rispetto alle regole aziendali.
+
+      Se questo criterio è impostato su "Verifica caricamenti" e l'utente tenta di caricare un file in un dominio che non è incluso nel criterio <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> verificherà la conformità del file caricato, dei dati copiati dagli appunti o dei dati trascinati rispetto alle regole aziendali.
+
+      Se questo criterio viene impostato su "Verifica caricamenti e download", <ph name="PRODUCT_NAME" /> si comporta secondo le regole descritte nelle impostazioni "Verifica download" e "Verifica caricamenti".
+      </translation>
 <translation id="2426782419955104525">Consente di attivare la funzione Instant di <ph name="PRODUCT_NAME" /> e di impedire agli utenti di modificare l'impostazione.
 
       Se l'impostazione viene attivata, la funzione Instant di <ph name="PRODUCT_NAME" /> viene attivata.
@@ -898,6 +920,10 @@
       Se questa norma viene impostata, l'utente non potrà modificarla o eseguirne l'override.
 
       Dopo avere attivato il Bluetooth, l'utente deve uscire e accedere di nuovo per applicare le modifiche (questa operazione non è necessaria se il Bluetooth viene disattivato).</translation>
+<translation id="2570498106495954914">Elenco di domini per i quali è necessario verificare eventuali violazioni delle regole relative alla protezione dei dati sensibili dei contenuti scaricati prima che vengano salvati nello spazio di archiviazione locale.  Questo criterio viene utilizzato solo se il criterio <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> è attivato.
+
+      Se questo criterio non viene impostato o viene impostato su un elenco di domini vuoto, non verranno verificate eventuali violazioni delle regole relative alla protezione dei dati sensibili di nessun contenuto scaricato.
+      </translation>
 <translation id="2571066091915960923">Consente di attivare o disattivare il proxy di compressione dei dati e di impedire agli utenti di cambiare questa impostazione.
 
 Se attivi o disattivi questa impostazione, gli utenti non potranno cambiarla o ignorarla.
@@ -961,6 +987,23 @@
 <translation id="268577405881275241">Attiva la funzione proxy di compressione dei dati</translation>
 <translation id="2693108589792503178">Configura l'URL di modifica della password.</translation>
 <translation id="2694143893026486692">Lente d'ingrandimento ancorata attivata</translation>
+<translation id="2694188263972877487">Consente di configurare il tipo di download che <ph name="PRODUCT_NAME" /> bloccherà completamente senza che gli utenti possano ignorare la decisione di sicurezza.
+
+      Se imposti questo criterio, <ph name="PRODUCT_NAME" /> impedirà tipi di download specifici e non consentirà all'utente di aggirare gli avvisi di sicurezza.
+
+      Se viene selezionata l'opzione "Blocca download pericolosi", tutti i download sono consentiti, tranne quelli per cui vengono visualizzati avvisi di Navigazione sicura.
+
+      Se viene selezionata l'opzione "Blocca download potenzialmente dannosi", tutti i download sono consentiti, tranne quelli per cui vengono visualizzati avvisi di Navigazione sicura o di download potenzialmente dannosi.
+
+      Se viene selezionata l'opzione "Blocca tutti i download", tutti i download vengono bloccati.
+
+      Se viene selezionata l'opzione "Blocca i download dannosi", tutti i download sono consentiti tranne quelli che secondo la valutazione di Navigazione sicura sono con molta probabilità malware. A differenza dei download pericolosi, questa opzione non prende in considerazione il tipo di file bensì l'host.
+
+      Se questo criterio non viene impostato o viene scelta l'opzione "Senza particolari limitazioni", i download saranno sottoposti alle normali limitazioni di sicurezza in base ai risultati dell'analisi di Navigazione sicura.
+
+      Tieni presente che tali limitazioni vengono applicate ai download attivati dai contenuti delle pagine web, nonché all'opzione del menu contestuale "Scarica link...". Tali limitazioni non vengono applicate al salvataggio o al download della pagina visualizzata né all'opzione di stampa relativa al salvataggio in PDF.
+
+      Visita il sito https://developers.google.com/safe-browsing per avere ulteriori informazioni sulla funzione Navigazione sicura.</translation>
 <translation id="2706708761587205154">Consenti la stampa solo con PIN</translation>
 <translation id="2710534340210290498">Se la norma viene impostata su false, gli utenti non potranno bloccare lo schermo (sarà possibile solo la disconnessione dalla sessione utente). Se l'impostazione viene impostata su true o non viene configurata, gli utenti autenticati mediante password potranno bloccare lo schermo.</translation>
 <translation id="2731627323327011390">Disattiva l'utilizzo dei certificati <ph name="PRODUCT_OS_NAME" /> per le app ARC</translation>
@@ -1397,6 +1440,15 @@
 Se questa norma viene impostata su False o non viene impostata, i ritardi di gestione dell'alimentazione e il limite di durata delle sessioni iniziano immediatamente all'avvio della sessione.</translation>
 <translation id="3478024346823118645">Cancella dati utente all'uscita</translation>
 <translation id="3480961938508521469">Carica completamente la batteria con la modalità standard.</translation>
+<translation id="348110646151632565">Consente di attivare la funzione di accessibilità Seleziona per ascoltare sulla schermata di accesso.
+
+          Se questo criterio è impostato su true, Seleziona per ascoltare sarà sempre attivato nella schermata di accesso.
+
+          Se questo criterio è impostato su false, Seleziona per ascoltare sarà sempre disattivato nella schermata di accesso.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, inizialmente Seleziona per ascoltare è disattivato, ma l'utente può attivarla in qualsiasi momento.</translation>
 <translation id="3483729306380590354">Consente di impostare il valore personalizzato espresso in percentuale raggiunto il quale viene avviata la ricarica della batteria.
 
           La batteria inizia a caricarsi quando raggiunge il valore di avvio della ricarica personalizzato.
@@ -1434,6 +1486,7 @@
 
 Questa norma viene rispettata soltanto se viene attivata la norma "DefaultSearchProviderEnabled".</translation>
 <translation id="350797926066071931">Abilita traduzione</translation>
+<translation id="3508047333410537654">Attiva l'audio in formato mono sulla schermata di accesso</translation>
 <translation id="3513655665999652754">Quirks Server fornisce file di configurazione specifici per l'hardware, ad esempio
       profili ICC per regolare la calibrazione del monitor.
 
@@ -1484,6 +1537,7 @@
 <translation id="3591527072193107424">Attiva la funzionalità Supporto dei browser precedenti.</translation>
 <translation id="3591584750136265240">Configura il comportamento di autenticazione dell'accesso</translation>
 <translation id="3617743504695003280">Consente a una pagina di fare richieste XHR sincrone durante l'uscita dalla pagina.</translation>
+<translation id="3624515566460517364">Verifica eventuali violazioni delle regole relative alla protezione dei dati sensibili di caricamenti e download</translation>
 <translation id="3627678165642179114">Attiva o disattiva il servizio web di controllo ortografico</translation>
 <translation id="3628480121685794414">Attiva stampa su un lato</translation>
 <translation id="3631099945620529777">Se la norma è impostata su false, il pulsante "Termina processo" in Task Manager viene disattivato.
@@ -1569,6 +1623,15 @@
       Se la norma non viene impostata, viene utilizzata la directory di download predefinita e l'utente può modificarla.</translation>
 <translation id="3805659594028420438">Attiva estensione di certificati associati al dominio TLS (obsoleta)</translation>
 <translation id="3808945828600697669">Specifica un elenco dei plug-in disattivati</translation>
+<translation id="3810642039169532482">Consente di attivare la funzioni di accessibilità di dettatura nella schermata di accesso.
+
+          Se questo criterio è impostato su true, la dettatura sarà sempre attivata nella schermata di accesso.
+
+          Se questo criterio è impostato su false, la dettatura sarà sempre disattivata nella schermata di accesso.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, inizialmente la dettatura è disattivata, ma l'utente può attivarla in qualsiasi momento.</translation>
 <translation id="3811562426301733860">Consenti annunci su tutti i siti</translation>
 <translation id="3816312845600780067">Attivazione scorciatoia da tastiera bailout per accesso automatico</translation>
 <translation id="3820526221169548563">Attiva la funzione di accessibilità della tastiera sullo schermo.
@@ -1633,6 +1696,7 @@
       Ogni voce dell'elenco contiene un dizionario che deve includere l'ID dell'estensione nel campo "extension-id" e il relativo URL di aggiornamento nel campo "update-url".</translation>
 <translation id="3874773863217952418">Attiva Tocca per cercare</translation>
 <translation id="3877517141460819966">Modalità di autenticazione a due fattori integrata</translation>
+<translation id="3879196885908353077">Verifica eventuali violazioni delle regole relative alla protezione dei dati sensibili dei download</translation>
 <translation id="3879208481373875102">Configura l'elenco delle app web con installazione forzata</translation>
 <translation id="388237772682176890">Questa norma è stata ritirata in M53 e rimossa in M54 perché è stato rimosso il supporto di SPDY/3.1.
 
@@ -1734,6 +1798,7 @@
 <translation id="4027608872760987929">Attiva il provider di ricerca predefinito</translation>
 <translation id="4039085364173654945">Consente di stabilire se per i contenuti secondari di terze parti presenti in una pagina è consentita la visualizzazione di una finestra di dialogo Autorizzazione di base HTTP. Generalmente questa norma non è attiva per tutela dal phishing. Se questa norma non viene impostata, l'impostazione verrà disattivata e per i contenuti secondari di terze parti non potrà essere visualizzata una finestra di dialogo Autorizzazione di base HTTP.</translation>
 <translation id="4056910949759281379">Disabilita protocollo SPDY</translation>
+<translation id="4075864623710596000">I nomi host specificati in questo elenco saranno esenti dalla verifica dei criteri HSTS che potrebbero eseguire l'upgrade delle richieste da http a https. Solo i nomi host con etichetta singola sono consentiti in questo criterio. I nomi host devono essere canonicalizzati, ogni IDN deve essere convertito nel relativo formato A-label e tutte le lettere ASCII devono essere minuscole. Questo criterio si applica soltanto ai nomi host specificati e non ai relativi sottodomini.</translation>
 <translation id="408029843066770167">Consenti query a un servizio orario di Google</translation>
 <translation id="408076456549153854">Attiva accesso al browser</translation>
 <translation id="40853027210512570">Consente di sostituire le regole di selezione della stampante predefinita di <ph name="PRODUCT_NAME" />.
@@ -1831,6 +1896,15 @@
 <translation id="4171331498167688968">Se il criterio viene impostato su false, i programmi software di terze parti potranno inserire codice eseguibile nei processi di Chrome. Se il criterio non viene impostato o viene impostato su true, i programmi software di terze parti non potranno inserire codice eseguibile nei processi di Chrome.
 
       A prescindere dal valore di questo criterio, il browser al momento non impedisce a software di terze parti di inserire codice eseguibile nei propri processi su una macchina collegata a un dominio <ph name="MS_AD_NAME" />.</translation>
+<translation id="417956245902013347">Consente di attivare la funzione di accessibilità di evidenziazione del cursore di testo.
+
+          Se questo criterio è impostato su true, l'evidenziazione del cursore di testo sarà sempre attivata sulla schermata di avvio.
+
+          Se questo criterio è impostato su false, l'evidenziazione del cursore di testo sarà sempre disattivata sulla schermata di avvio.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, inizialmente l'evidenziazione del cursore di testo è disattivata, ma l'utente può attivarla in qualsiasi momento.</translation>
 <translation id="4183229833636799228">Impostazione predefinita per il plug-in <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="4192388905594723944">URL per la convalida del token di autenticazione del client di accesso remoto</translation>
 <translation id="420007931282384740">Consente di impostare lo stato predefinito della funzione di accessibilità della tastiera sullo schermo nella schermata di accesso.
@@ -2031,6 +2105,7 @@
 
           Se questa norma viene impostata su false, <ph name="PRODUCT_NAME" /> sarà disattivato.</translation>
 <translation id="4510923771103268849">L'utente può avere accesso root ai contenitori Crostini</translation>
+<translation id="4513262269532252501">Elenco di domini per i quali è necessario verificare eventuali violazioni delle regole relative alla protezione dei dati sensibili dei contenuti scaricati</translation>
 <translation id="4515404363392014383">Attiva Navigazione sicura per le origini attendibili</translation>
 <translation id="4517928394515633751">Analizza i download degli utenti tramite Navigazione sicura</translation>
 <translation id="4518251772179446575">Chiedi ogni volta che un sito desidera monitorare la posizione fisica degli utenti</translation>
@@ -2069,6 +2144,14 @@
           Se questa norma è impostata su "true", i tasti della fila superiore della tastiera riprodurranno i comandi dei tasti funzione per impostazione predefinita. Per ripristinare il comportamento dei tasti multimediali, è necessario premere il tasto per la ricerca.
 
           Se questa norma è impostata su "false" o non viene impostata, la tastiera riprodurrà i comandi dei tasti multimediali per impostazione predefinita e i comandi dei tasti funzione quando viene premuto il tasto per la ricerca.</translation>
+<translation id="4636613705027089602">Questo criterio controlla le richieste di installazione delle estensioni di <ph name="PRODUCT_NAME" /> permettendo l'invio di richieste di approvazione da parte degli utenti alla Console di amministrazione Google.
+
+      Se il criterio non è impostato o è impostato su Disattivato, le richieste di installazione delle estensioni non vengono create né caricate.
+      Se il criterio è impostato su Attivato, le richieste di installazione delle estensioni vengono create e caricate sulla Console di amministrazione Google
+
+      Le richieste di installazione delle estensioni vengono create quando gli utenti tentano di installare un'estensione non autorizzata da <ph name="EXTENSION_INSTALL_WHITELIST" /> o <ph name="EXTENSION_SETTINGS" />.
+
+      Questo criterio viene applicato soltanto se il computer viene registrato con la norma <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> e <ph name="CLOUD_REPORTING_ENABLED" /> è attivato.</translation>
 <translation id="4639407427807680016">Nomi degli host di messaggi nativi da escludere dalla lista nera.</translation>
 <translation id="4650759511838826572">Disabilita schemi di protocollo dell'URL</translation>
 <translation id="465099050592230505">URL del web store dell'azienda (obsoleta)</translation>
@@ -2174,6 +2257,10 @@
 <translation id="4874982543810021567">Blocca WebUSB su questi siti</translation>
 <translation id="4876805738539874299">Versione SSL massima abilitata</translation>
 <translation id="4887274746092315609">Attiva una pagina per la modifica della password all'interno della sessione per gli utenti SAML</translation>
+<translation id="4887863670424903990">Se questo criterio viene attivato, <ph name="PRODUCT_NAME" /> segnala a Google eventi non sicuri da analizzare, come il riutilizzo di password, il download di malware, la presenza di interstitial, eventuali violazioni delle regole relative alla protezione dei dati sensibili ecc.  Alcuni eventi non sicuri, come eventuali violazioni delle regole relative alla protezione dei dati sensibili, dipendono da altri criteri che attivano l'analisi.
+
+      Se questo criterio viene disattivato o non viene impostato, <ph name="PRODUCT_NAME" /> non segnalerà alcun evento non sicuro.
+      </translation>
 <translation id="4897928009230106190">Consente di specificare i parametri utilizzati durante la ricerca di suggerimenti con POST. Si tratta di coppie di nome/valore separate da virgole. Se un valore è il parametro di un modello, come {searchTerms} nell'esempio precedente, verrà sostituito con i dati dei termini di ricerca reali.
 
 Questa norma è facoltativa. Se non viene impostata, la richiesta di ricerca di suggerimenti verrà inviata utilizzando il metodo GET.
@@ -2192,6 +2279,17 @@
 <translation id="4906194810004762807">Frequenza di aggiornamento per norma dispositivo</translation>
 <translation id="4917385247580444890">Forte</translation>
 <translation id="4923806312383904642">Consenti a WebDriver di eseguire l'override delle norme non compatibili</translation>
+<translation id="4929721861648439998">Consente di attivare la funzione di accessibilità di audio in formato mono nella schermata di accesso.
+
+          Questa funzione consente di cambiare la modalità del dispositivo dall'audio in formato stereo predefinito all'audio in formato mono.
+
+          Se questo criterio è impostato su true, l'audio in formato mono sarà sempre attivato nella schermata di accesso.
+
+          Se questo criterio è impostato su false, l'audio in formato mono sarà sempre disattivato nella schermata di accesso.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, inizialmente l'audio in formato mono è disattivato, ma l'utente può attivarlo in qualsiasi momento.</translation>
 <translation id="494613465159630803">Cast Receiver</translation>
 <translation id="494924690085329212">Riavvia all'uscita dell'utente se Android è stato avviato.</translation>
 <translation id="4962262530309732070">Se questo criterio è impostato su true o non viene configurato, su <ph name="PRODUCT_NAME" /> sarà possibile aggiungere persone con la funzione Aggiungi persona di Gestione utenti.
@@ -2384,6 +2482,15 @@
 <translation id="5272684451155669299">Se questa opzione viene impostata su true, l'utente può usare l'hardware su dispositivi Chrome per attestare da remoto la propria identità all'autorità di certificazione della privacy utilizzando la funzione <ph name="CHALLENGE_USER_KEY_FUNCTION" /> dell'<ph name="ENTERPRISE_PLATFORM_KEYS_API" />.
 
           Se viene impostata su false o non viene impostata, le chiamate all'API non vanno a buon fine e viene generato un codice di errore.</translation>
+<translation id="5273744932022326215">Consente di attivare la funzione di accessibilità di evidenziazione del cursore.
+
+          Se questo criterio è impostato su true, l'evidenziazione del cursore sarà sempre attivata sulla schermata di avvio.
+
+          Se questo criterio è impostato su false, l'evidenziazione del cursore sarà sempre disattivata sulla schermata di avvio.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, inizialmente l'evidenziazione del cursore è disattivata, ma l'utente può attivarla in qualsiasi momento.</translation>
 <translation id="5277806246014825877">Questa norma consente all'utente di eseguire Crostini.
 
       Se la norma viene impostata su False, Crostini non è abilitato per l'utente.
@@ -2391,6 +2498,7 @@
       Le tre norme, VirtualMachinesAllowed, CrostiniAllowed e DeviceUnaffiliatedCrostiniAllowed devono essere impostate su True affinché Crostini possa essere eseguito.
       Quando l'impostazione di questa norma viene modificata in False, la norma viene applicata all'avvio di nuovi contenitori Crostini, ma non determina l'arresto dei contenitori già in esecuzione.</translation>
 <translation id="5283457834853986457">Disattiva la ricerca dei plug-in (ritirata)</translation>
+<translation id="5285315763984334157">Blocca download dannosi</translation>
 <translation id="5288772341821359899">Se la norma viene impostata, l'intervallo di porte UDP utilizzato da WebRTC viene limitato all'intervallo di porte specificato (endpoint inclusi).
 
       Se la norma non viene impostata oppure è impostata sulla stringa vuota o su un intervallo di porte non valido, WebRTC è autorizzato a utilizzare qualsiasi porta UDP locale disponibile.</translation>
@@ -2435,6 +2543,17 @@
 
           Nota: se specificato, <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" /> sostituisce questo criterio.</translation>
 <translation id="538108065117008131">Consenti a <ph name="PRODUCT_FRAME_NAME" /> di gestire i seguenti tipi di contenuto.</translation>
+<translation id="538768040137709073">Consente di attivare la funzione Appunti condivisi che consente agli utenti di inviare messaggi tra computer desktop Chrome e un dispositivo Android quando la sincronizzazione è attivata e l'utente ha effettuato l'accesso.
+
+          Se il criterio è impostato su true, la funzionalità di invio messaggi, cross-device, è attivata per gli utenti Chrome.
+
+          Se il criterio è impostato su false, la funzionalità di invio messaggi, cross-device, è disattivata per gli utenti Chrome.
+
+          Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
+
+          Se questo criterio non viene impostato, la funzione Appunti condivisi è attivata per impostazione predefinita.
+
+          La scelta se impostare dei criteri su tutte le piattaforme che interessano loro di più spetta agli amministratori. Consigliamo di impostare questo criterio su un valore unico per tutte le piattaforme.</translation>
 <translation id="5391388690191341203">Account locale del dispositivo per l'accesso automatico</translation>
 <translation id="5392172595902933844">Le informazioni sullo stato di Android vengono rimandate al server.
 
@@ -2518,7 +2637,6 @@
 <translation id="5447306928176905178">Attiva le informazioni relative ai rapporti sulla memoria (dimensioni heap JS) per la pagina (obsoleto)</translation>
 <translation id="5457065417344056871">Attiva modalità ospite nel browser</translation>
 <translation id="5457924070961220141">Consente di configurare il renderer HTML predefinito se <ph name="PRODUCT_FRAME_NAME" /> è installato. Se questa norma non viene impostata, per impostazione predefinita il rendering viene eseguito dal browser host; tuttavia, in alternativa, puoi sostituire tale impostazione e consentire che l'esecuzione del rendering delle pagine HTML venga eseguita, per impostazione predefinita, da <ph name="PRODUCT_FRAME_NAME" />.</translation>
-<translation id="5458584148602890023">Attiva la variazione dei picchi energetici</translation>
 <translation id="5464816904705580310">Configurazione delle impostazioni per gli utenti gestiti.</translation>
 <translation id="546726650689747237">Ritardo oscuramento schermo in caso di utilizzo di CA</translation>
 <translation id="5469143988693423708">L'utente è abilitato a eseguire Crostini</translation>
@@ -2673,6 +2791,7 @@
 
           Nelle versioni precedenti alla 75, l'utilizzo di diversi ID estensione separati da virgole non è supportato e verrà ignorato. Il resto del criterio continuerà a essere applicato.</translation>
 <translation id="5645779841392247734">Consenti i cookie in questi siti</translation>
+<translation id="5656177735561364047">Attiva la funzione Appunti condivisi</translation>
 <translation id="5666457529647159548">Consenti agli utenti di gestire i certificati client installati.</translation>
 <translation id="5689430183304951538">Dimensioni predefinite delle pagine di stampa</translation>
 <translation id="5693469654327063861">Consenti migrazione dei dati</translation>
@@ -2714,6 +2833,13 @@
       Se questa norma non viene impostata o se viene impostata su false, <ph name="PRODUCT_NAME" /> utilizzerà le impostazioni di controllo delle revoche online esistenti.</translation>
 <translation id="5728154254076636808">Consente la creazione di copie di roaming per i dati dei profili <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Importa i dati della compilazione automatica dei moduli dal browser predefinito alla prima esecuzione</translation>
+<translation id="574098933844699859">Consente di specificare se le informazioni di sistema (ad es. la versione di Chrome OS, il numero seriale
+      del dispositivo) debbano essere sempre mostrate (o nascoste) nella schermata di accesso.
+
+      Se il criterio viene impostato su true, le informazioni di sistema vengono visualizzate forzatamente.
+      Se il criterio viene impostato su false, le informazioni di sistema vengono nascoste forzatamente.
+      Se il criterio non viene impostato, ha validità il comportamento predefinito (visualizzato per Canary/canale Dev)
+      . Gli utenti possono attivare/disattivare la visibilità tramite operazioni specifiche (ad esempio Alt-V).</translation>
 <translation id="5741810844420698449">Quando questa norma è impostata, specifica l'azione che <ph name="PRODUCT_OS_NAME" /> compie quando l'utente chiude il coperchio del dispositivo.
 
           Quando la norma non è impostata, viene eseguita l'azione predefinita, ossia la sospensione.
@@ -2831,6 +2957,16 @@
 <translation id="6076099373507468537">Definisce l'elenco di dispositivi USB che possono essere scollegati dal driver del kernel per essere utilizzati tramite l'API chrome.usb direttamente all'interno di un'applicazione web. Le voci sono coppie costituite dall'ID fornitore USB e dall'ID prodotto per identificare un hardware specifico.
 
       Se la norma non è configurata, l'elenco di dispositivi USB scollegabili è vuoto.</translation>
+<translation id="607726879389885889">Questo criterio consente di controllare il modo in cui<ph name="PRODUCT_NAME" /> si comporta quando un utente tenta di caricare o scaricare file troppo grandi per essere sottoposti all'analisi antimalware o della protezione dei dati sensibili (50MB o più grandi).  Tale limitazione si applica esclusivamente ai file che dovrebbero essere analizzati secondo quanto stabilito da <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> e dai criteri che controllano l'elenco di domini per i quali è attiva l'analisi.
+
+      Se questo criterio non viene impostato o se viene impostato su "Nessuno", <ph name="PRODUCT_NAME" /> consente all'utente di caricare o scaricare file di qualsiasi dimensione.
+
+      Se questo criterio viene impostato su "Blocca download di grandi dimensioni", i file che sono troppo grandi per essere analizzati vengono eliminati prima di essere resi disponibili per l'utente.  Poiché le dimensioni non possono sempre essere determinate prima del download, <ph name="PRODUCT_NAME" /> potrebbe scaricare i file e stabilire successivamente che superano il limite di dimensioni consentito.
+
+      Se il criterio viene impostato su "Blocca caricamenti di grandi dimensioni", i file troppo grandi per essere analizzati non possono essere selezionati.
+
+      Se questo criterio viene impostato su "Blocca caricamenti e download di grandi dimensioni", <ph name="PRODUCT_NAME" /> si comporta secondo le regole descritte nelle impostazioni "Blocca download di grandi dimensioni" e "Blocca caricamenti di grandi dimensioni".
+      </translation>
 <translation id="6083631234867522991">Windows (client Windows):</translation>
 <translation id="608788685013546076">Imposta un valore percentuale per il limite di consumo della batteria per la variazione dei picchi energetici</translation>
 <translation id="6089679180657323464">Consente di stabilire le impostazioni del controller DTC (Diagnostics and Telemetry Controller) wilco.</translation>
@@ -2977,6 +3113,7 @@
       Se questa norma viene impostata, puoi stabilire se un utente può accedere o meno a <ph name="PRODUCT_NAME" />. Se la norma viene impostata su "False", le app e le estensioni che utilizzano l'API chrome.identity non funzioneranno, pertanto è consigliabile utilizzare la norma SyncDisabled.</translation>
 <translation id="6378076389057087301">Specifica se l'attività audio incide sulla gestione dell'alimentazione</translation>
 <translation id="637934607141010488">Consente di indicare un elenco di utenti del dispositivo che hanno eseguito l'accesso di recente. Se la norma è impostata su False, gli utenti non vengono indicati.</translation>
+<translation id="638668187106406971">Verifica eventuali violazioni delle regole relative alla protezione dei dati sensibili dei caricamenti</translation>
 <translation id="6394350458541421998">La norma non è più supportata a partire dalla versione 29 di <ph name="PRODUCT_OS_NAME" />. Utilizza la norma PresentationScreenDimDelayScale.</translation>
 <translation id="6401669939808766804">Disconnetti l'utente</translation>
 <translation id="6406448383934634215">Se come azione all'avvio è stato impostato "Apri un elenco di URL", puoi specificare l'elenco degli URL che vengono aperti. Se questa norma non viene impostata, all'avvio non verrà aperto alcun URL.
@@ -3223,6 +3360,7 @@
       </translation>
 <translation id="6922884955650325312">Blocca il plug-in <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="6923366716660828830">Consente di specificare il nome del provider di ricerca predefinito. Se il nome non viene impostato verrà utilizzato il nome host specificato nell'URL di ricerca. Questa norma viene considerata soltanto se è attiva la norma "DefaultSearchProviderEnabled".</translation>
+<translation id="6923731550900440989">Attiva l'evidenziazione del cursore del testo sulla schermata di accesso</translation>
 <translation id="6924223708804692571">Forza la disattivazione delle lingue per correttore ortografico. Le lingue non riconosciute di quell'elenco verranno ignorate.
 
       Se il criterio viene attivato, il correttore ortografico verrà disattivato per le lingue specificate. L'utente può comunque attivare o disattivare il correttore ortografico per le lingue che non sono nell'elenco.
@@ -3589,6 +3727,7 @@
 <translation id="7433714841194914373">Abilita Instant</translation>
 <translation id="7434202861148928348">Configura i nomi di dominio richiesti per i client di accesso remoto</translation>
 <translation id="7443616896860707393">Richieste di autenticazione di base HTTP tra origini</translation>
+<translation id="7448430478749155471">Attiva Seleziona per ascoltare nella schermata di accesso</translation>
 <translation id="7454519673779830548">Aggiungi account Kerberos compilati automaticamente. Se le credenziali di Kerberos corrispondono alle credenziali di accesso, un account può essere configurato in modo da riutilizzare le credenziali di accesso specificando "${{LOGIN_EMAIL}}" e "${{PASSWORD}}" rispettivamente per l'account principale e la password, in modo che le richieste di Kerberos possano essere recuperate automaticamente, a meno che non sia configurata l'autenticazione a due fattori. Gli utenti non possono modificare gli account aggiunti tramite questo criterio.
 
           Se questo criterio è attivato, l'elenco degli account definiti dal criterio viene aggiunto alle impostazioni Account Kerberos.
@@ -3858,6 +3997,10 @@
 <translation id="7974114691960514888">Questa norma non è più supportata. Consente di attivare l'utilizzo di server relay e STUN durante la connessione a un client remoto. Se questa impostazione viene attivata, questo computer potrà rilevare i computer host remoti e collegarsi a essi anche se sono separati da un firewall. Se questa impostazione viene disattivata e le connessioni UDP in uscita vengono filtrate dal firewall, questo computer potrà collegarsi ai computer host soltanto all'interno della rete locale.</translation>
 <translation id="7976157349247117979">Nome della destinazione di <ph name="PRODUCT_NAME" /></translation>
 <translation id="7980227303582973781">Nessuna limitazione speciale</translation>
+<translation id="7983900606645681371">Elenco di domini per i quali non è necessario verificare eventuali violazioni delle regole relative alla protezione dei dati sensibili dei file caricati, dei dati incollati dagli appunti o trascinati.  Questo criterio viene utilizzato solo se il criterio <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> è attivato.
+
+      Se questo criterio non viene impostato o viene impostato su un elenco di domini vuoto, verranno verificate eventuali violazioni delle regole relative alla protezione dei dati sensibili di tutti i contenuti.
+      </translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="798856998567564266">Se attivi questa impostazione, è possibile aggiungere, rimuovere o modificare i preferiti. Questa è l'impostazione predefinita quando la norma non è impostata.
 
@@ -3871,6 +4014,7 @@
       Quando questa norma non è impostata su un dispositivo gestito, il dispositivo non può eseguire macchine virtuali.
        I dispositivi non gestiti sono autorizzati a eseguire macchine virtuali.</translation>
 <translation id="8001701200415781021">Limita gli Account Google che è possibile impostare come account principali del browser in <ph name="PRODUCT_NAME" /></translation>
+<translation id="8003853057959146975">Invia file per l'ispezione di eventuali violazioni delle regole relative alla protezione dei dati sensibili</translation>
 <translation id="8009554972280451023">Se attivi questa impostazione, le impostazioni memorizzate nei profili <ph name="PRODUCT_NAME" />, come i preferiti, i dati della compilazione automatica, le password e così via, saranno scritte anche in un file memorizzato nella cartella del profilo utente Roaming o in una posizione specificata dall'amministratore tramite la norma <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. Se si attiva questa norma, viene disattivata la sincronizzazione nella cloud.
 
       Se questa norma viene disattivata o non viene impostata, saranno utilizzati solo i normali profili locali.
@@ -4332,6 +4476,7 @@
 Il metodo consigliato per bloccare lo schermo in caso di inattività consiste nell'attivare il blocco dello schermo in caso di sospensione e fare in modo che <ph name="PRODUCT_OS_NAME" /> sospenda dopo il ritardo di inattività. Questa norma dovrebbe essere utilizzata soltanto quando il blocco dello schermo dovrebbe avvenire molto tempo prima della sospensione o quando non si desidera affatto la sospensione in caso di inattività.
 
 Il valore della norma deve essere specificato in millisecondi. I valori devono essere inferiori al ritardo di inattività.</translation>
+<translation id="8911348623012274122">Imposta un limite di memoria per le istanze di Chrome</translation>
 <translation id="891435090623616439">codificato sotto forma di stringa JSON; per informazioni dettagliate, visita la pagina <ph name="COMPLEX_POLICIES_URL" /></translation>
 <translation id="8917070657147922192">Consenti agli utenti di gestire i certificati CA installati.</translation>
 <translation id="8934944553121392674">Consente di stabilire quali stampanti della norma <ph name="DEVICE_PRINTERS_POLICY" /> mettere a disposizione degli utenti.
@@ -4356,6 +4501,7 @@
 <translation id="8942616385591203339">Questa norma consente di controllare se il consenso alla sincronizzazione può essere mostrato all'utente durante il primo accesso. Dovrebbe essere impostata su false se tale consenso non è mai necessario per l'utente.
       Se impostata su false, il consenso alla sincronizzazione non verrà visualizzato.
       Se impostata su true o non viene impostata, il consenso alla sincronizzazione può essere visualizzato.</translation>
+<translation id="8943934315109955032">Non verificare eventuali violazioni delle regole relative alla protezione dei dati sensibili</translation>
 <translation id="894510252300143386">Configura le impostazioni di gestione delle estensioni per <ph name="PRODUCT_NAME" />.
 
           Questo criterio controlla più impostazioni, tra cui quelle controllate da criteri correlati alle estensioni già presenti. Questo criterio sostituirà tutti i criteri precedenti se vengono impostati entrambi.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 5fc5828..b0066ce 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -2536,7 +2536,6 @@
 <translation id="5447306928176905178">メモリ情報(JavaScript のヒープ サイズ)がページに報告されるようにする(サポート終了)</translation>
 <translation id="5457065417344056871">ブラウザでゲストモードを有効にする</translation>
 <translation id="5457924070961220141"><ph name="PRODUCT_FRAME_NAME" /> がインストールされている場合、デフォルトの HTML レンダラを設定できます。このポリシーが未設定の場合はデフォルトの設定が使用されホスト ブラウザがレンダリングを実行しますが、この設定をオーバーライドしてデフォルトで <ph name="PRODUCT_FRAME_NAME" /> に HTML ページのレンダリングを実行させることもできます。</translation>
-<translation id="5458584148602890023">電力ピークシフトを有効にする</translation>
 <translation id="5464816904705580310">管理対象ユーザーの設定を行います。</translation>
 <translation id="546726650689747237">画面が暗くなるまでの時間(AC 電源での実行時)</translation>
 <translation id="5469143988693423708">ユーザーは Crostini を実行できます</translation>
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 9a6666a6..b592cddc 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -2633,7 +2633,6 @@
 <translation id="5457065417344056871">브라우저에서 게스트 모드 사용</translation>
 <translation id="5457924070961220141"><ph name="PRODUCT_FRAME_NAME" />이(가) 설치되면 기본 HTML 렌더러를 설정할 수 있습니다.
           이 정책을 설정하지 않으면 기본 설정에 따라 호스트 브라우저가 렌더링을 수행하지만, 이 설정을 무시하고 기본적으로 <ph name="PRODUCT_FRAME_NAME" />에서 HTML 페이지를 렌더링하도록 할 수 있습니다.</translation>
-<translation id="5458584148602890023">전력 피크 시프트 사용</translation>
 <translation id="5464816904705580310">관리 사용자에 대한 설정 구성</translation>
 <translation id="546726650689747237">AC 전원으로 실행할 때 화면 어둡게 하기 지연</translation>
 <translation id="5469143988693423708">사용자가 Crostini를 실행할 수 있음</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index cd0d6606..c3736ee 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -174,6 +174,7 @@
 <translation id="1219695476179627719">Geeft aan of het apparaat moet terugkeren naar de versie die is ingesteld met <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> als er al een latere versie is geïnstalleerd.
 
       De standaardinstelling is RollbackDisabled.</translation>
+<translation id="1220047093962987554">Safe Browsing-status van bezochte URL's in realtime controleren</translation>
 <translation id="1221359380862872747">Gespecificeerde URL's laden in demo-aanmeldvenster</translation>
 <translation id="1223789468190631420">Inschakelstatus van Safe Browsing voor vertrouwde bronnen</translation>
 <translation id="122899932962115297">Een witte lijst die beheert welke modi voor snel ontgrendelen de gebruiker kan configureren en gebruiken om het vergrendelingsscherm te ontgrendelen.
@@ -194,11 +195,14 @@
 <translation id="1243570869342663665">SafeSites-filters voor content voor volwassenen beheren.</translation>
 <translation id="1257550411839719984">Standaardmap voor downloads instellen</translation>
 <translation id="1265053460044691532">De offline inlogtijd beperken voor een gebruiker die is geverifieerd via SAML</translation>
+<translation id="127264587838521316">Hiermee worden installatieverzoeken voor <ph name="PRODUCT_NAME" />-extensies ingeschakeld</translation>
 <translation id="1290634681382861275">Beheert diverse instellingen, waaronder USB, Bluetooth, vernieuwingsinterval voor beleid, ontwikkelaarsmodus en meer.</translation>
 <translation id="1291880496936992484">Waarschuwing: RC4 wordt volledig verwijderd van <ph name="PRODUCT_NAME" /> na versie 52 (rond september 2016) en dit beleid werkt vanaf dan niet meer.
 
       Als het beleid niet is ingesteld of is ingesteld op 'False', worden de RC4-coderingssuites in TLS niet ingeschakeld. Anders kan het worden ingesteld op 'True' om compatibiliteit met een verouderde server te behouden. Dit is een tijdelijke oplossing en de server moet opnieuw worden geconfigureerd.</translation>
+<translation id="1295737447968372331">Dicteren op het inlogscherm inschakelen</translation>
 <translation id="1297182715641689552">Een PAC-script voor de proxy gebruiken</translation>
+<translation id="1297961932043741908">Een limiet instellen voor het aantal megabytes geheugen dat door één Chrome-instantie kan worden gebruikt.</translation>
 <translation id="1304973015437969093">ID's voor extensies/apps en URL's voor updates die op de achtergrond moeten worden geïnstalleerd</translation>
 <translation id="1307454923744766368">Beginpunten of hostnaampatronen waarvoor er geen beperkingen voor
       onveilige beginpunten zouden moeten gelden.</translation>
@@ -599,6 +603,7 @@
       Als je deze instelling in- of uitschakelt, kunnen gebruikers deze niet wijzigen of overschrijven in <ph name="PRODUCT_NAME" />.
 
       Als je deze instelling niet instelt, kan de gebruiker bepalen of deze functie wordt gebruikt.</translation>
+<translation id="1999000620918508488">Afdwingen dat systeemgegevens op het inlogscherm worden weergegeven of verborgen.</translation>
 <translation id="2006530844219044261">Energiebeheer</translation>
 <translation id="2014757022750736514">Beheert het gedrag van het inlogscherm, waar gebruikers inloggen op hun accounts. Instellingen zijn onder andere wie kan inloggen, welke typen accounts zijn toegestaan, welke verificatiemethoden moeten worden gebruikt, en algemene instellingen voor toegankelijkheid, invoermethoden en taal.</translation>
 <translation id="201557587962247231">De frequentie van uploads van rapporten over de apparaatstatus</translation>
@@ -614,12 +619,18 @@
 <translation id="2024476116966025075">De vereiste domeinnaam configureren voor clients voor externe toegang</translation>
 <translation id="2030905906517501646">Zoekwoord voor standaardzoekprovider</translation>
 <translation id="203096360153626918">Dit beleid is niet van invloed op de Android-apps. Deze hebben toegang tot de modus voor volledig scherm, zelfs als dit beleid is ingesteld op <ph name="FALSE" /> (Onwaar).</translation>
+<translation id="2043749682619281558">De cursormarkering op het inlogscherm inschakelen</translation>
 <translation id="2043770014371753404">Bedrijfsprinters uitgeschakeld</translation>
 <translation id="2050629715135525072">Regelt de mogelijkheid van een gebruiker die is verbonden met een host voor externe toegang om bestanden over te zetten tussen de client en de host. Dit is niet van toepassing op verbindingen voor hulp op afstand, die geen bestandsoverdracht ondersteunen.
 
           Als deze instelling is uitgeschakeld, is bestandsoverdracht niet toegestaan. Als deze instelling is ingeschakeld of niet is ingesteld, is bestandsoverdracht toegestaan.</translation>
 <translation id="2057317273526988987">Toegang verlenen aan een lijst met URL's</translation>
 <translation id="2061810934846663491">De vereiste domeinnamen configureren voor hosts voor externe toegang</translation>
+<translation id="2063663607822994541">Hiermee configureer je de hoeveelheid geheugen die één instantie van <ph name="PRODUCT_NAME" /> kan gebruiken voordat tabbladen worden verwijderd om geheugen te besparen (dit houdt in dat het geheugen dat voor het tabblad wordt gebruikt, wordt vrijgemaakt en dat het tabblad opnieuw moet worden geladen als de gebruiker naar dit tabblad schakelt).
+
+      Als het beleid is ingesteld, worden tabbladen in de browser verwijderd om geheugen te besparen wanneer de limiet wordt bereikt. Er is geen garantie dat de browser altijd onder de limiet wordt uitgevoerd. Elke waarde lager dan 2048 wordt afgerond naar 2048.
+
+      Als dit beleid niet is ingesteld, begint de browser pas met het besparen van geheugen nadat is gedetecteerd dat er nog maar een kleine hoeveelheid fysiek geheugen op de machine beschikbaar is.</translation>
 <translation id="206623763829450685">Hiermee wordt gespecificeerd welke HTTP-verificatieschema's door <ph name="PRODUCT_NAME" /> worden ondersteund.
 
           Mogelijke waarden zijn 'basic', 'digest', 'ntlm' en 'negotiate'. Scheid meerdere waarden van elkaar met komma's.
@@ -630,6 +641,7 @@
 <translation id="2077129598763517140">Hardwareversnelling gebruiken indien beschikbaar</translation>
 <translation id="2077273864382355561">Vertraging van scherm uitschakelen wanneer op de batterij wordt gewerkt</translation>
 <translation id="2082205219176343977">Configureer de minimaal toegestane Chrome-versie voor het apparaat.</translation>
+<translation id="2084647819368766928">Lijst met domeinen waarvoor geüploade content moet worden gecontroleerd op schendingen van de beveiligingsregels voor gevoelige gegevens</translation>
 <translation id="209586405398070749">Stabiel kanaal</translation>
 <translation id="2098658257603918882">Rapportage van gebruiks- en crashgegevens inschakelen</translation>
 <translation id="2104418465060359056">Gegevens over extensies en plug-ins rapporteren</translation>
@@ -794,6 +806,16 @@
       Als deze instelling is ingeschakeld, wordt de browsergeschiedenis niet opgeslagen. Met deze instelling wordt ook tabbladsynchronisatie uitgeschakeld.
 
       Als deze instelling is uitgeschakeld of niet is ingesteld, wordt de browsergeschiedenis opgeslagen.</translation>
+<translation id="2423038190900972331">Hiermee wordt bepaald hoe <ph name="PRODUCT_NAME" /> gegevens die worden geüpload, gedownload, geplakt vanaf het klembord of gesleept en neergezet, controleert op schendingen van de beveiligingsregels voor gevoelige gegevens.
+
+      Als dit beleid niet is ingesteld of is ingesteld op 'Geen', controleert <ph name="PRODUCT_NAME" /> gegevens niet op schendingen van de beveiligingsregels voor gevoelige gegevens.
+
+      Als dit beleid is ingesteld op 'Downloads controleren' en de gebruiker probeert een bestand te downloaden vanaf een URL die in het beleid <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> wordt vermeld, controleert <ph name="PRODUCT_NAME" /> de gedownloade gegevens op naleving van bedrijfsregels.
+
+      Als dit beleid is ingesteld op 'Uploads controleren' en de gebruiker probeert een bestand te uploaden naar een domein dat niet in het beleid <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> wordt vermeld, controleert <ph name="PRODUCT_NAME" /> het geüploade bestand, gegevens die zijn geplakt vanaf het klembord of gegevens die zijn gesleept en neergezet op naleving van bedrijfsregels.
+
+      Als dit beleid is ingesteld op 'Uploads en downloads controleren', werkt <ph name="PRODUCT_NAME" /> in overeenstemming met de regels die worden beschreven onder 'Downloads controleren' en 'Uploads controleren'.
+      </translation>
 <translation id="2426782419955104525">Hiermee schakel je de Instant-functie van <ph name="PRODUCT_NAME" /> in en voorkom je dat gebruikers deze instelling wijzigen.
 
       Als je deze instelling inschakelt, is <ph name="PRODUCT_NAME" /> Instant ingeschakeld.
@@ -938,6 +960,10 @@
       Als dit beleid is ingesteld, kan de gebruiker het niet wijzigen of overschrijven.
 
       Nadat Bluetooth is ingeschakeld, moet het apparaat opnieuw worden opgestart om de wijzigingen door te voeren (het apparaat hoeft niet opnieuw te worden opgestart wanneer Bluetooth wordt uitgeschakeld).</translation>
+<translation id="2570498106495954914">Een lijst met domeinen waarvoor gedownloade content moet worden gecontroleerd op schendingen van de beveiligingsregels voor gevoelige gegevens voordat de content kan worden opgeslagen in de lokale opslag.  Dit beleid wordt alleen gebruikt als <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> is ingeschakeld.
+
+      Als dit beleid niet is ingesteld of is ingesteld op een lege lijst met domeinen, wordt gedownloade content niet gecontroleerd op schendingen van de beveiligingsregels voor gevoelige gegevens.
+      </translation>
 <translation id="2571066091915960923">Schakelt de proxy voor het comprimeren van gegevens in of uit en voorkomt dat gebruikers deze instelling kunnen wijzigen.
 
       Als je deze instelling in- of uitschakelt, kunnen gebruikers deze instelling niet wijzigen of overschrijven.
@@ -1007,6 +1033,23 @@
 <translation id="268577405881275241">De proxyfunctie voor het comprimeren van gegevens inschakelen</translation>
 <translation id="2693108589792503178">Configureer de URL voor het wijzigen van het wachtwoord.</translation>
 <translation id="2694143893026486692">Gedockt vergrootglas ingeschakeld</translation>
+<translation id="2694188263972877487">Hiermee configureer je het type downloads dat volledig door <ph name="PRODUCT_NAME" /> wordt geblokkeerd, zonder dat gebruikers het beveiligingsbesluit kunnen overschrijven.
+
+      Als je dit beleid instelt, houdt <ph name="PRODUCT_NAME" /> bepaalde typen downloads tegen en kan de gebruiker de beveiligingswaarschuwingen niet omzeilen.
+
+      Als je de optie 'Gevaarlijke downloads blokkeren' kiest, zijn alle downloads toegestaan, met uitzondering van de downloads die zijn voorzien van Safe Browsing-waarschuwingen.
+
+      Als je de optie 'Potentieel gevaarlijke downloads blokkeren' kiest, zijn alle downloads toegestaan, met uitzondering van de downloads die zijn voorzien van Safe Browsing-waarschuwingen voor potentieel gevaarlijke downloads.
+
+      Als je de optie 'Alle downloads blokkeren' kiest, worden alle downloads geblokkeerd.
+
+      Als je de optie 'Gevaarlijke downloads blokkeren' kiest, zijn alle downloads toegestaan, met uitzondering van de downloads die met grote zekerheid door Safe Browsing worden aangeduid als malware. Anders dan bij gevaarlijke downloads wordt hierbij geen rekening gehouden met het bestandstype, maar wordt wel rekening gehouden met de host.
+
+      Als je dit beleid niet instelt (of als je de optie 'Geen speciale beperkingen' kiest), worden op basis van de Safe Browsing-analyse de gebruikelijke beveiligingsbeperkingen toegepast.
+
+      Houd er rekening mee dat deze beperkingen gelden voor zowel downloads die via de webpaginacontent als voor downloads die via de contextmenuoptie 'Link downloaden' geactiveerd zijn. Deze beperkingen gelden niet voor het opslaan/downloaden van de huidige pagina die wordt weergegeven of voor de afdrukoptie 'Opslaan als pdf'.
+
+      Zie https://developers.google.com/safe-browsing voor meer informatie over Safe Browsing.</translation>
 <translation id="2706708761587205154">Afdrukken alleen toestaan met pincode</translation>
 <translation id="2710534340210290498">Als dit beleid wordt ingesteld op 'false', kunnen gebruikers het scherm niet vergrendelen (alleen uitloggen van de gebruikerssessie is mogelijk). Als deze instelling is ingesteld op 'true' of niet is ingesteld, kunnen gebruikers die verificatie met een wachtwoord hebben uitgevoerd het scherm vergrendelen.</translation>
 <translation id="2731627323327011390">Gebruik van certificaten van <ph name="PRODUCT_OS_NAME" /> voor ARC-apps uitschakelen</translation>
@@ -1453,6 +1496,15 @@
           Als dit beleid is ingesteld op 'False', worden vertragingen in energiebeheer en de limiet voor sessielengte gestart bij het starten van de sessie.</translation>
 <translation id="3478024346823118645">Gebruikersgegevens wissen bij uitloggen</translation>
 <translation id="3480961938508521469">De batterij volledig opladen met een normale snelheid.</translation>
+<translation id="348110646151632565">De toegankelijkheidsfunctie 'Selecteer om uitgesproken te worden' op het inlogscherm inschakelen.
+
+          Als dit beleid is ingesteld op True, is 'Selecteer om uitgesproken te worden' altijd ingeschakeld op het inlogscherm.
+
+          Als dit beleid is ingesteld op False, is 'Selecteer om uitgesproken te worden' altijd uitgeschakeld op het inlogscherm.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of overschrijven.
+
+          Als dit beleid niet is ingesteld, is 'Selecteer om uitgesproken te worden' in eerste instantie uitgeschakeld op het inlogscherm. De gebruiker kan deze functie op elk gewenst moment inschakelen.</translation>
 <translation id="3483729306380590354">Geef een aangepast startpunt voor batterijoplading op in procenten.
 
           De batterij begint met opladen als de waarde van het aangepaste startpunt voor batterijoplading wordt bereikt.
@@ -1489,6 +1541,7 @@
 
           Dit beleid wordt alleen gerespecteerd als het beleid 'DefaultSearchProviderEnabled' is ingeschakeld.</translation>
 <translation id="350797926066071931">Vertalen inschakelen</translation>
+<translation id="3508047333410537654">Monogeluid op het inlogscherm inschakelen</translation>
 <translation id="3513655665999652754">De Quirks Server levert hardwarespecifieke configuratiebestanden, zoals
      ICC-displayprofielen om de beeldschermkalibratie aan te passen.
 
@@ -1539,6 +1592,7 @@
 <translation id="3591527072193107424">Schakel de functie 'Ondersteuning voor oudere browsers' in.</translation>
 <translation id="3591584750136265240">Het verificatiegedrag voor inloggen configureren</translation>
 <translation id="3617743504695003280">Hiermee wordt toegestaan dat een pagina synchrone XHR-verzoeken verstuurt tijdens de afwijzing van de pagina.</translation>
+<translation id="3624515566460517364">Uploads en downloads controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation>
 <translation id="3627678165642179114">Webservice voor spellingcontrole in- of uitschakelen</translation>
 <translation id="3628480121685794414">Enkelzijdig afdrukken inschakelen</translation>
 <translation id="3631099945620529777">Als deze optie is ingesteld op 'false', is de knop 'Proces beëindigen' uitgeschakeld in Taakbeheer.
@@ -1624,6 +1678,15 @@
       Als dit beleid niet wordt ingesteld, wordt de directory voor het downloaden van bestanden gebruikt en kan de gebruiker deze wijzigen.</translation>
 <translation id="3805659594028420438">Extensie TLS-domeingebonden certificaten inschakelen (afgekeurd)</translation>
 <translation id="3808945828600697669">Een lijst met uitgeschakelde plug-ins specificeren</translation>
+<translation id="3810642039169532482">De toegankelijkheidsfunctie voor dicteren op het inlogscherm inschakelen.
+
+          Als dit beleid is ingesteld op True, is dicteren altijd ingeschakeld op het inlogscherm.
+
+          Als dit beleid is ingesteld op False, is dicteren altijd uitgeschakeld op het inlogscherm.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of overschrijven.
+
+          Als dit beleid niet is ingesteld, is dicteren in eerste instantie uitgeschakeld op het inlogscherm. De gebruiker kan deze functie op elk gewenst moment inschakelen.</translation>
 <translation id="3811562426301733860">Advertenties toestaan op alle sites</translation>
 <translation id="3816312845600780067">Sneltoets voor automatisch inloggen inschakelen</translation>
 <translation id="3820526221169548563">De toegankelijkheidsfunctie voor het schermtoetsenbord inschakelen.
@@ -1693,6 +1756,7 @@
       Elke lijstvermelding bevat een woordenboek dat de extensie-ID moet bevatten in het veld 'Extensie-ID' en de update-URL in het veld 'Update-URL'.</translation>
 <translation id="3874773863217952418">'Tikken om te zoeken' inschakelen</translation>
 <translation id="3877517141460819966">Geïntegreerde modus voor authenticatie met twee factoren</translation>
+<translation id="3879196885908353077">Downloads controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation>
 <translation id="3879208481373875102">Lijst met afgedwongen geïnstalleerde web-apps instellen</translation>
 <translation id="388237772682176890">Dit beleid is beëindigd in M53 en is verwijderd in M54, omdat de ondersteuning voor SPDY/3.1 is verwijderd.
 
@@ -1795,6 +1859,7 @@
 
           Deze optie is meestal uitgeschakeld als beveiliging tegen phishing. Als dit beleid niet wordt ingesteld, wordt de optie uitgeschakeld en mag subinhoud van derden geen dialoogvenster voor algemene HTTP-authenticatie als pop-up weergeven.</translation>
 <translation id="4056910949759281379">SPDY-protocol uitschakelen</translation>
+<translation id="4075864623710596000">De op deze lijst vermelde hostnamen zijn vrijgesteld van controle van het HSTS-beleid die verzoeken kan upgraden van HTTP naar HTTPS. In dit beleid zijn alleen hostnamen met één label toegestaan. Hostnamen moeten een canonieke URL hebben. Eventuele IDN's moeten worden geconverteerd naar de A-labelindeling en alle ASCII-letters moeten kleine letters zijn. Dit beleid is alleen van toepassing op de vermelde specifieke hostnamen en niet op de subdomeinen van de vermelde namen.</translation>
 <translation id="408029843066770167">Query's naar een Google-tijdservice toestaan</translation>
 <translation id="408076456549153854">Inloggen bij browser inschakelen</translation>
 <translation id="40853027210512570">Hiermee negeer je de regels van <ph name="PRODUCT_NAME" /> voor selectie van de standaardprinter.
@@ -1892,6 +1957,15 @@
 <translation id="4171331498167688968">Als het beleid is ingesteld op False, is het mogelijk om via software van derden uitvoerbare code in te voegen in de processen van Chrome. Als het beleid niet is ingesteld of is ingesteld op True, kan er geen uitvoerbare code via software van derden worden ingevoegd in de processen van Chrome.
 
       Ongeacht de waarde van dit beleid voorkomt de browser momenteel niet dat software van derden uitvoerbare code invoegt in zijn processen op een computer die deel uitmaakt van een <ph name="MS_AD_NAME" />-domein.</translation>
+<translation id="417956245902013347">De toegankelijkheidsfunctie voor markering van het caret-teken op het inlogscherm inschakelen.
+
+          Als dit beleid is ingesteld op True, is markering van het caret-teken altijd ingeschakeld op het inlogscherm.
+
+          Als dit beleid is ingesteld op False, is markering van het caret-teken op het inlogscherm altijd uitgeschakeld op het inlogscherm.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of overschrijven.
+
+          Als dit beleid niet is ingesteld, is markering van het caret-teken in eerste instantie uitgeschakeld op het inlogscherm. De gebruiker kan deze functie op elk gewenst moment inschakelen.</translation>
 <translation id="4183229833636799228">Standaardinstelling voor <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="4192388905594723944">URL voor het valideren van verificatietoken voor client voor externe toegang</translation>
 <translation id="420007931282384740">De standaardstatus van de toegankelijkheidsfunctie voor het schermtoetsenbord op het inlogscherm instellen.
@@ -2104,6 +2178,7 @@
 
           Als dit beleid is ingesteld op 'False', is <ph name="PRODUCT_NAME" /> uitgeschakeld.</translation>
 <translation id="4510923771103268849">De gebruiker heeft toestemming voor roottoegang tot Crostini-containers</translation>
+<translation id="4513262269532252501">Een lijst met domeinen waarvoor gedownloade content moet worden gecontroleerd op schendingen van de beveiligingsregels voor gevoelige gegevens</translation>
 <translation id="4515404363392014383">'Safe Browsing' inschakelen voor vertrouwde bronnen</translation>
 <translation id="4517928394515633751">Gebruikersdownloads scannen met Safe Browsing</translation>
 <translation id="4518251772179446575">Goedkeuring vragen wanneer een site de fysieke locatie van gebruikers wil bijhouden</translation>
@@ -2144,6 +2219,14 @@
           Als dit beleid wordt ingesteld op 'True', voeren de toetsen op de bovenste rij van het toetsenbord standaard opdrachten van functietoetsen uit. De zoektoets moet worden ingedrukt om het gedrag terug te zetten naar mediatoetsen.
 
           Als dit beleid wordt ingesteld op 'False' of niet wordt ingesteld, voert het toetsenbord standaard opdrachten uit van mediatoetsen, en voert het opdrachten uit van functietoetsen wanneer de zoektoets ingedrukt wordt gehouden.</translation>
+<translation id="4636613705027089602">Met dit beleid worden installatieverzoeken voor <ph name="PRODUCT_NAME" />-extensies beheerd waarmee gebruikers de verzoeken ter goedkeuring naar de Google Beheerdersconsole kunnen sturen.
+
+      Als dit beleid niet is ingesteld of is uitgeschakeld, worden er geen installatieverzoeken voor extensies gemaakt of geüpload.
+      Als dit beleid is ingeschakeld, worden installatieverzoeken voor extensies gemaakt en geüpload naar de Google Beheerdersconsole.
+
+      Er worden installatieverzoeken voor extensies gemaakt als gebruikers proberen een extensie te installeren die niet op de witte lijst van <ph name="EXTENSION_INSTALL_WHITELIST" /> of <ph name="EXTENSION_SETTINGS" /> staat.
+
+      Dit beleid is alleen effectief als de machine is ingeschreven bij <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> en <ph name="CLOUD_REPORTING_ENABLED" /> is ingeschakeld.</translation>
 <translation id="4639407427807680016">Namen van de hosts voor systeemeigen berichten die moeten worden vrijgesteld van de zwarte lijst</translation>
 <translation id="4650759511838826572">URL-protocolschema's uitschakelen</translation>
 <translation id="465099050592230505">URL van zakelijke webwinkel (verouderd)</translation>
@@ -2247,6 +2330,10 @@
 <translation id="4874982543810021567">WebUSB blokkeren op deze sites</translation>
 <translation id="4876805738539874299">Maximale SSL-versie ingeschakeld</translation>
 <translation id="4887274746092315609">Schakelt een pagina in voor wachtwoordwijziging tijdens een sessie voor SAML-gebruikers</translation>
+<translation id="4887863670424903990">Als dit beleid is ingeschakeld, rapporteert <ph name="PRODUCT_NAME" /> onveilige gebeurtenissen (zoals hergebruik van wachtwoorden, malwaredownloads, interstitials, schendingen van de beveiligingsregels voor gevoelige gegevens, enzovoort) aan Google voor analyse.  Bepaalde onveilige gebeurtenissen, zoals schendingen van de beveiligingsregels voor gevoelige gegevens, zijn afhankelijk van ander beleid waarmee dergelijke controles worden ingeschakeld.
+
+      Als dit beleid is uitgeschakeld of niet is ingesteld, rapporteert <ph name="PRODUCT_NAME" /> geen onveilige gebeurtenissen.
+      </translation>
 <translation id="4897928009230106190">Specificeert de parameters die worden gebruikt voor het uitvoeren van een voorgestelde zoekopdracht met POST. Het bestaat uit door komma's gescheiden naam/waarde-paren. Als een waarde een templateparameter, zoals {searchTerms} in het bovenstaande voorbeeld, is, wordt de waarde vervangen door echte zoektermgegevens.
 
           Dit beleid is optioneel. Als het beleid niet is ingesteld, wordt de voorgestelde zoekopdracht verzonden met de GET-methode.
@@ -2264,6 +2351,17 @@
 <translation id="4906194810004762807">Vernieuwingsfrequentie voor apparaatbeleid</translation>
 <translation id="4917385247580444890">Sterk</translation>
 <translation id="4923806312383904642">WebDriver toestaan niet-compatibele beleidsregels te negeren</translation>
+<translation id="4929721861648439998">De toegankelijkheidsfunctie voor monogeluid op het inlogscherm inschakelen.
+
+          Met deze functie kun je de apparaatmodus snel overschakelen van het standaard stereogeluid naar monogeluid.
+
+          Als dit beleid is ingesteld op True, is monogeluid altijd ingeschakeld op het inlogscherm.
+
+          Als dit beleid is ingesteld op False, is monogeluid altijd uitgeschakeld op het inlogscherm.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of overschrijven.
+
+          Als dit beleid niet is ingesteld, is monogeluid in eerste instantie uitgeschakeld op het inlogscherm. De gebruiker kan deze functie op elk gewenst moment inschakelen.</translation>
 <translation id="494613465159630803">Cast-receiver</translation>
 <translation id="494924690085329212">Opnieuw opstarten bij uitloggen gebruiker als Android is gestart.</translation>
 <translation id="4962262530309732070">Als dit beleid is ingesteld op 'True' of niet wordt geconfigureerd, staat <ph name="PRODUCT_NAME" /> 'Persoon toevoegen' toe vanuit gebruikersbeheer.
@@ -2474,6 +2572,15 @@
 <translation id="5272684451155669299">Als dit beleid is ingesteld op 'True', kan de gebruiker met de hardware van Chrome-apparaten de identiteit ervan extern bevestigen aan de privacy-CA via de <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> met <ph name="CHALLENGE_USER_KEY_FUNCTION" />.
 
           Als dit beleid is ingesteld op 'False' of niet is ingesteld, mislukt het aanroepen van de API en wordt er een foutcode weergegeven.</translation>
+<translation id="5273744932022326215">De toegankelijkheidsfunctie voor cursormarkering op het inlogscherm inschakelen.
+
+          Als dit beleid is ingesteld op True, is cursormarkering altijd ingeschakeld op het inlogscherm.
+
+          Als dit beleid is ingesteld op False, is cursormarkering altijd uitgeschakeld op het inlogscherm.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of overschrijven.
+
+          Als je dit beleid niet instelt, is cursormarkering in eerste instantie uitgeschakeld op het inlogscherm. De gebruiker kan deze functie op elk gewenst moment inschakelen.</translation>
 <translation id="5277806246014825877">Deze gebruiker toestaan om Crostini uit te voeren.
 
       Als dit beleid is ingesteld op 'False', is Crostini niet ingeschakeld voor de gebruiker.
@@ -2481,6 +2588,7 @@
       Alle drie beleidsregels (VirtualMachinesAllowed, CrostiniAllowed en DeviceUnaffiliatedCrostiniAllowed) moeten voor Crostini zijn ingesteld op 'True' om Crostini te kunnen uitvoeren.
       Wanneer dit beleid wordt gewijzigd in 'False', is het beleid van toepassing op nieuwe Crostini-containers die worden gestart. Containers die al worden uitgevoerd, worden niet uitgeschakeld.</translation>
 <translation id="5283457834853986457">Plug-inzoeker uitschakelen (beëindigd)</translation>
+<translation id="5285315763984334157">Schadelijke downloads blokkeren</translation>
 <translation id="5288772341821359899">Als het beleid is ingesteld, wordt het door WebRTC gebruikte UDP-poortbereik beperkt tot het opgegeven poortinterval (inclusief eindpunten).
 
       Als het beleid niet wordt ingesteld, of als dit wordt ingesteld voor een lege tekenreeks of een ongeldig poortbereik, kan WebRTC gebruikmaken van elke lokale UDP-poort.</translation>
@@ -2527,6 +2635,17 @@
 
           Opmerking: <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" /> overschrijft dit beleid als het is opgegeven.</translation>
 <translation id="538108065117008131"><ph name="PRODUCT_FRAME_NAME" /> toestaan de volgende soorten content te verwerken.</translation>
+<translation id="538768040137709073">De functie voor gedeeld klembord inschakelen, waarmee gebruikers tekst kunnen verzenden tussen Chrome-desktops en een Android-apparaat als synchronisatie is ingeschakeld en de gebruiker is ingelogd.
+
+          Als dit beleid is ingesteld op True, is de mogelijkheid om tekst tussen apparaten te verzenden ingeschakeld voor Chrome-gebruikers.
+
+          Als dit beleid is ingesteld op False, is de mogelijkheid om tekst tussen apparaten te verzenden uitgeschakeld voor Chrome-gebruikers.
+
+          Als je dit beleid instelt, kunnen gebruikers dit niet wijzigen of overschrijven.
+
+          Als dit beleid niet is ingesteld, is de functie voor gedeeld klembord standaard uitgeschakeld.
+
+          Beheerder kunnen zelf beleidsregels voor alle gewenste platforms instellen. We raden je aan dit beleid op één waarde in te stellen voor alle platforms.</translation>
 <translation id="5391388690191341203">Lokaal account op apparaat voor automatisch inloggen</translation>
 <translation id="5392172595902933844">Informatie over de status van Android wordt teruggestuurd naar de
       server.
@@ -2616,7 +2735,6 @@
 <translation id="5457065417344056871">De gastmodus inschakelen in browser</translation>
 <translation id="5457924070961220141">Hiermee kun je de standaard HTML-renderer configureren wanneer <ph name="PRODUCT_FRAME_NAME" /> is geïnstalleerd.
           De standaardinstelling die wordt gebruikt wanneer dit beleid niet wordt ingesteld, wordt gebruikt om de hostbrowser de rendering te laten regelen, maar je kunt dit naar wens aanpassen en <ph name="PRODUCT_FRAME_NAME" /> HTML-pagina's standaard laten renderen.</translation>
-<translation id="5458584148602890023">Stroompiekverschuiving inschakelen</translation>
 <translation id="5464816904705580310">Hiermee configureer je instellingen voor beheerde gebruikers.</translation>
 <translation id="546726650689747237">Vertraging van dimmen van scherm wanneer op netstroom wordt gewerkt</translation>
 <translation id="5469143988693423708">Gebruiker mag Crostini uitvoeren</translation>
@@ -2775,6 +2893,7 @@
 
           Het gebruik van meerdere door komma's gescheiden extensie-ID's wordt vóór versie 75 niet ondersteund en wordt overgeslagen. De rest van het beleid geldt nog wel.</translation>
 <translation id="5645779841392247734">Cookies toestaan op deze sites</translation>
+<translation id="5656177735561364047">De functie voor gedeeld klembord inschakelen</translation>
 <translation id="5666457529647159548">Gebruikers toestaan geïnstalleerde clientcertificaten te beheren.</translation>
 <translation id="5689430183304951538">Standaard paginagrootte voor afdrukken</translation>
 <translation id="5693469654327063861">Gegevensmigratie toestaan</translation>
@@ -2816,6 +2935,11 @@
       Als dit beleid niet is ingesteld of is ingesteld op 'false', gebruikt <ph name="PRODUCT_NAME" /> de bestaande instellingen voor online intrekkingscontrole.</translation>
 <translation id="5728154254076636808">Het maken van roaming-exemplaren voor <ph name="PRODUCT_NAME" />-profielgegevens inschakelen</translation>
 <translation id="5732972008943405952">Formuliergegevens voor Automatisch aanvullen importeren uit standaardbrowser bij eerste uitvoering</translation>
+<translation id="574098933844699859">Aangeven of de systeemgegevens (bijv. Chrome OS-versie, serienummer van apparaat) altijd worden weergegeven (of verborgen) op het inlogscherm.
+
+      Als het beleid is ingesteld op True, worden systeemgegevens gedwongen weergegeven op het inlogscherm.
+      Als het beleid is ingesteld op False, worden systeemgegevens gedwongen verborgen op het inlogscherm.
+      Als het beleid niet is ingesteld, is het standaardgedrag (de systeemgegevens worden weergegeven voor het Canary-/Dev-kanaal) van kracht. Gebruikers kunnen de zichtbaarheid in- en uitschakelen met specifieke bewerkingen (bijv. Alt-V).</translation>
 <translation id="5741810844420698449">Als dit beleid is ingesteld, wordt hiermee de actie gespecificeerd die <ph name="PRODUCT_OS_NAME" /> uitvoert wanneer de gebruiker de klep van het apparaat sluit.
 
           Als dit beleid niet is ingesteld, wordt de standaardactie uitgevoerd. De standaardactie is opschorten.
@@ -2941,6 +3065,16 @@
 <translation id="6076099373507468537">Hiermee wordt de lijst met USB-apparaten gedefinieerd die mogen worden ontkoppeld van hun kernel-driver, zodat ze via de chrome.usb-API rechtstreeks kunnen worden gebruikt in een webapplicatie. Items zijn paren van de ID van de USB-leverancier en de ID van het product, zodat specifieke hardware kan worden geïdentificeerd.
 
       Als dit beleid niet is geconfigureerd, is de lijst met USB-apparaten die kunnen worden ontkoppeld leeg.</translation>
+<translation id="607726879389885889">Met dit beleid bepaal je hoe <ph name="PRODUCT_NAME" /> werkt als een gebruiker bestanden probeert te uploaden of te downloaden die te groot zijn om te verzenden voor malwarescans of contentscans voor beveiliging van gevoelige gegevens (50 MB of groter).  Deze beperking geldt alleen voor bestanden die moeten worden gescand, zoals bepaald door <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> en de beleidsregels die de lijst met domeinen beheren waarvoor controles zijn ingeschakeld.
+
+      Als dit beleid niet is ingeschakeld of is ingesteld op 'Geen', staat <ph name="PRODUCT_NAME" /> toe dat de gebruiker bestanden van elke grootte uploadt of downloadt.
+
+      Als dit beleid is ingesteld op 'Grote bestanden blokkeren', worden bestanden die te groot zijn om te worden gescand, verwijderd voordat ze beschikbaar komen voor de gebruiker.  Omdat de grootte niet altijd vóór het downloaden kan worden bepaald, kan <ph name="PRODUCT_NAME" /> bestanden downloaden en vervolgens vaststellen dat ze de toegestane grootte overschrijden.
+
+      Als dit beleid is ingesteld op 'Grote uploads blokkeren', kunnen bestanden die te groot zijn om te worden gescand, niet worden geselecteerd voor uploaden.
+
+      Als dit beleid is ingesteld op 'Grote bestandsuploads en -downloads blokkeren', werkt <ph name="PRODUCT_NAME" /> in overeenstemming met de regels die worden beschreven onder 'Grote downloads blokkeren' en 'Grote uploads blokkeren'.
+      </translation>
 <translation id="6083631234867522991">Windows (Windows-clients):</translation>
 <translation id="608788685013546076">Drempel voor stroompiekverschuiving van batterij instellen in procenten</translation>
 <translation id="6089679180657323464">Hiermee beheer je de instellingen voor wilco DTC.</translation>
@@ -3083,6 +3217,7 @@
 <translation id="637934607141010488">Lijst melden met apparaatgebruikers die onlangs zijn ingelogd.
 
       Als het beleid is ingesteld op 'false', worden de gebruikers niet gemeld.</translation>
+<translation id="638668187106406971">Controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation>
 <translation id="6394350458541421998">Dit beleid wordt niet meer gebruikt sinds <ph name="PRODUCT_OS_NAME" /> versie 29. Gebruik het beleid PresentationScreenDimDelayScale.</translation>
 <translation id="6401669939808766804">De gebruiker uitloggen</translation>
 <translation id="6406448383934634215">Als 'Een lijst met URL's openen' voor het opstarten is geselecteerd, kun je hier de lijst met URL's specificeren die worden geopend. Als je dit niet selecteert, worden er geen URL's geopend na het starten.
@@ -3329,6 +3464,7 @@
 <translation id="6923366716660828830">Hiermee wordt de naam van de standaardzoekprovider gespecificeerd. Als dit leeg is of niet wordt ingesteld, wordt de hostnaam gebruikt die door de zoek-URL wordt gespecificeerd.
 
           Dit beleid wordt alleen gebruikt als het beleid 'DefaultSearchProviderEnabled' is ingeschakeld.</translation>
+<translation id="6923731550900440989">De markering van het caret-teken op het inlogscherm inschakelen.</translation>
 <translation id="6924223708804692571">Talen voor spellingcontrole worden gedwongen uitgeschakeld. Niet-herkende talen in de lijst worden genegeerd.
 
       Als je dit beleid inschakelt, wordt de spellingcontrole uitgeschakeld voor de gespecificeerde talen. De gebruiker kan de spellingcontrole nog steeds in- of uitschakelen voor talen die niet op de lijst staan.
@@ -3710,6 +3846,7 @@
 <translation id="7433714841194914373">Instant inschakelen</translation>
 <translation id="7434202861148928348">De vereiste domeinnamen configureren voor clients voor externe toegang</translation>
 <translation id="7443616896860707393">Prompts voor algemene HTTP-authenticatie met verschillende herkomst</translation>
+<translation id="7448430478749155471">De toegankelijkheidsfunctie 'Selecteer om uitgesproken te worden' op het inlogscherm inschakelen</translation>
 <translation id="7454519673779830548">Voegt vooraf ingevulde Kerberos-accounts toe. Als de Kerberos-gegevens overeenkomen met de inloggegevens, kan een account worden geconfigureerd om de inloggegevens opnieuw te gebruiken door '${{LOGIN_EMAIL}}' en '${{PASSWORD}}' te specificeren voor respectievelijk het hoofdaccount en wachtwoord, zodat het Kerberos-ticket automatisch kan worden opgehaald, tenzij verificatie in twee stappen is geconfigureerd. Gebruikers kunnen accounts die zijn toegevoegd via dit beleid niet aanpassen.
 
           Als dit beleid is ingeschakeld, wordt de lijst met accounts die is gespecificeerd door het beleid, toegevoegd aan de instellingen voor Kerberos-accounts.
@@ -3988,6 +4125,10 @@
           Als deze instelling is uitgeschakeld en uitgaande UDP-verbindingen worden gefilterd door de firewall, kan dit apparaat alleen verbinding maken met hosts binnen het lokale netwerk.</translation>
 <translation id="7976157349247117979">Naam van de bestemming van <ph name="PRODUCT_NAME" /></translation>
 <translation id="7980227303582973781">Geen speciale beperkingen</translation>
+<translation id="7983900606645681371">Een lijst met domeinen waarvoor geüploade bestanden, gegevens die zijn geplakt vanaf het klembord of gegevens die zijn gesleept en neergezet niet hoeven te worden gecontroleerd op schendingen van de beveiligingsregels voor gevoelige gegevens.  Dit beleid wordt alleen gebruikt als <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> is ingeschakeld.
+
+      Als dit beleid niet is ingesteld of is ingesteld op een lege lijst met domeinen, wordt alle content gecontroleerd op schendingen van de beveiligingsregels voor gevoelige gegevens.
+      </translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="798856998567564266">Als je deze instelling inschakelt, kunnen bladwijzers worden toegevoegd, verwijderd of aangepast. Dit is ook de standaardinstelling wanneer dit beleid niet is ingesteld.
 
@@ -4001,6 +4142,7 @@
       Wanneer dit beleid niet is ingesteld op een beheerd apparaat, mogen er geen virtuele machines worden uitgevoerd op het apparaat.
       Virtuele machines mogen worden uitgevoerd op onbeheerde apparaten.</translation>
 <translation id="8001701200415781021">Beperken welke Google-accounts mogen worden ingesteld als primaire browseraccounts in <ph name="PRODUCT_NAME" /></translation>
+<translation id="8003853057959146975">Bestanden verzenden voor controle op schendingen van de beveiligingsregels voor gevoelige gegevens</translation>
 <translation id="8009554972280451023">Als je deze instelling inschakelt, worden de instellingen die zijn opgeslagen in <ph name="PRODUCT_NAME" />-profielen, zoals bladwijzers, gegevens voor automatisch aanvullen, wachtwoorden, enzovoort, ook geschreven naar een bestand dat is opgeslagen in de map voor roaming-gebruikersprofielen of op een locatie die de beheerder heeft opgegeven via het beleid <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. Als je dit beleid inschakelt, wordt cloudsynchronisatie uitgeschakeld.
 
       Als dit beleid is uitgeschakeld of niet wordt ingesteld, worden alleen de gewone lokale profielen gebruikt.
@@ -4472,6 +4614,7 @@
           De aanbevolen manier om het scherm bij inactiviteit te vergrendelen is door schermvergrendeling bij onderbreking in te schakelen en <ph name="PRODUCT_OS_NAME" /> te onderbreken na de inactieve vertraging. Dit beleid mag alleen worden gebruikt wanneer schermvergrendeling veel eerder voorkomt dan onderbreking of wanneer onderbreking bij inactiviteit helemaal niet gewenst is.
 
           De beleidswaarde moet worden opgegeven in milliseconden. Waarden moeten lager zijn dan de inactieve vertraging.</translation>
+<translation id="8911348623012274122">Geheugenlimiet instellen voor Chrome-instanties</translation>
 <translation id="891435090623616439">gecodeerd als een JSON-tekenreeks. Ga voor meer informatie naar <ph name="COMPLEX_POLICIES_URL" /></translation>
 <translation id="8917070657147922192">Gebruikers toestaan geïnstalleerde CA-certificaten te beheren.</translation>
 <translation id="8934944553121392674">Hiermee wordt beheerd welke printers uit <ph name="DEVICE_PRINTERS_POLICY" /> beschikbaar zijn voor gebruikers.
@@ -4512,6 +4655,7 @@
 <translation id="8942616385591203339">Dit beleid bepaalt of er informatie over toestemming voor synchronisatie mag worden getoond aan de gebruiker wanneer deze voor het eerst inlogt. De waarde moet op 'False' worden ingesteld als er nooit toestemming voor synchronisatie is vereist voor de gebruiker.
       Als dit is ingesteld op 'False', wordt er geen informatie over toestemming voor synchronisatie weergegeven.
       Als dit is ingesteld op 'True' of als dit niet is ingesteld, kan er informatie over toestemming voor synchronisatie worden weergegeven.</translation>
+<translation id="8943934315109955032">Niet controleren op schendingen van de beveiligingsregels voor gevoelige gegevens</translation>
 <translation id="894510252300143386">Hiermee worden extensiebeheerinstellingen voor <ph name="PRODUCT_NAME" /> geconfigureerd.
 
           Met dit beleid worden meerdere instellingen beheerd, waaronder instellingen die worden beheerd door bestaande, aan extensies gerelateerde beleidsregels. Dit beleid overschrijft alle oudere beleidsregels als beide zijn ingesteld.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 1a6bdc4..fa1915a 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -169,6 +169,7 @@
 <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.
 
       O padrão é RollbackDisabled.</translation>
+<translation id="1220047093962987554">Verifica em tempo real o status dos URLs visitados no "Navegação segura"</translation>
 <translation id="1221359380862872747">Carrega os urls especificados no login de demonstração</translation>
 <translation id="1223789468190631420">Ativar Navegação segura para fontes confiáveis</translation>
 <translation id="122899932962115297">Uma lista de permissões que controla quais modos de desbloqueio rápido o usuário pode configurar e usar para desbloquear a tela de bloqueio.
@@ -189,11 +190,14 @@
 <translation id="1243570869342663665">Controlar a filtragem de conteúdo adulto SafeSites.</translation>
 <translation id="1257550411839719984">Definir diretório de download padrão</translation>
 <translation id="1265053460044691532">Limite o tempo pelo qual um usuário autenticado via SAML pode fazer login off-line</translation>
+<translation id="127264587838521316">Ativa as solicitações de instalação de extensões do <ph name="PRODUCT_NAME" /></translation>
 <translation id="1290634681382861275">Controla diversas configurações, inclusive USB, Bluetooth, atualização de políticas, modo de desenvolvedor, entre outras.</translation>
 <translation id="1291880496936992484">Atenção: o RC4 será completamente removido de <ph name="PRODUCT_NAME" /> após a versão 52 (por volta de setembro de 2016), e esta política parará de funcionar.
 
       Se a política ainda não estiver configurada ou estiver configurada como "false", os pacotes de criptografia RC4 em TLS não serão ativados. Caso contrário, ela poderá ser configurada como "true" para manter a compatibilidade com um servidor desatualizado. Esta é uma medida temporária, e o servidor deve ser reconfigurado.</translation>
+<translation id="1295737447968372331">Ativa o ditado na tela de login</translation>
 <translation id="1297182715641689552">Usar um script de proxy .pac</translation>
+<translation id="1297961932043741908">Define um limite, em megabytes, para a memória que uma única instância do Chrome pode usar.</translation>
 <translation id="1304973015437969093">IDs de extensões//aplicativos e URLs de atualização deverão ser instalados silenciosamente</translation>
 <translation id="1307454923744766368">Origens ou padrões de nome de host aos quais as restrições sobre
       origens não seguras não se aplicam</translation>
@@ -585,6 +589,7 @@
       Se ativar ou desativar esta configuração, os usuários não poderão alterá-la ou substituí-la no <ph name="PRODUCT_NAME" />.
 
 Se esta configuração for deixada sem definição, os usuários poderão optar por utilizar ou não essa função.</translation>
+<translation id="1999000620918508488">Força a tela de login a exibir ou ocultar informações do sistema.</translation>
 <translation id="2006530844219044261">Gerenciamento de energia</translation>
 <translation id="2014757022750736514">Controla o comportamento da tela de login, onde o usuário se conecta à própria conta. As configurações incluem quem pode fazer login, que tipo de conta é permitido, que métodos de autenticação precisam ser usados, além de configurações gerais de acessibilidade, método de entrada e localidade.</translation>
 <translation id="201557587962247231">Frequência de uploads de relatórios de status do dispositivo</translation>
@@ -600,12 +605,18 @@
 <translation id="2024476116966025075">Configurar o nome de domínio obrigatório para clientes de acesso remoto</translation>
 <translation id="2030905906517501646">Palavra-chave do provedor de pesquisa padrão</translation>
 <translation id="203096360153626918">Esta política não tem nenhum efeito sobre os apps Android. Eles poderão entrar no modo de tela cheia mesmo se a política estiver definida como <ph name="FALSE" />.</translation>
+<translation id="2043749682619281558">Ativa o destaque de cursor na tela de login</translation>
 <translation id="2043770014371753404">Impressoras empresariais desativadas</translation>
 <translation id="2050629715135525072">Controla a habilidade de um usuário de transferir arquivos entre o cliente e o host quando ele está conectado a um host de acesso remoto. Isso não se aplica a conexões de assistência remota, que não são compatíveis com transferência de arquivos.
 
           Se essa configuração for desativada, a transferência de arquivos não será permitida. Se essa configuração for ativada ou não for definida, a transferência de arquivos será permitida.</translation>
 <translation id="2057317273526988987">Permitir acesso a uma lista de URLs</translation>
 <translation id="2061810934846663491">Configurar os nomes de domínio obrigatórios para hosts de acesso remoto</translation>
+<translation id="2063663607822994541">Configurar a quantidade de memória que uma única instância do <ph name="PRODUCT_NAME" /> pode usar antes que as abas comecem a ser descartadas (isto é, a memória usada por uma aba será liberada, e a aba terá que ser recarregada ao ser aberta novamente) para economizar memória.
+
+      Se a política for definida, o navegador começará a descartar abas para economizar memória quando o limite for excedido. Entretanto, não há garantia de que o navegador seja sempre executado dentro dos limites. Qualquer valor abaixo de 2.048 será arredondado para esse número.
+
+      Se esta política não for definida, o navegador só começará a economizar memória quando detectar que a quantidade de memória física da máquina está baixa.</translation>
 <translation id="206623763829450685">Especifica quais esquemas de autenticação HTTP são compatíveis com <ph name="PRODUCT_NAME" />.
 
           Os valores possíveis são "básico", "resumo", "ntlm" e "negociar". Separe valores múltiplos com vírgulas.
@@ -616,6 +627,7 @@
 <translation id="2077129598763517140">Usar aceleração de hardware quando disponível</translation>
 <translation id="2077273864382355561">Intervalo de desligamento da tela no funcionamento com energia da bateria</translation>
 <translation id="2082205219176343977">Configurar a versão mínima permitida do Chrome para o dispositivo.</translation>
+<translation id="2084647819368766928">Lista de domínios que não precisam de verificação de violações da regra de proteção de dados confidenciais em conteúdo enviado por upload.</translation>
 <translation id="209586405398070749">Canal Estável</translation>
 <translation id="2098658257603918882">Ativar relato de uso e dados relacionados a falhas</translation>
 <translation id="2104418465060359056">Fornecer informações sobre extensões e plug-ins</translation>
@@ -774,6 +786,16 @@
       Se esta configuração é ativada, o histórico de navegação não é salvo. Esta configuração também desativa a sincronização de guias.
 
       Se esta configuração é desativada ou não é definida, o histórico de navegação é salvo.</translation>
+<translation id="2423038190900972331">Controlar como o <ph name="PRODUCT_NAME" /> verifica se há violações da regra de proteção de dados confidenciais em dados que são enviados, transferidos por download, colados da área de transferência ou arrastados e soltos.
+
+      Se esta política não for definida ou for definida com "Nenhum", o <ph name="PRODUCT_NAME" /> não verificará em nenhum dos dados se há violações da regra de proteção de dados confidenciais.
+
+      Se esta política for definida como "Verificar downloads", e o usuário tentar fazer o download de um arquivo de um URL na política <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, o <ph name="PRODUCT_NAME" /> verificará a conformidade dos dados transferidos por download com as regras da empresa.
+
+      Se esta política for definida como "Verificar uploads", e o usuário tentar fazer upload de um arquivo para um domínio que não esteja na <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, o <ph name="PRODUCT_NAME" /> verificará a conformidade com as regras da empresa no arquivo enviado, nos dados colados da área de transferência ou nos dados arrastados e soltos.
+
+      Se esta política for definida como "Verificar uploads e downloads", o <ph name="PRODUCT_NAME" /> vai se comportar de acordo com as regras descritas em "Verificar downloads" e "Verificar uploads".
+      </translation>
 <translation id="2426782419955104525">Ativa o recurso Instant do <ph name="PRODUCT_NAME" /> e impede que os usuários alterem essa configuração.
 
       Se você ativar essa configuração, o Instant do <ph name="PRODUCT_NAME" /> será ativado.
@@ -914,6 +936,10 @@
       Se esta política for definida, o usuário não poderá alterá-la ou modificá-la.
 
       Após a ativação do Bluetooth, o usuário precisa sair e fazer login novamente para que as alterações entrem em vigor. Essa ação não é necessária ao desativar o Bluetooth.</translation>
+<translation id="2570498106495954914">Lista de domínios que precisam de verificação quanto a violações da regra de proteção de dados confidenciais de dados transferidos por download antes de serem salvos no armazenamento local.  Esta política será usada apenas se a <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> for definida como ativada.
+
+      Se esta política não for definida ou for definida como uma lista de domínios vazia, nenhum conteúdo transferido por download será verificado quanto a violações da regra de proteção de dados confidenciais.
+      </translation>
 <translation id="2571066091915960923">Ativa ou desativa o proxy de compactação de dados e impede que os usuários alterem essa configuração.
 
       Se você ativar ou desativar essa configuração, os usuários não poderão alterá-la ou substituí-la.
@@ -975,6 +1001,23 @@
 <translation id="268577405881275241">Ativar o recurso de proxy de compactação de dados</translation>
 <translation id="2693108589792503178">Configure o URL de alteração de senha.</translation>
 <translation id="2694143893026486692">Lupa ancorada ativada</translation>
+<translation id="2694188263972877487">Configurar o tipo de download que o <ph name="PRODUCT_NAME" /> bloqueará totalmente sem permitir que os usuários substituam a decisão de segurança.
+
+      Se você definir esta política, o <ph name="PRODUCT_NAME" /> impedirá certos tipos de downloads e não permitirá que o usuário ignore os avisos de segurança.
+
+      Quando a opção "Bloquear downloads perigosos" for escolhida, todos os downloads serão permitidos, exceto os que tiverem avisos do "Navegação segura".
+
+      Quando a opção "Bloquear downloads possivelmente perigosos" for escolhida, todos os downloads serão permitidos, exceto os que tiverem avisos de download possivelmente perigoso do "Navegação segura".
+
+      Quando a opção "Bloquear todos os downloads" for escolhida, todos os downloads serão bloqueados.
+
+      Quando a opção "Bloquear downloads maliciosos" for escolhida, todos os downloads serão permitidos, exceto os que o "Navegação segura" avaliar com grande certeza como malware. Diferentemente dos downloads perigosos, esta política não considerao tipo de arquivo, mas sim o host.
+
+      Quando esta política não for definida (ou a opção "Nenhuma restrição especial" for escolhida), as restrições de segurança normais dos downloads terão como base os resultados da análise do "Navegação segura".
+
+      Essas restrições são válidas para downloads acionados a partir do conteúdo da página da Web, assim como da opção do menu de contexto "link para download". Essas restrições não são válidas para as opções de salvar / fazer o download da página exibida no momento, nem se aplicam à opção de salvar como PDF nas opções de impressão.
+
+      Consulte https://developers.google.com/safe-browsing para ver mais informações sobre o recurso "Navegação segura".</translation>
 <translation id="2706708761587205154">Permitir impressão apenas com PIN</translation>
 <translation id="2710534340210290498">Se esta política for definida como falsa, os usuários não conseguirão bloquear a tela, apenas sair da sessão do usuário. Se esta política for definida como verdadeira ou não for definida, os usuários que tiverem feito a autenticação com uma senha poderão bloquear a tela.</translation>
 <translation id="2731627323327011390">Desativar o uso de certificados do <ph name="PRODUCT_OS_NAME" /> para apps Arc</translation>
@@ -1414,6 +1457,15 @@
           Se esta política for definida como "Falsa" ou não for definida, os intervalos de gerenciamento de energia e o limite de duração da sessão começarão a ser contados imediatamente após o início da sessão.</translation>
 <translation id="3478024346823118645">Limpa os dados do usuário ao sair</translation>
 <translation id="3480961938508521469">Carregar totalmente a bateria na velocidade padrão.</translation>
+<translation id="348110646151632565">Ativar o recurso de acessibilidade "Selecionar para ouvir" na tela de login.
+
+          Se esta política for definida como verdadeira, o recurso "Selecionar para ouvir" sempre ficará ativado na tela de login.
+
+          Se esta política for definida como falsa, o recurso "Selecionar para ouvir" sempre ficará desativado na tela de login.
+
+          Se você definir esta política, os usuários não poderão alterá-la nem substituí-la.
+
+          Se esta política não for definida, o recurso "Selecionar para ouvir" ficará inicialmente desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation>
 <translation id="3483729306380590354">Configurar o início do carregamento personalizado da bateria, em porcentagem.
 
           A bateria começará a ser carregada ao chegar no valor inicial do carregamento personalizado.
@@ -1450,6 +1502,7 @@
 
           Esta política só é respeitada se a política "DefaultSearchProviderEnabled" policy estiver ativada.</translation>
 <translation id="350797926066071931">Ativar Traduzir</translation>
+<translation id="3508047333410537654">Ativa o áudio mono na tela de login</translation>
 <translation id="3513655665999652754">O servidor Quirks fornece arquivos de configuração específicos de hardware, como perfis de exibição ICC para ajustar a calibração do monitor.
 
       Quando esta política for definida como falsa, o dispositivo não tentará entrar em contato com o servidor Quirks para fazer o download dos arquivos de configuração.
@@ -1498,6 +1551,7 @@
 <translation id="3591527072193107424">Ativa o recurso "Suporte a navegadores legados".</translation>
 <translation id="3591584750136265240">Configura o comportamento de autenticação de login</translation>
 <translation id="3617743504695003280">Permite que uma página execute solicitações XHR síncronas durante a dispensa de páginas.</translation>
+<translation id="3624515566460517364">Verifica violações da regra de proteção de dados confidenciais em uploads e downloads</translation>
 <translation id="3627678165642179114">Ativar ou desativar serviço da web de verificação ortográfica</translation>
 <translation id="3628480121685794414">Ativar impressão simplex</translation>
 <translation id="3631099945620529777">Se definida como falsa, o botão "Encerrar processo" será desativado no Gerenciador de tarefas.
@@ -1583,6 +1637,15 @@
       Se esta política não for definida, será usado o diretório de download padrão, e o usuário poderá alterá-lo.</translation>
 <translation id="3805659594028420438">Ativar extensão dos certificados vinculados ao domínio TLS (obsoleto)</translation>
 <translation id="3808945828600697669">Especificar uma lista de plug-ins desativados</translation>
+<translation id="3810642039169532482">Ativar o recurso de acessibilidade de ditado na tela de login.
+
+          Se esta política for definida como verdadeira, o ditado sempre ficará ativado na tela de login.
+
+          Se esta política for definida como falsa, o ditado sempre ficará desativado na tela de login.
+
+          Se você definir esta política, os usuários não poderão alterá-la nem substituí-la.
+
+          Se esta política não for definida, o ditado ficará inicialmente desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation>
 <translation id="3811562426301733860">Permitir anúncios em todos os sites</translation>
 <translation id="3816312845600780067">Ativar atalho do teclado dp plano de salvação para login automático</translation>
 <translation id="3820526221169548563">Ativa o recurso de acessibilidade ao teclado na tela.
@@ -1650,6 +1713,7 @@
       Cada entrada da lista contém um dicionário que deve incluir a identificação de extensão no campo 'extensão-id', e o URL de atualização no campo 'update-url'.</translation>
 <translation id="3874773863217952418">Ativar "Tocar para pesquisar"</translation>
 <translation id="3877517141460819966">Modo de autenticação de segundo fator integrado</translation>
+<translation id="3879196885908353077">Verifica violações da regra de proteção de dados confidenciais em downloads</translation>
 <translation id="3879208481373875102">Configurar a lista de apps da Web de instalação forçada</translation>
 <translation id="388237772682176890">O uso dessa política foi suspenso no M53 e removido no M54, porque a compatibilidade com o SPDY/3.1 foi removida.
 
@@ -1751,6 +1815,7 @@
 <translation id="4027608872760987929">Ativar o provedor de pesquisa padrão</translation>
 <translation id="4039085364173654945">Controla se o subconteúdo de terceiros em uma página pode acionar pop-up de uma caixa de diálogo básica de autorização HTTP. Normalmente, esta função é desativada como proteção contra phishing. Se esta política não estiver definida, a função é desativada e o subconteúdo de terceiros não terá permissão para acionar pop-up de uma caixa de diálogo básica de autorização HTTP.</translation>
 <translation id="4056910949759281379">Desativar o protocolo SPDY</translation>
+<translation id="4075864623710596000">Os nomes de host especificados nesta lista estarão isentos da verificação de política HSTS que poderia fazer upgrade de solicitações de http para https. Apenas nomes de host de etiqueta única são permitidos nesta política. Nomes de host precisam ser canonizados: todos os IDNs precisam ser convertidos no formato de etiqueta A, e todas as letras ASCII precisam ser minúsculas. Esta política se aplica apenas aos nomes de host especificados. Ela não se aplica a subdomínios dos nomes especificados.</translation>
 <translation id="408029843066770167">Permitir consultas a um serviço de hora do Google</translation>
 <translation id="408076456549153854">Ativar login no navegador</translation>
 <translation id="40853027210512570">Substitui as regras de seleção da impressora padrão do <ph name="PRODUCT_NAME" />.
@@ -1848,6 +1913,15 @@
 <translation id="4171331498167688968">Se a política for definida como falsa, o software de terceiros terá permissão para injetar um código executável nos processos do Chrome. Se a política não for definida ou for definida como verdadeira, o software de terceiros será impedido de injetar o código executável nos processos do Chrome.
 
       No momento, independentemente do valor desta política, o navegador não bloqueará a injeção de código executável por software de terceiros nos próprios processos em uma máquina conectada a um domínio do <ph name="MS_AD_NAME" />.</translation>
+<translation id="417956245902013347">Ativar o recurso de acessibilidade de destaque de circunflexos na tela de login.
+
+          Se esta política for definida como verdadeira, o destaque de circunflexos sempre ficará ativado na tela de login.
+
+          Se esta política for definida como falsa, o destaque de circunflexos sempre ficará desativado na tela de login.
+
+          Se você definir esta política, os usuários não poderão alterá-la nem substituí-la.
+
+          Se esta política não for definida, o destaque de circunflexos ficará desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation>
 <translation id="4183229833636799228">Configuração padrão de <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="4192388905594723944">URL para validação do token de autenticação do cliente de acesso remoto</translation>
 <translation id="420007931282384740">Definir o estado padrão do recurso de acessibilidade de teclado na tela de login.
@@ -2052,6 +2126,7 @@
 
           Se essa política for definida como falsa, o <ph name="PRODUCT_NAME" /> será desativado.</translation>
 <translation id="4510923771103268849">O usuário tem permissão de acesso root aos contêineres do Crostini</translation>
+<translation id="4513262269532252501">Lista de domínios que precisam de verificação quanto a violações da regra de proteção de dados confidenciais para conteúdo transferido por download.</translation>
 <translation id="4515404363392014383">Ativar a Navegação segura para fontes confiáveis</translation>
 <translation id="4517928394515633751">Verificar downloads de usuários com o "Navegação segura"</translation>
 <translation id="4518251772179446575">Perguntar sempre que um site quiser rastrear a localização física dos usuários</translation>
@@ -2092,6 +2167,14 @@
           Se esta política for definida como "true", por padrão, as teclas superiores do teclado funcionarão como teclas de função. A tecla de pesquisa deve estar pressionada para revertê-las novamente para teclas de mídia.
 
           Se esta política for definida como "false", ou se não for definida, o teclado, por padrão, funcionará com comandos de tecla de mídia e comandos de tecla de função, quando a tecla de pesquisa estiver pressionada.</translation>
+<translation id="4636613705027089602">Esta política controla as solicitações de instalação de extensões do <ph name="PRODUCT_NAME" /> que permitem que os usuários enviem as solicitações ao Google Admin Console para aprovação.
+
+      Quando a política não é definida ou é desativada, as solicitações de instalação de extensões não são criadas nem enviadas.
+      Quando esta política é ativada, as solicitações de instalação de extensões são criadas e enviadas ao Google Admin Console.
+
+      Essas solicitações são criadas quando os usuários tentam instalar uma extensão que não foi autorizada na <ph name="EXTENSION_INSTALL_WHITELIST" /> nem nas <ph name="EXTENSION_SETTINGS" />.
+
+      Esta política só é eficaz quando a máquina está inscrita no <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> e se <ph name="CLOUD_REPORTING_ENABLED" /> está ativado.</translation>
 <translation id="4639407427807680016">Nomes dos hosts de mensagens nativas a serem mantidos fora da lista de proibições</translation>
 <translation id="4650759511838826572">Desativar esquemas do protocolo de URL</translation>
 <translation id="465099050592230505">URL da loja on-line da empresa (uso suspenso)</translation>
@@ -2195,6 +2278,10 @@
 <translation id="4874982543810021567">Bloquear o WebUSB nesses sites</translation>
 <translation id="4876805738539874299">Versão máxima de SSL ativada</translation>
 <translation id="4887274746092315609">Ativa uma página para alteração de senha durante a sessão para usuários do SAML</translation>
+<translation id="4887863670424903990">Quando esta política é definida como ativada, o <ph name="PRODUCT_NAME" /> informa ao Google se há eventos inseguros, por exemplo, reutilização de senha, downloads de malware, intersticiais, violações da regra de proteção de dados confidenciais etc., para que eles sejam analisados.  Alguns eventos não seguros, como violações da regra de proteção de dados confidenciais, dependem de outras políticas para ativar essas verificações.
+
+      Se esta política for desativada ou não for definida, o <ph name="PRODUCT_NAME" /> não informará eventos inseguros.
+      </translation>
 <translation id="4897928009230106190">Especifica os parâmetros usados ao pesquisar sugestões com POST. Consiste em pares de nomes/valores separados por vírgula. Se um valor for um parâmetro de modelo, como {searchTerms} no exemplo acima, ele será substituído por dados de termos de pesquisa reais.
 
           Esta política é opcional. Se não for definida, a solicitação de pesquisa de sugestão será enviada usando o método GET.
@@ -2213,6 +2300,17 @@
 <translation id="4906194810004762807">Taxa de atualização da Política de dispositivos</translation>
 <translation id="4917385247580444890">Forte</translation>
 <translation id="4923806312383904642">Permitir que o WebDriver modifique políticas incompatíveis</translation>
+<translation id="4929721861648439998">Ativar o recurso de acessibilidade de áudio mono na tela de login.
+
+          Esse recurso permite alternar o modo dispositivo do padrão, áudio estéreo, para o áudio mono.
+
+          Se esta política for definida como verdadeira, o áudio mono sempre ficará ativado na tela de login.
+
+          Se esta política for definida como falsa, o áudio mono sempre ficará desativado na tela de login.
+
+          Se você definir esta política, os usuários não poderão alterá-la nem substituí-la.
+
+          Se esta política não for definida, o áudio mono ficará desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation>
 <translation id="494613465159630803">Cast Receiver</translation>
 <translation id="494924690085329212">Será reinicializado quando o usuário sair se o Android tiver sido iniciado.</translation>
 <translation id="4962262530309732070">Se esta política for definida como verdadeira ou não for configurada, o <ph name="PRODUCT_NAME" /> permitirá a adição de uma pessoa no gerenciador de usuários.
@@ -2402,6 +2500,15 @@
 <translation id="5272684451155669299">Se esta política for definida como true, o usuário poderá usar o hardware em dispositivos Chrome para atestar remotamente sua identidade para a Privacy CA por meio da <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> usando <ph name="CHALLENGE_USER_KEY_FUNCTION" />.
 
           Se for definida como false ou não for definida, as chamadas para a API falharão e receberão um código de erro.</translation>
+<translation id="5273744932022326215">Ativar o recurso de acessibilidade de destaque de cursor na tela de login.
+
+          Se esta política for definida como verdadeira, o destaque de cursor sempre ficará ativado na tela de login.
+
+          Se esta política for definida como falsa, o destaque de cursor sempre ficará desativado na tela de login.
+
+          Se você definir esta política, os usuários não poderão alterá-la nem substituí-la.
+
+          Se esta política não for definida, o destaque de cursor ficará inicialmente desativado na tela de login, mas poderá ser ativado pelo usuário a qualquer momento.</translation>
 <translation id="5277806246014825877">Permitir que este usuário execute o Crostini.
 
       Se a política estiver definida como falsa, o Crostini não será ativado para o usuário.
@@ -2409,6 +2516,7 @@
       Todas as três políticas, VirtualMachinesAllowed, CrostiniAllowed e DeviceUnaffiliatedCrostiniAllowed precisam ser verdadeiras quando se aplicarem ao Crostini para que ele possa ser executado.
       Quando esta política é alterada para falsa, ela se aplica à criação de novos contêineres do Crostini, mas ela não encerra os contêineres que já estão em execução.</translation>
 <translation id="5283457834853986457">Desativar o localizador de plug-ins (uso suspenso)</translation>
+<translation id="5285315763984334157">Bloqueia downloads maliciosos</translation>
 <translation id="5288772341821359899">Se a política for configurada, o alcance da porta UDP usado por WebRTC será restrito ao intervalo de porta especificado (endpoints inclusos).
 
       Se a política não for configurada ou for definida para a string em branco ou um alcance de porta inválido, o WebRTC terá permissão para usar qualquer porta UDP local disponível.</translation>
@@ -2454,6 +2562,17 @@
 
           Observação: se <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" /> for especificada, ela substituirá esta política.</translation>
 <translation id="538108065117008131">Permitir que o <ph name="PRODUCT_FRAME_NAME" /> lide com os seguintes tipos de conteúdo.</translation>
+<translation id="538768040137709073">Ativar o recurso de área de transferência compartilhada, que permite que os usuários enviem texto entre computadores Chrome e um dispositivo Android quando a sincronização está ativada e o usuário está conectado.
+
+          Se esta política for definida como verdadeira, a capacidade de enviar texto entre dispositivos ficará ativada para o usuário do Chrome.
+
+          Se esta política for definida como falsa, a capacidade de enviar texto entre dispositivos ficará desativada para o usuário do Chrome.
+
+          Se você definir esta política, os usuários não poderão alterá-la nem substituí-la.
+
+          Se esta política não for definida, o recurso de área de transferência compartilhada será ativado por padrão.
+
+          Cabe aos administradores definir políticas em todas as plataformas que sejam relevantes. É recomendado definir um único valor para esta política em todas as plataformas.</translation>
 <translation id="5391388690191341203">Conta local do dispositivo para login automático</translation>
 <translation id="5392172595902933844">As informações sobre o status do Android são enviadas de volta para o
       servidor.
@@ -2531,7 +2650,6 @@
 <translation id="5447306928176905178">Ativar relatórios de informação de memória (JS tamanho da pilha) para a página (obsoleta)</translation>
 <translation id="5457065417344056871">Ativar o modo visitante no navegador</translation>
 <translation id="5457924070961220141">Permite configurar o processador HTML padrão quando <ph name="PRODUCT_FRAME_NAME" /> estiver instalado. A configuração padrão utilizada quando esta política é deixada sem definição é permitir que o navegador host faça o processamento, mas você pode, opcionalmente, substituí-la para que <ph name="PRODUCT_FRAME_NAME" /> processe as páginas HTML por padrão.</translation>
-<translation id="5458584148602890023">Ativar economia de energia no período de pico</translation>
 <translation id="5464816904705580310">Definir configurações para usuários gerenciados.</translation>
 <translation id="546726650689747237">Intervalo de escurecimento da tela no funcionamento com alimentação CA</translation>
 <translation id="5469143988693423708">O usuário tem permissão para executar o Crostini</translation>
@@ -2690,6 +2808,7 @@
 
           Antes da versão 75, o uso de vários códigos de extensão separados por vírgulas não é compatível e será ignorado. O restante da política continuará em vigor.</translation>
 <translation id="5645779841392247734">Permitir cookies nestes sites</translation>
+<translation id="5656177735561364047">Ativa o recurso de área de transferência compartilhada</translation>
 <translation id="5666457529647159548">Permite que o usuário gerencie certificados do cliente instalados.</translation>
 <translation id="5689430183304951538">Tamanho da página de impressão padrão</translation>
 <translation id="5693469654327063861">Permitir migração de dados</translation>
@@ -2727,6 +2846,11 @@
       Se essa política não está ativada ou é definida como "false", o <ph name="PRODUCT_NAME" /> usa as configurações de verificação de revogação on-line já existentes.</translation>
 <translation id="5728154254076636808">Permite a criação de cópias em roaming dos dados de perfil do <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Importar dados de preenchimento automático de formulários do navegador padrão na primeira execução</translation>
+<translation id="574098933844699859">Especificar se as informações do sistema (por exemplo, o número de série da versão do Chrome OS ou do dispositivo) serão sempre exibidas (ou ocultas) na tela de login.
+
+      Se a política for definida como verdadeira, as informações do sistema serão exibidas de maneira forçada.
+      Se a política for definida como falsa, as informações do sistema serão ocultas de maneira forçada.
+      Se a política não for definida, o comportamento padrão (exibir para Canary / Canal Dev) será aplicado. Os usuários podem alternar a visibilidade para operações específicas (por exemplo, Alt-V).</translation>
 <translation id="5741810844420698449">Quando esta política for definida, ela especificará a ação que o <ph name="PRODUCT_OS_NAME" /> tomará quando o usuário fechar a tampa do dispositivo.
 
           Quando esta política não for definida, a ação padrão de suspender o dispositivo será tomada.
@@ -2845,6 +2969,16 @@
 <translation id="6076099373507468537">Define a lista de dispositivos USB que estão autorizados a serem removidos do driver de kernel deles para uso pela API chrome.usb diretamente dentro de um app da Web. As entradas são pares de um identificador de fornecedor e um identificador do produto USB para identificar um hardware específico.
 
       Se esta política não for configurada, a lista de dispositivos USB removíveis ficará vazia.</translation>
+<translation id="607726879389885889">Esta política controla como o <ph name="PRODUCT_NAME" /> se comporta quando um usuário tenta fazer upload ou o download de arquivos grandes demais para envio para verificação de malware ou proteção de dados confidenciais (50 MB ou mais).  Essa restrição é válida apenas para arquivos que precisam ser verificados, conforme determinado por <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> e pelas políticas que controlam a lista de domínios com verificações ativadas.
+
+      Se esta política não for configurada ou for definida como "Nenhum", o <ph name="PRODUCT_NAME" /> permitirá que o usuário faça upload ou o download de arquivos de qualquer tamanho.
+
+      Se esta política for definida como "Bloquear downloads grandes", arquivos grandes demais para verificação serão excluídos antes de serem disponibilizados ao usuário.  Como nem sempre é possível determinar o tamanho antes do download, o <ph name="PRODUCT_NAME" /> pode fazer o download dos arquivos e depois determinar se eles ultrapassam o tamanho permitido.
+
+      Se esta política for definida como "Bloquear uploads grandes", não será possível selecionar para upload arquivos que sejam grandes demais para verificação.
+
+      Se esta política for definida como "Bloquear upload e download de arquivos grandes", o <ph name="PRODUCT_NAME" /> vai se comportar de acordo com as regras descritas em "Bloquear downloads grandes" e "Bloquear uploads grandes".
+      </translation>
 <translation id="6083631234867522991">Windows (clientes do Windows):</translation>
 <translation id="608788685013546076">Definir o limite de bateria (em porcentagem) para a economia de energia no período de pico</translation>
 <translation id="6089679180657323464">Controla as configurações do controlador de telemetria e diagnósticos wilco.</translation>
@@ -2995,6 +3129,7 @@
 <translation id="637934607141010488">Informa a lista de usuários do dispositivo que fizeram login recentemente.
 
       Se a política for definida como "False", os usuários não serão informados.</translation>
+<translation id="638668187106406971">Verifica se há violações da regra de proteção de dados confidenciais em uploads</translation>
 <translation id="6394350458541421998">Esta política teve o uso suspenso a partir da versão 29 do <ph name="PRODUCT_OS_NAME" />. Em vez dela, use a política PresentationScreenDimDelayScale.</translation>
 <translation id="6401669939808766804">Fazer logout do usuário</translation>
 <translation id="6406448383934634215">Se "Abrir uma lista de URLs" for selecionada como a ação de inicialização, isso permitirá que você especifique a lista de URLs que serão abertos. Se não for definida, nenhum URL será aberto na inicialização.
@@ -3239,6 +3374,7 @@
       </translation>
 <translation id="6922884955650325312">Bloquear o plug-in <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="6923366716660828830">Especifica o nome do mecanismo de pesquisa padrão. Se deixado em branco ou não definido, o nome do host especificado pelo URL de pesquisa será utilizado. Esta política só é considerada caso a política "DefaultSearchProviderEnabled" seja ativada.</translation>
+<translation id="6923731550900440989">Ativar o destaque de circunflexos na tela de login</translation>
 <translation id="6924223708804692571">Força a desativação da verificação ortográfica de idiomas. Os idiomas não reconhecidos incluídos na lista serão ignorados.
 
       Se esta política for ativada, a verificação ortográfica será desativada para os idiomas especificados. O usuário ainda poderá ativar ou desativar a verificação ortográfica para os idiomas que não estiverem na lista.
@@ -3608,6 +3744,7 @@
 <translation id="7433714841194914373">Ativar o Instant</translation>
 <translation id="7434202861148928348">Configurar os nomes de domínio obrigatórios para clientes de acesso remoto</translation>
 <translation id="7443616896860707393">Solicitações básicas de autorização HTTPS de múltiplas origens</translation>
+<translation id="7448430478749155471">Ativa o recurso "Selecionar para ouvir" na tela de login</translation>
 <translation id="7454519673779830548">Adiciona contas já preenchidas do Kerberos. Se as credenciais do Kerberos coincidirem com as credenciais de login, uma conta poderá ser configurada para reutilizar as credenciais de login especificando "${{LOGIN_EMAIL}}" e "${{PASSWORD}}" como conta principal e senha, respectivamente. Assim, o tíquete do Kerberos poderá ser recuperado automaticamente, a não ser que a "autenticação de dois fatores" esteja configurada. O usuário não poderá modificar contas adicionadas por meio dessa política.
 
           Se esta política for ativada, a lista de contas definidas por meio dela será adicionada às configurações de contas do Kerberos.
@@ -3878,6 +4015,10 @@
 <translation id="7974114691960514888">Esta política não é mais suportada. Ativa o uso de servidores STUN e de retransmissão ao estabelecer conexão a um cliente remoto. Se esta configuração estiver ativada, este computador pode descobrir e conectar-se a computadores host remotos mesmo se separados por um firewall. Se esta configuração estiver desativada e conexões de UDP enviadas forem filtradas pelo firewall, este computador só poderá estabelecer conexões a computadores host na rede local.</translation>
 <translation id="7976157349247117979">Nome do destino do <ph name="PRODUCT_NAME" /></translation>
 <translation id="7980227303582973781">Nenhuma restrição especial</translation>
+<translation id="7983900606645681371">Lista de domínios para os quais os arquivos enviados e dados colados da área de transferência ou arrastados e soltos não precisam ser verificados quanto a violações de regras de proteção de dados confidenciais.  Esta política será usada apenas se a <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> for definida como ativada.
+
+      Se esta política não for configurada ou for definida como uma lista vazia de domínios, todo o conteúdo será verificado quanto a violações de regras de proteção de dados confidenciais.
+      </translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="798856998567564266">Se você ativar esta configuração, favoritos poderão ser adicionados, removidos ou modificados. Essa também é a configuração padrão para quando a política não é definida.
 
@@ -3891,6 +4032,7 @@
       Quando esta política não for definida em um dispositivo gerenciado, ele não poderá executar máquinas virtuais.
       Dispositivos não gerenciados podem executar máquinas virtuais.</translation>
 <translation id="8001701200415781021">Restringir quais Contas do Google são permitidas como principais do navegador no <ph name="PRODUCT_NAME" /></translation>
+<translation id="8003853057959146975">Envia arquivos para verificar se há violações da regra de proteção de dados confidenciais</translation>
 <translation id="8009554972280451023">Se você ativar esta configuração, as definições armazenadas nos perfis do <ph name="PRODUCT_NAME" />, como favoritos, dados de preenchimento automático, senhas, entre outras, serão gravadas em um arquivo armazenado na pasta "Perfil de usuário de roaming" ou em um local especificado pelo administrador por meio da política <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. A ativação dessa política desativa a sincronização em nuvem.
 
       Se essa política for desativada ou não for configurada, apenas os perfis locais normais serão usados.
@@ -4365,6 +4507,7 @@
           O modo recomendado de bloquear a tela após inatividade é permitir que a tela seja bloqueada na suspensão e que o <ph name="PRODUCT_OS_NAME" /> seja suspenso após o intervalo de inatividade. Esta política só deve ser usada quando for necessário que o bloqueio de tela ocorra muito antes da suspensão ou quando a suspensão por inatividade não for desejada.
 
           O valor da política deve ser especificado em milissegundos. Os valores são fixados para serem inferiores ao intervalo de inatividade.</translation>
+<translation id="8911348623012274122">Definir um limite de memória para instâncias do Chrome</translation>
 <translation id="891435090623616439">codificado como um string JSON, para ver mais detalhes consulte <ph name="COMPLEX_POLICIES_URL" /></translation>
 <translation id="8917070657147922192">Permite que o usuário gerencie os certificados de CA instalados.</translation>
 <translation id="8934944553121392674">Controla quais impressoras da <ph name="DEVICE_PRINTERS_POLICY" /> estão disponíveis para os usuários.
@@ -4403,6 +4546,7 @@
 <translation id="8942616385591203339">Esta política controla se o consentimento de sincronização pode ser exibido para o usuário durante o primeiro login. É necessário defini-la como falsa se o consentimento de sincronização nunca for necessário para o usuário.
       Se definida como falsa, o consentimento de sincronização não será exibido.
       Se definida como verdadeira ou não definida, o consentimento de sincronização poderá ser exibido.</translation>
+<translation id="8943934315109955032">Não verifica violações da regra de proteção de dados confidenciais</translation>
 <translation id="894510252300143386">Define as configurações de gerenciamento de extensão para o <ph name="PRODUCT_NAME" />.
 
           Esta política controla várias configurações, incluindo aquelas gerenciadas por qualquer política sobre extensões existente. Esta política substituirá todas as políticas legadas definidas com ela.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index cff7586..c459918ed 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -2543,7 +2543,6 @@
 <translation id="5447306928176905178">Передавать на страницу информацию об использовании памяти JavaScript (устарело)</translation>
 <translation id="5457065417344056871">Включает гостевой режим в браузере</translation>
 <translation id="5457924070961220141">Позволяет настроить средство обработки HTML по умолчанию при установке <ph name="PRODUCT_FRAME_NAME" />. Если это правило не настроено, по умолчанию обработку выполняет браузер хоста, но это значение можно переопределить, и тогда обработку HTML-страниц по умолчанию выполняет <ph name="PRODUCT_FRAME_NAME" />.</translation>
-<translation id="5458584148602890023">Включить режим пиковой нагрузки</translation>
 <translation id="5464816904705580310">Настройки управляемых профилей.</translation>
 <translation id="546726650689747237">Задержка затемнения экрана при работе от сети</translation>
 <translation id="5469143988693423708">Пользователю разрешено запускать Crostini</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index 1d87acb2..dc6d742 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -173,6 +173,7 @@
 <translation id="1219695476179627719">ระบุว่าอุปกรณ์ควรย้อนกลับไปใช้เวอร์ชันที่ <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" /> ตั้งค่าไว้หรือไม่ หากใช้เวอร์ชันที่ใหม่กว่าอยู่
 
       ค่าเริ่มต้นคือ RollbackDisabled</translation>
+<translation id="1220047093962987554">ตรวจสอบสถานะ Google Safe Browsing ของ URL ที่เข้าชมแบบเรียลไทม์</translation>
 <translation id="1221359380862872747">โหลด URL ที่ระบุเมื่อลงชื่อเข้าใช้การสาธิต</translation>
 <translation id="1223789468190631420">สถานะการเปิดใช้ Safe Browsing สำหรับแหล่งที่มาที่เชื่อถือได้</translation>
 <translation id="122899932962115297">รายการที่อนุญาตพิเศษซึ่งควบคุมโหมดปลดล็อกด่วนที่ผู้ใช้กำหนดค่าและใช้เพื่อปลดล็อกหน้าจอล็อกได้
@@ -193,11 +194,14 @@
 <translation id="1243570869342663665">ควบคุมการกรองเนื้อหาสำหรับผู้ใหญ่ของ SafeSites</translation>
 <translation id="1257550411839719984">ตั้งค่าไดเรกทอรีเริ่มต้นสำหรับดาวน์โหลด</translation>
 <translation id="1265053460044691532">จำกัดเวลาที่ผู้ใช้ซึ่งตรวจสอบสิทธิ์ผ่าน SAML สามารถเข้าสู่ระบบในแบบออฟไลน์</translation>
+<translation id="127264587838521316">เปิดใช้คำขอติดตั้งส่วนขยายของ <ph name="PRODUCT_NAME" /></translation>
 <translation id="1290634681382861275">ควบคุมการตั้งค่าเบ็ดเตล็ด เช่น USB บลูทูธ การรีเฟรชนโยบาย โหมดนักพัฒนาซอฟต์แวร์ และอื่นๆ</translation>
 <translation id="1291880496936992484">คำเตือน: ระบบจะนำ RC4 ออกจาก <ph name="PRODUCT_NAME" /> โดยสมบูรณ์หลังจากเวอร์ชัน 52 (ประมาณเดือนกันยายน 2016) จากนั้นนโยบายนี้จะหยุดทำงาน
 
       หากไม่มีการตั้งค่านโยบายนี้หรือตั้งค่าเป็น False จะทำให้ไม่มีการเปิดใช้ชุดการเข้ารหัสของ RC4 ใน TLS มิเช่นนั้น อาจตั้งค่าเป็น True เพื่อรักษาความเข้ากันได้กับเซิร์ฟเวอร์ที่ล้าสมัย ซึ่งการดำเนินการนี้เป็นเพียงมาตรการชั่วคราวและควรกำหนดค่าเซิร์ฟเวอร์อีกครั้ง</translation>
+<translation id="1295737447968372331">เปิดใช้ฟีเจอร์การเขียนตามคำบอกในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="1297182715641689552">ใช้สคริปต์พร็อกซี .pac</translation>
+<translation id="1297961932043741908">ตั้งขีดจำกัดจำนวนเมกะไบต์ของหน่วยความจำที่อินสแตนซ์หนึ่งๆ ของ Chrome จะใช้ได้</translation>
 <translation id="1304973015437969093">รหัสส่วนขยาย/แอปและ URL การอัปเดตจะติดตั้งอยู่ในพื้นหลัง</translation>
 <translation id="1307454923744766368">ต้นทางหรือรูปแบบชื่อโฮสต์ที่ไม่ควรใช้ข้อจำกัด
       เกี่ยวกับต้นทางที่ไม่ปลอดภัย</translation>
@@ -587,6 +591,7 @@
       หากคุณเปิดหรือปิดใช้การตั้งค่านี้ ผู้ใช้จะเปลี่ยนหรือลบล้างการตั้งค่านี้ใน<ph name="PRODUCT_NAME" /> ไม่ได้
 
       หากไม่ได้ตั้งค่านี้ไว้ ผู้ใช้จะเลือกได้ว่าจะใช้ฟังก์ชันนี้หรือไม่</translation>
+<translation id="1999000620918508488">บังคับให้หน้าจอลงชื่อเข้าใช้แสดงหรือซ่อนข้อมูลของระบบ</translation>
 <translation id="2006530844219044261">การจัดการพลังงาน</translation>
 <translation id="2014757022750736514">ควบคุมลักษณะการทำงานของหน้าจอลงชื่อเข้าใช้ที่ผู้ใช้ลงชื่อเข้าสู่ระบบบัญชี การตั้งค่ารวมไปถึงผู้ที่ลงชื่อเข้าสู่ระบบได้ ประเภทบัญชีที่อนุญาต วิธีการตรวจสอบสิทธิ์ที่ควรใช้ ตลอดจนการช่วยเหลือพิเศษทั่วไป วิธีการป้อนข้อมูล และการตั้งค่าภาษา</translation>
 <translation id="201557587962247231">ความถี่ในการอัปโหลดรายงานสถานะของอุปกรณ์</translation>
@@ -602,12 +607,18 @@
 <translation id="2024476116966025075">กำหนดค่าชื่อโดเมนที่ต้องใช้สำหรับไคลเอ็นต์การเข้าถึงระยะไกล</translation>
 <translation id="2030905906517501646">คีย์เวิร์ดของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="203096360153626918">นโยบายนี้ไม่มีผลสำหรับแอป Android โดยแอปยังสามารถเข้าสู่โหมดเต็มหน้าจอได้แม้ตั้งค่านโยบายนี้เป็น <ph name="FALSE" /> ก็ตาม</translation>
+<translation id="2043749682619281558">เปิดใช้ฟีเจอร์การไฮไลต์เคอร์เซอร์ในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="2043770014371753404">เครื่องพิมพ์ขององค์กรที่มีการปิดใช้</translation>
 <translation id="2050629715135525072">ควบคุมความสามารถในการโอนไฟล์ระหว่างไคลเอ็นต์และโฮสต์ของผู้ใช้ที่เชื่อมต่อกับโฮสต์สำหรับการเข้าถึงระยะไกล นโยบายนี้ไม่มีผลกับการเชื่อมต่อความช่วยเหลือระยะไกล ซึ่งไม่รองรับการโอนไฟล์
 
           หากปิดใช้การตั้งค่านี้ ระบบจะไม่อนุญาตให้โอนไฟล์ หากเปิดใช้การตั้งค่านี้หรือไม่ได้ตั้งค่า ระบบจะอนุญาตให้โอนไฟล์ได้</translation>
 <translation id="2057317273526988987">อนุญาตให้เข้าถึงรายการ URL</translation>
 <translation id="2061810934846663491">กำหนดค่าชื่อโดเมนที่จำเป็นสำหรับโฮสต์การเข้าถึงระยะไกล</translation>
+<translation id="2063663607822994541">กำหนดขนาดหน่วยความจำที่อินสแตนซ์หนึ่งๆ ของ <ph name="PRODUCT_NAME" /> จะใช้ได้ก่อนเริ่มทิ้งแท็บ (กล่าวคือ หน่วยความจำที่แท็บใช้จะถูกล้างและจะต้องโหลดแท็บซ้ำเมื่อมีการสลับไปยังแท็บนั้น) เพื่อประหยัดหน่วยความจำ
+
+      หากตั้งค่านโยบายนี้ เบราว์เซอร์จะเริ่มทิ้งแท็บเพื่อประหยัดหน่วยความจำเมื่อการใช้หน่วยความจำเกินขีดจำกัดแล้ว อย่างไรก็ตาม ไม่มีการรับประกันว่าเบราว์เซอร์จะทำงานตลอดเวลาแม้ว่าจะยังไม่เกินขีดจำกัดก็ตาม ค่าที่ต่ำกว่า 2048 จะถูกปัดเป็น 2048 ทั้งหมด
+
+      หากไม่ได้ตั้งค่านโยบายนี้ เบราว์เซอร์จะเริ่มพยายามประหยัดหน่วยความจำก็ต่อเมื่อตรวจพบว่าหน่วยความจำจริงของเครื่องเหลือน้อย</translation>
 <translation id="206623763829450685">ระบุว่าการตรวจสอบสิทธิ์ HTTP รูปแบบใดที่ <ph name="PRODUCT_NAME" /> สนับสนุน
 
           ค่าที่เป็นไปได้คือ "basic", "digest", "ntlm" และ "negotiate" แยกค่าหลายค่าด้วยเครื่องหมายจุลภาค
@@ -618,6 +629,7 @@
 <translation id="2077129598763517140">ใช้การเร่งฮาร์ดแวร์เมื่อสามารถใช้ได้</translation>
 <translation id="2077273864382355561">ระยะหน่วงเวลาการปิดหน้าจอเมื่อทำงานโดยใช้พลังงานแบตเตอรี่</translation>
 <translation id="2082205219176343977">กำหนดค่าเวอร์ชัน Chrome ขั้นต่ำที่อุปกรณ์จะใช้ได้</translation>
+<translation id="2084647819368766928">รายการโดเมนที่ไม่ต้องตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในเนื้อหาที่อัปโหลด</translation>
 <translation id="209586405398070749">เวอร์ชันเสถียร</translation>
 <translation id="2098658257603918882">เปิดใช้งานการรายงานการใช้และข้อมูลเกี่ยวกับการขัดข้อง</translation>
 <translation id="2104418465060359056">รายงานข้อมูลเกี่ยวกับส่วนขยายและปลั๊กอิน</translation>
@@ -776,6 +788,16 @@
       หากการตั้งค่านี้ถูกเปิดใช้งาน ประวัติการเรียกดูจะไม่ได้รับการบันทึก การตั้งค่านี้ยังปิดการซิงค์แท็บอีกด้วย
 
       หากการตั้งค่านี้ถูกปิดใช้หรือไม่ได้กำหนดค่า จะมีการบันทึกประวัติการเรียก</translation>
+<translation id="2423038190900972331">ควบคุมวิธีการที่ <ph name="PRODUCT_NAME" /> ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในข้อมูลที่อัปโหลด ดาวน์โหลด วางจากคลิปบอร์ด หรือลากและวาง
+
+      หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็น "ไม่มี" <ph name="PRODUCT_NAME" /> จะไม่ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน
+
+      หากตั้งค่านโยบายนี้เป็น "ตรวจสอบการดาวน์โหลด" และผู้ใช้พยายามที่จะดาวน์โหลดไฟล์จาก URL หนึ่งในนโยบาย <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" /> เบราว์เซอร์ <ph name="PRODUCT_NAME" /> จะตรวจสอบการปฏิบัติตามข้อกำหนดของกฎองค์กรของข้อมูลที่ดาวน์โหลดมา
+
+      หากตั้งค่านโยบายนี้เป็น "ตรวจสอบการอัปโหลด" และผู้ใช้พยายามจะอัปโหลดไฟล์ไปยังโดเมนที่ไม่อยู่ใน <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" /> เบราว์เซอร์ <ph name="PRODUCT_NAME" /> จะตรวจสอบการปฏิบัติตามข้อกำหนดของกฎองค์กรของไฟล์ที่อัปโหลด ข้อมูลที่วางจากคลิปบอร์ด หรือข้อมูลที่ลากและวาง
+
+      หากตั้งค่านโยบายนี้เป็น "ตรวจสอบการอัปโหลดและดาวน์โหลด" <ph name="PRODUCT_NAME" /> จะทำงานตามกฎที่อธิบายไว้ภายใต้นโยบาย "ตรวจสอบการดาวน์โหลด" และ "ตรวจสอบการอัปโหลด"
+      </translation>
 <translation id="2426782419955104525">เปิดใช้ฟีเจอร์ค้นหาทันใจของ <ph name="PRODUCT_NAME" /> และป้องกันไม่ให้ผู้ใช้เปลี่ยนการตั้งค่านี้
 
       หากคุณเปิดใช้การตั้งค่านี้ <ph name="PRODUCT_NAME" /> จะมีการเปิดใช้ "ค้นหาทันใจ"
@@ -916,6 +938,10 @@
       หากมีการตั้งค่านโยบายนี้ ผู้ใช้จะไม่สามารถเปลี่ยนหรือลบล้างได้
 
       หลังจากเปิดใช้บลูทูธแล้ว ผู้ใช้จะต้องออกจากระบบและลงชื่อเข้าใช้ใหม่เพื่อให้การเปลี่ยนแปลงมีผล (ไม่จำเป็นหากมีการปิดใช้บลูทูธ)</translation>
+<translation id="2570498106495954914">รายการโดเมนที่ต้องตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในเนื้อหาที่ดาวน์โหลดก่อนที่จะบันทึกลงในพื้นที่เก็บข้อมูลในเครื่อง  นโยบายนี้ใช้เฉพาะเมื่อตั้งค่า <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> เป็นเปิดใช้
+
+      หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็นรายการโดเมนที่ว่างเปล่า จะไม่มีการตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในเนื้อหาที่ดาวน์โหลด
+      </translation>
 <translation id="2571066091915960923">เปิดใช้หรือปิดใช้พร็อกซีการบีบอัดข้อมูล และป้องกันไม่ให้ผู้ใช้เปลี่ยนการตั้งค่านี้
       หากคุณเปิดใช้หรือปิดใช้การตั้งค่านี้ ผู้ใช้จะไม่สามารถเปลี่ยนหรือโอเวอร์ไรด์การตั้งค่านี้
 
@@ -978,6 +1004,23 @@
 <translation id="268577405881275241">เปิดใช้ฟีเจอร์พร็อกซีการบีบอัดข้อมูล</translation>
 <translation id="2693108589792503178">กำหนดค่า URL การเปลี่ยนรหัสผ่าน</translation>
 <translation id="2694143893026486692">แว่นขยายหน้าจอบางส่วนเปิดอยู่</translation>
+<translation id="2694188263972877487">กำหนดค่าประเภทการดาวน์โหลดที่ <ph name="PRODUCT_NAME" /> จะบล็อกโดยสมบูรณ์ โดยไม่อนุญาตให้ผู้ใช้ลบล้างตัวเลือกเพื่อความปลอดภัย
+
+      หากคุณตั้งค่านโยบายนี้ <ph name="PRODUCT_NAME" /> จะป้องกันการดาวน์โหลดบางประเภท และไม่อนุญาตให้ผู้ใช้ข้ามคำเตือนด้านความปลอดภัย
+
+      เมื่อเลือกตัวเลือก "บล็อกการดาวน์โหลดที่เป็นอันตราย" ระบบจะอนุญาตการดาวน์โหลดทั้งหมด ยกเว้นรายการที่มีคำเตือนของ Google Safe Browsing
+
+      เมื่อเลือกตัวเลือก "บล็อกการดาวน์โหลดที่อาจเป็นอันตราย" ระบบจะอนุญาตการดาวน์โหลดทั้งหมด ยกเว้นรายการที่มีคำเตือนของ Google Safe Browsing ว่าเป็นการดาวน์โหลดที่อาจเป็นอันตราย
+
+      เมื่อเลือกตัวเลือก "บล็อกการดาวน์โหลดทั้งหมด" ระบบจะบล็อกการดาวน์โหลดทุกรายการ
+
+      เมื่อเลือกตัวเลือก "บล็อกการดาวน์โหลดที่ประสงค์ร้าย" ระบบจะอนุญาตการดาวน์โหลดทั้งหมดยกเว้นรายการที่ Google Safe Browsing มั่นใจมากว่าเป็นมัลแวร์ ซึ่งต่างกับการดาวน์โหลดที่เป็นอันตรายตรงที่ไม่ได้พิจารณาประเภทของไฟล์ แต่พิจารณาที่โฮสต์
+
+      เมื่อไม่ได้ตั้งค่านโยบายนี้ (หรือเลือกตัวเลือก "ไม่มีข้อจำกัดพิเศษ") การดาวน์โหลดจะต้องผ่านข้อจำกัดด้านความปลอดภัยทั่วไปโดยอิงจากผลการวิเคราะห์ของ Google Safe Browsing
+
+      โปรดทราบว่าข้อจำกัดเหล่านี้มีผลกับการดาวน์โหลดที่ทริกเกอร์จากเนื้อหาของหน้าเว็บ รวมถึงตัวเลือกเมนูตามบริบท "ดาวน์โหลดลิงก์..." ข้อจำกัดเหล่านี้ไม่มีผลกับการบันทึก/ดาวน์โหลดของหน้าที่แสดงอยู่ หรือการบันทึกเป็น PDF จากตัวเลือกการพิมพ์
+
+      ดูข้อมูลเพิ่มเติมเกี่ยวกับ Google Safe Browsing ได้ที่ https://developers.google.com/safe-browsing</translation>
 <translation id="2706708761587205154">อนุญาตให้พิมพ์เฉพาะเมื่อมี PIN เท่านั้น</translation>
 <translation id="2710534340210290498">หากตั้งค่านโยบายนี้เป็น "เท็จ" ผู้ใช้จะล็อกหน้าจอไม่ได้ (จะทำได้เฉพาะออกจากระบบเซสชันผู้ใช้) หากตั้งค่าเป็น "จริง" หรือไม่ได้ตั้งค่า ผู้ใช้ที่ตรวจสอบสิทธิ์ด้วยรหัสผ่านจะล็อกหน้าจอได้</translation>
 <translation id="2731627323327011390">ปิดการใช้งานใบรับรอง <ph name="PRODUCT_OS_NAME" /> สำหรับแอป ARC</translation>
@@ -1418,6 +1461,15 @@
           หากนโยบายนี้ได้รับการตั้งค่าเป็นเท็จหรือไม่ได้ตั้งค่า การจัดการพลังงานจะหน่วงเวลาและการจำกัดความยาวเซสชันจะเริ่มทำงานทันทีที่เริ่มเซสชัน</translation>
 <translation id="3478024346823118645">ล้างข้อมูลผู้ใช้เมื่อออกจากระบบ</translation>
 <translation id="3480961938508521469">ชาร์จแบตเตอรี่จนเต็มด้วยอัตรามาตรฐาน</translation>
+<translation id="348110646151632565">เปิดใช้ฟีเจอร์การช่วยเหลือพิเศษสำหรับการเลือกเพื่อให้อ่านในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "จริง" ฟีเจอร์เลือกเพื่อให้อ่านจะเปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "เท็จ" ฟีเจอร์เลือกเพื่อให้อ่านจะปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
+
+          หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้ฟีเจอร์เลือกเพื่อให้อ่านในหน้าจอการเข้าสู่ระบบในขั้นต้น แต่ผู้ใช้จะเปิดใช้ได้ทุกเมื่อ</translation>
 <translation id="3483729306380590354">ตั้งค่าการเริ่มชาร์จแบตเตอรี่ที่กำหนดเองเป็นเปอร์เซ็นต์
 
           แบตเตอรี่จะเริ่มชาร์จเมื่อพลังงานลดลงจากค่าการเริ่มชาร์จแบตเตอรี่ที่กำหนดไว้
@@ -1455,6 +1507,7 @@
 
           นโยบายนี้เป็นที่ยอมรับเฉพาะในกรณีที่นโยบาย "DefaultSearchProviderEnabled" ถูกเปิดใช้</translation>
 <translation id="350797926066071931">เปิดใช้งานแปลภาษา</translation>
+<translation id="3508047333410537654">เปิดใช้ฟีเจอร์เสียงโมโนในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="3513655665999652754">เซิร์ฟเวอร์ Quirks มีไฟล์การกำหนดค่าเฉพาะฮาร์ดแวร์ เช่น
       โปรไฟล์การแสดง ICC เพื่อปรับการปรับเทียบจอภาพ
 
@@ -1504,6 +1557,7 @@
 <translation id="3591527072193107424">เปิดใช้ฟีเจอร์การรองรับเบราว์เซอร์เวอร์ชันเก่า</translation>
 <translation id="3591584750136265240">กำหนดค่าลักษณะการตรวจสอบสิทธิ์ของการเข้าสู่ระบบ</translation>
 <translation id="3617743504695003280">อนุญาตให้หน้าเว็บส่งคำขอ XHR พร้อมกันในระหว่างการปิดหน้าเว็บ</translation>
+<translation id="3624515566460517364">ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนสำหรับการอัปโหลดและดาวน์โหลด</translation>
 <translation id="3627678165642179114">เปิดหรือปิดใช้งานบริการเว็บสำหรับการตรวจสอบการสะกด</translation>
 <translation id="3628480121685794414">เปิดใช้การพิมพ์แบบด้านเดียว</translation>
 <translation id="3631099945620529777">หากตั้งค่าเป็น "เท็จ" ระบบจะปิดใช้ปุ่ม "หยุดกระบวนการ" ในตัวจัดการงาน
@@ -1588,6 +1642,15 @@
       หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้ไดเรกทอรีการดาวน์โหลดเริ่มต้น ซึ่งผู้ใช้สามารถเปลี่ยนแปลงค่าได้</translation>
 <translation id="3805659594028420438">เปิดใช้ส่วนขยายใบรับรองที่ผูกกับโดเมน TLS (เลิกใช้แล้ว)</translation>
 <translation id="3808945828600697669">ระบุรายการปลั๊กอินที่ปิดใช้งาน</translation>
+<translation id="3810642039169532482">เปิดใช้ฟีเจอร์การช่วยเหลือพิเศษสำหรับการเขียนตามคำบอกในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "จริง" ฟีเจอร์เขียนตามคำบอกจะเปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "เท็จ" ฟีเจอร์เขียนตามคำบอกจะปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
+
+          หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้ฟีเจอร์เขียนตามคำบอกในหน้าจอการเข้าสู่ระบบในขั้นต้น แต่ผู้ใช้จะเปิดใช้ได้ทุกเมื่อ</translation>
 <translation id="3811562426301733860">อนุญาตโฆษณาในเว็บไซต์ทั้งหมด</translation>
 <translation id="3816312845600780067">เปิดใช้งานแป้นพิมพ์ลัด bailout สำหรับการเข้าสู่ระบบอัตโนมัติ</translation>
 <translation id="3820526221169548563">เปิดใช้ฟีเจอร์การเข้าถึงแป้นพิมพ์บนหน้าจอ
@@ -1655,6 +1718,7 @@
       แต่ละรายการจะมีพจนานุกรมที่ต้องมี ID ส่วนขยายในฟิลด์ "extension-id" และ URL การอัปเดตในฟิลด์ "update-url"</translation>
 <translation id="3874773863217952418">เปิดใช้การแตะเพื่อค้นหา</translation>
 <translation id="3877517141460819966">โหมดการตรวจสอบสิทธิ์จากปัจจัยที่สองที่ผสานรวม</translation>
+<translation id="3879196885908353077">ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนสำหรับการดาวน์โหลด</translation>
 <translation id="3879208481373875102">กำหนดค่ารายการเว็บแอปที่บังคับติดตั้งแล้ว</translation>
 <translation id="388237772682176890">นโยบายนี้เลิกใช้งานใน M53 และนำออกจาก M54 เนื่องจากไม่มีการสนับสนุน SPDY/3.1 อีกต่อไป
 
@@ -1752,6 +1816,7 @@
 <translation id="4027608872760987929">เปิดใช้งานผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="4039085364173654945">ควบคุมว่าจะให้เนื้อหาย่อยของบุคคลที่สามบนหน้าเว็บได้รับอนุญาตให้ป๊อปอัปช่องโต้ตอบการตรวจสอบสิทธิ์พื้นฐาน HTTP หรือไม่ ซึ่งโดยปกติจะถูกปิดใช้งานเพื่อป้องกันฟิชชิง หากนโยบายนี้ไม่มีการตั้งค่าไว้ จะถูกปิดใช้งานและเนื้อหาย่อยของบุคคลที่สามจะไม่ได้รับอนุญาตให้ป๊อปอัปช่องโต้ตอบการตรวจสอบสิทธิ์พื้นฐาน HTTP</translation>
 <translation id="4056910949759281379">ปิดใช้งานโปรโตคอล SPDY</translation>
+<translation id="4075864623710596000">ชื่อโฮสต์ที่ระบุไว้ในรายการนี้จะได้รับการยกเว้นไม่ต้องรับการตรวจสอบตามนโยบาย HSTS ที่อาจอัปเกรดคำขอจาก HTTP เป็น HTTPS นโยบายนี้อนุญาตเฉพาะชื่อโฮสต์ที่ติดป้ายกำกับเดียวเท่านั้น ชื่อโฮสต์ต้องกำหนดเป็น Canonical ซึ่งหมายความว่าต้องแปลง IDN ทั้งหมดเป็นรูปแบบ A-label และตัวอักษร ASCII ทั้งหมดต้องเป็นตัวพิมพ์เล็ก นโยบายนี้มีผลเฉพาะกับชื่อโฮสต์ที่ระบุไว้บางรายการเท่านั้น ไม่ใช่กับโดเมนย่อยของชื่อที่ระบุ</translation>
 <translation id="408029843066770167">อนุญาตคำค้นหาที่ส่งไปยังบริการเวลาของ Google</translation>
 <translation id="408076456549153854">เปิดใช้การลงชื่อเข้าใช้เบราว์เซอร์</translation>
 <translation id="40853027210512570">ลบล้างกฎการเลือกเครื่องพิมพ์เริ่มต้นของ <ph name="PRODUCT_NAME" />
@@ -1848,6 +1913,15 @@
 <translation id="4171331498167688968">หากตั้งค่านโยบายเป็น "เท็จ" ซอฟต์แวร์ของบุคคลที่สามจะสามารถแทรกโค้ดที่สั่งการได้ลงในการประมวลผลของ Chrome หากไม่มีการตั้งค่านโยบายหรือตั้งค่าเป็น "จริง" ซอฟต์แวร์ของบุคคลที่สามจะถูกบล็อกไม่ให้แทรกโค้ดที่สั่งการได้ลงในการประมวลผลของ Chrome
 
       ไม่ว่าค่าของนโยบายนี้จะเป็นอะไร เบราว์เซอร์จะยังไม่บล็อกซอฟต์แวร์ของบุคคลที่สามไม่ให้แทรกโค้ดที่สั่งการได้ลงในการประมวลผลในเครื่องที่เข้าร่วมในโดเมน <ph name="MS_AD_NAME" /></translation>
+<translation id="417956245902013347">เปิดใช้ฟีเจอร์การช่วยเหลือพิเศษสำหรับการไฮไลต์เคอร์เซอร์ข้อความในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "จริง" ฟีเจอร์การไฮไลต์เคอร์เซอร์ข้อความจะเปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "เท็จ" ฟีเจอร์การไฮไลต์เคอร์เซอร์ข้อความจะปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
+
+          หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้ฟีเจอร์การไฮไลต์เคอร์เซอร์ข้อความในหน้าจอการเข้าสู่ระบบในขั้นต้น แต่ผู้ใช้จะเปิดใช้ได้ทุกเมื่อ</translation>
 <translation id="4183229833636799228">การตั้งค่าเริ่มต้นของ <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="4192388905594723944">URL สำหรับตรวจสอบความถูกต้องโทเค็นการตรวจสอบสิทธิ์ไคลเอ็นต์การเข้าถึงระยะไกล</translation>
 <translation id="420007931282384740">ตั้งสถานะเริ่มต้นของฟีเจอร์การช่วยเหลือพิเศษด้วยแป้นพิมพ์บนหน้าจอในหน้าจอการเข้าสู่ระบบ
@@ -2052,6 +2126,7 @@
 
           หากตั้งค่านโยบายนี้เป็น False ระบบจะปิดใช้ <ph name="PRODUCT_NAME" /></translation>
 <translation id="4510923771103268849">ผู้ใช้มีสิทธิ์เข้าถึงรากของคอนเทนเนอร์ Crostini ได้</translation>
+<translation id="4513262269532252501">รายการโดเมนที่ต้องตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในเนื้อหาที่ดาวน์โหลด</translation>
 <translation id="4515404363392014383">เปิดใช้ Safe Browsing สำหรับแหล่งที่มาที่เชื่อถือได้</translation>
 <translation id="4517928394515633751">สแกนการดาวน์โหลดของผู้ใช้ด้วย Google Safe Browsing</translation>
 <translation id="4518251772179446575">ถามเมื่อไซต์ต้องการติดตามตำแหน่งทางกายภาพของผู้ใช้</translation>
@@ -2092,6 +2167,14 @@
           หากนโยบายนี้ตั้งค่าเป็น "จริง" แป้นแถวบนสุดของแป้นพิมพ์จะให้ผลการทำงานเป็นคำสั่งของแป้นฟังก์ชันตามค่าเริ่มต้น โดยจะต้องกดแป้นค้นหาเพื่อเปลี่ยนการทำงานกลับไปเป็นแป้นสื่อ
 
           หากนโยบายนี้ตั้งค่าเป็น "เท็จ" หรือไม่ได้ตั้งค่าไว้ แป้นพิมพ์จะให้ผลการทำงานเป็นคำสั่งของแป้นสื่อตามค่าเริ่มต้นและคำสั่งของแป้นฟังก์ชันเมื่อกดแป้นค้นหาค้างไว้</translation>
+<translation id="4636613705027089602">นโยบายนี้ควบคุมการขอติดตั้งส่วนขยายของ <ph name="PRODUCT_NAME" /> ซึ่งอนุญาตให้ผู้ใช้ส่งคำขอไปยังคอนโซลผู้ดูแลระบบของ Google เพื่อขออนุมัติ
+
+      เมื่อไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็นปิดใช้ จะไม่มีการสร้างหรืออัปโหลดคำขอติดตั้งส่วนขยาย
+      เมื่อตั้งค่านโยบายนี้เป็นเปิดใช้ จะมีการสร้างคำขอติดตั้งส่วนขยายและอัปโหลดไปยังคอนโซลผู้ดูแลระบบของ Google
+
+      คำขอติดตั้งส่วนขยายจะสร้างขึ้นเมื่อผู้ใช้พยายามติดตั้งส่วนขยายที่ไม่ได้รับอนุญาตพิเศษโดย <ph name="EXTENSION_INSTALL_WHITELIST" /> หรือ <ph name="EXTENSION_SETTINGS" />
+
+      นโยบายนี้จะมีผลเฉพาะเมื่อลงทะเบียนเครื่องกับ <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> และ <ph name="CLOUD_REPORTING_ENABLED" /> เปิดอยู่</translation>
 <translation id="4639407427807680016">ชื่อของโฮสต์การรับส่งข้อความดั้งเดิมที่จะยกเว้นจากบัญชีดำ</translation>
 <translation id="4650759511838826572">ปิดใช้งานสกีมโปรโตคอล URL</translation>
 <translation id="465099050592230505">URL เว็บสโตร์ขององค์กร (เลิกใช้งาน)</translation>
@@ -2196,6 +2279,10 @@
 <translation id="4874982543810021567">บล็อก WebUSB ในเว็บไซต์เหล่านี้</translation>
 <translation id="4876805738539874299">เปิดใช้เวอร์ชันสูงสุดของ SSL ไว้</translation>
 <translation id="4887274746092315609">เปิดใช้หน้าสำหรับการเปลี่ยนรหัสผ่านในเซสชันของผู้ใช้ SAML</translation>
+<translation id="4887863670424903990">เมื่อตั้งค่านโยบายนี้เป็นเปิดใช้ <ph name="PRODUCT_NAME" /> จะรายงานเหตุการณ์ที่ไม่ปลอดภัยให้ Google วิเคราะห์ เช่น การใช้รหัสผ่านซ้ำ การดาวน์โหลดมัลแวร์ โฆษณาคั่นระหว่างหน้า การละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน เป็นต้น  เหตุการณ์ที่ไม่ปลอดภัยบางอย่าง เช่น การละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน จะขึ้นอยู่กับนโยบายอื่นๆ ที่เปิดใช้การตรวจสอบดังกล่าว
+
+      หากตั้งค่านโยบายนี้เป็นปิดใช้หรือไม่ได้ตั้งค่า <ph name="PRODUCT_NAME" /> จะไม่รายงานเหตุการณ์ที่ไม่ปลอดภัย
+      </translation>
 <translation id="4897928009230106190">ระบุพารามิเตอร์ที่ใช้เมื่อทำการค้นหาตามคำแนะนำด้วย POST ซึ่งประกอบด้วยคู่ชื่อ/ค่าที่คั่นด้วยเครื่องหมายจุลภาค หากค่าเป็นพารามิเตอร์เทมเพลต เช่น {searchTerms} ในตัวอย่างข้างต้น ค่าจะถูกแทนที่ด้วยข้อมูลข้อความค้นหาที่แท้จริง
 
           นโยบายนี้สามารถเลือกได้ หากไม่ได้ถูกกำหนดไว้ คำขอการแนะนำการค้นหาจะถูกส่งโดยใช้วิธีการ GET
@@ -2214,6 +2301,17 @@
 <translation id="4906194810004762807">อัตราการรีเฟรชสำหรับนโยบายอุปกรณ์</translation>
 <translation id="4917385247580444890">แรง</translation>
 <translation id="4923806312383904642">อนุญาตให้ WebDriver ลบล้างนโยบายที่ใช้งานร่วมกันไม่ได้</translation>
+<translation id="4929721861648439998">เปิดใช้ฟีเจอร์การช่วยเหลือพิเศษสำหรับเสียงโมโนในหน้าจอการเข้าสู่ระบบ
+
+          ฟีเจอร์นี้ทำให้สลับโหมดของอุปกรณ์จากโหมดเสียงสเตอริโอที่เป็นค่าเริ่มต้นไปเป็นโหมดเสียงโมโนได้
+
+          หากตั้งค่านโยบายนี้เป็น "จริง" โหมดเสียงโมโนจะเปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "เท็จ" โหมดเสียงโมโนจะปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
+
+          หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้โหมดเสียงโมโนในหน้าจอการเข้าสู่ระบบในขั้นต้น แต่ผู้ใช้จะเปิดใช้ได้ทุกเมื่อ</translation>
 <translation id="494613465159630803">Cast Receiver</translation>
 <translation id="494924690085329212">รีบูตเมื่อผู้ใช้ออกจากระบบหาก Android เริ่มต้นแล้ว</translation>
 <translation id="4962262530309732070">หากตั้งค่านโยบายนี้เป็น True หรือไม่ได้กำหนดค่าไว้ <ph name="PRODUCT_NAME" /> จะอนุญาตให้เพิ่มบุคคลจากการจัดการผู้ใช้
@@ -2407,6 +2505,15 @@
 <translation id="5272684451155669299">หากค่าเป็น True ผู้ใช้สามารถใช้ฮาร์ดแวร์ในอุปกรณ์ Chrome เพื่อยืนยันข้อมูลประจำตัวจากระยะไกลไปยัง CA ข้อมูลส่วนบุคคลผ่านทาง <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> โดยใช้ <ph name="CHALLENGE_USER_KEY_FUNCTION" />
 
           หากตั้งค่าเป็น False หรือไม่ได้ตั้งค่า การเรียกใช้ API จะล้มเหลวและแสดงรหัสข้อผิดพลาด</translation>
+<translation id="5273744932022326215">เปิดใช้ฟีเจอร์การช่วยเหลือพิเศษสำหรับการไฮไลต์เคอร์เซอร์ในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "จริง" ฟีเจอร์การไฮไลต์เคอร์เซอร์จะเปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้เป็น "เท็จ" ฟีเจอร์การไฮไลต์เคอร์เซอร์จะปิดใช้เสมอในหน้าจอการเข้าสู่ระบบ
+
+          หากตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
+
+          หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะปิดใช้ฟีเจอร์การไฮไลต์เคอร์เซอร์ในหน้าจอการเข้าสู่ระบบในขั้นต้น แต่ผู้ใช้จะเปิดใช้ได้ทุกเมื่อ</translation>
 <translation id="5277806246014825877">อนุญาตให้ผู้ใช้นี้เรียกใช้ Crostini ได้
 
       หากตั้งค่านโยบายเป็น "เท็จ" Crostini จะปิดใช้งานสำหรับผู้ใช้นี้
@@ -2414,6 +2521,7 @@
       นโยบายทั้งสามไม่ว่าจะเป็น VirtualMachinesAllowed, CrostiniAllowed และ DeviceUnaffiliatedCrostiniAllowed ต้องตั้งค่าเป็น "จริง" หากต้องการอนุญาตให้ Crostini ทำงานได้
       หากนโยบายนี้เปลี่ยนการตั้งค่าเป็น "เท็จ" การตั้งค่านี้จะมีผลกับคอนเทนเนอร์ Crostini ใหม่ที่เพิ่งเริ่มใช้งานแต่ไม่หยุดการทำงานของคอนเทนเนอร์ซึ่งกำลังทำงานอยู่</translation>
 <translation id="5283457834853986457">ปิดใช้เครื่องมือค้นหาปลั๊กอิน (เลิกใช้งานแล้ว)</translation>
+<translation id="5285315763984334157">บล็อกการดาวน์โหลดที่ประสงค์ร้าย</translation>
 <translation id="5288772341821359899">หากตั้งค่านโยบายนี้ไว้ WebRTC จะใช้งานพอร์ต UDP ตามช่วงพอร์ตที่ระบุ (รวมจุดสิ้นสุดด้วย)
 
       หากไม่ได้ตั้งค่านโยบายนี้ไว้ หรือตั้งค่าเป็นสตริงว่างหรือช่วงพอร์ตที่ไม่ถูกต้อง จะเป็นการอนุญาตให้ WebRTC ใช้พอร์ต UDP ที่ว่างอยู่พอร์ตใดก็ได้ในเครื่อง</translation>
@@ -2458,6 +2566,17 @@
 
           หมายเหตุ: <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" /> จะลบล้างนโยบายนี้หากระบุนโยบายเดิมไว้</translation>
 <translation id="538108065117008131">อนุญาตให้ <ph name="PRODUCT_FRAME_NAME" /> จัดการประเภทเนื้อหาดังต่อไปนี้</translation>
+<translation id="538768040137709073">เปิดใช้ฟีเจอร์คลิปบอร์ดที่แชร์ซึ่งจะทำให้ผู้ใช้ส่งข้อความระหว่าง Chrome ในเดสก์ท็อปกับอุปกรณ์ Android ได้เมื่อมีการเปิดการซิงค์ไว้และผู้ใช้ลงชื่อเข้าใช้อยู่
+
+          หากตั้งค่านโยบายนี้เป็น "จริง" จะเปิดใช้ความสามารถในการส่งข้อความระหว่างอุปกรณ์สำหรับผู้ใช้ Chrome
+
+          หากตั้งค่านโยบายนี้เป็น "เท็จ" จะปิดใช้ความสามารถในการส่งข้อความระหว่างอุปกรณ์สำหรับผู้ใช้ Chrome
+
+          หากตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
+
+          หากไม่ได้ตั้งค่านโยบายนี้ ฟีเจอร์คลิปบอร์ดที่แชร์จะเปิดใช้โดยค่าเริ่มต้น
+
+          การตั้งค่านโยบายต่างๆ ในแพลตฟอร์มทั้งหมดขึ้นอยู่กับความต้องการของผู้ดูแลระบบ ขอแนะนำให้ตั้งค่านโยบายนี้เป็นค่าเดียวในแพลตฟอร์มทั้งหมด</translation>
 <translation id="5391388690191341203">บัญชีภายในอุปกรณ์สำหรับการเข้าสู่ระบบอัตโนมัติ</translation>
 <translation id="5392172595902933844">ระบบส่งข้อมูลเกี่ยวกับสถานะของ Android กลับไปยัง
       เซิร์ฟเวอร์
@@ -2539,7 +2658,6 @@
 <translation id="5447306928176905178">เปิดการรายงานข้อมูลหน่วยความจำ (JS ขนาดใหญ่) บนหน้า (กำหนดให้เลิกใช้แล้ว)</translation>
 <translation id="5457065417344056871">เปิดใช้โหมดผู้มาเยือนในเบราว์เซอร์</translation>
 <translation id="5457924070961220141">ช่วยให้คุณสามารถกำหนดค่าตัวแสดงผล HTML เริ่มต้นเมื่อทำการติดตั้ง <ph name="PRODUCT_FRAME_NAME" /> การตั้งค่าเริ่มต้นที่ใช้เมื่อไม่มีการตั้งค่านโยบายนี้คือการอนุญาตให้เบราว์เซอร์ของโฮสต์ทำการแสดงผล แต่คุณสามารถเลือกที่จะแทนที่การตั้งค่านี้และทำให้ <ph name="PRODUCT_FRAME_NAME" /> แสดงหน้า HTML โดยค่าเริ่มต้น</translation>
-<translation id="5458584148602890023">เปิดใช้พาวเวอร์พีคชิฟต์</translation>
 <translation id="5464816904705580310">กำหนดการตั้งค่าสำหรับผู้ใช้ที่ได้รับการจัดการ</translation>
 <translation id="546726650689747237">ระยะหน่วงเวลาการหรี่แสงหน้าจอเมื่อทำงานโดยใช้ไฟ AC</translation>
 <translation id="5469143988693423708">อนุญาตให้ผู้ใช้เรียกใช้ Crostini ได้</translation>
@@ -2697,6 +2815,7 @@
 
           ระบบไม่รองรับการใช้รหัสส่วนขยายหลายรายการที่คั่นด้วยเครื่องหมายจุลภาคก่อนเวอร์ชัน 75 และจะข้ามรหัสดังกล่าว นโยบายส่วนที่เหลือจะยังมีผลต่อไป</translation>
 <translation id="5645779841392247734">อนุญาตให้ใช้คุกกี้บนไซต์เหล่านี้</translation>
+<translation id="5656177735561364047">เปิดใช้ฟีเจอร์คลิปบอร์ดที่แชร์</translation>
 <translation id="5666457529647159548">อนุญาตให้ผู้ใช้จัดการใบรับรองไคลเอ็นต์ที่ติดตั้งไว้</translation>
 <translation id="5689430183304951538">ขนาดหน้าของการพิมพ์เริ่มต้น</translation>
 <translation id="5693469654327063861">อนุญาตให้ย้ายข้อมูล</translation>
@@ -2734,6 +2853,11 @@
       หากไม่ได้กำหนดนโยบายนี้ หรือกำหนดเป็น False <ph name="PRODUCT_NAME" /> จะใช้การตั้งค่าการตรวจสอบการเพิกถอนทางออนไลน์ที่มีอยู่</translation>
 <translation id="5728154254076636808">เปิดใช้การสร้างสำเนาโรมมิ่งสำหรับข้อมูลโปรไฟล์ <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">นำเข้าข้อมูลแบบฟอร์มที่ป้อนอัตโนมัติจากเบราว์เซอร์เริ่มต้นเมื่อเรียกใช้ครั้งแรก</translation>
+<translation id="574098933844699859">ระบุว่าข้อมูลระบบ (เช่น เวอร์ชัน Chrome OS, หมายเลขซีเรียลของอุปกรณ์) แสดง (หรือซ่อน) เสมอในหน้าจอการเข้าสู่ระบบ
+
+      หากตั้งค่านโยบายนี้เป็น "จริง" ข้อมูลระบบจะถูกบังคับให้แสดง
+      หากตั้งค่านโยบายนี้เป็น "เท็จ" ข้อมูลระบบจะถูกบังคับให้ซ่อน
+      หากไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้การทำงานเริ่มต้น (แสดงสำหรับช่อง Canary/เวอร์ชันที่กำลังพัฒนา) ผู้ใช้สลับการมองเห็นตามการทำงานเฉพาะได้ (เช่น Alt-V)</translation>
 <translation id="5741810844420698449">เมื่อตั้งค่านโยบายนี้ นโยบายจะกำหนดการดำเนินการที่ <ph name="PRODUCT_OS_NAME" /> จะทำเมื่อผู้ใช้ปิดฝาอุปกรณ์
 
           เมื่อไม่ได้ตั้งค่านโยบายนี้ ระบบจะดำเนินการตามค่าเริ่มต้นซึ่งก็คือระงับการทำงาน
@@ -2852,6 +2976,16 @@
 <translation id="6076099373507468537">กำหนดรายการอุปกรณ์ USB ที่ได้รับอนุญาตให้ถอดออกจากไดรเวอร์ Kernel เพื่อที่จะใช้งานผ่าน chrome.usb API ภายในเว็บแอปพลิเคชันโดยตรง รายการต่างๆ เป็นการจับคู่ระหว่างตัวระบุผู้ให้บริการ USB และตัวระบุผลิตภัณฑ์เพื่อที่จะระบุฮาร์ดแวร์ที่เจาะจง
 
       หากไม่มีการกำหนดค่านโยบายนี้ รายการอุปกรณ์ USB ที่ถอดได้นั้นจะว่างเปล่า</translation>
+<translation id="607726879389885889">นโยบายนี้ควบคุมการทำงานของ <ph name="PRODUCT_NAME" /> เมื่อผู้ใช้พยายามที่จะอัปโหลดหรือดาวน์โหลดไฟล์ที่มีขนาดใหญ่เกินกว่าที่จะส่งไปสแกนหามัลแวร์หรือการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน (50 MB ขึ้นไป)  การจำกัดนี้ใช้เฉพาะกับไฟล์ที่ต้องมีการสแกนตามที่กำหนดโดย <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> และนโยบายต่างๆ ที่ควบคุมรายการโดเมนที่เปิดใช้การตรวจสอบ
+
+      หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็น "ไม่มี" <ph name="PRODUCT_NAME" /> จะอนุญาตให้ผู้ใช้อัปโหลดหรือดาวน์โหลดไฟล์ได้ทุกขนาด
+
+      หากตั้งค่านโยบายนี้เป็น "บล็อกการดาวน์โหลดขนาดใหญ่" ไฟล์ที่มีขนาดใหญ่เกินกว่าจะสแกนได้จะถูกลบไปก่อนที่ผู้ใช้จะเข้าถึงไฟล์ได้  เพราะขนาดของไฟล์ไม่อาจระบุได้ก่อนการดาวน์โหลดเสมอไป <ph name="PRODUCT_NAME" /> อาจทำการดาวน์โหลดไฟล์ก่อนแล้วจึงจะระบุว่าไฟล์เหล่านั้นเกินขีดจำกัดของขนาดที่อนุญาตหรือไม่
+
+      หากตั้งค่านโยบายนี้เป็น "บล็อกการอัปโหลดขนาดใหญ่" ไฟล์ที่มีขนาดใหญ่เกินกว่าจะสแกนได้นั้น ผู้ใช้จะเลือกเพื่ออัปโหลดไม่ได้
+
+      หากตั้งค่านโยบายนี้เป็น "บล็อกการอัปโหลดและดาวน์โหลดไฟล์ขนาดใหญ่" <ph name="PRODUCT_NAME" /> จะทำงานตามกฎที่อธิบายไว้ภายใต้นโยบาย "บล็อกการดาวน์โหลดขนาดใหญ่" และ "บล็อกการอัปโหลดขนาดใหญ่"
+      </translation>
 <translation id="6083631234867522991">Windows (ไคลเอ็นต์ของ Windows):</translation>
 <translation id="608788685013546076">กำหนดเกณฑ์ระดับแบตเตอรี่สำหรับโหมดพาวเวอร์พีคชิฟต์เป็นเปอร์เซ็นต์</translation>
 <translation id="6089679180657323464">ควบคุมการตั้งค่าตัวควบคุมการวินิจฉัยและการวัดและส่งข้อมูลทางไกลของ Wilco</translation>
@@ -3002,6 +3136,7 @@
 <translation id="637934607141010488">รายงานรายชื่อผู้ใช้อุปกรณ์ที่เข้าสู่ระบบเมื่อเร็วๆ นี้
 
       หากตั้งค่านโยบายนี้เป็น False จะไม่มีการรายงานผู้ใช้</translation>
+<translation id="638668187106406971">ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนสำหรับการอัปโหลด</translation>
 <translation id="6394350458541421998">นโยบายนี้ได้ถูกยกเลิกไปตั้งแต่ <ph name="PRODUCT_OS_NAME" /> เวอร์ชัน 29 โปรดใช้นโยบาย PresentationScreenDimDelayScale แทน</translation>
 <translation id="6401669939808766804">ออกจากระบบให้ผู้ใช้</translation>
 <translation id="6406448383934634215">หากเลือก "เปิดรายการ URL" เป็นการดำเนินการเมื่อเริ่มต้นใช้งาน ตัวเลือกนี้จะช่วยให้คุณระบุรายการ URL ที่จะเปิดได้ หากไม่ได้ตั้งค่า จะไม่มีการเปิด URL ขึ้นมาเมื่อเริ่มต้น
@@ -3248,6 +3383,7 @@
       </translation>
 <translation id="6922884955650325312">บล็อกปลั๊กอิน <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="6923366716660828830">ระบุชื่อของผู้ให้บริการการค้นหาเริ่มต้น หากปล่อยว่างหรือไม่ได้กำหนดไว้ จะใช้ชื่อโฮสต์ที่ระบุไว้โดย URL ค้นหา นโยบายนี้จะใช้เฉพาะในกรณีที่มีการเปิดใช้งานนโยบาย "DefaultSearchProviderEnabled" เท่านั้น</translation>
+<translation id="6923731550900440989">เปิดใช้ฟีเจอร์การไฮไลต์เคอร์เซอร์ข้อความในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="6924223708804692571">บังคับให้ปิดใช้การตรวจตัวสะกดของภาษาต่างๆ ระบบจะไม่สนใจภาษาที่ไม่รู้จักในรายการนั้น
 
       หากคุณเปิดใช้นโยบายนี้ ระบบจะปิดใช้การตรวจตัวสะกดสำหรับภาษาที่ระบุ ผู้ใช้จะยังคงเปิดใช้หรือปิดใช้การตรวจตัวสะกดสำหรับภาษาที่ไม่ได้อยู่ในรายการได้
@@ -3615,6 +3751,7 @@
 <translation id="7433714841194914373">เปิดใช้งานค้นหาทันใจ</translation>
 <translation id="7434202861148928348">กำหนดค่าชื่อโดเมนที่ต้องใช้สำหรับไคลเอ็นต์การเข้าถึงระยะไกล</translation>
 <translation id="7443616896860707393">ข้อความแจ้งการตรวจสอบสิทธิ์พื้นฐาน HTTP ข้ามจุด</translation>
+<translation id="7448430478749155471">เปิดใช้ฟีเจอร์เลือกเพื่อให้อ่านในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="7454519673779830548">เพิ่มบัญชี Kerberos ที่กรอกไว้ล่วงหน้า หากข้อมูลเข้าสู่ระบบ Kerberos ตรงกับข้อมูลเข้าสู่ระบบของการเข้าสู่ระบบ คุณจะกำหนดค่าบัญชีให้ใช้ข้อมูลเข้าสู่ระบบของการเข้าสู่ระบบซ้ำได้โดยระบุ "${{LOGIN_EMAIL}}" และ "${{PASSWORD}}" สำหรับผู้ใช้หลักและรหัสผ่านตามลำดับ เพื่อให้ดึงข้อมูลตั๋ว Kerberos ได้โดยอัตโนมัติ เว้นแต่มีการกำหนดค่าการตรวจสอบสิทธิ์แบบ 2 ปัจจัย ผู้ใช้จะแก้ไขบัญชีที่เพิ่มผ่านนโยบายนี้ไม่ได้
 
           หากเปิดใช้นโยบายนี้ จะมีการเพิ่มรายการบัญชีที่นโยบายกำหนดลงในการตั้งค่าบัญชี Kerberos
@@ -3891,6 +4028,10 @@
 <translation id="7974114691960514888">นโยบายนี้ไม่ได้รับการสนับสนุนอีกต่อไป เปิดใช้งานการใช้ STUN และเซิร์ฟเวอร์ถ่ายทอดเมื่อเชื่อมต่อกับไคลเอ็นต์ระยะไกล หากการตั้งค่านี้ถูกเปิดใช้งาน เครื่องนี้จะสามารถค้นพบและเชื่อมต่อกับเครื่องโฮสต์ระยะไกลแม้ว่าจะถูกกั้นโดยไฟร์วอลล์ หากการตั้งค่านี้ถูกปิดใช้งานและการเชื่อมต่อ UDP ขาออกถูกกรองโดยไฟร์วอลล์ เครื่องนี้จะสามารถเชื่อมต่อไปยังเครื่องโฮสต์ภายในเครือข่ายท้องถิ่นเท่านั้น</translation>
 <translation id="7976157349247117979">ชื่อของปลายทาง <ph name="PRODUCT_NAME" /></translation>
 <translation id="7980227303582973781">ไม่มีข้อจำกัดพิเศษ</translation>
+<translation id="7983900606645681371">รายการโดเมนที่ไม่ต้องตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในไฟล์ที่อัปโหลด ข้อมูลที่วางจากคลิปบอร์ด หรือข้อมูลที่ลากและวาง  นโยบายนี้ใช้เฉพาะเมื่อตั้งค่า <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> เป็นเปิดใช้
+
+      หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็นรายการโดเมนที่ว่างเปล่า ระบบจะตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อนในเนื้อหาทั้งหมด
+      </translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="798856998567564266">หากเปิดใช้การตั้งค่านี้ คุณจะเพิ่ม แก้ไข หรือนำบุ๊กมาร์กออกได้ การทำงานนี้ยังเป็นค่าเริ่มต้นอีกด้วยหากไม่มีการตั้งค่านโยบายนี้
 
@@ -3904,6 +4045,7 @@
       หากไม่ได้ตั้งค่านโยบายนี้ในอุปกรณ์ที่มีการจัดการ ระบบจะไม่อนุญาตให้อุปกรณ์เรียกใช้เครื่องเสมือน
       อุปกรณ์ที่ไม่มีการจัดการจะได้รับอนุญาตให้เรียกใช้เครื่องเสมือน</translation>
 <translation id="8001701200415781021">จำกัดบัญชี Google ที่อนุญาตให้ตั้งค่าเป็นบัญชีหลักของเบราว์เซอร์ใน <ph name="PRODUCT_NAME" /></translation>
+<translation id="8003853057959146975">ส่งไฟล์เพื่อรับการตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน</translation>
 <translation id="8009554972280451023">หากคุณเปิดใช้การตั้งค่านี้ ระบบจะบันทึกการตั้งค่าที่เก็บไว้ในโปรไฟล์ <ph name="PRODUCT_NAME" /> เช่น บุ๊กมาร์ก ข้อมูลการป้อนอัตโนมัติ รหัสผ่าน ไปยังไฟล์ที่เก็บไว้ในโฟลเดอร์โปรไฟล์ผู้ใช้โรมมิ่งหรือตำแหน่งที่ผู้ดูแลระบบระบุไว้ผ่านนโยบาย <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" /> ด้วย การเปิดใช้นโยบายนี้จะปิดใช้คลาวด์ซิงค์
 
       หากปิดใช้หรือไม่ได้ตั้งค่านโยบายนี้ ระบบจะใช้เฉพาะโปรไฟล์ปกติในเครื่องเท่านั้น
@@ -4379,6 +4521,7 @@
           วิธีล็อกหน้าจอที่แนะนำในขณะที่ไม่ใช้งานคือ เปิดใช้งานการล็อกหน้าจอเมื่อถูกระงับการใช้งาน และให้ <ph name="PRODUCT_OS_NAME" /> ระงับการใช้งานหลังจากระยะหน่วงเวลาของการไม่ใช้งาน นโยบายนี้ควรใช้ในเวลาที่การล็อกหน้าจอควรจะเกิดขึ้นก่อนเวลาระงับการใช้งานเป็นเวลานาน หรือเมื่อไม่ต้องการใช้การระงับการใช้งานเมื่อไม่ใช้งานเลยเท่านั้น
 
           ค่านโยบายควรกำหนดในหน่วยมิลลิวินาที ค่าจะถูกบีบให้น้อยกว่าความล่าช้าของการไม่ใช้งาน</translation>
+<translation id="8911348623012274122">ตั้งขีดจำกัดหน่วยความจำสำหรับอินสแตนซ์ของ Chrome</translation>
 <translation id="891435090623616439">เข้ารหัสเป็นสตริง JSON ดูรายละเอียดได้ที่ <ph name="COMPLEX_POLICIES_URL" /></translation>
 <translation id="8917070657147922192">อนุญาตให้ผู้ใช้จัดการใบรับรอง CA ที่ติดตั้งไว้</translation>
 <translation id="8934944553121392674">ควบคุมว่าจะให้เครื่องพิมพ์ใดจาก <ph name="DEVICE_PRINTERS_POLICY" /> พร้อมใช้งานสำหรับผู้ใช้
@@ -4417,6 +4560,7 @@
 <translation id="8942616385591203339">นโยบายนี้ควบคุมว่าการขอคำยินยอมให้ซิงค์จะแสดงต่อผู้ใช้รายหนึ่งๆ ในระหว่างที่ลงชื่อเข้าใช้เป็นครั้งแรกได้หรือไม่ ตั้งค่านโยบายนี้เป็นเท็จหากไม่จำเป็นต้องขอคำยินยอมให้ซิงค์จากผู้ใช้
       หากตั้งค่าเป็นเท็จ ระบบจะไม่แสดงการขอคำยินยอมให้ซิงค์
       หากตั้งค่าเป็นจริงหรือไม่ได้ตั้งค่า ระบบจะแสดงการขอคำยินยอมให้ซิงค์</translation>
+<translation id="8943934315109955032">ไม่ตรวจสอบการละเมิดกฎการปกป้องข้อมูลที่ละเอียดอ่อน</translation>
 <translation id="894510252300143386">กำหนดการตั้งค่าการจัดการส่วนขยายสำหรับ <ph name="PRODUCT_NAME" />
 
           นโยบายนี้ควบคุมการตั้งค่าหลายอย่าง รวมถึงการตั้งค่าที่ควบคุมโดยนโยบายที่มีอยู่ทั้งหมดเกี่ยวกับส่วนขยาย นโยบายนี้จะลบล้างนโยบายเดิมหากมีการตั้งค่าทั้ง 2 นโยบาย
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index c809e69..8911917 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -2613,7 +2613,6 @@
 <translation id="5457065417344056871">Tarayıcıda misafir modunu etkinleştir</translation>
 <translation id="5457924070961220141"><ph name="PRODUCT_FRAME_NAME" /> yüklendiğinde varsayılan HTML oluşturucusunu yapılandırabilmenizi sağlar.
           Bu politika ayarlanmadan bırakılırsa kullanılan varsayılan ayar, oluşturma işlemini ana makine tarayıcısının yapmasına izin vermektir, ancak isteğe bağlı olarak bu ayarı geçersiz kılabilir ve HTML sayfalarını oluşturma işleminin varsayılan olarak <ph name="PRODUCT_FRAME_NAME" /> tarafından yapılmasını sağlayabilirsiniz.</translation>
-<translation id="5458584148602890023">Güç tüketimi en üst düzeydeyken pil kullanımına geçmeyi etkinleştir</translation>
 <translation id="5464816904705580310">Yönetilen kullanıcılar için ayarları yapılandırın.</translation>
 <translation id="546726650689747237">AC güçle çalışırken ekran karartma gecikmesi</translation>
 <translation id="5469143988693423708">Kullanıcının Crostini'yi çalıştırmasına izin verilir</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index 040f944..3e51244 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -179,6 +179,7 @@
 <translation id="1219695476179627719">Указує, чи відкочуватися до версії, яку зазначено в правилі <ph name="DEVICE_TARGET_VERSION_PREFIX_POLICY_NAME" />, якщо на пристрої вже встановлено новішу версію.
 
       За умовчанням – RollbackDisabled.</translation>
+<translation id="1220047093962987554">Перевіряти статус відвідуваних URL-адрес у реальному часі за допомогою Безпечного перегляду</translation>
 <translation id="1221359380862872747">Завантажувати вказані URL-адреси під час входу в демонстраційному режимі</translation>
 <translation id="1223789468190631420">Увімкнено безпечний режим для надійних джерел</translation>
 <translation id="122899932962115297">Білий список, що визначає, які режими швидкого розблокування екрана може налаштувати користувач.
@@ -199,11 +200,14 @@
 <translation id="1243570869342663665">Керує фільтруванням вмісту для дорослих SafeSites.</translation>
 <translation id="1257550411839719984">Указати каталог для завантаження за умовчанням</translation>
 <translation id="1265053460044691532">Обмеження часу, упродовж якого користувач, автентифікований через SAML, може входити в режимі офлайн</translation>
+<translation id="127264587838521316">Вмикає запити на встановлення розширень у <ph name="PRODUCT_NAME" /></translation>
 <translation id="1290634681382861275">Керує різними налаштуваннями, зокрема USB, Bluetooth, оновленням правил, режимом розробника тощо.</translation>
 <translation id="1291880496936992484">Застереження: шифри RC4 буде видалено з <ph name="PRODUCT_NAME" /> після версії 52 (приблизно у вересні 2016 року).
 
       Якщо це правило не налаштовано або має значення "false", набори шифрів RC4 в TLS не працюватимуть. Або для правила можна вибрати значення "true", щоб підтримувати сумісність із застарілим сервером. Це тимчасовий захід. Налаштування сервера буде змінено.</translation>
+<translation id="1295737447968372331">Увімкнути функцію "Диктування" на екрані входу</translation>
 <translation id="1297182715641689552">Використовувати сценарій .pac проксі-сервера</translation>
+<translation id="1297961932043741908">Налаштувати обмеження обсягу пам'яті для однієї копії Chrome.</translation>
 <translation id="1304973015437969093">Ідентифікатори розширень або додатків і URL-адреси оновлень, які встановлюються без попередження</translation>
 <translation id="1307454923744766368">Джерела та зразки імені хосту, для яких не застосовуватимуться обмеження для незахищених джерел</translation>
 <translation id="1312799700549720683">Керує налаштуваннями екрана.</translation>
@@ -598,6 +602,7 @@
       Якщо це налаштування ввімкнено або вимкнено, користувачі не можуть змінювати чи замінювати його в <ph name="PRODUCT_NAME" />.
 
       Якщо це правило не налаштовано, користувач може вирішувати, чи використовувати цю функцію.</translation>
+<translation id="1999000620918508488">Примусово показувати чи приховувати системну інформацію на екрані входу.</translation>
 <translation id="2006530844219044261">Керування живленням</translation>
 <translation id="2014757022750736514">Керує поведінкою екрана входу, де користувачі входять в облікові записи. Ці налаштування визначають, хто може входити, які типи облікових записів дозволено, які способи автентифікації потрібно використовувати, а також загальні параметри спеціальних можливостей, методу введення та мовного коду.</translation>
 <translation id="201557587962247231">Частота завантаження звіту про статус пристрою</translation>
@@ -613,12 +618,18 @@
 <translation id="2024476116966025075">Налаштувати назву домену, потрібного для віддаленого доступу</translation>
 <translation id="2030905906517501646">Ключове слово пошукової служби за умовчанням</translation>
 <translation id="203096360153626918">Це правило не впливає на додатки Android. Ними можна буде користуватися в повноекранному режимі, навіть якщо для правила встановлено значення "<ph name="FALSE" />".</translation>
+<translation id="2043749682619281558">Увімкнути функцію "Виділення курсора" на екрані входу</translation>
 <translation id="2043770014371753404">Вимкнені принтери підприємства</translation>
 <translation id="2050629715135525072">Указує, чи можуть користувачі з віддаленим доступом до хосту переносити файли між клієнтом і хостом. Це не стосується з’єднань для віддаленої допомоги, що не підтримують перенесення файлів.
 
           Якщо це налаштування вимкнено, перенесення файлів забороняється. Якщо цей параметр увімкнено або не налаштовано, перенесення файлів дозволяється.</translation>
 <translation id="2057317273526988987">Надати доступ до списку URL-адрес</translation>
 <translation id="2061810934846663491">Налаштовувати обов’язкові доменні імена хостів віддаленого доступу</translation>
+<translation id="2063663607822994541">Налаштовує обсяг пам'яті, який одна копія <ph name="PRODUCT_NAME" /> може використовувати, перш ніж вкладки відхиляються (тобто пам'ять, яку займає вкладка, звільняється та вкладка оновлюється під час переходу на неї), щоб економити пам'ять.
+
+      Якщо це правило налаштовано, веб-переглядач відхиляє вкладки, коли досягнуто обмеження, щоб економити пам'ять. Однак немає гарантії, що веб-переглядач завжди дотримується обмежень. Будь-яке значення, менше за 2048, округлюється до 2048.
+
+      Якщо це правило не налаштовано, веб-переглядач намагається економити пам'ять, лише коли виявляє, що обсяг фізичної пам'яті комп'ютера малий.</translation>
 <translation id="206623763829450685">Указує, яка схема автентифікації HTTP підтримується в <ph name="PRODUCT_NAME" />.
 
           Можливі значення: "basic", "digest", "ntlm" і "negotiate". Розділяйте значення комами.
@@ -629,6 +640,7 @@
 <translation id="2077129598763517140">Використовувати апаратне прискорення, якщо доступно</translation>
 <translation id="2077273864382355561">Затримка вимкнення екрана, коли використовується заряд акумулятора</translation>
 <translation id="2082205219176343977">Налаштуйте мінімальну дозволену версію Chrome для пристрою.</translation>
+<translation id="2084647819368766928">Список доменів, для яких не потрібно перевіряти доданий контент на відповідність правилам щодо захисту конфіденційних даних</translation>
 <translation id="209586405398070749">Стабільна версія</translation>
 <translation id="2098658257603918882">Увімкнути звіти про використання та дані, пов’язані з аварійним завершенням роботи</translation>
 <translation id="2104418465060359056">Повідомляти дані розширень і плагінів</translation>
@@ -791,6 +803,16 @@
       Якщо це налаштування ввімкнено, історія веб-перегляду не зберігатиметься. Це налаштування також вимикає синхронізацію вкладок.
 
       Якщо це налаштування вимкнено або не налаштовано, історія веб-перегляду зберігатиметься.</translation>
+<translation id="2423038190900972331">Визначає, як <ph name="PRODUCT_NAME" /> перевіряє дані, що додаються, завантажуються, вставляються з буфера або перетягуються, на відповідність правилам щодо захисту конфіденційних даних.
+
+      Якщо це правило не налаштовано або для нього вибрано значення "Немає", <ph name="PRODUCT_NAME" /> не перевіряє дані на відповідність правилам щодо захисту конфіденційних даних.
+
+      Якщо для цього правила вибрано значення "Перевіряти завантажені файли" і користувач намагається завантажити файл з URL-адреси в правилі <ph name="DOMAINS_TO_CHECK_COMPLIANCE_OF_DOWNLOADED_CONTENT_POLICTY_NAME" />, <ph name="PRODUCT_NAME" /> перевіряє завантажені дані на відповідність корпоративним правилам.
+
+      Якщо для цього правила вибрано значення "Перевіряти додані файли" і користувач намагається додати файл у домен, якого немає в правилі <ph name="DOMAINS_TO_NOT_CHECK_COMPLIANCE_OF_UPLOADED_CONTENT_POLICY_NAME" />, <ph name="PRODUCT_NAME" /> перевіряє доданий файл і вставлені з буфера або перетягнуті дані на відповідність корпоративним правилам.
+
+      Якщо для цього правила вибрано значення "Перевіряти завантажені й додані файли", <ph name="PRODUCT_NAME" /> діє відповідно до правил "Перевіряти завантажені файли" та "Перевіряти додані файли".
+      </translation>
 <translation id="2426782419955104525">Вмикає функцію Миттєвого пошуку <ph name="PRODUCT_NAME" /> і не дозволяє користувачам змінювати це налаштування.
 
       Якщо ввімкнути це налаштування, Миттєвий пошук <ph name="PRODUCT_NAME" /> буде ввімкнено.
@@ -931,6 +953,10 @@
       Якщо це правило налаштовано, користувач не може змінити або замінити його.
 
       Після ввімкнення Bluetooth потрібно вийти з облікового запису та ввійти в нього знову, щоб зміни почали діяти (не потрібно виконувати ці дії після вимкнення Bluetooth).</translation>
+<translation id="2570498106495954914">Список доменів, для яких потрібно перевіряти завантажений контент на відповідність правилам щодо захисту конфіденційних даних, перш ніж зберігати локально.  Це правило застосовується, лише якщо для правила <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> вибрано значення enabled.
+
+      Якщо це правило не налаштовано або для нього вказано порожній список доменів, завантажений контент не перевіряється на відповідність правилам щодо захисту конфіденційних даних.
+      </translation>
 <translation id="2571066091915960923">Вмикає чи вимикає проксі-сервер стиснення даних і не дозволяє користувачам змінювати це налаштування.
 
       Якщо ввімкнути чи вимкнути це налаштування, користувачі не зможуть змінювати або замінювати його.
@@ -994,6 +1020,23 @@
 <translation id="268577405881275241">Увімкнути проксі-сервер стиснення даних</translation>
 <translation id="2693108589792503178">Налаштувати URL-адресу для змінення пароля.</translation>
 <translation id="2694143893026486692">Увімкнено закріплену лупу</translation>
+<translation id="2694188263972877487">Налаштовує типи завантажень, які <ph name="PRODUCT_NAME" /> повністю блокуватиме, не дозволяючи користувачам змінювати параметри безпеки.
+
+      Якщо це правило налаштовано, <ph name="PRODUCT_NAME" /> забороняє певні типи завантажень, а користувачі не можуть обійти застереження про небезпеку.
+
+      Коли вибрано опцію "Блокувати небезпечні завантаження", можна завантажувати будь-який контент, що не має застережень Безпечного перегляду.
+
+      Коли вибрано опцію "Блокувати потенційно небезпечні завантаження", можна завантажувати будь-який контент, що не має застережень Безпечного перегляду про потенційну небезпеку.
+
+      Коли вибрано опцію "Блокувати всі завантаження", контент не завантажується.
+
+      Коли вибрано опцію "Блокувати шкідливі завантаження", можна завантажувати контент, який Безпечний перегляд не вважає ймовірно зловмисним програмним забезпеченням. На відміну від небезпечних завантажень, тут береться до уваги не тип файлу, а хост.
+
+      Коли це правило не налаштовано (або вибрано опцію "Немає особливих обмежень"), завантаження мають звичайні обмеження на основі результатів аналізу Безпечного перегляду.
+
+      Зауважте, що ці обмеження застосовуються до завантажень через контент веб-сторінки й опцію контекстного меню "Завантажити посилання…". Вони не діють під час зберігання чи завантаження відкритої сторінки або її перетворення у формат PDF за допомогою опцій друку.
+
+      Докладніше про Безпечний перегляд читайте на сторінці https://developers.google.com/safe-browsing.</translation>
 <translation id="2706708761587205154">Дозволити друк лише з PIN-кодом</translation>
 <translation id="2710534340210290498">Якщо для цього правила вибрано значення false, користувачі не можуть блокувати екран (можна лише вийти із сеансу). Якщо це правило не налаштовано або для нього вибрано значення true, користувачі, які пройшли автентифікацію за допомогою пароля, можуть блокувати екран.</translation>
 <translation id="2731627323327011390">Заборонити використовувати сертифікати <ph name="PRODUCT_OS_NAME" /> для додатків ARC</translation>
@@ -1433,6 +1476,15 @@
           Якщо для цього правила встановлено значення "False" або його не встановлено взагалі, затримки керування живленням або обмеження тривалості сеансу запускаються відразу після початку сеансу.</translation>
 <translation id="3478024346823118645">Стирати дані користувача під час виходу</translation>
 <translation id="3480961938508521469">Повністю заряджати акумулятор зі стандартною швидкістю.</translation>
+<translation id="348110646151632565">Увімкнути спеціальну можливість "Читання з екрана" на екрані входу.
+
+          Якщо для цього правила вибрано значення true, функцію "Читання з екрана" на екрані входу завжди ввімкнено.
+
+          Якщо для цього правила вибрано значення false, функцію "Читання з екрана" на екрані входу завжди вимкнено.
+
+          Якщо це правило налаштовано, користувачі не можуть змінювати або замінювати його.
+
+          Якщо це правило не налаштовано, функцію "Читання з екрана" на екрані входу вимкнено, але користувачі можуть будь-коли ввімкнути її.</translation>
 <translation id="3483729306380590354">Налаштовує рівень початку заряджання акумулятора у відсотках.
 
           Акумулятор починає заряджатися, коли заряд досягає вказаного значення.
@@ -1470,6 +1522,7 @@
 
           Це правило застосовується, лише якщо ввімкнено правило "DefaultSearchProviderEnabled".</translation>
 <translation id="350797926066071931">Увімкнути перекладач</translation>
+<translation id="3508047333410537654">Увімкнути функцію "Монофонічне аудіо" на екрані входу</translation>
 <translation id="3513655665999652754">На сервері Quirks є файли конфігурації апаратного забезпечення, як-от
       профілі зображення ICC для калібрування моніторів.
 
@@ -1520,6 +1573,7 @@
 <translation id="3591527072193107424">Увімкнути функцію підтримки застарілих веб-переглядачів.</translation>
 <translation id="3591584750136265240">Налаштування автентифікації під час входу</translation>
 <translation id="3617743504695003280">Дає змогу надсилати синхронні запити XHR під час закриття сторінки.</translation>
+<translation id="3624515566460517364">Перевіряти файли, які додаються й завантажуються, на відповідність правилам щодо захисту конфіденційних даних</translation>
 <translation id="3627678165642179114">Вмикати чи вимикати веб-службу перевірки орфографії</translation>
 <translation id="3628480121685794414">Увімкнути односторонній друк</translation>
 <translation id="3631099945620529777">Якщо для цього правила вибрано значення false, у Диспетчері завдань недоступна кнопка "Завершити процес".
@@ -1605,6 +1659,15 @@
       Якщо це правило не встановлено, використовується каталог для завантаження за умовчанням, але користувач зможе його змінити.</translation>
 <translation id="3805659594028420438">Увімкнути розширення пов’язаних із доменом сертифікатів TLS (більше не підтримується)</translation>
 <translation id="3808945828600697669">Указати список вимкнених плагінів</translation>
+<translation id="3810642039169532482">Увімкнути спеціальну можливість "Диктування" на екрані входу.
+
+          Якщо для цього правила вибрано значення true, функцію "Диктування" на екрані входу завжди ввімкнено.
+
+          Якщо для цього правила вибрано значення false, цю функцію "Диктування" на екрані входу завжди вимкнено.
+
+          Якщо це правило налаштовано, користувачі не можуть змінювати або замінювати його.
+
+          Якщо це правило не налаштовано, функцію "Диктування" на екрані входу вимкнено, але користувачі можуть будь-коли ввімкнути її.</translation>
 <translation id="3811562426301733860">Дозволити рекламу на всіх сайтах</translation>
 <translation id="3816312845600780067">Увімкнути аварійну комбінацію клавіш для автоматичного входу</translation>
 <translation id="3820526221169548563">Увімкнути функцію доступності екранної клавіатури.
@@ -1672,6 +1735,7 @@
       Кожен запис списку містить словник, у який мають входити ідентифікатор розширення в полі "extension-id" й URL-адреса оновлення в полі "update-url".</translation>
 <translation id="3874773863217952418">Увімкнути функцію "Торкніться, щоб шукати"</translation>
 <translation id="3877517141460819966">Вбудовано режим двофакторної автентифікації</translation>
+<translation id="3879196885908353077">Перевіряти завантажені файли на відповідність правилам щодо захисту конфіденційних даних</translation>
 <translation id="3879208481373875102">Налаштувати список примусово встановлюваних веб-додатків</translation>
 <translation id="388237772682176890">Це правило не діє у версії M53 та видалено у версії M54, оскільки підтримку протоколу SPDY/3.1 припинено.
 
@@ -1781,6 +1845,7 @@
 <translation id="4027608872760987929">Увімкнути пошукову службу за умовчанням</translation>
 <translation id="4039085364173654945">Контролює, чи дозволено розміщеному на сторінці "дочірньому" вмісту третьої сторони відображати спливаюче діалогове вікно базової автентифікації HTTP. Як правило, це налаштування вимкнено з метою захисту від фішингу. Якщо це правило не встановлено, налаштування вимикається, а "дочірньому вмісту" третьої сторони забороняється відображати спливаюче діалогове вікно базової автентифікації HTTP.</translation>
 <translation id="4056910949759281379">Вимкнути протокол SPDY</translation>
+<translation id="4075864623710596000">Імена хостів із цього списку буде виключено з перевірки правил HSTS. Це може змінити запити з http на https. У цьому правилі можна вказувати лише імена хостів з однією міткою. Імена хостів мають бути канонікалізовані: потрібно конвертувати інтернаціоналізовані доменні імена (IDN) у формат A-label і вживати лише малі літери ASCII. Це правило застосовується лише до певних указаних імен хостів. Воно не діє для субдоменів указаних імен.</translation>
 <translation id="408029843066770167">Дозволити запити в службу часу Google</translation>
 <translation id="408076456549153854">Увімкнути вхід в обліковий запис у веб-переглядачі</translation>
 <translation id="40853027210512570">Замінює правила вибору принтера за умовчанням у <ph name="PRODUCT_NAME" />.
@@ -1878,6 +1943,15 @@
 <translation id="4171331498167688968">Якщо це правило має значення false, ПЗ незалежних розробників може вставляти виконуваний код у процеси Chrome. Якщо це правило не налаштовано або має значення true, ПЗ незалежних розробників не може цього робити.
 
       Незалежно від значення цього правила, наразі веб-переглядач не блокуватиме спроби ПЗ незалежних розробників вставити виконуваний код у процеси на комп'ютері, зареєстрованому в домені <ph name="MS_AD_NAME" />.</translation>
+<translation id="417956245902013347">Увімкнути спеціальну можливість "Виділення символу вставки" на екрані входу.
+
+          Якщо для цього правила вибрано значення true, функцію "Виділення символу вставки" на екрані входу завжди ввімкнено.
+
+          Якщо для цього правила вибрано значення false, функцію "Виділення символу вставки" на екрані входу завжди вимкнено.
+
+          Якщо це правило налаштовано, користувачі не можуть змінювати або замінювати його.
+
+          Якщо це правило не налаштовано, функцію "Виділення символу вставки" на екрані входу вимкнено, але користувач може будь-коли ввімкнути її.</translation>
 <translation id="4183229833636799228">Налаштування плагіна <ph name="FLASH_PLUGIN_NAME" /> за умовчанням</translation>
 <translation id="4192388905594723944">URL-адреса для перевірки маркера автентифікації клієнта віддаленого доступу</translation>
 <translation id="420007931282384740">Налаштувати стан за умовчанням для спеціальної можливості "Екранна клавіатура" на екрані входу.
@@ -2080,6 +2154,7 @@
 
           Якщо для цього правила вибрано значення "false", <ph name="PRODUCT_NAME" /> буде вимкнено.</translation>
 <translation id="4510923771103268849">Користувач може отримувати доступ до контейнерів Crostini на кореневому рівні</translation>
+<translation id="4513262269532252501">Список доменів, для яких потрібно перевіряти завантажений контент на відповідність правилам щодо захисту конфіденційних даних</translation>
 <translation id="4515404363392014383">Увімкнути безпечний перегляд для надійних джерел</translation>
 <translation id="4517928394515633751">Перевіряти завантаження за допомогою Безпечного перегляду</translation>
 <translation id="4518251772179446575">Запитувати щоразу, коли сайт хоче відстежувати фізичне місцезнаходження користувача</translation>
@@ -2120,6 +2195,14 @@
           Якщо для цього правила встановлено значення "true", клавіші вгорі клавіатури за умовчанням працюватимуть як функціональні. Щоб повернути їм функціональність медіа-клавіш, потрібно натиснути клавішу пошуку.
 
           Якщо для цього правила встановлено значення "false" або не встановлено взагалі, медіа-клавіші клавіатури збережуть свою функціональність за умовчанням, а якщо натиснути клавішу пошуку, вони стануть функціональними.</translation>
+<translation id="4636613705027089602">Це правило керує запитами на встановлення розширень у <ph name="PRODUCT_NAME" />, дозволяючи користувачам надсилати запити на консоль адміністратора Google для схвалення.
+
+      Якщо це правило не налаштовано або для нього вибрано значення disabled, запити на встановлення розширень не створюються або не додаються.
+      Якщо для цього правила вибрано значення enabled, запити на встановлення розширень створюються й додаються на консоль адміністратора Google.
+
+      Такі запити створюються, коли користувачі намагаються встановити розширення, не дозволені правилами <ph name="EXTENSION_INSTALL_WHITELIST" /> або <ph name="EXTENSION_SETTINGS" />.
+
+      Це правило працює, лише якщо на комп'ютері діє правило <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> і ввімкнено<ph name="CLOUD_REPORTING_ENABLED" />.</translation>
 <translation id="4639407427807680016">Імена хостів для обміну повідомленнями з оригінальними додатками, які потрібно виключити з чорного списку</translation>
 <translation id="4650759511838826572">Вимкнути схеми протоколу URL-адреси</translation>
 <translation id="465099050592230505">URL-адреса корпоративного веб-магазину (більше не підтримується)</translation>
@@ -2224,6 +2307,10 @@
 <translation id="4874982543810021567">Блокувати WebUSB на цих сайтах</translation>
 <translation id="4876805738539874299">Увімкнено максимальну версію SSL</translation>
 <translation id="4887274746092315609">Дає змогу користувачам SAML змінювати пароль на сторінці під час сеансу</translation>
+<translation id="4887863670424903990">Якщо для цього правила вибрано значення enabled, <ph name="PRODUCT_NAME" /> надсилає в Google для аналізу дані про небезпечні події, як-от повторне використання пароля, завантаження зловмисного програмного забезпечення, міжсторінкові оголошення, порушення правил щодо захисту конфіденційних даних тощо.  Деякі небезпечні події, як-от порушення правил щодо захисту конфіденційних даних, залежать від інших правил, які вмикають такі перевірки.
+
+      Якщо для цього правила вибрано значення disabled або його не налаштовано, <ph name="PRODUCT_NAME" /> не повідомляє про небезпечні події.
+      </translation>
 <translation id="4897928009230106190">Указує параметри пошуку пропозицій методом POST. Складається з розділених комами пар імен і значень. Якщо значення є параметром шаблону, як-от {searchTerms} у прикладі вище, воно замінюється даними справжніх пошукових термінів.
 
           Це правило необов’язкове. Якщо його не встановлено, запит на пошук пропозицій надсилається методом GET.
@@ -2242,6 +2329,17 @@
 <translation id="4906194810004762807">Частота оновлення політики пристрою</translation>
 <translation id="4917385247580444890">Потужний</translation>
 <translation id="4923806312383904642">Дозволити WebDriver заміняти несумісні правила</translation>
+<translation id="4929721861648439998">Увімкнути спеціальну можливість "Монофонічне аудіо" на екрані входу.
+
+          Ця функція дозволяє перемикати режим пристрою зі стереофонічного аудіо (за умовчанням) на монофонічне.
+
+          Якщо для цього правила вибрано значення true, функцію "Монофонічне аудіо" на екрані входу завжди ввімкнено.
+
+          Якщо для цього правила вибрано значення false, функцію "Монофонічне аудіо" на екрані входу завжди вимкнено.
+
+          Якщо це правило налаштовано, користувачі не можуть змінювати або замінювати його.
+
+          Якщо це правило не налаштовано, функцію "Монофонічне аудіо" на екрані входу вимкнено, але користувач може будь-коли ввімкнути її.</translation>
 <translation id="494613465159630803">Приймач Cast</translation>
 <translation id="494924690085329212">Перезапускати після виходу користувача з облікового запису, якщо запущено Android.</translation>
 <translation id="4962262530309732070">Якщо це правило не налаштовано або має значення "true", <ph name="PRODUCT_NAME" /> дозволить диспетчеру користувачів виконувати функцію "Додати користувача".
@@ -2436,6 +2534,15 @@
 <translation id="5272684451155669299">Якщо для цього правила встановлено значення "true", користувач може використовувати апаратне забезпечення на пристроях Chrome для віддаленого засвідчення своєї особи в ЦС через <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> за допомогою <ph name="CHALLENGE_USER_KEY_FUNCTION" />.
 
           Якщо для цього правила встановлено значення "false" або його не налаштовано, запити до API закінчуються помилкою.</translation>
+<translation id="5273744932022326215">Увімкнути спеціальну можливість "Виділення курсора" на екрані входу.
+
+          Якщо для цього правила вибрано значення true, функцію "Виділення курсора" на екрані входу завжди ввімкнено.
+
+          Якщо для цього правила вибрано значення false, функцію "Виділення курсора" на екрані входу завжди вимкнено.
+
+          Якщо це правило налаштовано, користувачі не можуть змінювати або замінювати його.
+
+          Якщо це правило не налаштовано, функцію "Виділення курсора" на екрані входу вимкнено, але користувач може будь-коли ввімкнути її.</translation>
 <translation id="5277806246014825877">Дозволити цьому користувачеві запускати Crostini.
 
       Якщо для цього правила встановлено значення false, цей користувач не може запускати Crostini.
@@ -2443,6 +2550,7 @@
       Для всіх трьох правил (VirtualMachinesAllowed, CrostiniAllowed і DeviceUnaffiliatedCrostiniAllowed) має бути встановлено значення true, коли вони подають запит на дозвіл запустити Crostini.
       Якщо змінити значення цього правила на false, нові контейнери Crostini не запускатимуться, але вже запущені не вимкнуться.</translation>
 <translation id="5283457834853986457">Вимкнути інструмент пошуку плагінів (не підтримується)</translation>
+<translation id="5285315763984334157">Блокувати шкідливі завантаження</translation>
 <translation id="5288772341821359899">Якщо налаштувати це правило, діапазон порту UDP, який використовується у WebRTC, обмежується вказаним інтервалом порту (включно з кінцевими точками).
 
       Якщо не налаштувати це правило або залишити порожній рядок чи вказати недійсний діапазон порту, WebRTC буде дозволено використовувати будь-який доступний локальний порт UDP.</translation>
@@ -2487,6 +2595,17 @@
 
           Примітка: якщо вказано правило <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" />, воно замінює це правило.</translation>
 <translation id="538108065117008131">Дозволити <ph name="PRODUCT_FRAME_NAME" /> обробляти перелічені типи вмісту.</translation>
+<translation id="538768040137709073">Увімкнути функцію "Спільний буфер обміну", яка дозволяє ділитися текстом між комп'ютерами з Chrome і пристроями Android, коли ввімкнено синхронізацію й користувач увійшов в обліковий запис.
+
+          Якщо для цього правила вибрано значення true, користувач Chrome може надсилати текст на інші пристрої.
+
+          Якщо для цього правила вибрано значення false, користувач Chrome не може надсилати текст на інші пристрої.
+
+          Якщо це правило налаштовано, користувачі не можуть змінювати або замінювати його.
+
+          Якщо це правило не налаштовано, функцію "Спільний буфер обміну" ввімкнено за умовчанням.
+
+          Адміністратори можуть встановлювати правила на всіх потрібних платформах. Радимо вказувати для цього правила одне значення на всіх платформах.</translation>
 <translation id="5391388690191341203">Автоматичний вхід у локальний обліковий запис на пристрої</translation>
 <translation id="5392172595902933844">Інформація про статус пристрою Android надсилається на
       сервер.
@@ -2571,7 +2690,6 @@
 <translation id="5447306928176905178">Увімкнути повідомлення з інформацією про пам’ять (розмір динамічної пам’яті JavaScript) для сторінки (не рекомендується)</translation>
 <translation id="5457065417344056871">Увімкнути режим гостя у веб-переглядачі</translation>
 <translation id="5457924070961220141">Дозволяє налаштовувати засіб відтворення сторінок HTML за умовчанням, якщо встановлено <ph name="PRODUCT_FRAME_NAME" />. Якщо це правило не встановлено, використовується налаштування за умовчанням, яке дозволяє веб-переглядачу хосту відтворювати сторінки. Це можна змінити та відтворювати сторінки HTML за допомогою <ph name="PRODUCT_FRAME_NAME" /> за умовчанням.</translation>
-<translation id="5458584148602890023">Увімкнути зміну піку потужності</translation>
 <translation id="5464816904705580310">Налаштувати параметри для керованих користувачів.</translation>
 <translation id="546726650689747237">Затримка затемнення екрана, коли використовується живлення від мережі</translation>
 <translation id="5469143988693423708">Користувач може запускати Crostini</translation>
@@ -2730,6 +2848,7 @@
 
           До версії 75 не підтримується введення кількох ідентифікаторів розширень через кому. Решта правила застосовується.</translation>
 <translation id="5645779841392247734">Дозволити файли cookie на цих сайтах</translation>
+<translation id="5656177735561364047">Увімкнути функцію "Спільний буфер обміну"</translation>
 <translation id="5666457529647159548">Дозволити користувачам керувати встановленими сертифікатами клієнта.</translation>
 <translation id="5689430183304951538">Стандартний розмір сторінки друку</translation>
 <translation id="5693469654327063861">Дозволити перенесення даних</translation>
@@ -2771,6 +2890,11 @@
       Якщо це правило не налаштовано або має значення "false", <ph name="PRODUCT_NAME" /> використовує наявні онлайн-налаштування перевірки відкликання.</translation>
 <translation id="5728154254076636808">Увімкнути створення роумінгових копій до даних профілю <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Імпортувати дані автозаповнення форм із веб-переглядача за умовчанням під час першого запуску</translation>
+<translation id="574098933844699859">Указати, чи потрібно завжди показувати (або приховувати) системну інформацію (як-от версію ОС Chrome, серійний номер пристрою) на екрані входу.
+
+      Якщо для цього правила вибрано значення true, системна інформація примусово відображається.
+      Якщо для цього правила вибрано значення false, системна інформація примусово приховується.
+      Якщо це правило не налаштовано, діє поведінка за умовчанням (інформація відображається у версії для розробників або Canary). Користувачі можуть вмикати чи вимикати її певними комбінаціями клавіш (наприклад, Alt-V).</translation>
 <translation id="5741810844420698449">Якщо це правило налаштовано, воно вказує, яку дію виконує <ph name="PRODUCT_OS_NAME" />, коли користувач закриває кришку пристрою.
 
           Якщо це правило не налаштовано, виконується дія за умовчанням, тобто призупинення роботи.
@@ -2889,6 +3013,16 @@
 <translation id="6076099373507468537">Визначається список пристроїв USB, які можна від’єднувати від драйвера ядра, щоб використовувати через API chrome.usb просто у веб-додатку. Записи є парами ідентифікатора постачальника USB й ідентифікатора продукту для визначення апаратного забезпечення.
 
       Якщо це правило не налаштовано, список пристроїв USB, які можна від’єднувати, порожній.</translation>
+<translation id="607726879389885889">Це правило визначає, як <ph name="PRODUCT_NAME" /> поводиться, коли користувач намагається додати чи завантажити файли, завеликі для перевірки на зловмисне програмне забезпечення або на відповідність правилам щодо захисту конфіденційних даних (від 50 МБ).  Це обмеження стосується лише файлів, які потрібно перевіряти згідно з правилами <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> і правилами, що керують списком доменів, для яких увімкнено перевірку.
+
+      Якщо це правило не налаштовано або для нього вибрано значення "Немає", <ph name="PRODUCT_NAME" /> дозволяє користувачу додавати або завантажувати файли будь-якого розміру.
+
+      Якщо для цього правила вибрано значення "Блокувати завантаження великих файлів", завеликі для перевірки файли видаляються, перш ніж стануть доступними користувачу.  Оскільки розмір не завжди можна визначити перед завантаженням, <ph name="PRODUCT_NAME" /> може завантажувати файли, а тоді визначати, що вони перевищують обмеження.
+
+      Якщо для цього правила вибрано значення "Блокувати завантаження великих файлів", завеликі для перевірки файли не можна додати.
+
+      Якщо для цього правила вибрано значення "Блокувати додавання й завантаження великих файлів", <ph name="PRODUCT_NAME" /> діє відповідно до правил "Блокувати завантаження великих файлів" і "Блокувати додавання великих файлів".
+      </translation>
 <translation id="6083631234867522991">Windows (клієнти Windows):</translation>
 <translation id="608788685013546076">Налаштовувати граничне значення зміни піку потужності акумулятора у відсотках</translation>
 <translation id="6089679180657323464">Керує налаштуваннями контролера діагностики й телеметрії Wilco.</translation>
@@ -3039,6 +3173,7 @@
 <translation id="637934607141010488">Повідомляти про користувачів, які нещодавно входили на пристрій.
 
       Якщо це правило не налаштовано або має значення "false", звіт про користувачів не надсилатиметься.</translation>
+<translation id="638668187106406971">Перевіряти додані файли на відповідність правилам щодо захисту конфіденційних даних</translation>
 <translation id="6394350458541421998">Це правило не підтримується від 29-ї версії <ph name="PRODUCT_OS_NAME" />. Натомість використовуйте правило PresentationScreenDimDelayScale.</translation>
 <translation id="6401669939808766804">Вихід користувача</translation>
 <translation id="6406448383934634215">Якщо вибрати параметр "Відкривати список URL-адрес" як дію під час запуску, ви зможете вказати список URL-адрес, які відкриватимуться. Якщо це правило не налаштовано, URL-адреси не відкриватимуться під час запуску.
@@ -3286,6 +3421,7 @@
       </translation>
 <translation id="6922884955650325312">Блокувати плагін <ph name="FLASH_PLUGIN_NAME" /></translation>
 <translation id="6923366716660828830">Указує назву пошукової служби за умовчанням. Якщо залишено порожнім або не встановлено, використовується назва хосту, визначена URL-адресою пошуку. Це правило застосовується, лише коли ввімкнено правило "DefaultSearchProviderEnabled".</translation>
+<translation id="6923731550900440989">Увімкнути функцію "Виділення символу вставки" на екрані входу</translation>
 <translation id="6924223708804692571">Примусово вимикає мови перевірки орфографії. Нерозпізнані мови в цьому списку ігноруються.
 
       Якщо це правило ввімкнено, перевірка орфографії не працює для вказаних мов. Користувач усе ще може вмикати або вимикати перевірку орфографії для мов, яких немає в списку.
@@ -3656,6 +3792,7 @@
 <translation id="7433714841194914373">Увімкнути миттєвий пошук</translation>
 <translation id="7434202861148928348">Налаштовувати обов’язкові доменні імена клієнтів із віддаленим доступом</translation>
 <translation id="7443616896860707393">Міждоменні запити базової автентифікації HTTP</translation>
+<translation id="7448430478749155471">Увімкнути функцію "Читання з екрана" на екрані входу</translation>
 <translation id="7454519673779830548">Додає попередньо вказані облікові записи Kerberos. Якщо облікові дані Kerberos збігаються з обліковими даними для входу, можна налаштувати повторне використання останніх в обліковому записі, указавши ${{LOGIN_EMAIL}} і ${{PASSWORD}} для основного поля й пароля відповідно, щоб автоматично отримувати запит Kerberos, якщо не налаштовано двохетапну перевірку. Користувачі не можуть змінювати облікові записи, додані через це правило.
 
           Якщо це правило ввімкнено, список облікових записів, визначених ним, додається в налаштування облікових записів Kerberos.
@@ -3925,6 +4062,10 @@
 <translation id="7974114691960514888">Це правило більше не підтримується. Дозволяє використання серверів STUN і серверів-ретрансляторів під час з’єднання з віддаленим клієнтом. Якщо це налаштування ввімкнено, такий комп’ютер може виявляти комп’ютери віддаленого хосту та з’єднуватися з ними, навіть якщо вони розділені брандмауером. Якщо це налаштування  вимкнено, а  вихідні з’єднання за протоколом UDP фільтруються брандмауером, такий комп’ютер може з’єднуватися лише з комп’ютерами хосту в локальній мережі.</translation>
 <translation id="7976157349247117979">Назва місця призначення <ph name="PRODUCT_NAME" /></translation>
 <translation id="7980227303582973781">Немає особливих обмежень</translation>
+<translation id="7983900606645681371">Список доменів, для яких не потрібно перевіряти додані файли та вставлені з буфера або перетягнуті дані на відповідність правилам щодо захисту конфіденційних даних.  Це правило застосовується, лише якщо для правила <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> вибрано значення enabled.
+
+      Якщо це правило не налаштовано або для нього вказано порожній список доменів, увесь контент перевіряється на відповідність правилам щодо захисту конфіденційних даних.
+      </translation>
 <translation id="7985242821674907985"><ph name="PRODUCT_NAME" /></translation>
 <translation id="798856998567564266">Якщо це налаштування ввімкнено, закладки можна додавати, видаляти й змінювати. Це також відбувається за умовчанням, коли правило не налаштовано.
 
@@ -3938,6 +4079,7 @@
       Якщо це правило не налаштовано на керованому пристрої, йому заборонено запускати віртуальні машини.
       Некерованим пристроям дозволено запускати віртуальні машини.</translation>
 <translation id="8001701200415781021">Обмежувати облікові записи Google, які можна вибрати основними у веб-переглядачі <ph name="PRODUCT_NAME" /></translation>
+<translation id="8003853057959146975">Надсилати файли на перевірку відповідності правилам захисту конфіденційних даних</translation>
 <translation id="8009554972280451023">Якщо ввімкнути цей параметр, налаштування з профілів <ph name="PRODUCT_NAME" /> (як-от закладки, дані автозаповнення, паролі тощо) також записуватимуться у файл у папці профілю користувача роумінгу або в місці, яке адміністратор указав у правилі <ph name="ROAMING_PROFILE_LOCATION_POLICY_NAME" />. Якщо ввімкнути це правило, вимкнеться синхронізація в хмарі.
 
       Якщо це правило вимкнено або не налаштовано, використовуватимуться лише звичайні локальні профілі.
@@ -4416,6 +4558,7 @@
           Рекомендований спосіб блокування екрана під час неактивності – увімкнути блокування екрана під час призупинення роботи й зберігати призупинення <ph name="PRODUCT_OS_NAME" /> після затримки через неактивність. Це правило має застосовуватися, лише якщо екран блокується значно раніше за призупинення або коли призупинення через неактивність небажане взагалі.
 
           Значення правила має вказуватися в мілісекундах. Також значення мають обов’язково бути меншими за період затримки через неактивність.</translation>
+<translation id="8911348623012274122">Налаштувати обмеження обсягу пам'яті для копій Chrome</translation>
 <translation id="891435090623616439">зашифровано як рядок JSON. Докладнішу інформацію можна знайти на сторінці <ph name="COMPLEX_POLICIES_URL" /></translation>
 <translation id="8917070657147922192">Дозволити користувачам керувати встановленими сертифікатами центру сертифікації.</translation>
 <translation id="8934944553121392674">Визначає, які принтери з правила <ph name="DEVICE_PRINTERS_POLICY" /> доступні користувачам.
@@ -4454,6 +4597,7 @@
 <translation id="8942616385591203339">Це правило визначає, чи можна показувати Синхронізацію згоди під час першого входу користувача. Для нього потрібно встановити значення false, якщо користувачеві ніколи не потрібна Синхронізація згоди.
       Якщо вибрано значення false, Синхронізація згоди не показуватиметься.
       Якщо це правило не налаштовано або має значення true, Синхронізація згоди може показуватися.</translation>
+<translation id="8943934315109955032">Не перевіряти на відповідність правилам щодо захисту конфіденційних даних</translation>
 <translation id="894510252300143386">Налаштовує параметри керування розширеннями в <ph name="PRODUCT_NAME" />.
 
           Це правило контролює кілька налаштувань, зокрема ті, якими керують інші наявні правила, пов'язані з розширеннями. Воно замінює всі застарілі правила.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index 2a4f4ea..f85863f 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -2624,7 +2624,6 @@
 <translation id="5457065417344056871">Bật chế độ khách trong trình duyệt</translation>
 <translation id="5457924070961220141">Cho phép bạn định cấu hình trình kết xuất HTML mặc định khi  <ph name="PRODUCT_FRAME_NAME" /> được cài đặt.
           Cài đặt mặc định, được sử dụng khi không thiết lập chính sách này, cho phép trình duyệt chính thực hiện chức năng hiển thị nhưng bạn có thể tùy chọn ghi đè cài đặt này và yêu cầu  <ph name="PRODUCT_FRAME_NAME" /> hiển thị các trang HTML theo mặc định.</translation>
-<translation id="5458584148602890023">Bật chế độ chuyển đổi điện năng cao điểm</translation>
 <translation id="5464816904705580310">Định cấu hình cài đặt cho người dùng được quản lý.</translation>
 <translation id="546726650689747237">Độ trễ mờ màn hình khi chạy trên nguồn AC</translation>
 <translation id="5469143988693423708">Người dùng được phép chạy Crostini</translation>
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index a86dc5b2..08b9237 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -2490,7 +2490,6 @@
 <translation id="5447306928176905178">向网页报告内存信息(JS堆内存大小)(已停止使用)</translation>
 <translation id="5457065417344056871">在浏览器中启用访客模式</translation>
 <translation id="5457924070961220141">可让您在安装 <ph name="PRODUCT_FRAME_NAME" />时配置默认 HTML 呈现器。如果未设置此政策,则使用默认设置,即允许托管浏览器进行呈现。不过您可以视情况替换此设置,让 <ph name="PRODUCT_FRAME_NAME" />默认呈现 HTML 网页。</translation>
-<translation id="5458584148602890023">启用用电高峰转移</translation>
 <translation id="5464816904705580310">为托管用户配置设置。</translation>
 <translation id="546726650689747237">使用交流电源供电时的屏幕变暗延迟时间</translation>
 <translation id="5469143988693423708">允许用户运行 Crostini</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index d1ef19e..398f07e 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -2527,7 +2527,6 @@
 <translation id="5447306928176905178">在網頁上回報記憶體資訊 (JavaScript 堆積大小) (已不適用)</translation>
 <translation id="5457065417344056871">在瀏覽器中啟用訪客模式</translation>
 <translation id="5457924070961220141">允許你在安裝「<ph name="PRODUCT_FRAME_NAME" />」之後,設定預設的 HTML 轉譯器。如果未設定這項政策,系統就會使用預設設定,允許主機瀏覽器進行轉譯,但是你可以覆寫這項預設,改由「<ph name="PRODUCT_FRAME_NAME" />」轉譯 HTML 網頁。</translation>
-<translation id="5458584148602890023">開啟用電尖峰轉移功能</translation>
 <translation id="5464816904705580310">為管理化環境下的使用者調整設定。</translation>
 <translation id="546726650689747237">在 AC 供電環境下執行時的螢幕調暗延遲時間</translation>
 <translation id="5469143988693423708">已允許使用者執行 Crostini</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 4f94265..6a78731 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -449,7 +449,7 @@
 <translation id="3145945101586104090">Nem sikerült dekódolni a választ</translation>
 <translation id="3150653042067488994">Átmeneti szerverhiba</translation>
 <translation id="3154506275960390542">Az oldal olyan űrlapot tartalmaz, amely esetében előfordulhat, hogy küldése nem biztonságosan történik. Az elküldött adatokat továbbítás közben mások is megtekinthetik, illetve támadók módosíthatják, hogy a szerver mást kapjon helyettük.</translation>
-<translation id="3157931365184549694">Visszaállítás</translation>
+<translation id="3157931365184549694">Helyreállítás</translation>
 <translation id="3162559335345991374">Az Ön által használt Wi-Fi-hálózat megkövetelheti bejelentkezési oldalának felkeresését.</translation>
 <translation id="3167968892399408617">Az inkognitólapon megtekintett oldalak az összes inkognitólap bezárását követően nem szerepelnek majd böngészési előzményei között, a cookie-k gyűjtőhelyén, illetve a keresési előzményekben. A letöltött fájlok és a könyvjelzők azonban megmaradnak.</translation>
 <translation id="3169472444629675720">Discover</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 34e1575..0c8296c 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -202,6 +202,7 @@
 <translation id="187918866476621466">Mở trang khởi động</translation>
 <translation id="1883255238294161206">Thu gọn danh sách</translation>
 <translation id="1898423065542865115">Lọc</translation>
+<translation id="1901443836186977402">{1,plural, =1{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn ngày hôm qua. Nguyên nhân có thể là do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Ngày tháng trong đồng hồ trên máy tính của bạn hiện là <ph name="CURRENT_DATE" />. Thông tin này có chính xác không? Nếu không, bạn cần sửa lại đồng hồ của hệ thống rồi làm mới trang này.}other{Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này đã hết hạn # ngày trước. Nguyên nhân có thể là do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn. Ngày tháng trong đồng hồ trên máy tính của bạn hiện là <ph name="CURRENT_DATE" />. Thông tin này có chính xác không? Nếu không, bạn cần sửa lại đồng hồ của hệ thống rồi làm mới trang này.}}</translation>
 <translation id="1914326953223720820">Dịch vụ giải nén</translation>
 <translation id="1915697529809968049">Sử dụng Touch ID thay cho CVC?</translation>
 <translation id="1916770123977586577">Để áp dụng các cài đặt đã cập nhật cho trang web này, hãy tải lại trang</translation>
@@ -445,6 +446,7 @@
 <translation id="3116158981186517402">Dát mỏng</translation>
 <translation id="3120730422813725195">Elo</translation>
 <translation id="31207688938192855"><ph name="BEGIN_LINK" />Thử chạy Chẩn đoán kết nối<ph name="END_LINK" />.</translation>
+<translation id="3121994479408824897">Truy cập vào <ph name="DOMAIN" /></translation>
 <translation id="3137507986424712703">{COUNT,plural, =0{Không có}=1{dữ liệu đăng nhập cho 1 tài khoản}other{dữ liệu đăng nhập cho # tài khoản}}</translation>
 <translation id="3145945101586104090">Không thể giải mã phản hồi</translation>
 <translation id="3150653042067488994">Lỗi máy chủ tạm thời</translation>
@@ -829,6 +831,7 @@
 <translation id="5043480802608081735">Liên kết bạn đã sao chép</translation>
 <translation id="5045550434625856497">Mật khẩu sai</translation>
 <translation id="5056549851600133418">Tin bài dành cho bạn</translation>
+<translation id="5061227663725596739">Ý của bạn là <ph name="LOOKALIKE_DOMAIN" /> phải không?</translation>
 <translation id="5068524481479508725">A10</translation>
 <translation id="5068778127327928576">{NUM_COOKIES,plural, =1{(1 cookie đang được dùng)}other{(# cookie đang được dùng)}}</translation>
 <translation id="5070335125961472645"><ph name="BEGIN_LINK" />Kiểm tra địa chỉ proxy<ph name="END_LINK" /></translation>
@@ -882,6 +885,7 @@
 <translation id="5284909709419567258">Địa chỉ mạng</translation>
 <translation id="5285570108065881030">Hiển thị tất cả mật khẩu đã lưu</translation>
 <translation id="5287240709317226393">Hiển thị cookie</translation>
+<translation id="5287456746628258573">Trang web này dùng cấu hình bảo mật lỗi thời nên có thể làm lộ thông tin của bạn (chẳng hạn như mật khẩu hoặc số thẻ tín dụng) trong quá trình gửi các thông tin này đến trang web.</translation>
 <translation id="5288108484102287882">Xuất hiện cảnh báo khi xác thực các giá trị của chính sách</translation>
 <translation id="5299298092464848405">Lỗi phân tích cú pháp chính sách</translation>
 <translation id="5300589172476337783">Hiển thị</translation>
@@ -1010,6 +1014,7 @@
 <translation id="5946937721014915347">Đang mở <ph name="SITE_NAME" />…</translation>
 <translation id="5947933617628957894">Có, thêm</translation>
 <translation id="5951495562196540101">Không thể đăng ký bằng tài khoản người dùng thông thường (có sẵn giấy phép theo gói).</translation>
+<translation id="5966900314707961320">Khi tính năng này đang bật, các trang web không thể dùng cookie theo dõi bạn trên web</translation>
 <translation id="5967592137238574583">Chỉnh sửa thông tin liên hệ</translation>
 <translation id="5967867314010545767">Xóa khỏi lịch sử</translation>
 <translation id="5975083100439434680">Thu nhỏ</translation>
@@ -1443,6 +1448,7 @@
 <translation id="8131740175452115882">Xác nhận</translation>
 <translation id="8149426793427495338">Máy tính của bạn đã chuyển sang chế độ ngủ.</translation>
 <translation id="8150722005171944719">Không thể đọc được tệp tại <ph name="URL" />.  Tệp này có thể đã bị xóa, di chuyển hoặc quyền tệp có thể đang chặn truy cập.</translation>
+<translation id="8157295877370077682">Rời khỏi trang web</translation>
 <translation id="8163866351304776260">Đục 4 lỗ bên trái</translation>
 <translation id="8175796834047840627">Chrome đang đề xuất lưu thẻ của bạn vào Tài khoản Google vì bạn đã đăng nhập. Bạn có thể thay đổi hành động này trong phần cài đặt.</translation>
 <translation id="8184538546369750125">Sử dụng cài đặt mặc định chung (Cho phép)</translation>
diff --git a/components/subresource_filter/OWNERS b/components/subresource_filter/OWNERS
index 6def5ee..090edda5 100644
--- a/components/subresource_filter/OWNERS
+++ b/components/subresource_filter/OWNERS
@@ -1,8 +1,4 @@
-battre@chromium.org
 csharrison@chromium.org
-engedy@chromium.org
 jkarlin@chromium.org
-melandory@chromium.org
-pkalinnikov@chromium.org
 
-# COMPONENT: UI>Browser>AdFilter
\ No newline at end of file
+# COMPONENT: UI>Browser>AdFilter
diff --git a/components/sync/PRESUBMIT.py b/components/sync/PRESUBMIT.py
index 062e29ea..6df7434 100644
--- a/components/sync/PRESUBMIT.py
+++ b/components/sync/PRESUBMIT.py
@@ -27,6 +27,9 @@
   'SUPERVISED_USER_WHITELISTS',  # See previous.
 
   # Deprecated types:
+  'DEPRECATED_APP_NOTIFICATIONS',
+  'DEPRECATED_SYNCED_NOTIFICATIONS',
+  'DEPRECATED_SYNCED_NOTIFICATION_APP_INFO',
   'DEPRECATED_EXPERIMENTS']
 
 # Root tags are used as prefixes when creating storage keys, so certain strings
@@ -369,7 +372,8 @@
     => 'AppSpecifics'
   """
   return field_number.replace(FIELD_NUMBER_PREFIX, '').replace(
-    'FieldNumber', 'Specifics')
+    'FieldNumber', 'Specifics').replace(
+    'AppNotificationSpecifics', 'AppNotification')
 
 def CheckChangeLintsClean(input_api, output_api):
   source_filter = lambda x: input_api.FilterSourceFile(
diff --git a/components/sync/base/data_type_histogram.h b/components/sync/base/data_type_histogram.h
index c9b7674..56eac74 100644
--- a/components/sync/base/data_type_histogram.h
+++ b/components/sync/base/data_type_histogram.h
@@ -41,124 +41,133 @@
 // variadic-macro-replacement#details
 // When adding a new datatype in the switch below, also update the SyncModelType
 // and SyncModelTypeByMacro histogram suffixes in histograms.xml.
-#define SYNC_DATA_TYPE_HISTOGRAM(datatype)                       \
-  do {                                                           \
-    switch (datatype) {                                          \
-      case ::syncer::BOOKMARKS:                                  \
-        PER_DATA_TYPE_MACRO("Bookmarks");                        \
-        break;                                                   \
-      case ::syncer::PREFERENCES:                                \
-        PER_DATA_TYPE_MACRO("Preferences");                      \
-        break;                                                   \
-      case ::syncer::PASSWORDS:                                  \
-        PER_DATA_TYPE_MACRO("Passwords");                        \
-        break;                                                   \
-      case ::syncer::AUTOFILL_PROFILE:                           \
-        PER_DATA_TYPE_MACRO("AutofillProfiles");                 \
-        break;                                                   \
-      case ::syncer::AUTOFILL:                                   \
-        PER_DATA_TYPE_MACRO("Autofill");                         \
-        break;                                                   \
-      case ::syncer::AUTOFILL_WALLET_DATA:                       \
-        PER_DATA_TYPE_MACRO("AutofillWallet");                   \
-        break;                                                   \
-      case ::syncer::AUTOFILL_WALLET_METADATA:                   \
-        PER_DATA_TYPE_MACRO("AutofillWalletMetadata");           \
-        break;                                                   \
-      case ::syncer::THEMES:                                     \
-        PER_DATA_TYPE_MACRO("Themes");                           \
-        break;                                                   \
-      case ::syncer::TYPED_URLS:                                 \
-        PER_DATA_TYPE_MACRO("TypedUrls");                        \
-        break;                                                   \
-      case ::syncer::EXTENSIONS:                                 \
-        PER_DATA_TYPE_MACRO("Extensions");                       \
-        break;                                                   \
-      case ::syncer::SEARCH_ENGINES:                             \
-        PER_DATA_TYPE_MACRO("SearchEngines");                    \
-        break;                                                   \
-      case ::syncer::SESSIONS:                                   \
-        PER_DATA_TYPE_MACRO("Sessions");                         \
-        break;                                                   \
-      case ::syncer::APPS:                                       \
-        PER_DATA_TYPE_MACRO("Apps");                             \
-        break;                                                   \
-      case ::syncer::APP_SETTINGS:                               \
-        PER_DATA_TYPE_MACRO("AppSettings");                      \
-        break;                                                   \
-      case ::syncer::EXTENSION_SETTINGS:                         \
-        PER_DATA_TYPE_MACRO("ExtensionSettings");                \
-        break;                                                   \
-      case ::syncer::HISTORY_DELETE_DIRECTIVES:                  \
-        PER_DATA_TYPE_MACRO("HistoryDeleteDirectives");          \
-        break;                                                   \
-      case ::syncer::DICTIONARY:                                 \
-        PER_DATA_TYPE_MACRO("Dictionary");                       \
-        break;                                                   \
-      case ::syncer::FAVICON_IMAGES:                             \
-        PER_DATA_TYPE_MACRO("FaviconImages");                    \
-        break;                                                   \
-      case ::syncer::FAVICON_TRACKING:                           \
-        PER_DATA_TYPE_MACRO("FaviconTracking");                  \
-        break;                                                   \
-      case ::syncer::DEVICE_INFO:                                \
-        PER_DATA_TYPE_MACRO("DeviceInfo");                       \
-        break;                                                   \
-      case ::syncer::PRIORITY_PREFERENCES:                       \
-        PER_DATA_TYPE_MACRO("PriorityPreferences");              \
-        break;                                                   \
-      case ::syncer::SUPERVISED_USER_SETTINGS:                   \
-        PER_DATA_TYPE_MACRO("ManagedUserSetting");               \
-        break;                                                   \
-      case ::syncer::APP_LIST:                                   \
-        PER_DATA_TYPE_MACRO("AppList");                          \
-        break;                                                   \
-      case ::syncer::SUPERVISED_USER_WHITELISTS:                 \
-        PER_DATA_TYPE_MACRO("ManagedUserWhitelist");             \
-        break;                                                   \
-      case ::syncer::ARC_PACKAGE:                                \
-        PER_DATA_TYPE_MACRO("ArcPackage");                       \
-        break;                                                   \
-      case ::syncer::PRINTERS:                                   \
-        PER_DATA_TYPE_MACRO("Printers");                         \
-        break;                                                   \
-      case ::syncer::READING_LIST:                               \
-        PER_DATA_TYPE_MACRO("ReadingList");                      \
-        break;                                                   \
-      case ::syncer::USER_CONSENTS:                              \
-        PER_DATA_TYPE_MACRO("UserConsents");                     \
-        break;                                                   \
-      case ::syncer::USER_EVENTS:                                \
-        PER_DATA_TYPE_MACRO("UserEvents");                       \
-        break;                                                   \
-      case ::syncer::PROXY_TABS:                                 \
-        PER_DATA_TYPE_MACRO("Tabs");                             \
-        break;                                                   \
-      case ::syncer::NIGORI:                                     \
-        PER_DATA_TYPE_MACRO("Nigori");                           \
-        break;                                                   \
-      case ::syncer::DEPRECATED_EXPERIMENTS:                     \
-        PER_DATA_TYPE_MACRO("Experiments");                      \
-        break;                                                   \
-      case ::syncer::MOUNTAIN_SHARES:                            \
-        PER_DATA_TYPE_MACRO("MountainShares");                   \
-        break;                                                   \
-      case ::syncer::SEND_TAB_TO_SELF:                           \
-        PER_DATA_TYPE_MACRO("SendTabToSelf");                    \
-        break;                                                   \
-      case ::syncer::SECURITY_EVENTS:                            \
-        PER_DATA_TYPE_MACRO("SecurityEvents");                   \
-        break;                                                   \
-      case ::syncer::WEB_APPS:                                   \
-        PER_DATA_TYPE_MACRO("WebApps");                          \
-        break;                                                   \
-      case ::syncer::WIFI_CONFIGURATIONS:                        \
-        PER_DATA_TYPE_MACRO("WifiConfigurations");               \
-        break;                                                   \
-      default:                                                   \
-        NOTREACHED() << "Unknown datatype "                      \
-                     << ::syncer::ModelTypeToString(datatype);   \
-    }                                                            \
+#define SYNC_DATA_TYPE_HISTOGRAM(datatype)                     \
+  do {                                                         \
+    switch (datatype) {                                        \
+      case ::syncer::BOOKMARKS:                                \
+        PER_DATA_TYPE_MACRO("Bookmarks");                      \
+        break;                                                 \
+      case ::syncer::PREFERENCES:                              \
+        PER_DATA_TYPE_MACRO("Preferences");                    \
+        break;                                                 \
+      case ::syncer::PASSWORDS:                                \
+        PER_DATA_TYPE_MACRO("Passwords");                      \
+        break;                                                 \
+      case ::syncer::AUTOFILL_PROFILE:                         \
+        PER_DATA_TYPE_MACRO("AutofillProfiles");               \
+        break;                                                 \
+      case ::syncer::AUTOFILL:                                 \
+        PER_DATA_TYPE_MACRO("Autofill");                       \
+        break;                                                 \
+      case ::syncer::AUTOFILL_WALLET_DATA:                     \
+        PER_DATA_TYPE_MACRO("AutofillWallet");                 \
+        break;                                                 \
+      case ::syncer::AUTOFILL_WALLET_METADATA:                 \
+        PER_DATA_TYPE_MACRO("AutofillWalletMetadata");         \
+        break;                                                 \
+      case ::syncer::THEMES:                                   \
+        PER_DATA_TYPE_MACRO("Themes");                         \
+        break;                                                 \
+      case ::syncer::TYPED_URLS:                               \
+        PER_DATA_TYPE_MACRO("TypedUrls");                      \
+        break;                                                 \
+      case ::syncer::EXTENSIONS:                               \
+        PER_DATA_TYPE_MACRO("Extensions");                     \
+        break;                                                 \
+      case ::syncer::SEARCH_ENGINES:                           \
+        PER_DATA_TYPE_MACRO("SearchEngines");                  \
+        break;                                                 \
+      case ::syncer::SESSIONS:                                 \
+        PER_DATA_TYPE_MACRO("Sessions");                       \
+        break;                                                 \
+      case ::syncer::APPS:                                     \
+        PER_DATA_TYPE_MACRO("Apps");                           \
+        break;                                                 \
+      case ::syncer::APP_SETTINGS:                             \
+        PER_DATA_TYPE_MACRO("AppSettings");                    \
+        break;                                                 \
+      case ::syncer::EXTENSION_SETTINGS:                       \
+        PER_DATA_TYPE_MACRO("ExtensionSettings");              \
+        break;                                                 \
+      case ::syncer::DEPRECATED_APP_NOTIFICATIONS:             \
+        PER_DATA_TYPE_MACRO("AppNotifications");               \
+        break;                                                 \
+      case ::syncer::HISTORY_DELETE_DIRECTIVES:                \
+        PER_DATA_TYPE_MACRO("HistoryDeleteDirectives");        \
+        break;                                                 \
+      case ::syncer::DEPRECATED_SYNCED_NOTIFICATIONS:          \
+        PER_DATA_TYPE_MACRO("SyncedNotifications");            \
+        break;                                                 \
+      case ::syncer::DEPRECATED_SYNCED_NOTIFICATION_APP_INFO:  \
+        PER_DATA_TYPE_MACRO("SyncedNotificationAppInfo");      \
+        break;                                                 \
+      case ::syncer::DICTIONARY:                               \
+        PER_DATA_TYPE_MACRO("Dictionary");                     \
+        break;                                                 \
+      case ::syncer::FAVICON_IMAGES:                           \
+        PER_DATA_TYPE_MACRO("FaviconImages");                  \
+        break;                                                 \
+      case ::syncer::FAVICON_TRACKING:                         \
+        PER_DATA_TYPE_MACRO("FaviconTracking");                \
+        break;                                                 \
+      case ::syncer::DEVICE_INFO:                              \
+        PER_DATA_TYPE_MACRO("DeviceInfo");                     \
+        break;                                                 \
+      case ::syncer::PRIORITY_PREFERENCES:                     \
+        PER_DATA_TYPE_MACRO("PriorityPreferences");            \
+        break;                                                 \
+      case ::syncer::SUPERVISED_USER_SETTINGS:                 \
+        PER_DATA_TYPE_MACRO("ManagedUserSetting");             \
+        break;                                                 \
+      case ::syncer::APP_LIST:                                 \
+        PER_DATA_TYPE_MACRO("AppList");                        \
+        break;                                                 \
+      case ::syncer::SUPERVISED_USER_WHITELISTS:               \
+        PER_DATA_TYPE_MACRO("ManagedUserWhitelist");           \
+        break;                                                 \
+      case ::syncer::ARC_PACKAGE:                              \
+        PER_DATA_TYPE_MACRO("ArcPackage");                     \
+        break;                                                 \
+      case ::syncer::PRINTERS:                                 \
+        PER_DATA_TYPE_MACRO("Printers");                       \
+        break;                                                 \
+      case ::syncer::READING_LIST:                             \
+        PER_DATA_TYPE_MACRO("ReadingList");                    \
+        break;                                                 \
+      case ::syncer::USER_CONSENTS:                            \
+        PER_DATA_TYPE_MACRO("UserConsents");                   \
+        break;                                                 \
+      case ::syncer::USER_EVENTS:                              \
+        PER_DATA_TYPE_MACRO("UserEvents");                     \
+        break;                                                 \
+      case ::syncer::PROXY_TABS:                               \
+        PER_DATA_TYPE_MACRO("Tabs");                           \
+        break;                                                 \
+      case ::syncer::NIGORI:                                   \
+        PER_DATA_TYPE_MACRO("Nigori");                         \
+        break;                                                 \
+      case ::syncer::DEPRECATED_EXPERIMENTS:                   \
+        PER_DATA_TYPE_MACRO("Experiments");                    \
+        break;                                                 \
+      case ::syncer::MOUNTAIN_SHARES:                          \
+        PER_DATA_TYPE_MACRO("MountainShares");                 \
+        break;                                                 \
+      case ::syncer::SEND_TAB_TO_SELF:                         \
+        PER_DATA_TYPE_MACRO("SendTabToSelf");                  \
+        break;                                                 \
+      case ::syncer::SECURITY_EVENTS:                          \
+        PER_DATA_TYPE_MACRO("SecurityEvents");                 \
+        break;                                                 \
+      case ::syncer::WEB_APPS:                                 \
+        PER_DATA_TYPE_MACRO("WebApps");                        \
+        break;                                                 \
+      case ::syncer::WIFI_CONFIGURATIONS:                      \
+        PER_DATA_TYPE_MACRO("WifiConfigurations");             \
+        break;                                                 \
+      default:                                                 \
+        NOTREACHED() << "Unknown datatype "                    \
+                     << ::syncer::ModelTypeToString(datatype); \
+    }                                                          \
   } while (0)
 
 #endif  // COMPONENTS_SYNC_BASE_DATA_TYPE_HISTOGRAM_H_
diff --git a/components/sync/base/model_type.cc b/components/sync/base/model_type.cc
index 7fdb224..14552b37 100644
--- a/components/sync/base/model_type.cc
+++ b/components/sync/base/model_type.cc
@@ -9,6 +9,7 @@
 #include "base/stl_util.h"
 #include "base/strings/string_split.h"
 #include "base/values.h"
+#include "components/sync/protocol/app_notification_specifics.pb.h"
 #include "components/sync/protocol/app_setting_specifics.pb.h"
 #include "components/sync/protocol/app_specifics.pb.h"
 #include "components/sync/protocol/autofill_specifics.pb.h"
@@ -106,10 +107,21 @@
      "Extension settings",
      sync_pb::EntitySpecifics::kExtensionSettingFieldNumber,
      ModelTypeForHistograms::kExtensionSettings},
+    {DEPRECATED_APP_NOTIFICATIONS, "APP_NOTIFICATION", "app_notifications",
+     "App Notifications", sync_pb::EntitySpecifics::kAppNotificationFieldNumber,
+     ModelTypeForHistograms::kDeprecatedAppNotifications},
     {HISTORY_DELETE_DIRECTIVES, "HISTORY_DELETE_DIRECTIVE",
      "history_delete_directives", "History Delete Directives",
      sync_pb::EntitySpecifics::kHistoryDeleteDirectiveFieldNumber,
      ModelTypeForHistograms::kHistoryDeleteDirectices},
+    {DEPRECATED_SYNCED_NOTIFICATIONS, "SYNCED_NOTIFICATION",
+     "synced_notifications", "Synced Notifications",
+     sync_pb::EntitySpecifics::kSyncedNotificationFieldNumber,
+     ModelTypeForHistograms::kDeprecatedSyncedNotifications},
+    {DEPRECATED_SYNCED_NOTIFICATION_APP_INFO, "SYNCED_NOTIFICATION_APP_INFO",
+     "synced_notification_app_info", "Synced Notification App Info",
+     sync_pb::EntitySpecifics::kSyncedNotificationAppInfoFieldNumber,
+     ModelTypeForHistograms::kDeprecatedSyncedNotificationAppInfo},
     {DICTIONARY, "DICTIONARY", "dictionary", "Dictionary",
      sync_pb::EntitySpecifics::kDictionaryFieldNumber,
      ModelTypeForHistograms::kDictionary},
@@ -182,11 +194,11 @@
 static_assert(base::size(kModelTypeInfoMap) == ModelType::NUM_ENTRIES,
               "kModelTypeInfoMap should have ModelType::NUM_ENTRIES elements");
 
-static_assert(39 == syncer::ModelType::NUM_ENTRIES,
+static_assert(42 == syncer::ModelType::NUM_ENTRIES,
               "When adding a new type, update enum SyncModelTypes in enums.xml "
               "and suffix SyncModelType in histograms.xml.");
 
-static_assert(39 == syncer::ModelType::NUM_ENTRIES,
+static_assert(42 == syncer::ModelType::NUM_ENTRIES,
               "When adding a new type, update kAllocatorDumpNameWhitelist in "
               "base/trace_event/memory_infra_background_whitelist.cc.");
 
@@ -241,9 +253,18 @@
     case EXTENSION_SETTINGS:
       specifics->mutable_extension_setting();
       break;
+    case DEPRECATED_APP_NOTIFICATIONS:
+      specifics->mutable_app_notification();
+      break;
     case HISTORY_DELETE_DIRECTIVES:
       specifics->mutable_history_delete_directive();
       break;
+    case DEPRECATED_SYNCED_NOTIFICATIONS:
+      specifics->mutable_synced_notification();
+      break;
+    case DEPRECATED_SYNCED_NOTIFICATION_APP_INFO:
+      specifics->mutable_synced_notification_app_info();
+      break;
     case DICTIONARY:
       specifics->mutable_dictionary();
       break;
@@ -349,7 +370,7 @@
 }
 
 ModelType GetModelTypeFromSpecifics(const sync_pb::EntitySpecifics& specifics) {
-  static_assert(39 == ModelType::NUM_ENTRIES,
+  static_assert(42 == ModelType::NUM_ENTRIES,
                 "When adding new protocol types, the following type lookup "
                 "logic must be updated.");
   if (specifics.has_bookmark())
@@ -382,8 +403,14 @@
     return APP_SETTINGS;
   if (specifics.has_extension_setting())
     return EXTENSION_SETTINGS;
+  if (specifics.has_app_notification())
+    return DEPRECATED_APP_NOTIFICATIONS;
   if (specifics.has_history_delete_directive())
     return HISTORY_DELETE_DIRECTIVES;
+  if (specifics.has_synced_notification())
+    return DEPRECATED_SYNCED_NOTIFICATIONS;
+  if (specifics.has_synced_notification_app_info())
+    return DEPRECATED_SYNCED_NOTIFICATION_APP_INFO;
   if (specifics.has_dictionary())
     return DICTIONARY;
   if (specifics.has_favicon_image())
@@ -429,7 +456,7 @@
 }
 
 ModelTypeSet EncryptableUserTypes() {
-  static_assert(39 == ModelType::NUM_ENTRIES,
+  static_assert(42 == ModelType::NUM_ENTRIES,
                 "If adding an unencryptable type, remove from "
                 "encryptable_user_types below.");
   ModelTypeSet encryptable_user_types = UserTypes();
@@ -437,6 +464,11 @@
   encryptable_user_types.Remove(AUTOFILL_WALLET_DATA);
   // We never encrypt history delete directives.
   encryptable_user_types.Remove(HISTORY_DELETE_DIRECTIVES);
+  // Synced notifications are not encrypted since the server must see changes.
+  encryptable_user_types.Remove(DEPRECATED_SYNCED_NOTIFICATIONS);
+  // Synced Notification App Info does not have private data, so it is not
+  // encrypted.
+  encryptable_user_types.Remove(DEPRECATED_SYNCED_NOTIFICATION_APP_INFO);
   // Device info data is not encrypted because it might be synced before
   // encryption is ready.
   encryptable_user_types.Remove(DEVICE_INFO);
diff --git a/components/sync/base/model_type.h b/components/sync/base/model_type.h
index 1ee889c7..e239fefe 100644
--- a/components/sync/base/model_type.h
+++ b/components/sync/base/model_type.h
@@ -92,9 +92,12 @@
   APP_SETTINGS,
   // An extension setting from the extension settings API.
   EXTENSION_SETTINGS,
+  DEPRECATED_APP_NOTIFICATIONS,
   // History delete directives, used to propagate history deletions (e.g. based
   // on a time range).
   HISTORY_DELETE_DIRECTIVES,
+  DEPRECATED_SYNCED_NOTIFICATIONS,
+  DEPRECATED_SYNCED_NOTIFICATION_APP_INFO,
   // Custom spelling dictionary entries.
   DICTIONARY,
   // Favicon images, including both the image URL and the actual pixels.
@@ -248,7 +251,9 @@
       BOOKMARKS, PREFERENCES, PASSWORDS, AUTOFILL_PROFILE, AUTOFILL,
       AUTOFILL_WALLET_DATA, AUTOFILL_WALLET_METADATA, THEMES, TYPED_URLS,
       EXTENSIONS, SEARCH_ENGINES, SESSIONS, APPS, APP_SETTINGS,
-      EXTENSION_SETTINGS, HISTORY_DELETE_DIRECTIVES, DICTIONARY, FAVICON_IMAGES,
+      EXTENSION_SETTINGS, DEPRECATED_APP_NOTIFICATIONS,
+      HISTORY_DELETE_DIRECTIVES, DEPRECATED_SYNCED_NOTIFICATIONS,
+      DEPRECATED_SYNCED_NOTIFICATION_APP_INFO, DICTIONARY, FAVICON_IMAGES,
       FAVICON_TRACKING, DEVICE_INFO, PRIORITY_PREFERENCES,
       SUPERVISED_USER_SETTINGS, APP_LIST, SUPERVISED_USER_WHITELISTS,
       ARC_PACKAGE, PRINTERS, READING_LIST, USER_EVENTS, NIGORI,
diff --git a/components/sync/driver/model_association_manager.cc b/components/sync/driver/model_association_manager.cc
index 8d2bec1..7734ed2 100644
--- a/components/sync/driver/model_association_manager.cc
+++ b/components/sync/driver/model_association_manager.cc
@@ -36,14 +36,16 @@
     // in parallel with the UI types.
     PASSWORDS, AUTOFILL, AUTOFILL_PROFILE, AUTOFILL_WALLET_DATA,
     AUTOFILL_WALLET_METADATA, EXTENSION_SETTINGS, APP_SETTINGS, TYPED_URLS,
-    HISTORY_DELETE_DIRECTIVES,
+    HISTORY_DELETE_DIRECTIVES, DEPRECATED_SYNCED_NOTIFICATIONS,
+    DEPRECATED_SYNCED_NOTIFICATION_APP_INFO,
 
     // UI thread data types.
     BOOKMARKS, PREFERENCES, PRIORITY_PREFERENCES, EXTENSIONS, APPS, APP_LIST,
-    ARC_PACKAGE, READING_LIST, THEMES, SEARCH_ENGINES, SESSIONS, DICTIONARY,
-    FAVICON_IMAGES, FAVICON_TRACKING, PRINTERS, USER_CONSENTS, USER_EVENTS,
-    SUPERVISED_USER_SETTINGS, SUPERVISED_USER_WHITELISTS, MOUNTAIN_SHARES,
-    SEND_TAB_TO_SELF, SECURITY_EVENTS, WEB_APPS, WIFI_CONFIGURATIONS};
+    ARC_PACKAGE, READING_LIST, THEMES, SEARCH_ENGINES, SESSIONS,
+    DEPRECATED_APP_NOTIFICATIONS, DICTIONARY, FAVICON_IMAGES, FAVICON_TRACKING,
+    PRINTERS, USER_CONSENTS, USER_EVENTS, SUPERVISED_USER_SETTINGS,
+    SUPERVISED_USER_WHITELISTS, MOUNTAIN_SHARES, SEND_TAB_TO_SELF,
+    SECURITY_EVENTS, WEB_APPS, WIFI_CONFIGURATIONS};
 
 static_assert(base::size(kStartOrder) ==
                   ModelType::NUM_ENTRIES - FIRST_REAL_MODEL_TYPE,
diff --git a/components/sync/driver/sync_user_settings_impl.cc b/components/sync/driver/sync_user_settings_impl.cc
index d336fa95..ac25c91 100644
--- a/components/sync/driver/sync_user_settings_impl.cc
+++ b/components/sync/driver/sync_user_settings_impl.cc
@@ -197,7 +197,7 @@
     types.RetainAll(registered_model_types_);
   }
 
-  static_assert(39 == ModelType::NUM_ENTRIES,
+  static_assert(42 == ModelType::NUM_ENTRIES,
                 "If adding a new sync data type, update the list below below if"
                 " you want to disable the new data type for local sync.");
   types.PutAll(ControlTypes());
diff --git a/components/sync/nigori/nigori_sync_bridge_impl.cc b/components/sync/nigori/nigori_sync_bridge_impl.cc
index e5d564f..7ae269fb 100644
--- a/components/sync/nigori/nigori_sync_bridge_impl.cc
+++ b/components/sync/nigori/nigori_sync_bridge_impl.cc
@@ -400,7 +400,7 @@
 void UpdateNigoriSpecificsFromEncryptedTypes(
     ModelTypeSet encrypted_types,
     sync_pb::NigoriSpecifics* specifics) {
-  static_assert(39 == ModelType::NUM_ENTRIES,
+  static_assert(42 == ModelType::NUM_ENTRIES,
                 "If adding an encryptable type, update handling below.");
   specifics->set_encrypt_bookmarks(encrypted_types.Has(BOOKMARKS));
   specifics->set_encrypt_preferences(encrypted_types.Has(PREFERENCES));
@@ -418,6 +418,8 @@
   specifics->set_encrypt_app_settings(encrypted_types.Has(APP_SETTINGS));
   specifics->set_encrypt_extension_settings(
       encrypted_types.Has(EXTENSION_SETTINGS));
+  specifics->set_encrypt_app_notifications(
+      encrypted_types.Has(DEPRECATED_APP_NOTIFICATIONS));
   specifics->set_encrypt_dictionary(encrypted_types.Has(DICTIONARY));
   specifics->set_encrypt_favicon_images(encrypted_types.Has(FAVICON_IMAGES));
   specifics->set_encrypt_favicon_tracking(
diff --git a/components/sync/protocol/app_notification_specifics.proto b/components/sync/protocol/app_notification_specifics.proto
new file mode 100644
index 0000000..a3280d11
--- /dev/null
+++ b/components/sync/protocol/app_notification_specifics.proto
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Sync protocol datatype extension for app notifications.
+
+// If you change or add any fields in this file, update proto_visitors.h and
+// potentially proto_enum_conversions.{h, cc}.
+
+syntax = "proto2";
+
+option java_multiple_files = true;
+option java_package = "org.chromium.components.sync.protocol";
+
+option optimize_for = LITE_RUNTIME;
+
+package sync_pb;
+
+// Properties of an app notification.
+
+// An App Notification, to be delivered from Chrome Apps to the
+// Chrome browser through the Notification API.
+message AppNotification {
+  // Globally unique id. This is more robust for uniquely identifying each
+  // notification and hence gives us flexibility in the future. In absence
+  // of this, unique id would be (app_id, creation_timestamp_ms). But that
+  // relies on creation_timestamp_ms being high resolution and is not
+  // globally unique - only unique for a given user.
+  optional string guid = 1;
+  // Metadata, not shown directly to the user.
+  // The unique App Id, as created by the webstore and used to
+  // delegate messages to the applications. This is defined as 32 characters
+  optional string app_id = 2;
+  // Timestamp when the message was created in milliseconds.
+  // This is seperate from ctime as this is only set by the application.
+  optional int64 creation_timestamp_ms = 3;
+
+  // Payload - these fields are visible to the user content is defined by the
+  // app. The fields are described in:
+  // chrome/browser/extensions/app_notification.h
+  optional string title = 4;
+  optional string body_text = 5;
+  optional string link_url = 6;
+  optional string link_text = 7;
+}
diff --git a/components/sync/protocol/nigori_specifics.proto b/components/sync/protocol/nigori_specifics.proto
index 5e294426..54b4ab9 100644
--- a/components/sync/protocol/nigori_specifics.proto
+++ b/components/sync/protocol/nigori_specifics.proto
@@ -75,10 +75,7 @@
   optional bool encrypt_everything = 24;
 
   optional bool encrypt_extension_settings = 25;
-
-  reserved 26;
-  reserved "encrypt_app_notifications";
-
+  optional bool encrypt_app_notifications = 26 [deprecated = true];
   optional bool encrypt_app_settings = 27;
 
   // User device information. Contains information about each device that has a
diff --git a/components/sync/protocol/proto_value_conversions_unittest.cc b/components/sync/protocol/proto_value_conversions_unittest.cc
index 5ba9ca8..2e3e59b 100644
--- a/components/sync/protocol/proto_value_conversions_unittest.cc
+++ b/components/sync/protocol/proto_value_conversions_unittest.cc
@@ -56,7 +56,7 @@
 
 DEFINE_SPECIFICS_TO_VALUE_TEST(encrypted)
 
-static_assert(39 == syncer::ModelType::NUM_ENTRIES,
+static_assert(42 == syncer::ModelType::NUM_ENTRIES,
               "When adding a new field, add a DEFINE_SPECIFICS_TO_VALUE_TEST "
               "for your field below, and optionally a test for the specific "
               "conversions.");
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h
index d8fd64e..bc5218e 100644
--- a/components/sync/protocol/proto_visitors.h
+++ b/components/sync/protocol/proto_visitors.h
@@ -362,7 +362,7 @@
 }
 
 VISIT_PROTO_FIELDS(const sync_pb::EntitySpecifics& proto) {
-  static_assert(39 == ModelType::NUM_ENTRIES,
+  static_assert(42 == ModelType::NUM_ENTRIES,
                 "When adding a new protocol type, you will likely need to add "
                 "it here as well.");
   VISIT(encrypted);
diff --git a/components/sync/protocol/protocol_sources.gni b/components/sync/protocol/protocol_sources.gni
index 9735d55..5848eae 100644
--- a/components/sync/protocol/protocol_sources.gni
+++ b/components/sync/protocol/protocol_sources.gni
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 sync_protocol_bases = [
+  "app_notification_specifics",
   "app_setting_specifics",
   "app_specifics",
   "app_list_specifics",
@@ -47,6 +48,8 @@
   "session_specifics",
   "sync",
   "sync_enums",
+  "synced_notification_app_info_specifics",
+  "synced_notification_specifics",
   "test",
   "theme_specifics",
   "typed_url_specifics",
diff --git a/components/sync/protocol/sync.proto b/components/sync/protocol/sync.proto
index cbdd502..c041290 100644
--- a/components/sync/protocol/sync.proto
+++ b/components/sync/protocol/sync.proto
@@ -18,6 +18,7 @@
 package sync_pb;
 
 import "app_list_specifics.proto";
+import "app_notification_specifics.proto";
 import "app_setting_specifics.proto";
 import "app_specifics.proto";
 import "arc_package_specifics.proto";
@@ -50,6 +51,8 @@
 import "send_tab_to_self_specifics.proto";
 import "session_specifics.proto";
 import "sync_enums.proto";
+import "synced_notification_app_info_specifics.proto";
+import "synced_notification_specifics.proto";
 import "theme_specifics.proto";
 import "typed_url_specifics.proto";
 import "unique_position.proto";
@@ -112,6 +115,7 @@
     PreferenceSpecifics preference = 37702;
     TypedUrlSpecifics typed_url = 40781;
     ThemeSpecifics theme = 41210;
+    AppNotification app_notification = 45184;
     PasswordSpecifics password = 45873;
     NigoriSpecifics nigori = 47745;
     ExtensionSpecifics extension = 48119;
@@ -122,6 +126,8 @@
     ExtensionSettingSpecifics extension_setting = 96159;
     AppSettingSpecifics app_setting = 103656;
     HistoryDeleteDirectiveSpecifics history_delete_directive = 150251;
+    SyncedNotificationSpecifics synced_notification = 153108;
+    SyncedNotificationAppInfoSpecifics synced_notification_app_info = 235816;
     DeviceInfoSpecifics device_info = 154522;
     ExperimentsSpecifics experiments = 161496;
     PriorityPreferenceSpecifics priority_preference = 163425;
@@ -147,18 +153,12 @@
     WebAppSpecifics web_app = 673225;
     WifiConfigurationSpecifics wifi_configuration = 662827;
   }
-  reserved 45184;
-  reserved "app_notification";
-  reserved 153108;
-  reserved "synced_notification";
   reserved 194582;
   reserved "managed_user";
   reserved 202026;
   reserved "managed_user_shared_setting";
   reserved 218175;
   reserved "wifi_credential";
-  reserved 235816;
-  reserved "synced_notification_app_info";
 }
 
 message SyncEntity {
diff --git a/components/sync/protocol/synced_notification_app_info_specifics.proto b/components/sync/protocol/synced_notification_app_info_specifics.proto
new file mode 100644
index 0000000..f8dea52
--- /dev/null
+++ b/components/sync/protocol/synced_notification_app_info_specifics.proto
@@ -0,0 +1,18 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Sync protocol datatype extension for synced notification app info objects.
+// DO NOT USE: This datatype is deprecated.
+
+syntax = "proto2";
+
+option java_multiple_files = true;
+option java_package = "org.chromium.components.sync.protocol";
+
+option optimize_for = LITE_RUNTIME;
+
+package sync_pb;
+
+// This message is kept around for backwards compatibility sake.
+message SyncedNotificationAppInfoSpecifics {}
diff --git a/components/sync/protocol/synced_notification_specifics.proto b/components/sync/protocol/synced_notification_specifics.proto
new file mode 100644
index 0000000..c649f342
--- /dev/null
+++ b/components/sync/protocol/synced_notification_specifics.proto
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Sync protocol datatype extension for synced notifications.
+// DO NOT USE: This datatype is deprecated.
+
+syntax = "proto2";
+
+option java_multiple_files = true;
+option java_package = "org.chromium.components.sync.protocol";
+
+option optimize_for = LITE_RUNTIME;
+
+package sync_pb;
+
+// This message is kept around for backwards compatibility sake.
+message SyncedNotificationSpecifics {}
diff --git a/components/sync/syncable/nigori_util.cc b/components/sync/syncable/nigori_util.cc
index a4d62e7..352b8acd 100644
--- a/components/sync/syncable/nigori_util.cc
+++ b/components/sync/syncable/nigori_util.cc
@@ -265,7 +265,7 @@
                                     bool encrypt_everything,
                                     sync_pb::NigoriSpecifics* nigori) {
   nigori->set_encrypt_everything(encrypt_everything);
-  static_assert(39 == ModelType::NUM_ENTRIES,
+  static_assert(42 == ModelType::NUM_ENTRIES,
                 "If adding an encryptable type, update handling below.");
   nigori->set_encrypt_bookmarks(encrypted_types.Has(BOOKMARKS));
   nigori->set_encrypt_preferences(encrypted_types.Has(PREFERENCES));
@@ -282,6 +282,8 @@
   nigori->set_encrypt_app_settings(encrypted_types.Has(APP_SETTINGS));
   nigori->set_encrypt_extension_settings(
       encrypted_types.Has(EXTENSION_SETTINGS));
+  nigori->set_encrypt_app_notifications(
+      encrypted_types.Has(DEPRECATED_APP_NOTIFICATIONS));
   nigori->set_encrypt_dictionary(encrypted_types.Has(DICTIONARY));
   nigori->set_encrypt_favicon_images(encrypted_types.Has(FAVICON_IMAGES));
   nigori->set_encrypt_favicon_tracking(encrypted_types.Has(FAVICON_TRACKING));
@@ -300,7 +302,7 @@
     return ModelTypeSet::All();
 
   ModelTypeSet encrypted_types;
-  static_assert(39 == ModelType::NUM_ENTRIES,
+  static_assert(42 == ModelType::NUM_ENTRIES,
                 "If adding an encryptable type, update handling below.");
   if (nigori.encrypt_bookmarks())
     encrypted_types.Put(BOOKMARKS);
@@ -328,6 +330,8 @@
     encrypted_types.Put(APP_SETTINGS);
   if (nigori.encrypt_extension_settings())
     encrypted_types.Put(EXTENSION_SETTINGS);
+  if (nigori.encrypt_app_notifications())
+    encrypted_types.Put(DEPRECATED_APP_NOTIFICATIONS);
   if (nigori.encrypt_dictionary())
     encrypted_types.Put(DICTIONARY);
   if (nigori.encrypt_favicon_images())
diff --git a/components/test/run_all_unittests.cc b/components/test/run_all_unittests.cc
index 5f8b3ae..92af0b5 100644
--- a/components/test/run_all_unittests.cc
+++ b/components/test/run_all_unittests.cc
@@ -5,5 +5,5 @@
 #include "components/test/components_test_suite.h"
 
 int main(int argc, char** argv) {
-  return base::LaunchUnitTests(argc, argv, GetLaunchCallback(argc, argv), 0U);
+  return base::LaunchUnitTests(argc, argv, GetLaunchCallback(argc, argv));
 }
diff --git a/components/viz/service/display_embedder/overlay_candidate_validator_ozone.cc b/components/viz/service/display_embedder/overlay_candidate_validator_ozone.cc
index 13647fa8..900aa8b 100644
--- a/components/viz/service/display_embedder/overlay_candidate_validator_ozone.cc
+++ b/components/viz/service/display_embedder/overlay_candidate_validator_ozone.cc
@@ -29,7 +29,6 @@
   ozone_candidate->crop_rect = gfx::RectF(0.f, 0.f, 1.f, 1.f);
   ozone_candidate->clip_rect = gfx::ToEnclosingRect(primary_plane.display_rect);
   ozone_candidate->is_clipped = false;
-  ozone_candidate->is_opaque = !primary_plane.enable_blending;
   ozone_candidate->plane_z_order = 0;
   ozone_candidate->buffer_size = primary_plane.resource_size;
 }
@@ -43,7 +42,6 @@
   ozone_candidate->crop_rect = overlay_candidate.uv_rect;
   ozone_candidate->clip_rect = overlay_candidate.clip_rect;
   ozone_candidate->is_clipped = overlay_candidate.is_clipped;
-  ozone_candidate->is_opaque = overlay_candidate.is_opaque;
   ozone_candidate->plane_z_order = overlay_candidate.plane_z_order;
   ozone_candidate->buffer_size = overlay_candidate.resource_size_in_pixels;
 }
diff --git a/components/web_cache/browser/web_cache_manager.cc b/components/web_cache/browser/web_cache_manager.cc
index 3423120..75f9372 100644
--- a/components/web_cache/browser/web_cache_manager.cc
+++ b/components/web_cache/browser/web_cache_manager.cc
@@ -11,7 +11,6 @@
 #include "base/bind.h"
 #include "base/compiler_specific.h"
 #include "base/location.h"
-#include "base/memory/singleton.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
 #include "base/system/sys_info.h"
@@ -19,8 +18,6 @@
 #include "base/time/time.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_types.h"
 #include "content/public/browser/render_process_host.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 
@@ -57,17 +54,12 @@
 
 // static
 WebCacheManager* WebCacheManager::GetInstance() {
-  return base::Singleton<WebCacheManager>::get();
+  static base::NoDestructor<WebCacheManager> s_instance;
+  return s_instance.get();
 }
 
 WebCacheManager::WebCacheManager()
     : global_size_limit_(GetDefaultGlobalSizeLimit()) {
-  registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CREATED,
-                 content::NotificationService::AllBrowserContextsAndSources());
-  registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED,
-                 content::NotificationService::AllBrowserContextsAndSources());
-  registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
-                 content::NotificationService::AllBrowserContextsAndSources());
 }
 
 WebCacheManager::~WebCacheManager() {
@@ -164,27 +156,22 @@
   ClearRendererCache(inactive_renderers_, ON_NAVIGATION);
 }
 
-void WebCacheManager::Observe(int type,
-                              const content::NotificationSource& source,
-                              const content::NotificationDetails& details) {
-  switch (type) {
-    case content::NOTIFICATION_RENDERER_PROCESS_CREATED: {
-      content::RenderProcessHost* process =
-          content::Source<content::RenderProcessHost>(source).ptr();
-      Add(process->GetID());
-      break;
-    }
-    case content::NOTIFICATION_RENDERER_PROCESS_CLOSED:
-    case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: {
-      content::RenderProcessHost* process =
-          content::Source<content::RenderProcessHost>(source).ptr();
-      Remove(process->GetID());
-      break;
-    }
-    default:
-      NOTREACHED();
-      break;
-  }
+void WebCacheManager::OnRenderProcessHostCreated(
+    content::RenderProcessHost* process_host) {
+  Add(process_host->GetID());
+  rph_observers_.Add(process_host);
+}
+
+void WebCacheManager::RenderProcessExited(
+    content::RenderProcessHost* process_host,
+    const content::ChildProcessTerminationInfo& info) {
+  RenderProcessHostDestroyed(process_host);
+}
+
+void WebCacheManager::RenderProcessHostDestroyed(
+    content::RenderProcessHost* process_host) {
+  rph_observers_.Remove(process_host);
+  Remove(process_host->GetID());
 }
 
 // static
diff --git a/components/web_cache/browser/web_cache_manager.h b/components/web_cache/browser/web_cache_manager.h
index 31e6f1ca..ec5144a 100644
--- a/components/web_cache/browser/web_cache_manager.h
+++ b/components/web_cache/browser/web_cache_manager.h
@@ -18,22 +18,20 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
+#include "base/no_destructor.h"
+#include "base/scoped_observer.h"
 #include "base/time/time.h"
 #include "components/web_cache/public/mojom/web_cache.mojom.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
+#include "content/public/browser/render_process_host_creation_observer.h"
+#include "content/public/browser/render_process_host_observer.h"
 #include "mojo/public/cpp/bindings/remote.h"
 
-namespace base {
-template<typename Type>
-struct DefaultSingletonTraits;
-}  // namespace base
-
 namespace web_cache {
 
 // Note: memory usage uses uint64_t because potentially the browser could be
 // 32 bit and the renderers 64 bits.
-class WebCacheManager : public content::NotificationObserver {
+class WebCacheManager : public content::RenderProcessHostCreationObserver,
+                        public content::RenderProcessHostObserver {
   friend class WebCacheManagerTest;
   FRIEND_TEST_ALL_PREFIXES(
       WebCacheManagerTest,
@@ -102,10 +100,15 @@
   // to a different website.
   void ClearCacheOnNavigation();
 
-  // content::NotificationObserver implementation:
-  void Observe(int type,
-               const content::NotificationSource& source,
-               const content::NotificationDetails& details) override;
+  // content::RenderProcessHostCreationObserver:
+  void OnRenderProcessHostCreated(
+      content::RenderProcessHost* process_host) override;
+
+  // content::RenderProcessHostObserver:
+  void RenderProcessExited(
+      content::RenderProcessHost* host,
+      const content::ChildProcessTerminationInfo& info) override;
+  void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
 
   // Gets the default global size limit.  This interrogates system metrics to
   // tune the default size to the current system.
@@ -136,9 +139,10 @@
   // The key is the unique id of every render process host.
   typedef std::map<int, mojo::Remote<mojom::WebCache>> WebCacheServicesMap;
 
-  // This class is a singleton.  Do not instantiate directly.
+  // This class is a singleton.  Do not instantiate directly. Call GetInstance()
+  // instead.
   WebCacheManager();
-  friend struct base::DefaultSingletonTraits<WebCacheManager>;
+  friend class base::NoDestructor<WebCacheManager>;
 
   ~WebCacheManager() override;
 
@@ -238,12 +242,13 @@
   // recently than they have been active.
   std::set<int> inactive_renderers_;
 
-  content::NotificationRegistrar registrar_;
-
   // Maps every renderer_id with its corresponding
   // mojo::Remote<mojom::WebCache>.
   WebCacheServicesMap web_cache_services_;
 
+  ScopedObserver<content::RenderProcessHost, content::RenderProcessHostObserver>
+      rph_observers_{this};
+
   base::WeakPtrFactory<WebCacheManager> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(WebCacheManager);
diff --git a/components/web_cache/browser/web_cache_manager_unittest.cc b/components/web_cache/browser/web_cache_manager_unittest.cc
index b6055144..52be1de 100644
--- a/components/web_cache/browser/web_cache_manager_unittest.cc
+++ b/components/web_cache/browser/web_cache_manager_unittest.cc
@@ -93,8 +93,10 @@
   WebCacheManager* manager() { return &manager_; }
 
  private:
-  WebCacheManager manager_;
+  // Create the environment before creating the WebCacheManager, because the
+  // latter depends on the UI thread to have been set up correctly.
   content::BrowserTaskEnvironment task_environment_;
+  WebCacheManager manager_;
 };
 
 // static
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 59c54ea1..61de0417 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -993,6 +993,7 @@
     "indexed_db/indexed_db_database_error.h",
     "indexed_db/indexed_db_dispatcher_host.cc",
     "indexed_db/indexed_db_dispatcher_host.h",
+    "indexed_db/indexed_db_execution_context.h",
     "indexed_db/indexed_db_factory.h",
     "indexed_db/indexed_db_factory_impl.cc",
     "indexed_db/indexed_db_factory_impl.h",
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc
index 21c26f2..97e8f4c 100644
--- a/content/browser/back_forward_cache_browsertest.cc
+++ b/content/browser/back_forward_cache_browsertest.cc
@@ -2394,11 +2394,8 @@
   EXPECT_TRUE(NavigateToURL(shell(), url_a));
   RenderFrameHostImpl* rfh_a = current_frame_host();
   RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
-  web_contents()
-      ->GetController()
-      .GetBackForwardCache()
-      .DisableForRenderFrameHost(rfh_a->GetGlobalFrameRoutingId(),
-                                 "DisabledByBackForwardCacheBrowserTest");
+  BackForwardCache::DisableForRenderFrameHost(
+      rfh_a, "DisabledByBackForwardCacheBrowserTest");
 
   // 2) Navigate to B.
   EXPECT_TRUE(NavigateToURL(shell(), url_b));
@@ -2423,22 +2420,16 @@
   RenderFrameHostImpl* rfh_a = current_frame_host();
   RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
   GlobalFrameRoutingId rfh_a_id = rfh_a->GetGlobalFrameRoutingId();
-  web_contents()
-      ->GetController()
-      .GetBackForwardCache()
-      .DisableForRenderFrameHost(rfh_a_id,
-                                 "DisabledByBackForwardCacheBrowserTest");
+  BackForwardCache::DisableForRenderFrameHost(
+      rfh_a_id, "DisabledByBackForwardCacheBrowserTest");
 
   // 2) Navigate to B.
   EXPECT_TRUE(NavigateToURL(shell(), url_b));
   EXPECT_TRUE(delete_observer_rfh_a.deleted());
 
   // This should not die
-  web_contents()
-      ->GetController()
-      .GetBackForwardCache()
-      .DisableForRenderFrameHost(rfh_a_id,
-                                 "DisabledByBackForwardCacheBrowserTest");
+  BackForwardCache::DisableForRenderFrameHost(
+      rfh_a_id, "DisabledByBackForwardCacheBrowserTest");
 
   // 3) Go back to A.
   web_contents()->GetController().GoBack();
@@ -2460,7 +2451,8 @@
   RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a);
   RenderFrameDeletedObserver delete_observer_rfh_b(rfh_b);
 
-  BackForwardCache::DisableForRenderFrameHost(rfh_b, "test");
+  BackForwardCache::DisableForRenderFrameHost(
+      rfh_b, "DisabledByBackForwardCacheBrowserTest");
 
   // 2) Navigate to C. A and B are immediately deleted.
   EXPECT_TRUE(NavigateToURL(shell(), url_c));
@@ -2488,11 +2480,8 @@
   EXPECT_TRUE(rfh_a->is_in_back_forward_cache());
   EXPECT_FALSE(rfh_a->is_evicted_from_back_forward_cache());
 
-  web_contents()
-      ->GetController()
-      .GetBackForwardCache()
-      .DisableForRenderFrameHost(rfh_a->GetGlobalFrameRoutingId(),
-                                 "DisabledByBackForwardCacheBrowserTest");
+  BackForwardCache::DisableForRenderFrameHost(
+      rfh_a, "DisabledByBackForwardCacheBrowserTest");
 
   EXPECT_TRUE(rfh_a->is_evicted_from_back_forward_cache());
   delete_observer_rfh_a.WaitUntilDeleted();
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc
index f5c6728..eaf25e2 100644
--- a/content/browser/browser_interface_binders.cc
+++ b/content/browser/browser_interface_binders.cc
@@ -7,6 +7,7 @@
 #include "base/feature_list.h"
 #include "build/build_config.h"
 #include "content/browser/background_fetch/background_fetch_service_impl.h"
+#include "content/browser/browser_main_loop.h"
 #include "content/browser/content_index/content_index_service_impl.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
 #include "content/browser/gpu/gpu_process_host.h"
@@ -14,6 +15,8 @@
 #include "content/browser/keyboard_lock/keyboard_lock_service_impl.h"
 #include "content/browser/media/session/media_session_service_impl.h"
 #include "content/browser/picture_in_picture/picture_in_picture_service_impl.h"
+#include "content/browser/renderer_host/media/media_devices_dispatcher_host.h"
+#include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
 #include "content/browser/renderer_host/render_process_host_impl.h"
 #include "content/browser/screen_enumeration/screen_enumeration_impl.h"
 #include "content/browser/service_worker/service_worker_provider_host.h"
@@ -51,6 +54,8 @@
 #include "third_party/blink/public/mojom/keyboard_lock/keyboard_lock.mojom.h"
 #include "third_party/blink/public/mojom/locks/lock_manager.mojom.h"
 #include "third_party/blink/public/mojom/mediasession/media_session.mojom.h"
+#include "third_party/blink/public/mojom/mediastream/media_devices.mojom.h"
+#include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h"
 #include "third_party/blink/public/mojom/payments/payment_app.mojom.h"
 #include "third_party/blink/public/mojom/permissions/permission.mojom.h"
 #include "third_party/blink/public/mojom/picture_in_picture/picture_in_picture.mojom.h"
@@ -224,6 +229,28 @@
       base::BindRepeating(&RenderFrameHostImpl::GetVirtualAuthenticatorManager,
                           base::Unretained(host)));
 
+  // BrowserMainLoop::GetInstance() may be null on unit tests.
+  if (BrowserMainLoop::GetInstance()) {
+    // BrowserMainLoop, which owns MediaStreamManager, is alive for the lifetime
+    // of Mojo communication (see BrowserMainLoop::ShutdownThreadsAndCleanUp(),
+    // which shuts down Mojo). Hence, passing that MediaStreamManager instance
+    // as a raw pointer here is safe.
+    MediaStreamManager* media_stream_manager =
+        BrowserMainLoop::GetInstance()->media_stream_manager();
+
+    map->Add<blink::mojom::MediaDevicesDispatcherHost>(
+        base::BindRepeating(&MediaDevicesDispatcherHost::Create,
+                            host->GetProcess()->GetID(), host->GetRoutingID(),
+                            base::Unretained(media_stream_manager)),
+        base::CreateSingleThreadTaskRunner(BrowserThread::IO));
+
+    map->Add<blink::mojom::MediaStreamDispatcherHost>(
+        base::BindRepeating(&MediaStreamDispatcherHost::Create,
+                            host->GetProcess()->GetID(), host->GetRoutingID(),
+                            base::Unretained(media_stream_manager)),
+        base::CreateSingleThreadTaskRunner(BrowserThread::IO));
+  }
+
   map->Add<media::mojom::ImageCapture>(
       base::BindRepeating(&ImageCaptureImpl::Create));
 
diff --git a/content/browser/cache_storage/cache_storage_context_impl.cc b/content/browser/cache_storage/cache_storage_context_impl.cc
index 09296f8..79cec0a 100644
--- a/content/browser/cache_storage/cache_storage_context_impl.cc
+++ b/content/browser/cache_storage/cache_storage_context_impl.cc
@@ -28,7 +28,7 @@
 namespace {
 
 const base::Feature kCacheStorageSequenceFeature{
-    "CacheStorageSequence", base::FEATURE_DISABLED_BY_DEFAULT};
+    "CacheStorageSequence", base::FEATURE_ENABLED_BY_DEFAULT};
 
 scoped_refptr<base::SequencedTaskRunner> CreateSchedulerTaskRunner() {
   if (!base::FeatureList::IsEnabled(kCacheStorageSequenceFeature))
diff --git a/content/browser/devtools/protocol/security_handler.cc b/content/browser/devtools/protocol/security_handler.cc
index e2df2fa9c..7ed5ff93 100644
--- a/content/browser/devtools/protocol/security_handler.cc
+++ b/content/browser/devtools/protocol/security_handler.cc
@@ -195,12 +195,9 @@
 
 void SecurityHandler::DidFinishNavigation(NavigationHandle* navigation_handle) {
   if (cert_error_override_mode_ == CertErrorOverrideMode::kHandleEvents) {
-    web_contents()
-        ->GetController()
-        .GetBackForwardCache()
-        .DisableForRenderFrameHost(
-            navigation_handle->GetPreviousRenderFrameHostId(),
-            "content::protocol::SecurityHandler");
+    BackForwardCache::DisableForRenderFrameHost(
+        navigation_handle->GetPreviousRenderFrameHostId(),
+        "content::protocol::SecurityHandler");
     FlushPendingCertificateErrorNotifications();
   }
 }
diff --git a/content/browser/frame_host/back_forward_cache_impl.cc b/content/browser/frame_host/back_forward_cache_impl.cc
index 20a3d33..641bda2 100644
--- a/content/browser/frame_host/back_forward_cache_impl.cc
+++ b/content/browser/frame_host/back_forward_cache_impl.cc
@@ -406,14 +406,22 @@
                                 weak_factory_.GetWeakPtr()));
 }
 
-void BackForwardCacheImpl::DisableForRenderFrameHost(GlobalFrameRoutingId id,
-                                                     base::StringPiece reason) {
+// static
+void BackForwardCache::DisableForRenderFrameHost(RenderFrameHost* rfh,
+                                                 base::StringPiece reason) {
+  DisableForRenderFrameHost(
+      static_cast<RenderFrameHostImpl*>(rfh)->GetGlobalFrameRoutingId(),
+      reason);
+}
+
+// static
+void BackForwardCache::DisableForRenderFrameHost(GlobalFrameRoutingId id,
+                                                 base::StringPiece reason) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   if (g_bfcache_disabled_test_observer)
     g_bfcache_disabled_test_observer->OnDisabledForFrameWithReason(id, reason);
 
-  auto* rfh = RenderFrameHostImpl::FromID(id);
-  if (rfh) {
+  if (auto* rfh = RenderFrameHostImpl::FromID(id)) {
     rfh->DisallowBackForwardCache();
 
     RenderFrameHostImpl* frame = rfh;
diff --git a/content/browser/frame_host/back_forward_cache_impl.h b/content/browser/frame_host/back_forward_cache_impl.h
index 1d358e9..6ee4dee 100644
--- a/content/browser/frame_host/back_forward_cache_impl.h
+++ b/content/browser/frame_host/back_forward_cache_impl.h
@@ -148,9 +148,6 @@
     cache_size_limit_for_testing_ = cache_size_limit_for_testing;
   }
 
-  // BackForwardCache:
-  void DisableForRenderFrameHost(GlobalFrameRoutingId id,
-                                 base::StringPiece reason) override;
   void DisableForTesting(DisableForTestingReason reason) override;
 
  private:
diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc
index f6c4a6f..113749d 100644
--- a/content/browser/frame_host/frame_tree_node.cc
+++ b/content/browser/frame_host/frame_tree_node.cc
@@ -548,12 +548,8 @@
 }
 
 bool FrameTreeNode::StopLoading() {
-  if (navigation_request_) {
-    int expected_pending_nav_entry_id = navigation_request_->nav_entry_id();
-    if (navigation_request_->IsNavigationStarted())
-      navigation_request_->set_net_error(net::ERR_ABORTED);
-    navigator_->DiscardPendingEntryIfNeeded(expected_pending_nav_entry_id);
-  }
+  if (navigation_request_ && navigation_request_->IsNavigationStarted())
+    navigation_request_->set_net_error(net::ERR_ABORTED);
   ResetNavigationRequest(false, true);
 
   // TODO(nasko): see if child frames should send IPCs in site-per-process
diff --git a/content/browser/frame_host/navigation_controller_delegate.h b/content/browser/frame_host/navigation_controller_delegate.h
index 2615790..e738630 100644
--- a/content/browser/frame_host/navigation_controller_delegate.h
+++ b/content/browser/frame_host/navigation_controller_delegate.h
@@ -56,6 +56,10 @@
   virtual void ActivateAndShowRepostFormWarningDialog() = 0;
   virtual bool HasAccessedInitialDocument() = 0;
 
+  // Returns whether URLs for aborted browser-initiated navigations should be
+  // preserved in the omnibox.  Defaults to false.
+  virtual bool ShouldPreserveAbortedURLs() = 0;
+
   // TODO(crbug.com/934637): Remove when pdf and any inner web contents user
   // gesture is properly propagated.
   virtual bool HadInnerWebContents() = 0;
diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
index 1f709b6..f1d49b27 100644
--- a/content/browser/frame_host/navigation_controller_impl.cc
+++ b/content/browser/frame_host/navigation_controller_impl.cc
@@ -434,6 +434,19 @@
 
 }  // namespace
 
+// NavigationControllerImpl::PendingEntryRef------------------------------------
+
+NavigationControllerImpl::PendingEntryRef::PendingEntryRef(
+    base::WeakPtr<NavigationControllerImpl> controller)
+    : controller_(controller) {}
+
+NavigationControllerImpl::PendingEntryRef::~PendingEntryRef() {
+  if (!controller_)  // Can be null with interstitials.
+    return;
+
+  controller_->PendingEntryRefDeleted(this);
+}
+
 // NavigationControllerImpl ----------------------------------------------------
 
 const size_t kMaxEntryCountForTestingNotSet = static_cast<size_t>(-1);
@@ -2110,6 +2123,11 @@
     pending_entry_index_ = -1;
     pending_entry_ = nullptr;
   }
+
+  // Ensure any refs to the current pending entry are ignored if they get
+  // deleted, by clearing the set of known refs. All future pending entries will
+  // only be affected by new refs.
+  pending_entry_refs_.clear();
 }
 
 void NavigationControllerImpl::SetPendingNavigationSSLError(bool error) {
@@ -2690,6 +2708,11 @@
   CHECK(!in_navigate_to_pending_entry_);
   in_navigate_to_pending_entry_ = true;
 
+  // It is not possible to delete the pending NavigationEntry while navigating
+  // to it. Grab a reference to delay potential deletion until the end of this
+  // function.
+  std::unique_ptr<PendingEntryRef> pending_entry_ref = ReferencePendingEntry();
+
   // Send all the same document frame loads before the different document loads.
   for (auto& item : same_document_loads) {
     FrameTreeNode* frame = item->frame_tree_node();
@@ -2920,6 +2943,11 @@
   CHECK(!in_navigate_to_pending_entry_);
   in_navigate_to_pending_entry_ = true;
 
+  // It is not possible to delete the pending NavigationEntry while navigating
+  // to it. Grab a reference to delay potential deletion until the end of this
+  // function.
+  std::unique_ptr<PendingEntryRef> pending_entry_ref = ReferencePendingEntry();
+
   node->navigator()->Navigate(std::move(request), reload_type,
                               RestoreType::NONE);
 
@@ -3549,4 +3577,54 @@
   }
 }
 
+std::unique_ptr<NavigationControllerImpl::PendingEntryRef>
+NavigationControllerImpl::ReferencePendingEntry() {
+  DCHECK(pending_entry_);
+  auto pending_entry_ref =
+      std::make_unique<PendingEntryRef>(weak_factory_.GetWeakPtr());
+  pending_entry_refs_.insert(pending_entry_ref.get());
+  return pending_entry_ref;
+}
+
+void NavigationControllerImpl::PendingEntryRefDeleted(PendingEntryRef* ref) {
+  // Ignore refs that don't correspond to the current pending entry.
+  auto it = pending_entry_refs_.find(ref);
+  if (it == pending_entry_refs_.end())
+    return;
+  pending_entry_refs_.erase(it);
+
+  if (!pending_entry_refs_.empty())
+    return;
+
+  // The pending entry may be deleted before the last PendingEntryRef.
+  if (!pending_entry_)
+    return;
+
+  // We usually clear the pending entry when the matching NavigationRequest
+  // fails, so that an arbitrary URL isn't left visible above a committed page.
+  //
+  // However, we do preserve the pending entry in some cases, such as on the
+  // initial navigation of an unmodified blank tab. We also allow the delegate
+  // to say when it's safe to leave aborted URLs in the omnibox, to let the
+  // user edit the URL and try again. This may be useful in cases that the
+  // committed page cannot be attacker-controlled. In these cases, we still
+  // allow the view to clear the pending entry and typed URL if the user
+  // requests (e.g., hitting Escape with focus in the address bar).
+  //
+  // Do not leave the pending entry visible if it has an invalid URL, since this
+  // might be formatted in an unexpected or unsafe way.
+  // TODO(creis): Block navigations to invalid URLs in https://crbug.com/850824.
+  //
+  // Note: don't touch the transient entry, since an interstitial may exist.
+  bool should_preserve_entry =
+      (pending_entry_ == GetVisibleEntry()) &&
+      pending_entry_->GetURL().is_valid() &&
+      (IsUnmodifiedBlankTab() || delegate_->ShouldPreserveAbortedURLs());
+  if (should_preserve_entry)
+    return;
+
+  DiscardPendingEntry(true);
+  delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/navigation_controller_impl.h b/content/browser/frame_host/navigation_controller_impl.h
index f5f5b80..cf0cbc9 100644
--- a/content/browser/frame_host/navigation_controller_impl.h
+++ b/content/browser/frame_host/navigation_controller_impl.h
@@ -8,12 +8,14 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <set>
 #include <vector>
 
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
@@ -37,6 +39,35 @@
 
 class CONTENT_EXPORT NavigationControllerImpl : public NavigationController {
  public:
+  // This tracks one NavigationRequest navigating to a pending NavigationEntry.
+  // In some cases, several NavigationRequests are referencing the same pending
+  // NavigationEntry. For instance:
+  // - A reload requested while a reload is already in progress.
+  // - An history navigation causing several subframes to navigate.
+  //
+  // When no NavigationRequests are referencing the pending NavigationEntry
+  // anymore, it should be discarded to avoid a URL spoof.
+  //
+  // The deletion is not always immediate, because it is not possible to delete
+  // the entry while requesting a navigation to it at the same time. In this
+  // case, the deletion happens later, when returning from the function.
+  //
+  // If the pending NavigationEntry is discarded before the PendingEntryRef(s),
+  // then removing the last associated PendingEntryRef is a no-op. It is a no-op
+  // forever, even if the entry becomes the pending NavigationEntry again in the
+  // meantime. Rather than track the NavigationRequest or pending entry
+  // explicitly, this ref class simply goes into a set that gets cleared with
+  // each change to the pending entry
+  class PendingEntryRef {
+   public:
+    PendingEntryRef(base::WeakPtr<NavigationControllerImpl> controller);
+    ~PendingEntryRef();
+
+   private:
+    base::WeakPtr<NavigationControllerImpl> controller_;
+    DISALLOW_COPY_AND_ASSIGN(PendingEntryRef);
+  };
+
   NavigationControllerImpl(
       NavigationControllerDelegate* delegate,
       BrowserContext* browser_context);
@@ -270,6 +301,11 @@
   // entries can be updated as needed.
   void NotifyUserActivation();
 
+  // Tracks a new association between the current pending entry and a
+  // NavigationRequest. Callers are responsible for only calling this for
+  // requests corresponding to the current pending entry.
+  std::unique_ptr<PendingEntryRef> ReferencePendingEntry();
+
  private:
   friend class RestoreHelper;
 
@@ -496,6 +532,11 @@
   // at |reference_index| will get their skippable flag set to |skippable|.
   void SetSkippableForSameDocumentEntries(int reference_index, bool skippable);
 
+  // Called when one PendingEntryRef is deleted. When all of the refs for the
+  // current pending entry have been deleted, this automatically discards the
+  // pending NavigationEntry.
+  void PendingEntryRefDeleted(PendingEntryRef* ref);
+
   // ---------------------------------------------------------------------------
 
   // The user browser context associated with this controller.
@@ -513,6 +554,14 @@
   // the memory management.
   NavigationEntryImpl* pending_entry_;
 
+  // This keeps track of the NavigationRequests associated with the pending
+  // NavigationEntry. When all of them have been deleted, or have stopped
+  // loading, the pending NavigationEntry can be discarded.
+  //
+  // This is meant to avoid a class of URL spoofs where the navigation is
+  // canceled, but the stale pending NavigationEntry is left in place.
+  std::set<PendingEntryRef*> pending_entry_refs_;
+
   // If a new entry fails loading, details about it are temporarily held here
   // until the error page is shown (or 0 otherwise).
   //
@@ -601,6 +650,9 @@
   // go back into place after any subsequent commit.
   std::unique_ptr<NavigationEntryImpl> entry_replaced_by_post_commit_error_;
 
+  // NOTE: This must be the last member.
+  base::WeakPtrFactory<NavigationControllerImpl> weak_factory_{this};
+
   DISALLOW_COPY_AND_ASSIGN(NavigationControllerImpl);
 };
 
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index b05640d..252a5c2 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -880,6 +880,8 @@
                            "frame_tree_node",
                            frame_tree_node_->frame_tree_node_id(), "url",
                            common_params_->url.possibly_invalid_spec());
+  NavigationControllerImpl* controller = static_cast<NavigationControllerImpl*>(
+      frame_tree_node_->navigator()->GetController());
 
   if (frame_entry) {
     frame_entry_item_sequence_number_ = frame_entry->item_sequence_number();
@@ -941,6 +943,12 @@
       bundled_exchanges_navigation_info_ =
           entry->bundled_exchanges_navigation_info()->Clone();
     }
+
+    // If this NavigationRequest is for the current pending entry, make sure
+    // that we will discard the pending entry if all of associated its requests
+    // go away, by creating a ref to it.
+    if (entry == controller->GetPendingEntry())
+      pending_entry_ref_ = controller->ReferencePendingEntry();
   }
 
   std::string user_agent_override;
@@ -954,8 +962,7 @@
   // Only add specific headers when creating a NavigationRequest before the
   // network request is made, not at commit time.
   if (!is_for_commit) {
-    BrowserContext* browser_context =
-        frame_tree_node_->navigator()->GetController()->GetBrowserContext();
+    BrowserContext* browser_context = controller->GetBrowserContext();
     ClientHintsControllerDelegate* client_hints_delegate =
         browser_context->GetClientHintsControllerDelegate();
     if (client_hints_delegate) {
@@ -973,8 +980,7 @@
     headers.AddHeadersFromString(begin_params_->headers);
     AddAdditionalRequestHeaders(
         &headers, common_params_->url, common_params_->navigation_type,
-        common_params_->transition,
-        frame_tree_node_->navigator()->GetController()->GetBrowserContext(),
+        common_params_->transition, controller->GetBrowserContext(),
         common_params_->method, user_agent_override,
         common_params_->has_user_gesture, common_params_->initiator_origin,
         common_params_->referrer->policy, frame_tree_node);
@@ -1015,6 +1021,17 @@
         *this, network::URLLoaderCompletionStatus(net::ERR_ABORTED));
   }
 
+  // If this NavigationRequest is the last one referencing the pending
+  // NavigationEntry, the entry is discarded.
+  //
+  // Leaving a stale pending NavigationEntry with no matching navigation can
+  // potentially lead to URL-spoof issues.
+  //
+  // Note: Discarding the pending NavigationEntry is done before notifying the
+  // navigation finished to the observers. One class is relying on this:
+  // org.chromium.chrome.browser.toolbar.ToolbarManager
+  pending_entry_ref_.reset();
+
 #if defined(OS_ANDROID)
   if (navigation_handle_proxy_)
     navigation_handle_proxy_->DidFinish();
@@ -1835,7 +1852,9 @@
                                "OnRequestFailed", "error", status.error_code);
   state_ = FAILED;
 
-  frame_tree_node_->navigator()->DiscardPendingEntryIfNeeded(nav_entry_id_);
+  // Ensure the pending entry also gets discarded if it has no other active
+  // requests.
+  pending_entry_ref_.reset();
 
   net_error_ = static_cast<net::Error>(status.error_code);
 
@@ -3746,4 +3765,8 @@
   return handle_state_ >= INITIAL;
 }
 
+void NavigationRequest::DropPendingEntryRef() {
+  pending_entry_ref_.reset();
+}
+
 }  // namespace content
diff --git a/content/browser/frame_host/navigation_request.h b/content/browser/frame_host/navigation_request.h
index f1b4dba..d1bbe1a 100644
--- a/content/browser/frame_host/navigation_request.h
+++ b/content/browser/frame_host/navigation_request.h
@@ -17,6 +17,7 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
+#include "content/browser/frame_host/navigation_controller_impl.h"
 #include "content/browser/frame_host/navigation_entry_impl.h"
 #include "content/browser/frame_host/navigation_throttle_runner.h"
 #include "content/browser/initiator_csp_context.h"
@@ -505,6 +506,11 @@
   // CreateForCommit().
   bool IsNavigationStarted() const;
 
+  // Stop referencing the pending NavigationEntry.
+  //
+  // Note: To be removed after removing DidFailProvisionalLoadWithError().
+  void DropPendingEntryRef();
+
  private:
   friend class NavigationRequestTest;
 
@@ -1099,6 +1105,11 @@
   // This is used to store the current_frame_host id at request creation time.
   GlobalFrameRoutingId previous_render_frame_host_id_;
 
+  // This tracks a connection between the current pending entry and this
+  // request, such that the pending entry can be discarded if no requests are
+  // left referencing it.
+  std::unique_ptr<NavigationControllerImpl::PendingEntryRef> pending_entry_ref_;
+
   base::WeakPtrFactory<NavigationRequest> weak_factory_{this};
 
   DISALLOW_COPY_AND_ASSIGN(NavigationRequest);
diff --git a/content/browser/frame_host/navigator_delegate.cc b/content/browser/frame_host/navigator_delegate.cc
index 5ab06ef5..143f5041 100644
--- a/content/browser/frame_host/navigator_delegate.cc
+++ b/content/browser/frame_host/navigator_delegate.cc
@@ -19,10 +19,6 @@
   return true;
 }
 
-bool NavigatorDelegate::ShouldPreserveAbortedURLs() {
-  return false;
-}
-
 std::vector<std::unique_ptr<NavigationThrottle>>
 NavigatorDelegate::CreateThrottlesForNavigation(
     NavigationHandle* navigation_handle) {
diff --git a/content/browser/frame_host/navigator_delegate.h b/content/browser/frame_host/navigator_delegate.h
index 4d2327a..417a56c 100644
--- a/content/browser/frame_host/navigator_delegate.h
+++ b/content/browser/frame_host/navigator_delegate.h
@@ -91,10 +91,6 @@
   // different process between the load start and commit.
   virtual bool ShouldTransferNavigation(bool is_main_frame_navigation);
 
-  // Returns whether URLs for aborted browser-initiated navigations should be
-  // preserved in the omnibox.  Defaults to false.
-  virtual bool ShouldPreserveAbortedURLs();
-
   // Returns the overriden user agent string if it's set.
   virtual const std::string& GetUserAgentOverride() = 0;
 
diff --git a/content/browser/frame_host/navigator_impl.cc b/content/browser/frame_host/navigator_impl.cc
index f859b6e..869f6f5 100644
--- a/content/browser/frame_host/navigator_impl.cc
+++ b/content/browser/frame_host/navigator_impl.cc
@@ -177,9 +177,8 @@
 
   // Discard the pending navigation entry if needed.
   NavigationRequest* request = render_frame_host->navigation_request();
-  int expected_pending_entry_id =
-      request && request->IsNavigationStarted() ? request->nav_entry_id() : 0;
-  DiscardPendingEntryIfNeeded(expected_pending_entry_id);
+  if (request)
+    request->DropPendingEntryRef();
 }
 
 void NavigatorImpl::DidFailLoadWithError(
@@ -753,51 +752,6 @@
   }
 }
 
-void NavigatorImpl::DiscardPendingEntryIfNeeded(int expected_pending_entry_id) {
-  // Racy conditions can cause a fail message to arrive after its corresponding
-  // pending entry has been replaced by another navigation. If
-  // |DiscardPendingEntry| is called in this case, then the completely valid
-  // entry for the new navigation would be discarded. See crbug.com/513742. To
-  // catch this case, the current pending entry is compared against the current
-  // navigation handle's entry id, which should correspond to the failed load.
-  NavigationEntry* pending_entry = controller_->GetPendingEntry();
-  bool pending_matches_fail_msg =
-      pending_entry &&
-      expected_pending_entry_id == pending_entry->GetUniqueID();
-  if (!pending_matches_fail_msg)
-    return;
-
-  // We usually clear the pending entry when it fails, so that an arbitrary URL
-  // isn't left visible above a committed page. This must be enforced when the
-  // pending entry isn't visible (e.g., renderer-initiated navigations) to
-  // prevent URL spoofs for same-document navigations that don't go through
-  // DidStartProvisionalLoadForFrame.
-  //
-  // However, we do preserve the pending entry in some cases, such as on the
-  // initial navigation of an unmodified blank tab. We also allow the delegate
-  // to say when it's safe to leave aborted URLs in the omnibox, to let the
-  // user edit the URL and try again. This may be useful in cases that the
-  // committed page cannot be attacker-controlled. In these cases, we still
-  // allow the view to clear the pending entry and typed URL if the user
-  // requests (e.g., hitting Escape with focus in the address bar).
-  //
-  // Do not leave the pending entry visible if it has an invalid URL, since this
-  // might be formatted in an unexpected or unsafe way.
-  // TODO(creis): Block navigations to invalid URLs in https://crbug.com/850824.
-  //
-  // Note: don't touch the transient entry, since an interstitial may exist.
-  bool should_preserve_entry = pending_entry->GetURL().is_valid() &&
-                               (controller_->IsUnmodifiedBlankTab() ||
-                                delegate_->ShouldPreserveAbortedURLs());
-  if (pending_entry != controller_->GetVisibleEntry() ||
-      !should_preserve_entry) {
-    controller_->DiscardPendingEntry(true);
-
-    // Also force the UI to refresh.
-    controller_->delegate()->NotifyNavigationStateChanged(INVALIDATE_TYPE_URL);
-  }
-}
-
 void NavigatorImpl::RecordNavigationMetrics(
     const LoadCommittedDetails& details,
     const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
diff --git a/content/browser/frame_host/navigator_impl.h b/content/browser/frame_host/navigator_impl.h
index 697bb98..4ca0982 100644
--- a/content/browser/frame_host/navigator_impl.h
+++ b/content/browser/frame_host/navigator_impl.h
@@ -115,8 +115,6 @@
       const base::TimeTicks& renderer_before_unload_end_time) override;
   void CancelNavigation(FrameTreeNode* frame_tree_node,
                         bool inform_renderer) override;
-  void DiscardPendingEntryIfNeeded(int expected_pending_entry_id) override;
-
  private:
   // Holds data used to track browser side navigation metrics.
   struct NavigationMetricsData;
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 9e0df57..6316014 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -86,7 +86,6 @@
 #include "content/browser/renderer_host/input/input_router.h"
 #include "content/browser/renderer_host/input/timeout_monitor.h"
 #include "content/browser/renderer_host/media/audio_input_delegate_impl.h"
-#include "content/browser/renderer_host/media/media_devices_dispatcher_host.h"
 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
 #include "content/browser/renderer_host/render_process_host_impl.h"
 #include "content/browser/renderer_host/render_view_host_delegate.h"
@@ -1906,16 +1905,6 @@
   params->has_committed_real_load =
       frame_tree_node()->has_committed_real_load();
 
-  if (GetLocalRenderWidgetHost()) {
-    params->widget_params = mojom::CreateFrameWidgetParams::New();
-    params->widget_params->routing_id =
-        GetLocalRenderWidgetHost()->GetRoutingID();
-    params->widget_params->visual_properties =
-        GetLocalRenderWidgetHost()->GetVisualProperties();
-  }
-
-  GetProcess()->GetRendererInterface()->CreateFrame(std::move(params));
-
   // The RenderWidgetHost takes ownership of its view. It is tied to the
   // lifetime of the current RenderProcessHost for this RenderFrameHost.
   // TODO(avi): This will need to change to initialize a
@@ -1930,6 +1919,16 @@
     DCHECK(!rwhv->IsShowing());
   }
 
+  if (GetLocalRenderWidgetHost()) {
+    params->widget_params = mojom::CreateFrameWidgetParams::New();
+    params->widget_params->routing_id =
+        GetLocalRenderWidgetHost()->GetRoutingID();
+    params->widget_params->visual_properties =
+        GetLocalRenderWidgetHost()->GetVisualProperties();
+  }
+
+  GetProcess()->GetRendererInterface()->CreateFrame(std::move(params));
+
   if (previous_routing_id != MSG_ROUTING_NONE) {
     RenderFrameProxyHost* proxy = RenderFrameProxyHost::FromID(
         GetProcess()->GetID(), previous_routing_id);
@@ -4459,26 +4458,6 @@
       base::BindRepeating(&RenderFrameHostImpl::CreateAudioOutputStreamFactory,
                           base::Unretained(this)));
 
-  // BrowserMainLoop::GetInstance() may be null on unit tests.
-  if (BrowserMainLoop::GetInstance()) {
-    // BrowserMainLoop, which owns MediaStreamManager, is alive for the lifetime
-    // of Mojo communication (see BrowserMainLoop::ShutdownThreadsAndCleanUp(),
-    // which shuts down Mojo). Hence, passing that MediaStreamManager instance
-    // as a raw pointer here is safe.
-    MediaStreamManager* media_stream_manager =
-        BrowserMainLoop::GetInstance()->media_stream_manager();
-    registry_->AddInterface(
-        base::Bind(&MediaDevicesDispatcherHost::Create, GetProcess()->GetID(),
-                   GetRoutingID(), base::Unretained(media_stream_manager)),
-        base::CreateSingleThreadTaskRunner({BrowserThread::IO}));
-
-    registry_->AddInterface(
-        base::BindRepeating(&MediaStreamDispatcherHost::Create,
-                            GetProcess()->GetID(), GetRoutingID(),
-                            base::Unretained(media_stream_manager)),
-        base::CreateSingleThreadTaskRunner({BrowserThread::IO}));
-  }
-
 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
   registry_->AddInterface(base::Bind(&RemoterFactoryImpl::Bind,
                                      GetProcess()->GetID(), GetRoutingID()));
@@ -6528,7 +6507,8 @@
 
 void RenderFrameHostImpl::CreateIDBFactory(
     mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) {
-  GetProcess()->BindIndexedDB(GetLastCommittedOrigin(), std::move(receiver));
+  GetProcess()->BindIndexedDB(GetRoutingID(), GetLastCommittedOrigin(),
+                              std::move(receiver));
 }
 
 void RenderFrameHostImpl::CreatePermissionService(
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index 2973d39..c609efc0 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -2481,7 +2481,6 @@
 #endif  // defined(OS_MACOSX)
 
   RenderWidgetHostView* old_view = render_frame_host_->GetView();
-  RenderWidgetHostView* new_view = pending_rfh->GetView();
   bool is_main_frame = frame_tree_node_->IsMainFrame();
 
   // First check whether we're going to want to focus the location bar after
@@ -2544,13 +2543,16 @@
 
   // For top-level frames, the RenderWidget{Host} will not be destroyed when the
   // local frame is detached. https://crbug.com/419087
+  //
   // To work around that, we hide it here. Truly this is to hit all the hide
   // paths in the browser side, but has a side effect of also hiding the
   // renderer side RenderWidget, even though it will get frozen anyway in the
   // future. However freezing doesn't do all the things hiding does at this time
   // so that's probably good.
+  //
   // Note the RenderWidgetHostView can be missing if the process for the old
   // RenderFrameHost crashed.
+  //
   // TODO(crbug.com/419087): This is only done for the main frame, as for sub
   // frames the RenderWidget and its view will be destroyed when the frame is
   // detached, but for the main frame it is not. This call to Hide() can go away
@@ -2561,10 +2563,13 @@
   // without success in r426913 (https://crbug.com/658688) and r438516 (broke
   // assumptions about RenderWidgetHosts not changing RenderWidgetHostViews over
   // time).
-  // |old_view| and |new_view| can be the same when navigating same-site from a
+  //
+  // |old_rvh| and |new_rvh| can be the same when navigating same-site from a
   // crashed RenderFrameHost. When RenderDocument will be implemented, this will
   // happen for each same-site navigation.
-  if (is_main_frame && old_view && old_view != new_view) {
+  RenderViewHostImpl* old_rvh = old_render_frame_host->render_view_host();
+  RenderViewHostImpl* new_rvh = render_frame_host_->render_view_host();
+  if (is_main_frame && old_view && old_rvh != new_rvh) {
     // Note that this hides the RenderWidget but does not hide the Page. If it
     // did hide the Page then making a new RenderFrameHost on another call to
     // here would need to make sure it showed the RenderView when the
@@ -2575,6 +2580,7 @@
   // Make sure the size is up to date.  (Fix for bug 1079768.)
   delegate_->UpdateRenderViewSizeForRenderManager(is_main_frame);
 
+  RenderWidgetHostView* new_view = render_frame_host_->GetView();
   if (will_focus_location_bar) {
     delegate_->SetFocusToLocationBar();
   } else if (focus_render_view && new_view) {
@@ -2610,9 +2616,6 @@
   if (is_main_frame && old_view && new_view && old_view != new_view)
     new_view->TakeFallbackContentFrom(old_view);
 
-  RenderViewHostImpl* old_rvh = old_render_frame_host->render_view_host();
-  RenderViewHostImpl* new_rvh = render_frame_host_->render_view_host();
-
   // The RenderViewHost keeps track of the main RenderFrameHost routing id.
   // If this is committing a main frame navigation, update it and set the
   // routing id in the RenderViewHost associated with the old RenderFrameHost
diff --git a/content/browser/indexed_db/indexed_db_connection.cc b/content/browser/indexed_db/indexed_db_connection.cc
index 6c847a6..d247a73 100644
--- a/content/browser/indexed_db/indexed_db_connection.cc
+++ b/content/browser/indexed_db/indexed_db_connection.cc
@@ -27,7 +27,7 @@
 }  // namespace
 
 IndexedDBConnection::IndexedDBConnection(
-    int child_process_id,
+    const IndexedDBExecutionContext& execution_context,
     IndexedDBOriginStateHandle origin_state_handle,
     IndexedDBClassFactory* indexed_db_class_factory,
     base::WeakPtr<IndexedDBDatabase> database,
@@ -35,7 +35,7 @@
     base::OnceCallback<void(IndexedDBConnection*)> on_close,
     scoped_refptr<IndexedDBDatabaseCallbacks> callbacks)
     : id_(g_next_indexed_db_connection_id++),
-      child_process_id_(child_process_id),
+      execution_context_(execution_context),
       origin_state_handle_(std::move(origin_state_handle)),
       indexed_db_class_factory_(indexed_db_class_factory),
       database_(std::move(database)),
diff --git a/content/browser/indexed_db/indexed_db_connection.h b/content/browser/indexed_db/indexed_db_connection.h
index 002b596..280c402 100644
--- a/content/browser/indexed_db/indexed_db_connection.h
+++ b/content/browser/indexed_db/indexed_db_connection.h
@@ -14,6 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "content/browser/indexed_db/indexed_db_database.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/browser/indexed_db/indexed_db_origin_state_handle.h"
 #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom.h"
 
@@ -26,7 +27,7 @@
 
 class CONTENT_EXPORT IndexedDBConnection {
  public:
-  IndexedDBConnection(int child_process_id,
+  IndexedDBConnection(const IndexedDBExecutionContext& execution_context,
                       IndexedDBOriginStateHandle origin_state_handle,
                       IndexedDBClassFactory* indexed_db_class_factory,
                       base::WeakPtr<IndexedDBDatabase> database,
@@ -58,7 +59,7 @@
   virtual void RemoveObservers(const std::vector<int32_t>& remove_observer_ids);
 
   int32_t id() const { return id_; }
-  int child_process_id() const { return child_process_id_; }
+  int child_process_id() const { return execution_context_.render_process_id; }
 
   base::WeakPtr<IndexedDBDatabase> database() const { return database_; }
   IndexedDBDatabaseCallbacks* callbacks() const { return callbacks_.get(); }
@@ -105,9 +106,8 @@
 
   const int32_t id_;
 
-  // The process id of the child process this connection is associated with.
-  // Tracked for IndexedDBContextImpl::GetAllOriginsDetails and debugging.
-  const int child_process_id_;
+  // The frame or worker that owns this connection.
+  const IndexedDBExecutionContext execution_context_;
 
   // Keeps the factory for this origin alive.
   IndexedDBOriginStateHandle origin_state_handle_;
diff --git a/content/browser/indexed_db/indexed_db_connection_coordinator.cc b/content/browser/indexed_db/indexed_db_connection_coordinator.cc
index 26d5777..452c009 100644
--- a/content/browser/indexed_db/indexed_db_connection_coordinator.cc
+++ b/content/browser/indexed_db/indexed_db_connection_coordinator.cc
@@ -173,7 +173,7 @@
       pending_->callbacks->OnSuccess(
           db_->CreateConnection(std::move(origin_state_handle_),
                                 pending_->database_callbacks,
-                                pending_->child_process_id),
+                                pending_->execution_context),
           db_->metadata_);
       state_ = RequestState::kDone;
       return;
@@ -185,7 +185,7 @@
       pending_->callbacks->OnSuccess(
           db_->CreateConnection(std::move(origin_state_handle_),
                                 pending_->database_callbacks,
-                                pending_->child_process_id),
+                                pending_->execution_context),
           db_->metadata_);
       state_ = RequestState::kDone;
       return;
@@ -280,7 +280,7 @@
     DCHECK(!lock_receiver_.locks.empty());
     connection_ = db_->CreateConnection(std::move(origin_state_handle_),
                                         pending_->database_callbacks,
-                                        pending_->child_process_id);
+                                        pending_->execution_context);
     DCHECK(!connection_ptr_for_close_comparision_);
     connection_ptr_for_close_comparision_ = connection_.get();
     DCHECK_EQ(db_->connections().count(connection_.get()), 1UL);
diff --git a/content/browser/indexed_db/indexed_db_database.cc b/content/browser/indexed_db/indexed_db_database.cc
index fb2f104..06a46a95 100644
--- a/content/browser/indexed_db/indexed_db_database.cc
+++ b/content/browser/indexed_db/indexed_db_database.cc
@@ -30,6 +30,7 @@
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
 #include "content/browser/indexed_db/indexed_db_cursor.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/browser/indexed_db/indexed_db_factory.h"
 #include "content/browser/indexed_db/indexed_db_factory_impl.h"
 #include "content/browser/indexed_db/indexed_db_index_writer.h"
@@ -1671,10 +1672,10 @@
 std::unique_ptr<IndexedDBConnection> IndexedDBDatabase::CreateConnection(
     IndexedDBOriginStateHandle origin_state_handle,
     scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
-    int child_process_id) {
+    const IndexedDBExecutionContext& execution_context) {
   std::unique_ptr<IndexedDBConnection> connection =
       std::make_unique<IndexedDBConnection>(
-          child_process_id, std::move(origin_state_handle), class_factory_,
+          execution_context, std::move(origin_state_handle), class_factory_,
           weak_factory_.GetWeakPtr(),
           base::BindRepeating(&IndexedDBDatabase::VersionChangeIgnored,
                               weak_factory_.GetWeakPtr()),
@@ -1682,7 +1683,8 @@
                          weak_factory_.GetWeakPtr()),
           database_callbacks);
   connections_.insert(connection.get());
-  backing_store_->GrantChildProcessPermissions(child_process_id);
+  backing_store_->GrantChildProcessPermissions(
+      execution_context.render_process_id);
   return connection;
 }
 
diff --git a/content/browser/indexed_db/indexed_db_database.h b/content/browser/indexed_db/indexed_db_database.h
index 7f1b003..7416337 100644
--- a/content/browser/indexed_db/indexed_db_database.h
+++ b/content/browser/indexed_db/indexed_db_database.h
@@ -55,6 +55,7 @@
 class IndexedDBClassFactory;
 class IndexedDBConnection;
 class IndexedDBDatabaseCallbacks;
+struct IndexedDBExecutionContext;
 class IndexedDBFactory;
 class IndexedDBMetadataCoding;
 class IndexedDBOriginStateHandle;
@@ -358,7 +359,7 @@
   std::unique_ptr<IndexedDBConnection> CreateConnection(
       IndexedDBOriginStateHandle origin_state_handle,
       scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
-      int child_process_id);
+      const IndexedDBExecutionContext& execution_context);
 
   // Ack that one of the connections notified with a "versionchange" event did
   // not promptly close. Therefore a "blocked" event should be fired at the
diff --git a/content/browser/indexed_db/indexed_db_database_unittest.cc b/content/browser/indexed_db/indexed_db_database_unittest.cc
index 617080a..06c30a0 100644
--- a/content/browser/indexed_db/indexed_db_database_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_database_unittest.cc
@@ -25,6 +25,7 @@
 #include "content/browser/indexed_db/indexed_db_class_factory.h"
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_cursor.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/browser/indexed_db/indexed_db_factory_impl.h"
 #include "content/browser/indexed_db/indexed_db_fake_backing_store.h"
 #include "content/browser/indexed_db/indexed_db_leveldb_coding.h"
@@ -43,16 +44,14 @@
 using blink::IndexedDBKey;
 using blink::IndexedDBKeyPath;
 
-namespace {
-const int kFakeChildProcessId = 0;
-}
-
 namespace content {
 namespace {
 
 void CreateAndBindTransactionPlaceholder(
     base::WeakPtr<IndexedDBTransaction> transaction) {}
 
+constexpr IndexedDBExecutionContext kTestExecutionContext(4, 2);
+
 }  // namespace
 
 class IndexedDBDatabaseTest : public ::testing::Test {
@@ -126,7 +125,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection1(
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id1,
+          request1, callbacks1, kTestExecutionContext, transaction_id1,
           IndexedDBDatabaseMetadata::DEFAULT_VERSION,
           std::move(create_transaction_callback1)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
@@ -141,7 +140,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection2(
       std::make_unique<IndexedDBPendingConnection>(
-          request2, callbacks2, kFakeChildProcessId, transaction_id2,
+          request2, callbacks2, kTestExecutionContext, transaction_id2,
           IndexedDBDatabaseMetadata::DEFAULT_VERSION,
           std::move(create_transaction_callback2)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
@@ -170,7 +169,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection(
       std::make_unique<IndexedDBPendingConnection>(
-          request, callbacks, kFakeChildProcessId, upgrade_transaction_id,
+          request, callbacks, kTestExecutionContext, upgrade_transaction_id,
           IndexedDBDatabaseMetadata::DEFAULT_VERSION,
           std::move(create_transaction_callback)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
@@ -231,7 +230,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection(
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id1,
+          request1, callbacks1, kTestExecutionContext, transaction_id1,
           IndexedDBDatabaseMetadata::DEFAULT_VERSION,
           std::move(create_transaction_callback1)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
@@ -280,7 +279,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection1(
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id1,
+          request1, callbacks1, kTestExecutionContext, transaction_id1,
           kDatabaseVersion, std::move(create_transaction_callback1)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
                               std::move(connection1));
@@ -299,7 +298,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection2(
       std::make_unique<IndexedDBPendingConnection>(
-          request2, callbacks2, kFakeChildProcessId, transaction_id2,
+          request2, callbacks2, kTestExecutionContext, transaction_id2,
           kDatabaseVersion, std::move(create_transaction_callback2)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
                               std::move(connection2));
@@ -318,7 +317,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection3(
       std::make_unique<IndexedDBPendingConnection>(
-          request3, callbacks3, kFakeChildProcessId, transaction_id3,
+          request3, callbacks3, kTestExecutionContext, transaction_id3,
           kDatabaseVersion, std::move(create_transaction_callback3)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
                               std::move(connection3));
@@ -351,7 +350,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection(
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id1,
+          request1, callbacks1, kTestExecutionContext, transaction_id1,
           IndexedDBDatabaseMetadata::DEFAULT_VERSION,
           std::move(create_transaction_callback1)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
@@ -388,7 +387,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection(
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id1,
+          request1, callbacks1, kTestExecutionContext, transaction_id1,
           IndexedDBDatabaseMetadata::DEFAULT_VERSION,
           std::move(create_transaction_callback1)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
@@ -408,7 +407,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection2(
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id2, 3,
+          request1, callbacks1, kTestExecutionContext, transaction_id2, 3,
           std::move(create_transaction_callback2)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
                               std::move(connection2));
@@ -433,7 +432,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection =
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id1,
+          request1, callbacks1, kTestExecutionContext, transaction_id1,
           IndexedDBDatabaseMetadata::DEFAULT_VERSION,
           std::move(create_transaction_callback1));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
@@ -451,7 +450,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   std::unique_ptr<IndexedDBPendingConnection> connection2(
       std::make_unique<IndexedDBPendingConnection>(
-          request1, callbacks1, kFakeChildProcessId, transaction_id2, 3,
+          request1, callbacks1, kTestExecutionContext, transaction_id2, 3,
           std::move(create_transaction_callback2)));
   db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
                               std::move(connection2));
@@ -508,7 +507,7 @@
         base::BindOnce(&CreateAndBindTransactionPlaceholder);
     std::unique_ptr<IndexedDBPendingConnection> connection(
         std::make_unique<IndexedDBPendingConnection>(
-            request_, callbacks_, kFakeChildProcessId, transaction_id,
+            request_, callbacks_, kTestExecutionContext, transaction_id,
             IndexedDBDatabaseMetadata::DEFAULT_VERSION,
             std::move(create_transaction_callback1)));
     db_->ScheduleOpenConnection(IndexedDBOriginStateHandle(),
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.cc b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
index ed192f7..d4799ba 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.cc
@@ -19,6 +19,7 @@
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
 #include "content/browser/indexed_db/indexed_db_cursor.h"
 #include "content/browser/indexed_db/indexed_db_database_callbacks.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/browser/indexed_db/indexed_db_factory_impl.h"
 #include "content/browser/indexed_db/indexed_db_pending_connection.h"
 #include "content/browser/indexed_db/transaction_impl.h"
@@ -80,11 +81,14 @@
 }
 
 void IndexedDBDispatcherHost::AddReceiver(
-    mojo::PendingReceiver<blink::mojom::IDBFactory> pending_receiver,
-    const url::Origin& origin) {
+    int render_process_id,
+    int render_frame_id,
+    const url::Origin& origin,
+    mojo::PendingReceiver<blink::mojom::IDBFactory> pending_receiver) {
   DCHECK(IDBTaskRunner()->RunsTasksInCurrentSequence());
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  receivers_.Add(this, std::move(pending_receiver), {origin});
+  DCHECK_EQ(render_process_id, ipc_process_id_);
+  receivers_.Add(this, std::move(pending_receiver), {origin, render_frame_id});
 }
 
 void IndexedDBDispatcherHost::AddDatabaseBinding(
@@ -190,10 +194,13 @@
   auto create_transaction_callback = base::BindOnce(
       &IndexedDBDispatcherHost::CreateAndBindTransactionImpl, AsWeakPtr(),
       std::move(transaction_receiver), context.origin);
+  const IndexedDBExecutionContext execution_context(ipc_process_id_,
+                                                    context.render_frame_id);
   std::unique_ptr<IndexedDBPendingConnection> connection =
       std::make_unique<IndexedDBPendingConnection>(
-          std::move(callbacks), std::move(database_callbacks), ipc_process_id_,
-          transaction_id, version, std::move(create_transaction_callback));
+          std::move(callbacks), std::move(database_callbacks),
+          execution_context, transaction_id, version,
+          std::move(create_transaction_callback));
   // TODO(dgrogan): Don't let a non-existing database be opened (and therefore
   // created) if this origin is already over quota.
   indexed_db_context_->GetIDBFactory()->Open(name, std::move(connection),
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.h b/content/browser/indexed_db/indexed_db_dispatcher_host.h
index fac248d..cd0b153 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.h
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.h
@@ -53,8 +53,10 @@
       scoped_refptr<ChromeBlobStorageContext> blob_storage_context);
 
   void AddReceiver(
-      mojo::PendingReceiver<blink::mojom::IDBFactory> pending_receiver,
-      const url::Origin& origin);
+      int render_process_id,
+      int render_frame_id,
+      const url::Origin& origin,
+      mojo::PendingReceiver<blink::mojom::IDBFactory> pending_receiver);
 
   void AddDatabaseBinding(
       std::unique_ptr<blink::mojom::IDBDatabase> database,
@@ -139,6 +141,9 @@
   // State for each client held in |receivers_|.
   struct ReceiverState {
     url::Origin origin;
+    // The frame identifier, or MSG_ROUTING_NONE if this describes a worker
+    // (this means that dedicated/shared/service workers are not distinguished).
+    int render_frame_id;
   };
 
   mojo::ReceiverSet<blink::mojom::IDBFactory, ReceiverState> receivers_;
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc b/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc
index 03e101d..dd4693b 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host_unittest.cc
@@ -217,8 +217,10 @@
     base::RunLoop loop;
     context_impl_->TaskRunner()->PostTask(
         FROM_HERE, base::BindLambdaForTesting([&]() {
-          host_->AddReceiver(idb_mojo_factory_.BindNewPipeAndPassReceiver(),
-                             {url::Origin::Create(GURL(kOrigin))});
+          constexpr int kRenderFrameId = 42;
+          host_->AddReceiver(kFakeProcessId, kRenderFrameId,
+                             url::Origin::Create(GURL(kOrigin)),
+                             idb_mojo_factory_.BindNewPipeAndPassReceiver());
           loop.Quit();
         }));
     loop.Run();
diff --git a/content/browser/indexed_db/indexed_db_execution_context.h b/content/browser/indexed_db/indexed_db_execution_context.h
new file mode 100644
index 0000000..b3aa968
--- /dev/null
+++ b/content/browser/indexed_db/indexed_db_execution_context.h
@@ -0,0 +1,26 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_EXECUTION_CONTEXT_H_
+#define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_EXECUTION_CONTEXT_H_
+
+namespace content {
+
+// Identifies the frame or worker holding an IndexedDB object.
+struct IndexedDBExecutionContext {
+  constexpr IndexedDBExecutionContext(int render_process_id,
+                                      int render_frame_id)
+      : render_process_id(render_process_id),
+        render_frame_id(render_frame_id) {}
+
+  // The process hosting the frame or worker.
+  const int render_process_id;
+
+  // The frame id, or MSG_ROUTING_NONE if this identifies a worker.
+  const int render_frame_id;
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_EXECUTION_CONTEXT_H_
diff --git a/content/browser/indexed_db/indexed_db_factory_unittest.cc b/content/browser/indexed_db/indexed_db_factory_unittest.cc
index 40d7bfa1..3b2955c3 100644
--- a/content/browser/indexed_db/indexed_db_factory_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_factory_unittest.cc
@@ -23,6 +23,7 @@
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
 #include "content/browser/indexed_db/indexed_db_data_format_version.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/browser/indexed_db/indexed_db_factory_impl.h"
 #include "content/browser/indexed_db/indexed_db_origin_state.h"
 #include "content/browser/indexed_db/indexed_db_pre_close_task_queue.h"
@@ -59,6 +60,8 @@
 void CreateAndBindTransactionPlaceholder(
     base::WeakPtr<IndexedDBTransaction> transaction) {}
 
+constexpr IndexedDBExecutionContext kTestExecutionContext(4, 2);
+
 }  // namespace
 
 class IndexedDBFactoryTest : public testing::Test {
@@ -147,7 +150,7 @@
     auto create_transaction_callback =
         base::BindOnce(&CreateAndBindTransactionPlaceholder);
     auto connection = std::make_unique<IndexedDBPendingConnection>(
-        callbacks, db_callbacks, /*child_process_id=*/0, transaction_id,
+        callbacks, db_callbacks, kTestExecutionContext, transaction_id,
         IndexedDBDatabaseMetadata::NO_VERSION,
         std::move(create_transaction_callback));
 
@@ -446,7 +449,7 @@
   auto create_transaction_callback =
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   auto connection = std::make_unique<IndexedDBPendingConnection>(
-      callbacks, db_callbacks, /*child_process_id=*/0, transaction_id,
+      callbacks, db_callbacks, kTestExecutionContext, transaction_id,
       IndexedDBDatabaseMetadata::DEFAULT_VERSION,
       std::move(create_transaction_callback));
   factory()->Open(ASCIIToUTF16("db"), std::move(connection), origin,
@@ -507,7 +510,7 @@
   auto create_transaction_callback =
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   auto connection = std::make_unique<IndexedDBPendingConnection>(
-      callbacks, db_callbacks, /*child_process_id=*/0, transaction_id,
+      callbacks, db_callbacks, kTestExecutionContext, transaction_id,
       IndexedDBDatabaseMetadata::DEFAULT_VERSION,
       std::move(create_transaction_callback));
   factory()->Open(ASCIIToUTF16("db"), std::move(connection), origin,
@@ -538,7 +541,7 @@
   auto create_transaction_callback =
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   auto connection = std::make_unique<IndexedDBPendingConnection>(
-      callbacks, db_callbacks, /*child_process_id=*/0, transaction_id,
+      callbacks, db_callbacks, kTestExecutionContext, transaction_id,
       IndexedDBDatabaseMetadata::NO_VERSION,
       std::move(create_transaction_callback));
 
@@ -575,7 +578,7 @@
   auto create_transaction_callback =
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   auto connection = std::make_unique<IndexedDBPendingConnection>(
-      callbacks, db_callbacks, /*child_process_id=*/0, transaction_id,
+      callbacks, db_callbacks, kTestExecutionContext, transaction_id,
       IndexedDBDatabaseMetadata::NO_VERSION,
       std::move(create_transaction_callback));
 
@@ -714,7 +717,7 @@
   auto create_transaction_callback =
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   auto connection = std::make_unique<IndexedDBPendingConnection>(
-      callbacks, dummy_database_callbacks, /*child_process_id=*/0,
+      callbacks, dummy_database_callbacks, kTestExecutionContext,
       /*transaction_id=*/1, /*version=*/1,
       std::move(create_transaction_callback));
   factory()->Open(name, std::move(connection), origin, context()->data_path());
@@ -754,9 +757,8 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
 
   auto connection = std::make_unique<IndexedDBPendingConnection>(
-      callbacks, db_callbacks,
-      /*child_process_id=*/0, transaction_id, db_version,
-      std::move(create_transaction_callback));
+      callbacks, db_callbacks, kTestExecutionContext, transaction_id,
+      db_version, std::move(create_transaction_callback));
   {
     base::RunLoop loop;
     callbacks->CallOnUpgradeNeeded(
@@ -789,9 +791,8 @@
     auto create_transaction_callback =
         base::BindOnce(&CreateAndBindTransactionPlaceholder);
     auto connection = std::make_unique<IndexedDBPendingConnection>(
-        failed_open_callbacks, db_callbacks2,
-        /*child_process_id=*/0, transaction_id, db_version,
-        std::move(create_transaction_callback));
+        failed_open_callbacks, db_callbacks2, kTestExecutionContext,
+        transaction_id, db_version, std::move(create_transaction_callback));
     factory()->Open(db_name, std::move(connection), origin,
                     context()->data_path());
     EXPECT_TRUE(factory()->IsDatabaseOpen(origin, db_name));
@@ -837,7 +838,7 @@
     auto create_transaction_callback =
         base::BindOnce(&CreateAndBindTransactionPlaceholder);
     auto pending_connection = std::make_unique<IndexedDBPendingConnection>(
-        callbacks, db_callbacks, /*child_process_id=*/0, transaction_id,
+        callbacks, db_callbacks, kTestExecutionContext, transaction_id,
         /*version=*/1, std::move(create_transaction_callback));
 
     {
diff --git a/content/browser/indexed_db/indexed_db_pending_connection.cc b/content/browser/indexed_db/indexed_db_pending_connection.cc
index 7d2d81a3..cc1c53b 100644
--- a/content/browser/indexed_db/indexed_db_pending_connection.cc
+++ b/content/browser/indexed_db/indexed_db_pending_connection.cc
@@ -11,14 +11,14 @@
 IndexedDBPendingConnection::IndexedDBPendingConnection(
     scoped_refptr<IndexedDBCallbacks> callbacks,
     scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
-    int child_process_id,
+    const IndexedDBExecutionContext& execution_context,
     int64_t transaction_id,
     int64_t version,
     base::OnceCallback<void(base::WeakPtr<IndexedDBTransaction>)>
         create_transaction_callback)
     : callbacks(callbacks),
       database_callbacks(database_callbacks),
-      child_process_id(child_process_id),
+      execution_context(execution_context),
       transaction_id(transaction_id),
       version(version),
       create_transaction_callback(std::move(create_transaction_callback)) {}
diff --git a/content/browser/indexed_db/indexed_db_pending_connection.h b/content/browser/indexed_db/indexed_db_pending_connection.h
index ebe7d79..21a85bb2 100644
--- a/content/browser/indexed_db/indexed_db_pending_connection.h
+++ b/content/browser/indexed_db/indexed_db_pending_connection.h
@@ -12,6 +12,7 @@
 #include "content/browser/indexed_db/indexed_db_callbacks.h"
 #include "content/browser/indexed_db/indexed_db_data_loss_info.h"
 #include "content/browser/indexed_db/indexed_db_database_callbacks.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/common/content_export.h"
 #include "url/origin.h"
 
@@ -24,7 +25,7 @@
   IndexedDBPendingConnection(
       scoped_refptr<IndexedDBCallbacks> callbacks,
       scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
-      int child_process_id,
+      const IndexedDBExecutionContext& execution_context,
       int64_t transaction_id,
       int64_t version,
       base::OnceCallback<void(base::WeakPtr<IndexedDBTransaction>)>
@@ -32,7 +33,7 @@
   ~IndexedDBPendingConnection();
   scoped_refptr<IndexedDBCallbacks> callbacks;
   scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks;
-  int child_process_id;
+  IndexedDBExecutionContext execution_context;
   int64_t transaction_id;
   int64_t version;
   IndexedDBDataLossInfo data_loss_info;
diff --git a/content/browser/indexed_db/indexed_db_transaction_unittest.cc b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
index 5c2e384..20a896d 100644
--- a/content/browser/indexed_db/indexed_db_transaction_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_transaction_unittest.cc
@@ -18,6 +18,7 @@
 #include "content/browser/indexed_db/indexed_db_class_factory.h"
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_database_error.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/browser/indexed_db/indexed_db_factory_impl.h"
 #include "content/browser/indexed_db/indexed_db_fake_backing_store.h"
 #include "content/browser/indexed_db/indexed_db_leveldb_coding.h"
@@ -38,9 +39,9 @@
   *value = true;
 }
 
-}  // namespace
+constexpr IndexedDBExecutionContext kTestExecutionContext(4, 2);
 
-const int kFakeProcessId = 10;
+}  // namespace
 
 class AbortObserver {
  public:
@@ -122,7 +123,7 @@
   std::unique_ptr<IndexedDBConnection> CreateConnection() {
     auto connection = std::unique_ptr<IndexedDBConnection>(
         std::make_unique<IndexedDBConnection>(
-            kFakeProcessId, IndexedDBOriginStateHandle(),
+            kTestExecutionContext, IndexedDBOriginStateHandle(),
             IndexedDBClassFactory::Get(), db_->AsWeakPtr(), base::DoNothing(),
             base::DoNothing(), new MockIndexedDBDatabaseCallbacks()));
     db_->AddConnectionForTesting(connection.get());
diff --git a/content/browser/indexed_db/indexed_db_unittest.cc b/content/browser/indexed_db/indexed_db_unittest.cc
index 2aca1e6..b050e79 100644
--- a/content/browser/indexed_db/indexed_db_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/time/default_clock.h"
 #include "content/browser/indexed_db/indexed_db_connection.h"
 #include "content/browser/indexed_db/indexed_db_context_impl.h"
+#include "content/browser/indexed_db/indexed_db_execution_context.h"
 #include "content/browser/indexed_db/indexed_db_factory_impl.h"
 #include "content/browser/indexed_db/indexed_db_origin_state.h"
 #include "content/browser/indexed_db/leveldb/leveldb_env.h"
@@ -39,6 +40,8 @@
 namespace content {
 namespace {
 
+constexpr IndexedDBExecutionContext kTestExecutionContext(4, 2);
+
 base::FilePath CreateAndReturnTempDir(base::ScopedTempDir* temp_dir) {
   CHECK(temp_dir->CreateUniqueTempDir());
   return temp_dir->GetPath();
@@ -242,7 +245,6 @@
       base::MakeRefCounted<ForceCloseDBCallbacks>(context(), kTestOrigin);
   base::FilePath test_path = context()->GetFilePathForTesting(kTestOrigin);
 
-  const int child_process_id = 0;
   const int64_t host_transaction_id = 0;
   const int64_t version = 0;
 
@@ -252,7 +254,7 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   factory->Open(base::ASCIIToUTF16("opendb"),
                 std::make_unique<IndexedDBPendingConnection>(
-                    open_callbacks, open_db_callbacks, child_process_id,
+                    open_callbacks, open_db_callbacks, kTestExecutionContext,
                     host_transaction_id, version,
                     std::move(create_transaction_callback1)),
                 kTestOrigin, context()->data_path());
@@ -262,8 +264,8 @@
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   factory->Open(base::ASCIIToUTF16("closeddb"),
                 std::make_unique<IndexedDBPendingConnection>(
-                    closed_callbacks, closed_db_callbacks, child_process_id,
-                    host_transaction_id, version,
+                    closed_callbacks, closed_db_callbacks,
+                    kTestExecutionContext, host_transaction_id, version,
                     std::move(create_transaction_callback2)),
                 kTestOrigin, context()->data_path());
   RunPostedTasks();
@@ -310,7 +312,6 @@
   auto* factory =
       static_cast<IndexedDBFactoryImpl*>(context()->GetIDBFactory());
 
-  const int child_process_id = 0;
   const int64_t transaction_id = 1;
 
   auto callbacks = base::MakeRefCounted<MockIndexedDBCallbacks>();
@@ -318,7 +319,7 @@
   auto create_transaction_callback1 =
       base::BindOnce(&CreateAndBindTransactionPlaceholder);
   auto connection = std::make_unique<IndexedDBPendingConnection>(
-      callbacks, db_callbacks, child_process_id, transaction_id,
+      callbacks, db_callbacks, kTestExecutionContext, transaction_id,
       IndexedDBDatabaseMetadata::DEFAULT_VERSION,
       std::move(create_transaction_callback1));
   factory->Open(base::ASCIIToUTF16("db"), std::move(connection),
diff --git a/content/browser/native_file_system/native_file_system_file_handle_impl.cc b/content/browser/native_file_system/native_file_system_file_handle_impl.cc
index f4e0c98..6473a30 100644
--- a/content/browser/native_file_system/native_file_system_file_handle_impl.cc
+++ b/content/browser/native_file_system/native_file_system_file_handle_impl.cc
@@ -109,11 +109,16 @@
 
   std::string uuid = base::GenerateGUID();
   auto blob_builder = std::make_unique<storage::BlobDataBuilder>(uuid);
-  // Use AppendFileSystemFile here, since we're streaming the file directly
-  // from the file system backend, and the file thus might not actually be
-  // backed by a file on disk.
-  blob_builder->AppendFileSystemFile(url().ToGURL(), 0, -1, info.last_modified,
-                                     file_system_context());
+
+  // Only append if the file has data.
+  if (info.size > 0) {
+    // Use AppendFileSystemFile here, since we're streaming the file directly
+    // from the file system backend, and the file thus might not actually be
+    // backed by a file on disk.
+    blob_builder->AppendFileSystemFile(url().ToGURL(), 0, info.size,
+                                       info.last_modified,
+                                       file_system_context());
+  }
 
   base::FilePath::StringType extension = url().path().Extension();
   if (!extension.empty()) {
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc
index 2a81838a..8d4158a 100644
--- a/content/browser/navigation_browsertest.cc
+++ b/content/browser/navigation_browsertest.cc
@@ -2528,6 +2528,41 @@
   }
 }
 
+// Regression test for https://crbug.com/999932.
+IN_PROC_BROWSER_TEST_P(NavigationBaseBrowserTest, CanceledNavigationBug999932) {
+  using Response = net::test_server::ControllableHttpResponse;
+  Response response_A1(embedded_test_server(), "/A");
+  Response response_A2(embedded_test_server(), "/A");
+  Response response_B1(embedded_test_server(), "/B");
+
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  GURL url_a = embedded_test_server()->GetURL("a.com", "/A");
+  GURL url_b = embedded_test_server()->GetURL("b.com", "/B");
+
+  // 1. Navigate to A.
+  shell()->LoadURL(url_a);
+  response_A1.WaitForRequest();
+  response_A1.Send(non_cacheable_html_response);
+  response_A1.Done();
+  EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
+
+  // 2. Start pending navigation to B.
+  shell()->LoadURL(url_b);
+  EXPECT_EQ(url_b, shell()->web_contents()->GetVisibleURL());
+  EXPECT_TRUE(shell()->web_contents()->GetController().GetPendingEntry());
+
+  // 3. Cancel (2) with renderer-initiated reload with a UserGesture.
+  EXPECT_TRUE(ExecJs(shell()->web_contents(), "location.reload()"));
+  EXPECT_EQ(url_a, shell()->web_contents()->GetVisibleURL());
+  EXPECT_FALSE(shell()->web_contents()->GetController().GetPendingEntry());
+
+  // 4. Cancel (3) using document.open();
+  EXPECT_TRUE(ExecJs(shell()->web_contents(), "document.open()"));
+  EXPECT_EQ(url_a, shell()->web_contents()->GetVisibleURL());
+  EXPECT_FALSE(shell()->web_contents()->GetController().GetPendingEntry());
+}
+
 // Regression test for https://crbug.com/1001283
 // 1) Load main document with CSP: script-src 'none'
 // 2) Open an about:srcdoc iframe. It inherits the CSP.
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 85d02697..dfa66db 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1928,6 +1928,7 @@
 }
 
 void RenderProcessHostImpl::BindIndexedDB(
+    int render_frame_id,
     const url::Origin& origin,
     mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -1948,9 +1949,10 @@
   // guaranteeing that the usage of base::Unretained(indexed_db_factory_.get())
   // here is safe.
   indexed_db_factory_->context()->TaskRunner()->PostTask(
-      FROM_HERE, base::BindOnce(&IndexedDBDispatcherHost::AddReceiver,
-                                base::Unretained(indexed_db_factory_.get()),
-                                std::move(receiver), origin));
+      FROM_HERE,
+      base::BindOnce(&IndexedDBDispatcherHost::AddReceiver,
+                     base::Unretained(indexed_db_factory_.get()), GetID(),
+                     render_frame_id, origin, std::move(receiver)));
 }
 
 void RenderProcessHostImpl::ForceCrash() {
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index d223e59e..173f73c 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -248,6 +248,7 @@
       mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
       const url::Origin& origin) override;
   void BindIndexedDB(
+      int render_frame_id,
       const url::Origin& origin,
       mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) override;
   void ForceCrash() override;
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index 69b00205..d51d42f0 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -376,8 +376,11 @@
       GetSiteInstance()->GetSiteURL().SchemeIs(kGuestScheme);
   params->inside_portal = delegate_->IsPortal();
 
-  params->visual_properties = GetWidget()->GetVisualProperties();
-  GetWidget()->SetInitialVisualProperties(params->visual_properties);
+  // TODO(danakj): Make the visual_properties optional in the message.
+  if (proxy_route_id == MSG_ROUTING_NONE) {
+    params->visual_properties = GetWidget()->GetVisualProperties();
+    GetWidget()->SetInitialVisualProperties(params->visual_properties);
+  }
 
   // The RenderView is owned by this process. This call must be accompanied by a
   // DestroyView [see destructor] or else there will be a leak in the renderer
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 8a62483..6bf572d 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -795,6 +795,9 @@
   // This is only called while the RenderWidgetHost is attached to a delegate
   // still.
   DCHECK(delegate_);
+  // When the renderer process is gone, there's no need for VisualProperties
+  // which are to be sent to the renderer process.
+  DCHECK(view_);
 
   VisualProperties visual_properties;
 
@@ -833,29 +836,25 @@
   visual_properties.page_scale_factor = page_scale_factor_;
   visual_properties.is_pinch_gesture_active = is_pinch_gesture_active_;
 
-  if (view_) {
-    visual_properties.new_size = view_->GetRequestedRendererSize();
-    visual_properties.capture_sequence_number =
-        view_->GetCaptureSequenceNumber();
-    // For OOPIFs, use the compositor viewport received from the FrameConnector.
-    visual_properties.compositor_viewport_pixel_rect =
-        view_->IsRenderWidgetHostViewChildFrame() &&
-                !view_->IsRenderWidgetHostViewGuest()
-            ? gfx::ScaleToEnclosingRect(
-                  compositor_viewport_,
-                  IsUseZoomForDSFEnabled()
-                      ? 1.f
-                      : visual_properties.screen_info.device_scale_factor)
-            : gfx::Rect(view_->GetCompositorViewportPixelSize());
-    visual_properties.visible_viewport_size = view_->GetVisibleViewportSize();
-    // TODO(ccameron): GetLocalSurfaceId is not synchronized with the device
-    // scale factor of the surface. Fix this.
-    viz::LocalSurfaceIdAllocation local_surface_id_allocation =
-        view_->GetLocalSurfaceIdAllocation();
-    if (local_surface_id_allocation.IsValid()) {
-      visual_properties.local_surface_id_allocation =
-          local_surface_id_allocation;
-    }
+  visual_properties.new_size = view_->GetRequestedRendererSize();
+  visual_properties.capture_sequence_number = view_->GetCaptureSequenceNumber();
+  // For OOPIFs, use the compositor viewport received from the FrameConnector.
+  visual_properties.compositor_viewport_pixel_rect =
+      view_->IsRenderWidgetHostViewChildFrame() &&
+              !view_->IsRenderWidgetHostViewGuest()
+          ? gfx::ScaleToEnclosingRect(
+                compositor_viewport_,
+                IsUseZoomForDSFEnabled()
+                    ? 1.f
+                    : visual_properties.screen_info.device_scale_factor)
+          : gfx::Rect(view_->GetCompositorViewportPixelSize());
+  visual_properties.visible_viewport_size = view_->GetVisibleViewportSize();
+  // TODO(ccameron): GetLocalSurfaceId is not synchronized with the device
+  // scale factor of the surface. Fix this.
+  viz::LocalSurfaceIdAllocation local_surface_id_allocation =
+      view_->GetLocalSurfaceIdAllocation();
+  if (local_surface_id_allocation.IsValid()) {
+    visual_properties.local_surface_id_allocation = local_surface_id_allocation;
   }
 
   if (screen_orientation_type_for_testing_) {
diff --git a/content/browser/sandbox_parameters_mac.mm b/content/browser/sandbox_parameters_mac.mm
index e0810387..428dfcd 100644
--- a/content/browser/sandbox_parameters_mac.mm
+++ b/content/browser/sandbox_parameters_mac.mm
@@ -25,12 +25,16 @@
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
-#include "content/public/common/pepper_plugin_info.h"
+#include "ppapi/buildflags/buildflags.h"
 #include "sandbox/mac/seatbelt_exec.h"
 #include "services/service_manager/sandbox/mac/sandbox_mac.h"
 #include "services/service_manager/sandbox/sandbox_type.h"
 #include "services/service_manager/sandbox/switches.h"
 
+#if BUILDFLAG(ENABLE_PLUGINS)
+#include "content/public/common/pepper_plugin_info.h"
+#endif
+
 namespace content {
 
 namespace {
@@ -162,6 +166,7 @@
   }
 }
 
+#if BUILDFLAG(ENABLE_PLUGINS)
 void SetupPPAPISandboxParameters(sandbox::SeatbeltExecClient* client) {
   SetupCommonSandboxParameters(client);
 
@@ -186,6 +191,7 @@
   // to n+1 more than the plugins added.
   CHECK(index <= 5);
 }
+#endif
 
 void SetupCDMSandboxParameters(sandbox::SeatbeltExecClient* client) {
   SetupCommonSandboxParameters(client);
@@ -226,9 +232,11 @@
     case service_manager::SANDBOX_TYPE_NETWORK:
       SetupNetworkSandboxParameters(client);
       break;
+#if BUILDFLAG(ENABLE_PLUGINS)
     case service_manager::SANDBOX_TYPE_PPAPI:
       SetupPPAPISandboxParameters(client);
       break;
+#endif
     case service_manager::SANDBOX_TYPE_PROFILING:
     case service_manager::SANDBOX_TYPE_UTILITY:
       SetupUtilitySandboxParameters(client, command_line);
diff --git a/content/browser/service_worker/service_worker_context_unittest.cc b/content/browser/service_worker/service_worker_context_unittest.cc
index 7959901b..3637fd8 100644
--- a/content/browser/service_worker/service_worker_context_unittest.cc
+++ b/content/browser/service_worker/service_worker_context_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/logging.h"
 #include "base/run_loop.h"
+#include "base/scoped_observer.h"
 #include "base/time/time.h"
 #include "content/browser/service_worker/embedded_worker_test_helper.h"
 #include "content/browser/service_worker/fake_embedded_worker_instance_client.h"
@@ -97,7 +98,7 @@
 
 class InstallActivateWorker : public FakeServiceWorker {
  public:
-  InstallActivateWorker(EmbeddedWorkerTestHelper* helper)
+  explicit InstallActivateWorker(EmbeddedWorkerTestHelper* helper)
       : FakeServiceWorker(helper) {}
   ~InstallActivateWorker() override = default;
 
@@ -258,18 +259,14 @@
     base::Optional<int64_t> version_id;
     base::Optional<int64_t> registration_id;
     base::Optional<bool> is_running;
-    base::Optional<ServiceWorkerContext*> context;
   };
 
   explicit TestServiceWorkerContextObserver(ServiceWorkerContext* context)
-      : context_(context) {
-    context_->AddObserver(this);
+      : scoped_observer_(this) {
+    scoped_observer_.Add(context);
   }
 
-  ~TestServiceWorkerContextObserver() override {
-    if (context_)
-      context_->RemoveObserver(this);
-  }
+  ~TestServiceWorkerContextObserver() override = default;
 
   void OnRegistrationCompleted(const GURL& scope) override {
     EventLog log;
@@ -331,17 +328,18 @@
   }
 
   void OnDestruct(content::ServiceWorkerContext* context) override {
+    scoped_observer_.Remove(context);
+
     EventLog log;
     log.type = EventType::Destruct;
-    log.context = context;
     events_.push_back(log);
-    context_ = nullptr;
   }
 
   const std::vector<EventLog>& events() { return events_; }
 
  private:
-  ServiceWorkerContext* context_;
+  ScopedObserver<ServiceWorkerContext, ServiceWorkerContextObserver>
+      scoped_observer_;
   std::vector<EventLog> events_;
   DISALLOW_COPY_AND_ASSIGN(TestServiceWorkerContextObserver);
 };
@@ -528,7 +526,6 @@
   ASSERT_EQ(1u, observer.events().size());
   EXPECT_EQ(TestServiceWorkerContextObserver::EventType::Destruct,
             observer.events()[0].type);
-  EXPECT_EQ(context, observer.events()[0].context);
 }
 
 // Make sure basic registration is working.
diff --git a/content/browser/service_worker/service_worker_context_wrapper.h b/content/browser/service_worker/service_worker_context_wrapper.h
index a1148924..c5402ec 100644
--- a/content/browser/service_worker/service_worker_context_wrapper.h
+++ b/content/browser/service_worker/service_worker_context_wrapper.h
@@ -553,7 +553,8 @@
 
   // Observers which live outside content's implementation boundary. Observer
   // methods will always be dispatched on the UI thread.
-  base::ObserverList<ServiceWorkerContextObserver>::Unchecked observer_list_;
+  base::ObserverList<ServiceWorkerContextObserver, true>::Unchecked
+      observer_list_;
 
   const std::unique_ptr<ServiceWorkerProcessManager> process_manager_;
   // Cleared in ShutdownOnCoreThread():
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc
index eb847a2..60afc9c2 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -122,7 +122,7 @@
   if (!process)
     return;
 
-  process->BindIndexedDB(origin, std::move(receiver));
+  process->BindIndexedDB(MSG_ROUTING_NONE, origin, std::move(receiver));
 }
 
 void CreatePermissionServiceImpl(
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index 9b8fa75..e75ac6fa 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -482,60 +482,52 @@
 }
 
 // Helper function to generate a feature policy for a single feature and a list
-// of origins. (Equivalent to the declared policy "feature origin1 origin2...".)
-void SetParsedFeaturePolicyDeclaration(
-    blink::ParsedFeaturePolicyDeclaration* declaration,
+// of origins.
+// (Equivalent to the declared policy "feature origin1 origin2 ...".)
+// If the origins list is empty, it's treated as matches all origins
+// (Equivalent to the declared policy "feature *")
+blink::ParsedFeaturePolicyDeclaration CreateParsedFeaturePolicyDeclaration(
     blink::mojom::FeaturePolicyFeature feature,
     const std::vector<GURL>& origins) {
-  declaration->feature = feature;
+  blink::ParsedFeaturePolicyDeclaration declaration;
+
+  const bool matches_all = origins.empty();
+
+  declaration.feature = feature;
   blink::mojom::PolicyValueType feature_type =
       blink::FeaturePolicy::GetDefaultFeatureList().at(feature).second;
-  declaration->fallback_value =
-      blink::PolicyValue::CreateMinPolicyValue(feature_type);
-  declaration->opaque_value = declaration->fallback_value;
-  if (feature == blink::mojom::FeaturePolicyFeature::kOversizedImages) {
-    declaration->fallback_value.SetDoubleValue(2.0);
-    declaration->opaque_value.SetDoubleValue(2.0);
+  declaration.fallback_value =
+      matches_all ? blink::PolicyValue::CreateMaxPolicyValue(feature_type)
+                  : blink::PolicyValue::CreateMinPolicyValue(feature_type);
+  declaration.opaque_value = declaration.fallback_value;
+
+  if (feature == blink::mojom::FeaturePolicyFeature::kOversizedImages &&
+      !matches_all) {
+    declaration.fallback_value.SetDoubleValue(2.0);
+    declaration.opaque_value.SetDoubleValue(2.0);
   }
-  DCHECK(!origins.empty());
+
   for (const auto origin : origins)
-    declaration->values.insert(std::pair<url::Origin, blink::PolicyValue>(
+    declaration.values.insert(std::pair<url::Origin, blink::PolicyValue>(
         url::Origin::Create(origin),
         blink::PolicyValue::CreateMaxPolicyValue(feature_type)));
+
+  return declaration;
 }
 
-blink::ParsedFeaturePolicy CreateFPHeader(
-    blink::mojom::FeaturePolicyFeature feature1,
-    blink::mojom::FeaturePolicyFeature feature2,
+blink::ParsedFeaturePolicy CreateParsedFeaturePolicy(
+    const std::vector<blink::mojom::FeaturePolicyFeature>& features,
     const std::vector<GURL>& origins) {
-  blink::ParsedFeaturePolicy result(2);
-  SetParsedFeaturePolicyDeclaration(&(result[0]), feature1, origins);
-  SetParsedFeaturePolicyDeclaration(&(result[1]), feature2, origins);
+  blink::ParsedFeaturePolicy result;
+  result.reserve(features.size());
+  for (const auto& feature : features)
+    result.push_back(CreateParsedFeaturePolicyDeclaration(feature, origins));
   return result;
 }
 
-// Helper function to generate a feature policy for a single feature which
-// matches every origin. (Equivalent to the declared policy "feature1 *;
-// feature2 *".)
-blink::ParsedFeaturePolicy CreateFPHeaderMatchesAll(
-    blink::mojom::FeaturePolicyFeature feature1,
-    blink::mojom::FeaturePolicyFeature feature2) {
-  blink::ParsedFeaturePolicy result(2);
-  blink::mojom::PolicyValueType feature_type1 =
-      blink::FeaturePolicy::GetDefaultFeatureList().at(feature1).second;
-  blink::mojom::PolicyValueType feature_type2 =
-      blink::FeaturePolicy::GetDefaultFeatureList().at(feature2).second;
-  blink::PolicyValue max_value1 =
-      blink::PolicyValue::CreateMaxPolicyValue(feature_type1);
-  blink::PolicyValue max_value2 =
-      blink::PolicyValue::CreateMaxPolicyValue(feature_type2);
-  result[0].feature = feature1;
-  result[0].fallback_value = max_value1;
-  result[0].opaque_value = max_value1;
-  result[1].feature = feature2;
-  result[1].fallback_value = max_value2;
-  result[1].opaque_value = max_value2;
-  return result;
+blink::ParsedFeaturePolicy CreateParsedFeaturePolicyMatchesAll(
+    const std::vector<blink::mojom::FeaturePolicyFeature>& features) {
+  return CreateParsedFeaturePolicy(features, {});
 }
 
 // Check frame depth on node, widget, and process all match expected depth.
@@ -8753,17 +8745,18 @@
   EXPECT_TRUE(NavigateToURL(shell(), start_url));
 
   FrameTreeNode* root = web_contents()->GetFrameTree()->root();
-  EXPECT_EQ(CreateFPHeader(blink::mojom::FeaturePolicyFeature::kGeolocation,
-                           blink::mojom::FeaturePolicyFeature::kOversizedImages,
-                           {start_url.GetOrigin()}),
+  EXPECT_EQ(CreateParsedFeaturePolicy(
+                {blink::mojom::FeaturePolicyFeature::kGeolocation,
+                 blink::mojom::FeaturePolicyFeature::kOversizedImages},
+                {start_url.GetOrigin()}),
             root->current_replication_state().feature_policy_header);
 
   // When the main frame navigates to a page with a new policy, it should
   // overwrite the old one.
   EXPECT_TRUE(NavigateToURL(shell(), first_nav_url));
-  EXPECT_EQ(CreateFPHeaderMatchesAll(
-                blink::mojom::FeaturePolicyFeature::kGeolocation,
-                blink::mojom::FeaturePolicyFeature::kOversizedImages),
+  EXPECT_EQ(CreateParsedFeaturePolicyMatchesAll(
+                {blink::mojom::FeaturePolicyFeature::kGeolocation,
+                 blink::mojom::FeaturePolicyFeature::kOversizedImages}),
             root->current_replication_state().feature_policy_header);
 
   // When the main frame navigates to a page without a policy, the replicated
@@ -8783,17 +8776,18 @@
   EXPECT_TRUE(NavigateToURL(shell(), start_url));
 
   FrameTreeNode* root = web_contents()->GetFrameTree()->root();
-  EXPECT_EQ(CreateFPHeader(blink::mojom::FeaturePolicyFeature::kGeolocation,
-                           blink::mojom::FeaturePolicyFeature::kOversizedImages,
-                           {start_url.GetOrigin()}),
+  EXPECT_EQ(CreateParsedFeaturePolicy(
+                {blink::mojom::FeaturePolicyFeature::kGeolocation,
+                 blink::mojom::FeaturePolicyFeature::kOversizedImages},
+                {start_url.GetOrigin()}),
             root->current_replication_state().feature_policy_header);
 
   // When the main frame navigates to a page with a new policy, it should
   // overwrite the old one.
   EXPECT_TRUE(NavigateToURL(shell(), first_nav_url));
-  EXPECT_EQ(CreateFPHeaderMatchesAll(
-                blink::mojom::FeaturePolicyFeature::kGeolocation,
-                blink::mojom::FeaturePolicyFeature::kOversizedImages),
+  EXPECT_EQ(CreateParsedFeaturePolicyMatchesAll(
+                {blink::mojom::FeaturePolicyFeature::kGeolocation,
+                 blink::mojom::FeaturePolicyFeature::kOversizedImages}),
             root->current_replication_state().feature_policy_header);
 
   // When the main frame navigates to a page without a policy, the replicated
@@ -8815,23 +8809,25 @@
   EXPECT_TRUE(NavigateToURL(shell(), main_url));
 
   FrameTreeNode* root = web_contents()->GetFrameTree()->root();
-  EXPECT_EQ(CreateFPHeader(blink::mojom::FeaturePolicyFeature::kGeolocation,
-                           blink::mojom::FeaturePolicyFeature::kOversizedImages,
-                           {main_url.GetOrigin(), GURL("http://example.com/")}),
+  EXPECT_EQ(CreateParsedFeaturePolicy(
+                {blink::mojom::FeaturePolicyFeature::kGeolocation,
+                 blink::mojom::FeaturePolicyFeature::kOversizedImages},
+                {main_url.GetOrigin(), GURL("http://example.com/")}),
             root->current_replication_state().feature_policy_header);
   EXPECT_EQ(1UL, root->child_count());
   EXPECT_EQ(
-      CreateFPHeader(blink::mojom::FeaturePolicyFeature::kGeolocation,
-                     blink::mojom::FeaturePolicyFeature::kOversizedImages,
-                     {main_url.GetOrigin()}),
+      CreateParsedFeaturePolicy(
+          {blink::mojom::FeaturePolicyFeature::kGeolocation,
+           blink::mojom::FeaturePolicyFeature::kOversizedImages},
+          {main_url.GetOrigin()}),
       root->child_at(0)->current_replication_state().feature_policy_header);
 
   // Navigate the iframe cross-site.
   NavigateFrameToURL(root->child_at(0), first_nav_url);
   EXPECT_EQ(
-      CreateFPHeaderMatchesAll(
-          blink::mojom::FeaturePolicyFeature::kGeolocation,
-          blink::mojom::FeaturePolicyFeature::kOversizedImages),
+      CreateParsedFeaturePolicyMatchesAll(
+          {blink::mojom::FeaturePolicyFeature::kGeolocation,
+           blink::mojom::FeaturePolicyFeature::kOversizedImages}),
       root->child_at(0)->current_replication_state().feature_policy_header);
 
   // Navigate the iframe to another location, this one with no policy header
@@ -8843,9 +8839,9 @@
   // Navigate the iframe back to a page with a policy
   NavigateFrameToURL(root->child_at(0), first_nav_url);
   EXPECT_EQ(
-      CreateFPHeaderMatchesAll(
-          blink::mojom::FeaturePolicyFeature::kGeolocation,
-          blink::mojom::FeaturePolicyFeature::kOversizedImages),
+      CreateParsedFeaturePolicyMatchesAll(
+          {blink::mojom::FeaturePolicyFeature::kGeolocation,
+           blink::mojom::FeaturePolicyFeature::kOversizedImages}),
       root->child_at(0)->current_replication_state().feature_policy_header);
 }
 
@@ -8874,9 +8870,9 @@
   // exists.)
   NavigateFrameToURL(root->child_at(1), first_nav_url);
   EXPECT_EQ(
-      CreateFPHeaderMatchesAll(
-          blink::mojom::FeaturePolicyFeature::kGeolocation,
-          blink::mojom::FeaturePolicyFeature::kOversizedImages),
+      CreateParsedFeaturePolicyMatchesAll(
+          {blink::mojom::FeaturePolicyFeature::kGeolocation,
+           blink::mojom::FeaturePolicyFeature::kOversizedImages}),
       root->child_at(1)->current_replication_state().feature_policy_header);
 
   EXPECT_EQ(1UL, root->child_at(1)->child_count());
diff --git a/content/browser/speech/tts_controller_impl.cc b/content/browser/speech/tts_controller_impl.cc
index e68b6a2..fcc9341e2 100644
--- a/content/browser/speech/tts_controller_impl.cc
+++ b/content/browser/speech/tts_controller_impl.cc
@@ -333,7 +333,8 @@
   // TODO(crbug/1003410): Change to always have a valid TtsControllerDelegate.
   // This may involve modifying tests to register a mock implementation.
   if (!GetTtsControllerDelegate()) {
-    utterance->Finish();
+    utterance->OnTtsEvent(TTS_EVENT_CANCELLED, kInvalidCharIndex,
+                          kInvalidLength, std::string());
     return;
   }
 
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 1cc5aa92..b63b0d0 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -729,7 +729,6 @@
   void DidStartNavigationToPendingEntry(const GURL& url,
                                         ReloadType reload_type) override;
   bool ShouldTransferNavigation(bool is_main_frame_navigation) override;
-  bool ShouldPreserveAbortedURLs() override;
   void DidStartLoading(FrameTreeNode* frame_tree_node,
                        bool to_different_document) override;
   void DidStopLoading() override;
@@ -888,6 +887,7 @@
       const EntryChangedDetails& change_details) override;
   void NotifyNavigationListPruned(const PrunedDetails& pruned_details) override;
   void NotifyNavigationEntriesDeleted() override;
+  bool ShouldPreserveAbortedURLs() override;
 
   // Invoked before a form repost warning is shown.
   void NotifyBeforeFormRepostWarningShow() override;
diff --git a/content/browser/worker_host/dedicated_worker_host.cc b/content/browser/worker_host/dedicated_worker_host.cc
index c9286e6..398f745 100644
--- a/content/browser/worker_host/dedicated_worker_host.cc
+++ b/content/browser/worker_host/dedicated_worker_host.cc
@@ -450,7 +450,8 @@
   RenderProcessHost* worker_process_host = GetProcessHost();
   if (!worker_process_host)
     return;
-  worker_process_host->BindIndexedDB(GetOrigin(), std::move(receiver));
+  worker_process_host->BindIndexedDB(MSG_ROUTING_NONE, GetOrigin(),
+                                     std::move(receiver));
 }
 
 void DedicatedWorkerHost::BindSmsReceiverReceiver(
diff --git a/content/browser/worker_host/shared_worker_host.cc b/content/browser/worker_host/shared_worker_host.cc
index 4aaba47..992ac07 100644
--- a/content/browser/worker_host/shared_worker_host.cc
+++ b/content/browser/worker_host/shared_worker_host.cc
@@ -371,7 +371,8 @@
   RenderProcessHost* worker_process_host = GetProcessHost();
   if (!worker_process_host)
     return;
-  worker_process_host->BindIndexedDB(url::Origin::Create(instance().url()),
+  worker_process_host->BindIndexedDB(MSG_ROUTING_NONE,
+                                     url::Origin::Create(instance().url()),
                                      std::move(receiver));
 }
 
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
index f26d1304..58c3b699 100644
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
@@ -1246,6 +1246,7 @@
 
         switch (eventType) {
             case SelectionEventType.SELECTION_HANDLES_SHOWN:
+                mSelectionRect.set(left, top, right, bottom);
                 break;
 
             case SelectionEventType.SELECTION_HANDLES_MOVED:
diff --git a/content/public/app/content_browser_manifest.cc b/content/public/app/content_browser_manifest.cc
index d73d0ea..48aa206 100644
--- a/content/public/app/content_browser_manifest.cc
+++ b/content/public/app/content_browser_manifest.cc
@@ -201,8 +201,6 @@
                   "blink.mojom.DedicatedWorkerHostFactory",
                   "blink.mojom.GeolocationService",
                   "blink.mojom.InsecureInputService",
-                  "blink.mojom.MediaDevicesDispatcherHost",
-                  "blink.mojom.MediaStreamDispatcherHost",
                   "blink.mojom.NativeFileSystemManager",
                   "blink.mojom.NotificationService",
                   "blink.mojom.Portal",
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index be33395..c38bfa00 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -53,7 +53,6 @@
     "authenticator_request_client_delegate.h",
     "ax_event_notification_details.cc",
     "ax_event_notification_details.h",
-    "back_forward_cache.cc",
     "back_forward_cache.h",
     "background_fetch_delegate.cc",
     "background_fetch_delegate.h",
diff --git a/content/public/browser/back_forward_cache.cc b/content/public/browser/back_forward_cache.cc
deleted file mode 100644
index d66233f..0000000
--- a/content/public/browser/back_forward_cache.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/public/browser/back_forward_cache.h"
-
-#include "base/strings/string_util.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/web_contents.h"
-
-namespace content {
-
-void BackForwardCache::DisableForRenderFrameHost(
-    RenderFrameHost* render_frame_host,
-    base::StringPiece reason) {
-  content::WebContents::FromRenderFrameHost(render_frame_host)
-      ->GetController()
-      .GetBackForwardCache()
-      .DisableForRenderFrameHost(content::GlobalFrameRoutingId(
-                                     render_frame_host->GetProcess()->GetID(),
-                                     render_frame_host->GetRoutingID()),
-                                 reason);
-}
-}  // namespace content
diff --git a/content/public/browser/back_forward_cache.h b/content/public/browser/back_forward_cache.h
index 47cd20d..379d79f 100644
--- a/content/public/browser/back_forward_cache.h
+++ b/content/public/browser/back_forward_cache.h
@@ -28,12 +28,12 @@
 // All methods of this class should be called from the UI thread.
 class CONTENT_EXPORT BackForwardCache {
  public:
-  // Prevents the frame for the given |id| from entering the BackForwardCache. A
-  // document can only enter the BackForwardCache if the root frame and all its
-  // children can. This action can not be undone. Any document that is assigned
-  // to this same frame in the future will not be cached either. In practice
-  // this is not a big deal as only navigations that use a new frame can be
-  // cached.
+  // Prevents the |render_frame_host| from entering the BackForwardCache. A
+  // RenderFrameHost can only enter the BackForwardCache if the main one and all
+  // its children can. This action can not be undone. Any document that is
+  // assigned to this same RenderFrameHost in the future will not be cached
+  // either. In practice this is not a big deal as only navigations that use a
+  // new frame can be cached.
   //
   // This might be needed for example by components that listen to events via a
   // WebContentsObserver and keep some sort of per frame state, as this state
@@ -41,15 +41,17 @@
   //
   // If the page is already in the cache an eviction is triggered.
   //
-  // |id|: If no RenderFrameHost can be found for the given id nothing happens.
+  // |render_frame_host|: non-null.
   // |reason|: Free form string to be used in logging and metrics.
-  virtual void DisableForRenderFrameHost(GlobalFrameRoutingId id,
-                                         base::StringPiece reason) = 0;
-
-  // Convenience static method for calling DisableForRenderFameHost.
   static void DisableForRenderFrameHost(RenderFrameHost* render_frame_host,
                                         base::StringPiece reason);
 
+  // Helper function to be used when it is not always possible to guarantee the
+  // |render_frame_host| to be still alive when this is called. In this case,
+  // its |id| can be used.
+  static void DisableForRenderFrameHost(GlobalFrameRoutingId id,
+                                        base::StringPiece reason);
+
   // List of reasons the BackForwardCache was disabled for a specific test. If a
   // test needs to be disabled for a reason not covered below, please add to
   // this enum.
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index e0e795f..dda7734 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -493,10 +493,14 @@
       const url::Origin& origin,
       mojo::PendingReceiver<blink::mojom::FileSystemManager> receiver) = 0;
 
-  // Binds |receiver| to the IndexedDBDispatcherHost instance. The
-  // receiver is sent to the IO thread. This is for internal use only, and is
-  // only exposed here to support MockRenderProcessHost usage in tests.
+  // Binds |receiver| to the IndexedDBDispatcherHost instance. The receiver is
+  // sent to the IO thread. This is for internal use only, and is only exposed
+  // here to support MockRenderProcessHost usage in tests.
+  //
+  // |render_frame_id| is the frame associated with |receiver|, or
+  // MSG_ROUTING_NONE if |receiver| is associated with a worker.
   virtual void BindIndexedDB(
+      int render_frame_id,
       const url::Origin& origin,
       mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) = 0;
 
diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc
index d08d689..11f3786 100644
--- a/content/public/common/content_switches.cc
+++ b/content/public/common/content_switches.cc
@@ -977,14 +977,6 @@
 const char kEnableSpeechDispatcher[] = "enable-speech-dispatcher";
 #endif
 
-#if defined(OS_CHROMEOS)
-// A time_t. Passed by session_manager into the Chrome user session, indicating
-// that if Chrome crashes before the indicated time, session_manager will
-// consider this to be a crash-loop situation and log the user out. Chrome
-// mostly just passes this to crash_reporter if it crashes.
-const char kCrashLoopBefore[] = "crash-loop-before";
-#endif
-
 #if defined(OS_WIN)
 // /prefetch:# arguments to use when launching various process types. It has
 // been observed that when file reads are consistent for 3 process launches with
diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h
index 5d06d050..856f21b 100644
--- a/content/public/common/content_switches.h
+++ b/content/public/common/content_switches.h
@@ -271,10 +271,6 @@
 CONTENT_EXPORT extern const char kEnableSpeechDispatcher[];
 #endif
 
-#if defined(OS_CHROMEOS)
-CONTENT_EXPORT extern const char kCrashLoopBefore[];
-#endif
-
 #if defined(OS_WIN)
 CONTENT_EXPORT extern const char kPrefetchArgumentRenderer[];
 CONTENT_EXPORT extern const char kPrefetchArgumentGpu[];
diff --git a/content/public/renderer/request_peer.h b/content/public/renderer/request_peer.h
index a7c3116..c461040 100644
--- a/content/public/renderer/request_peer.h
+++ b/content/public/renderer/request_peer.h
@@ -14,13 +14,13 @@
 #include "content/common/content_export.h"
 #include "mojo/public/cpp/base/big_buffer.h"
 #include "mojo/public/cpp/system/data_pipe.h"
+#include "services/network/public/mojom/url_response_head.mojom-forward.h"
 
 namespace net {
 struct RedirectInfo;
 }
 
 namespace network {
-struct ResourceResponseInfo;
 struct URLLoaderCompletionStatus;
 }
 
@@ -40,17 +40,15 @@
   virtual void OnUploadProgress(uint64_t position, uint64_t size) = 0;
 
   // Called when a redirect occurs.  The implementation may return false to
-  // suppress the redirect.  The ResourceResponseInfo provides information about
+  // suppress the redirect.  The URLResponseHead provides information about
   // the redirect response and the RedirectInfo includes information about the
   // request to be made if the method returns true.
-  virtual bool OnReceivedRedirect(
-      const net::RedirectInfo& redirect_info,
-      const network::ResourceResponseInfo& info) = 0;
+  virtual bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
+                                  network::mojom::URLResponseHeadPtr head) = 0;
 
   // Called when response headers are available (after all redirects have
   // been followed).
-  virtual void OnReceivedResponse(
-      const network::ResourceResponseInfo& info) = 0;
+  virtual void OnReceivedResponse(network::mojom::URLResponseHeadPtr head) = 0;
 
   // Called when the response body becomes available.
   virtual void OnStartLoadingResponseBody(
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index 42d390c..325dd58 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -470,6 +470,7 @@
 }
 
 void MockRenderProcessHost::BindIndexedDB(
+    int render_frame_id,
     const url::Origin& origin,
     mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) {
   idb_factory_receiver_ = std::move(receiver);
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index 031058f..ec7cfe0 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -177,6 +177,7 @@
       mojo::PendingReceiver<blink::mojom::FileSystemManager> receiver)
       override {}
   void BindIndexedDB(
+      int render_frame_id,
       const url::Origin& origin,
       mojo::PendingReceiver<blink::mojom::IDBFactory> receiver) override;
   void BindVideoDecodePerfHistory(
diff --git a/content/public/test/test_renderer_host.cc b/content/public/test/test_renderer_host.cc
index 06e8f93b..d61e582 100644
--- a/content/public/test/test_renderer_host.cc
+++ b/content/public/test/test_renderer_host.cc
@@ -33,6 +33,7 @@
 #include "content/test/test_render_view_host_factory.h"
 #include "content/test/test_render_widget_host_factory.h"
 #include "content/test/test_web_contents.h"
+#include "net/base/mock_network_change_notifier.h"
 #include "ui/base/material_design/material_design_controller.h"
 
 #if defined(OS_ANDROID)
@@ -251,6 +252,10 @@
 
   sanity_checker_.reset(new ContentBrowserSanityChecker());
 
+#if !defined(OS_ANDROID)
+  network_change_notifier_ = net::test::MockNetworkChangeNotifier::Create();
+#endif
+
   DCHECK(!browser_context_);
   browser_context_ = CreateBrowserContext();
 
diff --git a/content/public/test/test_renderer_host.h b/content/public/test/test_renderer_host.h
index d019a30..66544f2 100644
--- a/content/public/test/test_renderer_host.h
+++ b/content/public/test/test_renderer_host.h
@@ -35,6 +35,12 @@
 class Screen;
 }
 
+namespace net {
+namespace test {
+class MockNetworkChangeNotifier;
+}
+}  // namespace net
+
 namespace ui {
 class ScopedOleInitializer;
 }
@@ -261,6 +267,15 @@
 
   std::unique_ptr<ContentBrowserSanityChecker> sanity_checker_;
 
+  // TODO(crbug.com/1011275): This is a temporary work around to fix flakiness
+  // on tests. The default behavior of the network stack is to allocate a
+  // leaking SystemDnsConfigChangeNotifier. This holds on to a set of
+  // FilePathWatchers on Posix and ObjectWatchers on Windows that outlive
+  // the message queues of the task_environment_ and may post messages after
+  // their death.
+  std::unique_ptr<net::test::MockNetworkChangeNotifier>
+      network_change_notifier_;
+
   std::unique_ptr<BrowserContext> browser_context_;
 
   // This must be placed before |contents_| such that it will be destructed
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index d78466f..5c2df8c49 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -202,8 +202,6 @@
     "media/webrtc/media_stream_track_metrics.h",
     "media/webrtc/media_stream_video_webrtc_sink.cc",
     "media/webrtc/media_stream_video_webrtc_sink.h",
-    "media/webrtc/peer_connection_dependency_factory.cc",
-    "media/webrtc/peer_connection_dependency_factory.h",
     "media/webrtc/peer_connection_tracker.cc",
     "media/webrtc/peer_connection_tracker.h",
     "media/webrtc/rtc_certificate_generator.cc",
@@ -238,18 +236,6 @@
     "navigation_state.h",
     "net_info_helper.cc",
     "net_info_helper.h",
-    "p2p/host_address_request.cc",
-    "p2p/host_address_request.h",
-    "p2p/ipc_socket_factory.cc",
-    "p2p/ipc_socket_factory.h",
-    "p2p/mdns_responder_adapter.cc",
-    "p2p/mdns_responder_adapter.h",
-    "p2p/port_allocator.cc",
-    "p2p/port_allocator.h",
-    "p2p/socket_client_impl.cc",
-    "p2p/socket_client_impl.h",
-    "p2p/socket_dispatcher.cc",
-    "p2p/socket_dispatcher.h",
     "page_properties.cc",
     "page_properties.h",
     "peripheral_content_heuristic.cc",
@@ -406,7 +392,6 @@
     "//gpu/command_buffer/client:gles2_interface",
     "//gpu/command_buffer/client:raster_interface",
     "//gpu/command_buffer/client:webgpu_interface",
-    "//jingle:webrtc_glue",
     "//media",
     "//media:media_buildflags",
     "//media/blink",
@@ -461,7 +446,6 @@
     "//third_party/webrtc/api/audio:aec3_config_json",
     "//third_party/webrtc/api/audio:aec3_factory",
     "//third_party/webrtc/api/audio_codecs:audio_codecs_api",
-    "//third_party/webrtc/api/rtc_event_log:rtc_event_log_factory",
     "//third_party/webrtc/api/video:video_bitrate_allocation",
     "//third_party/webrtc/api/video:video_frame",
     "//third_party/webrtc/api/video:video_frame_i420",
@@ -470,7 +454,6 @@
     "//third_party/webrtc/api/video_codecs:video_codecs_api",
     "//third_party/webrtc/common_video:common_video",
     "//third_party/webrtc/media:rtc_audio_video",
-    "//third_party/webrtc/media:rtc_internal_video_codecs",
     "//third_party/webrtc/media:rtc_media",
     "//third_party/webrtc/media:rtc_media_base",
     "//third_party/webrtc/media:rtc_simulcast_encoder_adapter",
@@ -480,7 +463,6 @@
     "//third_party/webrtc/modules/audio_processing:api",
     "//third_party/webrtc/modules/audio_processing:audio_processing_statistics",
     "//third_party/webrtc/modules/audio_processing/aec_dump",
-    "//third_party/webrtc/modules/video_coding:webrtc_h264",
     "//third_party/webrtc/p2p:libstunprober",
     "//third_party/webrtc/p2p:rtc_p2p",
     "//third_party/webrtc/pc:libjingle_peerconnection",
@@ -497,7 +479,6 @@
     "//third_party/webrtc/stats",
     "//third_party/webrtc/system_wrappers",
     "//third_party/webrtc_overrides:init_webrtc",
-    "//third_party/webrtc_overrides:task_queue_factory",
     "//third_party/widevine/cdm:headers",
     "//ui/accessibility",
     "//ui/base",
diff --git a/content/renderer/compositor/layer_tree_view.cc b/content/renderer/compositor/layer_tree_view.cc
index c04c7bb..948e694 100644
--- a/content/renderer/compositor/layer_tree_view.cc
+++ b/content/renderer/compositor/layer_tree_view.cc
@@ -328,14 +328,20 @@
 
 std::unique_ptr<cc::BeginMainFrameMetrics>
 LayerTreeView::GetBeginMainFrameMetrics() {
+  if (!delegate_)
+    return nullptr;
   return delegate_->GetBeginMainFrameMetrics();
 }
 
 void LayerTreeView::DidScheduleBeginMainFrame() {
+  if (!delegate_)
+    return;
   web_main_thread_scheduler_->DidScheduleBeginMainFrame();
 }
 
 void LayerTreeView::DidRunBeginMainFrame() {
+  if (!delegate_)
+    return;
   web_main_thread_scheduler_->DidRunBeginMainFrame();
 }
 
diff --git a/content/renderer/internal_document_state_data.cc b/content/renderer/internal_document_state_data.cc
index 26f1cb41..5b11042 100644
--- a/content/renderer/internal_document_state_data.cc
+++ b/content/renderer/internal_document_state_data.cc
@@ -19,8 +19,7 @@
 }
 
 InternalDocumentStateData::InternalDocumentStateData()
-    : http_status_code_(0),
-      is_overriding_user_agent_(false),
+    : is_overriding_user_agent_(false),
       must_reset_scroll_and_scale_state_(false),
       cache_policy_override_set_(false),
       cache_policy_override_(blink::mojom::FetchCacheMode::kDefault) {}
@@ -50,7 +49,6 @@
 }
 
 void InternalDocumentStateData::CopyFrom(InternalDocumentStateData* other) {
-  http_status_code_ = other->http_status_code_;
   is_overriding_user_agent_ = other->is_overriding_user_agent_;
   must_reset_scroll_and_scale_state_ =
       other->must_reset_scroll_and_scale_state_;
diff --git a/content/renderer/internal_document_state_data.h b/content/renderer/internal_document_state_data.h
index 1a71890a..8d52ef8 100644
--- a/content/renderer/internal_document_state_data.h
+++ b/content/renderer/internal_document_state_data.h
@@ -36,11 +36,6 @@
 
   void CopyFrom(InternalDocumentStateData* other);
 
-  int http_status_code() const { return http_status_code_; }
-  void set_http_status_code(int http_status_code) {
-    http_status_code_ = http_status_code;
-  }
-
   // True if the user agent was overridden for this page.
   bool is_overriding_user_agent() const { return is_overriding_user_agent_; }
   void set_is_overriding_user_agent(bool state) {
@@ -98,7 +93,6 @@
   void set_navigation_state(std::unique_ptr<NavigationState> navigation_state);
 
  private:
-  int http_status_code_;
   bool is_overriding_user_agent_;
   bool must_reset_scroll_and_scale_state_;
   bool cache_policy_override_set_;
diff --git a/content/renderer/loader/navigation_body_loader.cc b/content/renderer/loader/navigation_body_loader.cc
index 38c4a55..c576e2b 100644
--- a/content/renderer/loader/navigation_body_loader.cc
+++ b/content/renderer/loader/navigation_body_loader.cc
@@ -53,9 +53,8 @@
     NotifyResourceRedirectReceived(render_frame_id, resource_load_info.get(),
                                    redirect_info, redirect_response);
     WebURLLoaderImpl::PopulateURLResponse(
-        url, network::ResourceResponseHead(redirect_response),
-        &redirect.redirect_response, response_head.ssl_info.has_value(),
-        request_id);
+        url, *redirect_response, &redirect.redirect_response,
+        response_head.ssl_info.has_value(), request_id);
     if (url.SchemeIs(url::kDataScheme))
       redirect.redirect_response.SetHttpStatusCode(200);
     redirect.new_url = redirect_info.new_url;
@@ -70,8 +69,9 @@
   }
 
   WebURLLoaderImpl::PopulateURLResponse(
-      url, response_head, &navigation_params->response,
-      response_head.ssl_info.has_value(), request_id);
+      url, *network::mojom::URLResponseHeadPtr(response_head),
+      &navigation_params->response, response_head.ssl_info.has_value(),
+      request_id);
   if (url.SchemeIs(url::kDataScheme))
     navigation_params->response.SetHttpStatusCode(200);
 
diff --git a/content/renderer/loader/resource_dispatcher.cc b/content/renderer/loader/resource_dispatcher.cc
index ca130dd..199b2a40 100644
--- a/content/renderer/loader/resource_dispatcher.cc
+++ b/content/renderer/loader/resource_dispatcher.cc
@@ -467,8 +467,8 @@
 
   while (response->context_for_redirect) {
     DCHECK(response->redirect_info);
-    bool follow_redirect =
-        peer->OnReceivedRedirect(*response->redirect_info, response->info);
+    bool follow_redirect = peer->OnReceivedRedirect(*response->redirect_info,
+                                                    response->head.Clone());
     redirect_or_response_event.Reset();
     if (follow_redirect) {
       task_runner->PostTask(
diff --git a/content/renderer/loader/resource_dispatcher_unittest.cc b/content/renderer/loader/resource_dispatcher_unittest.cc
index 7e7007ff..9e9a600 100644
--- a/content/renderer/loader/resource_dispatcher_unittest.cc
+++ b/content/renderer/loader/resource_dispatcher_unittest.cc
@@ -193,15 +193,13 @@
 
     void OnUploadProgress(uint64_t position, uint64_t size) override {}
 
-    bool OnReceivedRedirect(
-        const net::RedirectInfo& redirect_info,
-        const network::ResourceResponseInfo& info) override {
+    bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
+                            network::mojom::URLResponseHeadPtr head) override {
       return false;
     }
 
-    void OnReceivedResponse(
-        const network::ResourceResponseInfo& info) override {
-      response_info_ = info;
+    void OnReceivedResponse(network::mojom::URLResponseHeadPtr head) override {
+      response_head_ = std::move(head);
     }
 
     void OnStartLoadingResponseBody(
@@ -213,7 +211,7 @@
 
     void OnCompletedRequest(
         const network::URLLoaderCompletionStatus& status) override {
-      original_peer_->OnReceivedResponse(response_info_);
+      original_peer_->OnReceivedResponse(std::move(response_head_));
       original_peer_->OnStartLoadingResponseBody(std::move(body_handle_));
       original_peer_->OnCompletedRequest(status);
     }
@@ -223,7 +221,7 @@
 
    private:
     std::unique_ptr<RequestPeer> original_peer_;
-    network::ResourceResponseInfo response_info_;
+    network::mojom::URLResponseHeadPtr response_head_;
     mojo::ScopedDataPipeConsumerHandle body_handle_;
 
     DISALLOW_COPY_AND_ASSIGN(WrapperPeer);
diff --git a/content/renderer/loader/sync_load_context.cc b/content/renderer/loader/sync_load_context.cc
index 2a9746e..e73cf49 100644
--- a/content/renderer/loader/sync_load_context.cc
+++ b/content/renderer/loader/sync_load_context.cc
@@ -16,7 +16,7 @@
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "net/url_request/redirect_info.h"
 #include "services/network/public/cpp/resource_request.h"
-#include "services/network/public/cpp/resource_response_info.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
 #include "third_party/blink/public/common/loader/url_loader_throttle.h"
 
 namespace content {
@@ -147,10 +147,10 @@
 
 bool SyncLoadContext::OnReceivedRedirect(
     const net::RedirectInfo& redirect_info,
-    const network::ResourceResponseInfo& info) {
+    network::mojom::URLResponseHeadPtr head) {
   DCHECK(!Completed());
   response_->url = redirect_info.new_url;
-  response_->info = info;
+  response_->head = std::move(head);
   response_->redirect_info = redirect_info;
   response_->context_for_redirect = this;
   resource_dispatcher_->SetDefersLoading(request_id_, true);
@@ -178,9 +178,9 @@
 }
 
 void SyncLoadContext::OnReceivedResponse(
-    const network::ResourceResponseInfo& info) {
+    network::mojom::URLResponseHeadPtr head) {
   DCHECK(!Completed());
-  response_->info = info;
+  response_->head = std::move(head);
 }
 
 void SyncLoadContext::OnStartLoadingResponseBody(
@@ -192,8 +192,8 @@
     blob_response_started_ = true;
 
     download_to_blob_registry_->RegisterFromStream(
-        response_->info.mime_type, "",
-        std::max<int64_t>(0, response_->info.content_length), std::move(body),
+        response_->head->mime_type, "",
+        std::max<int64_t>(0, response_->head->content_length), std::move(body),
         mojo::NullAssociatedRemote(),
         base::BindOnce(&SyncLoadContext::OnFinishCreatingBlob,
                        base::Unretained(this)));
@@ -225,8 +225,8 @@
   response_->error_code = status.error_code;
   response_->extended_error_code = status.extended_error_code;
   response_->cors_error = status.cors_error_status;
-  response_->info.encoded_data_length = status.encoded_data_length;
-  response_->info.encoded_body_length = status.encoded_body_length;
+  response_->head->encoded_data_length = status.encoded_data_length;
+  response_->head->encoded_body_length = status.encoded_body_length;
   if ((blob_response_started_ && !blob_finished_) || body_handle_.is_valid()) {
     // The body is still begin downloaded as a Blob, or being read through the
     // handle. Wait until it's completed.
diff --git a/content/renderer/loader/sync_load_context.h b/content/renderer/loader/sync_load_context.h
index 4671aa276..ccc7389 100644
--- a/content/renderer/loader/sync_load_context.h
+++ b/content/renderer/loader/sync_load_context.h
@@ -88,8 +88,8 @@
   // RequestPeer implementation:
   void OnUploadProgress(uint64_t position, uint64_t size) override;
   bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
-                          const network::ResourceResponseInfo& info) override;
-  void OnReceivedResponse(const network::ResourceResponseInfo& info) override;
+                          network::mojom::URLResponseHeadPtr head) override;
+  void OnReceivedResponse(network::mojom::URLResponseHeadPtr head) override;
   void OnStartLoadingResponseBody(
       mojo::ScopedDataPipeConsumerHandle body) override;
   void OnTransferSizeUpdated(int transfer_size_diff) override;
diff --git a/content/renderer/loader/sync_load_context_unittest.cc b/content/renderer/loader/sync_load_context_unittest.cc
index 7a7d0c8..023fda7 100644
--- a/content/renderer/loader/sync_load_context_unittest.cc
+++ b/content/renderer/loader/sync_load_context_unittest.cc
@@ -129,7 +129,7 @@
     context->resource_dispatcher_ = std::move(dispatcher);
 
     // Simulate the response.
-    context->OnReceivedResponse(network::ResourceResponseInfo());
+    context->OnReceivedResponse(network::mojom::URLResponseHead::New());
     mojo::ScopedDataPipeProducerHandle producer_handle;
     mojo::ScopedDataPipeConsumerHandle consumer_handle;
     EXPECT_EQ(MOJO_RESULT_OK,
diff --git a/content/renderer/loader/sync_load_response.h b/content/renderer/loader/sync_load_response.h
index 882cadf..d517bb20 100644
--- a/content/renderer/loader/sync_load_response.h
+++ b/content/renderer/loader/sync_load_response.h
@@ -10,8 +10,8 @@
 #include "base/optional.h"
 #include "content/common/content_export.h"
 #include "services/network/public/cpp/cors/cors_error_status.h"
-#include "services/network/public/cpp/resource_response_info.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
 #include "third_party/blink/public/mojom/blob/serialized_blob.mojom.h"
 #include "url/gurl.h"
 
@@ -31,7 +31,8 @@
   base::Optional<net::RedirectInfo> redirect_info;
   SyncLoadContext* context_for_redirect = nullptr;
 
-  network::ResourceResponseInfo info;
+  network::mojom::URLResponseHeadPtr head =
+      network::mojom::URLResponseHead::New();
 
   // The response error code.
   int error_code;
diff --git a/content/renderer/loader/test_request_peer.cc b/content/renderer/loader/test_request_peer.cc
index fa318b1..f345a4b 100644
--- a/content/renderer/loader/test_request_peer.cc
+++ b/content/renderer/loader/test_request_peer.cc
@@ -6,7 +6,7 @@
 
 #include "content/renderer/loader/resource_dispatcher.h"
 #include "net/url_request/redirect_info.h"
-#include "services/network/public/cpp/resource_response.h"
+#include "services/network/public/mojom/url_response_head.mojom.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
 
@@ -24,23 +24,23 @@
 
 bool TestRequestPeer::OnReceivedRedirect(
     const net::RedirectInfo& redirect_info,
-    const network::ResourceResponseInfo& info) {
+    network::mojom::URLResponseHeadPtr head) {
   EXPECT_FALSE(context_->cancelled);
   EXPECT_FALSE(context_->complete);
   ++context_->seen_redirects;
-  context_->last_load_timing = info.load_timing;
+  context_->last_load_timing = head->load_timing;
   if (context_->defer_on_redirect)
     dispatcher_->SetDefersLoading(context_->request_id, true);
   return context_->follow_redirects;
 }
 
 void TestRequestPeer::OnReceivedResponse(
-    const network::ResourceResponseInfo& info) {
+    network::mojom::URLResponseHeadPtr head) {
   EXPECT_FALSE(context_->cancelled);
   EXPECT_FALSE(context_->received_response);
   EXPECT_FALSE(context_->complete);
   context_->received_response = true;
-  context_->last_load_timing = info.load_timing;
+  context_->last_load_timing = head->load_timing;
   if (context_->cancel_on_receive_response) {
     dispatcher_->Cancel(
         context_->request_id,
diff --git a/content/renderer/loader/test_request_peer.h b/content/renderer/loader/test_request_peer.h
index a6296d9..d61c1e8 100644
--- a/content/renderer/loader/test_request_peer.h
+++ b/content/renderer/loader/test_request_peer.h
@@ -13,15 +13,12 @@
 #include "content/public/renderer/request_peer.h"
 #include "net/base/load_timing_info.h"
 #include "services/network/public/cpp/url_loader_completion_status.h"
+#include "services/network/public/mojom/url_response_head.mojom-forward.h"
 
 namespace net {
 struct RedirectInfo;
 }  // namespace net
 
-namespace network {
-struct ResourceResponseInfo;
-}
-
 namespace content {
 
 class ResourceDispatcher;
@@ -36,8 +33,8 @@
 
   void OnUploadProgress(uint64_t position, uint64_t size) override;
   bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
-                          const network::ResourceResponseInfo& info) override;
-  void OnReceivedResponse(const network::ResourceResponseInfo& info) override;
+                          network::mojom::URLResponseHeadPtr head) override;
+  void OnReceivedResponse(network::mojom::URLResponseHeadPtr head) override;
   void OnStartLoadingResponseBody(
       mojo::ScopedDataPipeConsumerHandle body) override;
   void OnTransferSizeUpdated(int transfer_size_diff) override;
diff --git a/content/renderer/loader/web_url_loader_impl.cc b/content/renderer/loader/web_url_loader_impl.cc
index b2ecb34..928652b 100644
--- a/content/renderer/loader/web_url_loader_impl.cc
+++ b/content/renderer/loader/web_url_loader_impl.cc
@@ -60,6 +60,7 @@
 #include "net/url_request/url_request_data_job.h"
 #include "services/network/loader_util.h"
 #include "services/network/public/cpp/resource_request.h"
+#include "services/network/public/cpp/resource_response.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/mime_util/mime_util.h"
@@ -184,7 +185,7 @@
 }
 
 void SetSecurityStyleAndDetails(const GURL& url,
-                                const network::ResourceResponseInfo& info,
+                                const network::mojom::URLResponseHead& head,
                                 WebURLResponse* response,
                                 bool report_security_info) {
   if (!report_security_info) {
@@ -204,12 +205,12 @@
   // The resource loader does not provide a guarantee that requests always have
   // security info (such as a certificate) attached. Use WebSecurityStyleUnknown
   // in this case where there isn't enough information to be useful.
-  if (!info.ssl_info.has_value()) {
+  if (!head.ssl_info.has_value()) {
     response->SetSecurityStyle(blink::kWebSecurityStyleUnknown);
     return;
   }
 
-  const net::SSLInfo& ssl_info = *info.ssl_info;
+  const net::SSLInfo& ssl_info = *head.ssl_info;
 
   const char* protocol = "";
   const char* key_exchange = "";
@@ -248,7 +249,7 @@
     }
   }
 
-  if (net::IsCertStatusError(info.cert_status)) {
+  if (net::IsCertStatusError(head.cert_status)) {
     response->SetSecurityStyle(blink::kWebSecurityStyleInsecure);
   } else {
     response->SetSecurityStyle(blink::kWebSecurityStyleSecure);
@@ -397,8 +398,8 @@
 
   void OnUploadProgress(uint64_t position, uint64_t size);
   bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
-                          const network::ResourceResponseInfo& info);
-  void OnReceivedResponse(const network::ResourceResponseInfo& info);
+                          network::mojom::URLResponseHeadPtr head);
+  void OnReceivedResponse(network::mojom::URLResponseHeadPtr head);
   void OnStartLoadingResponseBody(mojo::ScopedDataPipeConsumerHandle body);
   void OnTransferSizeUpdated(int transfer_size_diff);
   void OnReceivedCachedMetadata(mojo_base::BigBuffer data);
@@ -467,8 +468,8 @@
   // RequestPeer methods:
   void OnUploadProgress(uint64_t position, uint64_t size) override;
   bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
-                          const network::ResourceResponseInfo& info) override;
-  void OnReceivedResponse(const network::ResourceResponseInfo& info) override;
+                          network::mojom::URLResponseHeadPtr head) override;
+  void OnReceivedResponse(network::mojom::URLResponseHeadPtr head) override;
   void OnStartLoadingResponseBody(
       mojo::ScopedDataPipeConsumerHandle body) override;
   void OnTransferSizeUpdated(int transfer_size_diff) override;
@@ -497,10 +498,10 @@
   // RequestPeer implementation:
   void OnUploadProgress(uint64_t position, uint64_t size) override {}
   bool OnReceivedRedirect(const net::RedirectInfo& redirect_info,
-                          const network::ResourceResponseInfo& info) override {
+                          network::mojom::URLResponseHeadPtr head) override {
     return true;
   }
-  void OnReceivedResponse(const network::ResourceResponseInfo& info) override {}
+  void OnReceivedResponse(network::mojom::URLResponseHeadPtr head) override {}
   void OnStartLoadingResponseBody(
       mojo::ScopedDataPipeConsumerHandle body) override {
     body_handle_ = std::move(body);
@@ -863,7 +864,7 @@
 
 bool WebURLLoaderImpl::Context::OnReceivedRedirect(
     const net::RedirectInfo& redirect_info,
-    const network::ResourceResponseInfo& info) {
+    network::mojom::URLResponseHeadPtr head) {
   if (!client_)
     return false;
 
@@ -872,7 +873,7 @@
       this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
 
   WebURLResponse response;
-  PopulateURLResponse(url_, info, &response, report_raw_headers_, request_id_);
+  PopulateURLResponse(url_, *head, &response, report_raw_headers_, request_id_);
 
   url_ = WebURL(redirect_info.new_url);
   return client_->WillFollowRedirect(
@@ -885,7 +886,7 @@
 }
 
 void WebURLLoaderImpl::Context::OnReceivedResponse(
-    const network::ResourceResponseInfo& info) {
+    network::mojom::URLResponseHeadPtr head) {
   if (!client_)
     return;
 
@@ -894,7 +895,7 @@
       this, TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
 
   WebURLResponse response;
-  PopulateURLResponse(url_, info, &response, report_raw_headers_, request_id_);
+  PopulateURLResponse(url_, *head, &response, report_raw_headers_, request_id_);
 
   client_->DidReceiveResponse(response);
 
@@ -977,13 +978,13 @@
 
 bool WebURLLoaderImpl::RequestPeerImpl::OnReceivedRedirect(
     const net::RedirectInfo& redirect_info,
-    const network::ResourceResponseInfo& info) {
-  return context_->OnReceivedRedirect(redirect_info, info);
+    network::mojom::URLResponseHeadPtr head) {
+  return context_->OnReceivedRedirect(redirect_info, std::move(head));
 }
 
 void WebURLLoaderImpl::RequestPeerImpl::OnReceivedResponse(
-    const network::ResourceResponseInfo& info) {
-  context_->OnReceivedResponse(info);
+    network::mojom::URLResponseHeadPtr head) {
+  context_->OnReceivedResponse(std::move(head));
 }
 
 void WebURLLoaderImpl::RequestPeerImpl::OnStartLoadingResponseBody(
@@ -1027,103 +1028,98 @@
 
 void WebURLLoaderImpl::PopulateURLResponse(
     const WebURL& url,
-    const network::ResourceResponseInfo& info,
+    const network::mojom::URLResponseHead& head,
     WebURLResponse* response,
     bool report_security_info,
     int request_id) {
   response->SetCurrentRequestUrl(url);
-  response->SetResponseTime(info.response_time);
-  response->SetMimeType(WebString::FromUTF8(info.mime_type));
-  response->SetTextEncodingName(WebString::FromUTF8(info.charset));
-  response->SetExpectedContentLength(info.content_length);
+  response->SetResponseTime(head.response_time);
+  response->SetMimeType(WebString::FromUTF8(head.mime_type));
+  response->SetTextEncodingName(WebString::FromUTF8(head.charset));
+  response->SetExpectedContentLength(head.content_length);
   response->SetHasMajorCertificateErrors(
-      net::IsCertStatusError(info.cert_status));
-  response->SetCTPolicyCompliance(info.ct_policy_compliance);
-  response->SetIsLegacyTLSVersion(info.is_legacy_tls_version);
-  response->SetAppCacheID(info.appcache_id);
-  response->SetAppCacheManifestURL(info.appcache_manifest_url);
-  response->SetWasCached(!info.load_timing.request_start_time.is_null() &&
-                         info.response_time <
-                             info.load_timing.request_start_time);
+      net::IsCertStatusError(head.cert_status));
+  response->SetCTPolicyCompliance(head.ct_policy_compliance);
+  response->SetIsLegacyTLSVersion(head.is_legacy_tls_version);
+  response->SetAppCacheID(head.appcache_id);
+  response->SetAppCacheManifestURL(head.appcache_manifest_url);
+  response->SetWasCached(!head.load_timing.request_start_time.is_null() &&
+                         head.response_time <
+                             head.load_timing.request_start_time);
   response->SetRemoteIPAddress(WebString::FromUTF8(
-      net::HostPortPair::FromIPEndPoint(info.remote_endpoint).HostForURL()));
-  response->SetRemotePort(info.remote_endpoint.port());
-  response->SetConnectionID(info.load_timing.socket_log_id);
-  response->SetConnectionReused(info.load_timing.socket_reused);
-  response->SetWasFetchedViaSPDY(info.was_fetched_via_spdy);
-  response->SetWasFetchedViaServiceWorker(info.was_fetched_via_service_worker);
+      net::HostPortPair::FromIPEndPoint(head.remote_endpoint).HostForURL()));
+  response->SetRemotePort(head.remote_endpoint.port());
+  response->SetConnectionID(head.load_timing.socket_log_id);
+  response->SetConnectionReused(head.load_timing.socket_reused);
+  response->SetWasFetchedViaSPDY(head.was_fetched_via_spdy);
+  response->SetWasFetchedViaServiceWorker(head.was_fetched_via_service_worker);
   response->SetWasFallbackRequiredByServiceWorker(
-      info.was_fallback_required_by_service_worker);
-  response->SetType(info.response_type);
-  response->SetUrlListViaServiceWorker(info.url_list_via_service_worker);
+      head.was_fallback_required_by_service_worker);
+  response->SetType(head.response_type);
+  response->SetUrlListViaServiceWorker(head.url_list_via_service_worker);
   response->SetCacheStorageCacheName(
-      info.is_in_cache_storage
-          ? blink::WebString::FromUTF8(info.cache_storage_cache_name)
+      head.is_in_cache_storage
+          ? blink::WebString::FromUTF8(head.cache_storage_cache_name)
           : blink::WebString());
   blink::WebVector<blink::WebString> cors_exposed_header_names(
-      info.cors_exposed_header_names.size());
+      head.cors_exposed_header_names.size());
   std::transform(
-      info.cors_exposed_header_names.begin(),
-      info.cors_exposed_header_names.end(), cors_exposed_header_names.begin(),
+      head.cors_exposed_header_names.begin(),
+      head.cors_exposed_header_names.end(), cors_exposed_header_names.begin(),
       [](const std::string& h) { return blink::WebString::FromLatin1(h); });
   response->SetCorsExposedHeaderNames(cors_exposed_header_names);
   response->SetDidServiceWorkerNavigationPreload(
-      info.did_service_worker_navigation_preload);
-  response->SetEncodedDataLength(info.encoded_data_length);
-  response->SetEncodedBodyLength(info.encoded_body_length);
+      head.did_service_worker_navigation_preload);
+  response->SetEncodedDataLength(head.encoded_data_length);
+  response->SetEncodedBodyLength(head.encoded_body_length);
   response->SetAlpnNegotiatedProtocol(
-      WebString::FromUTF8(info.alpn_negotiated_protocol));
-  response->SetConnectionInfo(info.connection_info);
-  response->SetAsyncRevalidationRequested(info.async_revalidation_requested);
-  response->SetNetworkAccessed(info.network_accessed);
+      WebString::FromUTF8(head.alpn_negotiated_protocol));
+  response->SetConnectionInfo(head.connection_info);
+  response->SetAsyncRevalidationRequested(head.async_revalidation_requested);
+  response->SetNetworkAccessed(head.network_accessed);
   response->SetRequestId(request_id);
   response->SetIsSignedExchangeInnerResponse(
-      info.is_signed_exchange_inner_response);
-  response->SetWasInPrefetchCache(info.was_in_prefetch_cache);
-  response->SetRecursivePrefetchToken(info.recursive_prefetch_token);
+      head.is_signed_exchange_inner_response);
+  response->SetWasInPrefetchCache(head.was_in_prefetch_cache);
+  response->SetRecursivePrefetchToken(head.recursive_prefetch_token);
 
-  SetSecurityStyleAndDetails(url, info, response, report_security_info);
+  SetSecurityStyleAndDetails(url, head, response, report_security_info);
 
   // If there's no received headers end time, don't set load timing.  This is
   // the case for non-HTTP requests, requests that don't go over the wire, and
   // certain error cases.
-  if (!info.load_timing.receive_headers_end.is_null()) {
+  if (!head.load_timing.receive_headers_end.is_null()) {
     WebURLLoadTiming timing;
-    PopulateURLLoadTiming(info.load_timing, &timing);
-    timing.SetWorkerStart(info.service_worker_start_time);
-    timing.SetWorkerReady(info.service_worker_ready_time);
+    PopulateURLLoadTiming(head.load_timing, &timing);
+    timing.SetWorkerStart(head.service_worker_start_time);
+    timing.SetWorkerReady(head.service_worker_ready_time);
     response->SetLoadTiming(timing);
   }
 
-  if (info.raw_request_response_info.get()) {
+  if (head.raw_request_response_info.get()) {
     WebHTTPLoadInfo load_info;
 
     load_info.SetHTTPStatusCode(
-        info.raw_request_response_info->http_status_code);
+        head.raw_request_response_info->http_status_code);
     load_info.SetHTTPStatusText(WebString::FromLatin1(
-        info.raw_request_response_info->http_status_text));
+        head.raw_request_response_info->http_status_text));
 
     load_info.SetRequestHeadersText(WebString::FromLatin1(
-        info.raw_request_response_info->request_headers_text));
+        head.raw_request_response_info->request_headers_text));
     load_info.SetResponseHeadersText(WebString::FromLatin1(
-        info.raw_request_response_info->response_headers_text));
-    const HeadersVector& request_headers =
-        info.raw_request_response_info->request_headers;
-    for (auto it = request_headers.begin(); it != request_headers.end(); ++it) {
-      load_info.AddRequestHeader(WebString::FromLatin1(it->first),
-                                 WebString::FromLatin1(it->second));
+        head.raw_request_response_info->response_headers_text));
+    for (auto& header : head.raw_request_response_info->request_headers) {
+      load_info.AddRequestHeader(WebString::FromLatin1(header->key),
+                                 WebString::FromLatin1(header->value));
     }
-    const HeadersVector& response_headers =
-        info.raw_request_response_info->response_headers;
-    for (auto it = response_headers.begin(); it != response_headers.end();
-         ++it) {
-      load_info.AddResponseHeader(WebString::FromLatin1(it->first),
-                                  WebString::FromLatin1(it->second));
+    for (auto& header : head.raw_request_response_info->response_headers) {
+      load_info.AddResponseHeader(WebString::FromLatin1(header->key),
+                                  WebString::FromLatin1(header->value));
     }
     response->SetHTTPLoadInfo(load_info);
   }
 
-  const net::HttpResponseHeaders* headers = info.headers.get();
+  const net::HttpResponseHeaders* headers = head.headers.get();
   if (!headers)
     return;
 
@@ -1204,10 +1200,10 @@
     return;
   }
 
-  PopulateURLResponse(final_url, sync_load_response.info, &response,
+  PopulateURLResponse(final_url, *sync_load_response.head, &response,
                       request.ReportRawHeaders(), context_->request_id());
-  encoded_data_length = sync_load_response.info.encoded_data_length;
-  encoded_body_length = sync_load_response.info.encoded_body_length;
+  encoded_data_length = sync_load_response.head->encoded_data_length;
+  encoded_body_length = sync_load_response.head->encoded_body_length;
   if (sync_load_response.downloaded_blob) {
     downloaded_blob = blink::WebBlobInfo(
         WebString::FromLatin1(sync_load_response.downloaded_blob->uuid),
diff --git a/content/renderer/loader/web_url_loader_impl.h b/content/renderer/loader/web_url_loader_impl.h
index 15cfcaba..27d56c26 100644
--- a/content/renderer/loader/web_url_loader_impl.h
+++ b/content/renderer/loader/web_url_loader_impl.h
@@ -15,14 +15,11 @@
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
+#include "services/network/public/mojom/url_response_head.mojom-forward.h"
 #include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
 #include "third_party/blink/public/platform/web_url_loader_factory.h"
 
-namespace network {
-struct ResourceResponseInfo;
-}
-
 namespace content {
 
 class ResourceDispatcher;
@@ -60,7 +57,7 @@
   ~WebURLLoaderImpl() override;
 
   static void PopulateURLResponse(const blink::WebURL& url,
-                                  const network::ResourceResponseInfo& info,
+                                  const network::mojom::URLResponseHead& head,
                                   blink::WebURLResponse* response,
                                   bool report_security_info,
                                   int request_id);
diff --git a/content/renderer/loader/web_url_loader_impl_unittest.cc b/content/renderer/loader/web_url_loader_impl_unittest.cc
index ddb3ab9..d0e11dc 100644
--- a/content/renderer/loader/web_url_loader_impl_unittest.cc
+++ b/content/renderer/loader/web_url_loader_impl_unittest.cc
@@ -35,8 +35,8 @@
 #include "net/test/cert_test_util.h"
 #include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/redirect_info.h"
-#include "services/network/public/cpp/resource_response_info.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
+#include "services/network/public/mojom/url_response_head.mojom.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/public/platform/web_data.h"
@@ -89,7 +89,7 @@
       std::unique_ptr<NavigationResponseOverrideParameters>
           navigation_response_override_params) override {
     EXPECT_FALSE(peer_);
-    if (sync_load_response_.info.encoded_body_length != -1)
+    if (sync_load_response_.head->encoded_body_length != -1)
       EXPECT_TRUE(is_sync);
     peer_ = std::move(peer);
     url_ = request->url;
@@ -322,7 +322,8 @@
     redirect_info.new_method = "GET";
     redirect_info.new_url = GURL(kTestURL);
     redirect_info.new_site_for_cookies = GURL(kTestURL);
-    peer()->OnReceivedRedirect(redirect_info, network::ResourceResponseInfo());
+    peer()->OnReceivedRedirect(redirect_info,
+                               network::mojom::URLResponseHead::New());
     EXPECT_TRUE(client()->did_receive_redirect());
   }
 
@@ -333,13 +334,14 @@
     redirect_info.new_method = "GET";
     redirect_info.new_url = GURL(kTestHTTPSURL);
     redirect_info.new_site_for_cookies = GURL(kTestHTTPSURL);
-    peer()->OnReceivedRedirect(redirect_info, network::ResourceResponseInfo());
+    peer()->OnReceivedRedirect(redirect_info,
+                               network::mojom::URLResponseHead::New());
     EXPECT_TRUE(client()->did_receive_redirect());
   }
 
   void DoReceiveResponse() {
     EXPECT_FALSE(client()->did_receive_response());
-    peer()->OnReceivedResponse(network::ResourceResponseInfo());
+    peer()->OnReceivedResponse(network::mojom::URLResponseHead::New());
     EXPECT_TRUE(client()->did_receive_response());
   }
 
@@ -479,8 +481,7 @@
 
   response_override = dispatcher()->TakeNavigationResponseOverrideParams();
   ASSERT_TRUE(response_override);
-  peer()->OnReceivedResponse(
-      network::ResourceResponseHead(response_override->response_head));
+  peer()->OnReceivedResponse(std::move(response_override->response_head));
 
   EXPECT_TRUE(client()->did_receive_response());
 
@@ -512,12 +513,12 @@
 
   for (const auto& test : cases) {
     SCOPED_TRACE(test.ip);
-    network::ResourceResponseInfo info;
+    network::mojom::URLResponseHead head;
     net::IPAddress address;
     ASSERT_TRUE(address.AssignFromIPLiteral(test.ip));
-    info.remote_endpoint = net::IPEndPoint(address, 443);
+    head.remote_endpoint = net::IPEndPoint(address, 443);
     blink::WebURLResponse response;
-    WebURLLoaderImpl::PopulateURLResponse(url, info, &response, true, -1);
+    WebURLLoaderImpl::PopulateURLResponse(url, head, &response, true, -1);
     EXPECT_EQ(test.expected, response.RemoteIPAddress().Utf8());
   };
 }
@@ -541,10 +542,10 @@
   net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_2,
                                      &ssl_info.connection_status);
 
-  network::ResourceResponseInfo info;
-  info.ssl_info = ssl_info;
+  network::mojom::URLResponseHead head;
+  head.ssl_info = ssl_info;
   blink::WebURLResponse web_url_response;
-  WebURLLoaderImpl::PopulateURLResponse(url, info, &web_url_response, true, -1);
+  WebURLLoaderImpl::PopulateURLResponse(url, head, &web_url_response, true, -1);
 
   base::Optional<blink::WebURLResponse::WebSecurityDetails> security_details =
       web_url_response.SecurityDetailsForTesting();
@@ -579,10 +580,10 @@
   net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_2,
                                      &ssl_info.connection_status);
   ssl_info.cert = certs[0];
-  network::ResourceResponseInfo info;
-  info.ssl_info = ssl_info;
+  network::mojom::URLResponseHead head;
+  head.ssl_info = ssl_info;
   blink::WebURLResponse web_url_response;
-  WebURLLoaderImpl::PopulateURLResponse(url, info, &web_url_response, true, -1);
+  WebURLLoaderImpl::PopulateURLResponse(url, head, &web_url_response, true, -1);
 
   base::Optional<blink::WebURLResponse::WebSecurityDetails> security_details =
       web_url_response.SecurityDetailsForTesting();
@@ -615,8 +616,8 @@
   sync_load_response.url = url;
   sync_load_response.data = kBodyData;
   ASSERT_EQ(17u, sync_load_response.data.size());
-  sync_load_response.info.encoded_body_length = kEncodedBodyLength;
-  sync_load_response.info.encoded_data_length = kEncodedDataLength;
+  sync_load_response.head->encoded_body_length = kEncodedBodyLength;
+  sync_load_response.head->encoded_data_length = kEncodedDataLength;
   dispatcher()->set_sync_load_response(std::move(sync_load_response));
 
   blink::WebURLResponse response;
diff --git a/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc b/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc
index 6eb6571..6d0569f 100644
--- a/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc
+++ b/content/renderer/media/webrtc/media_stream_video_webrtc_sink.cc
@@ -17,12 +17,12 @@
 #include "base/synchronization/lock.h"
 #include "base/timer/timer.h"
 #include "content/public/common/content_features.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "media/base/limits.h"
 #include "third_party/blink/public/platform/modules/peerconnection/webrtc_video_track_source.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_video_track.h"
 #include "third_party/blink/public/web/modules/mediastream/web_media_stream_utils.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/webrtc/api/video_track_source_proxy.h"
 
 namespace content {
@@ -210,7 +210,7 @@
 
 MediaStreamVideoWebRtcSink::MediaStreamVideoWebRtcSink(
     const blink::WebMediaStreamTrack& track,
-    PeerConnectionDependencyFactory* factory,
+    blink::PeerConnectionDependencyFactory* factory,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
   blink::MediaStreamVideoTrack* video_track =
       blink::MediaStreamVideoTrack::GetVideoTrack(track);
diff --git a/content/renderer/media/webrtc/media_stream_video_webrtc_sink.h b/content/renderer/media/webrtc/media_stream_video_webrtc_sink.h
index e253aa0..a0f560ad 100644
--- a/content/renderer/media/webrtc/media_stream_video_webrtc_sink.h
+++ b/content/renderer/media/webrtc/media_stream_video_webrtc_sink.h
@@ -19,13 +19,12 @@
 
 namespace blink {
 class MediaStreamVideoTrack;
+class PeerConnectionDependencyFactory;
 class WebRtcVideoTrackSource;
 }
 
 namespace content {
 
-class PeerConnectionDependencyFactory;
-
 // MediaStreamVideoWebRtcSink is an adapter between a
 // blink::MediaStreamVideoTrack object and a webrtc VideoTrack that is
 // currently sent on a PeerConnection.
@@ -40,7 +39,7 @@
  public:
   MediaStreamVideoWebRtcSink(
       const blink::WebMediaStreamTrack& track,
-      PeerConnectionDependencyFactory* factory,
+      blink::PeerConnectionDependencyFactory* factory,
       scoped_refptr<base::SingleThreadTaskRunner> task_runner);
   ~MediaStreamVideoWebRtcSink() override;
 
diff --git a/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
index 008c53a..60269a0c 100644
--- a/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
+++ b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.cc
@@ -326,7 +326,8 @@
 };
 
 MockPeerConnectionDependencyFactory::MockPeerConnectionDependencyFactory()
-    : PeerConnectionDependencyFactory(/*create_p2p_socket_dispatcher =*/false),
+    : blink::PeerConnectionDependencyFactory(
+          /*create_p2p_socket_dispatcher =*/false),
       signaling_thread_("MockPCFactory WebRtc Signaling Thread") {
   EnsureWebRtcAudioDeviceImpl();
   CHECK(signaling_thread_.Start());
diff --git a/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h
index 61e25246..dfc03efd 100644
--- a/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h
+++ b/content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h
@@ -12,7 +12,7 @@
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/single_thread_task_runner.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/webrtc/api/media_stream_interface.h"
 
 namespace content {
@@ -130,7 +130,7 @@
 // A mock factory for creating different objects for
 // RTC PeerConnections.
 class MockPeerConnectionDependencyFactory
-     : public PeerConnectionDependencyFactory {
+    : public blink::PeerConnectionDependencyFactory {
  public:
   MockPeerConnectionDependencyFactory();
   ~MockPeerConnectionDependencyFactory() override;
diff --git a/content/renderer/media/webrtc/rtc_certificate_generator.cc b/content/renderer/media/webrtc/rtc_certificate_generator.cc
index a57e278..27295e85 100644
--- a/content/renderer/media/webrtc/rtc_certificate_generator.cc
+++ b/content/renderer/media/webrtc/rtc_certificate_generator.cc
@@ -12,9 +12,8 @@
 #include "base/memory/ref_counted.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
-#include "content/renderer/render_thread_impl.h"
 #include "media/media_buildflags.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/webrtc/api/scoped_refptr.h"
 #include "third_party/webrtc/rtc_base/rtc_certificate.h"
 #include "third_party/webrtc/rtc_base/rtc_certificate_generator.h"
@@ -108,8 +107,8 @@
     blink::WebRTCCertificateCallback completion_callback,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
   DCHECK(WebRTCKeyParamsToKeyParams(key_params).IsValid());
-  PeerConnectionDependencyFactory* pc_dependency_factory =
-      RenderThreadImpl::current()->GetPeerConnectionDependencyFactory();
+  auto* pc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   pc_dependency_factory->EnsureInitialized();
 
   scoped_refptr<RTCCertificateGeneratorRequest> request =
diff --git a/content/renderer/media/webrtc/rtc_peer_connection_handler.cc b/content/renderer/media/webrtc/rtc_peer_connection_handler.cc
index 13c303e7..28489fe52 100644
--- a/content/renderer/media/webrtc/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/webrtc/rtc_peer_connection_handler.cc
@@ -29,7 +29,6 @@
 #include "base/unguessable_token.h"
 #include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "content/renderer/media/webrtc/peer_connection_tracker.h"
 #include "content/renderer/media/webrtc/webrtc_set_description_observer.h"
 #include "content/renderer/render_thread_impl.h"
@@ -53,6 +52,7 @@
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/platform/web_url.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_device_impl.h"
 #include "third_party/webrtc/api/rtc_event_log_output.h"
 #include "third_party/webrtc/pc/media_session.h"
@@ -973,7 +973,7 @@
 
 RTCPeerConnectionHandler::RTCPeerConnectionHandler(
     blink::WebRTCPeerConnectionHandlerClient* client,
-    PeerConnectionDependencyFactory* dependency_factory,
+    blink::PeerConnectionDependencyFactory* dependency_factory,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner)
     : initialize_called_(false),
       client_(client),
diff --git a/content/renderer/media/webrtc/rtc_peer_connection_handler.h b/content/renderer/media/webrtc/rtc_peer_connection_handler.h
index e8861b1..64a7156 100644
--- a/content/renderer/media/webrtc/rtc_peer_connection_handler.h
+++ b/content/renderer/media/webrtc/rtc_peer_connection_handler.h
@@ -34,6 +34,7 @@
 #include "third_party/webrtc/api/stats/rtc_stats_collector_callback.h"
 
 namespace blink {
+class PeerConnectionDependencyFactory;
 class WebLocalFrame;
 class WebRTCAnswerOptions;
 class WebRTCLegacyStats;
@@ -43,7 +44,6 @@
 
 namespace content {
 
-class PeerConnectionDependencyFactory;
 class PeerConnectionTracker;
 class SetLocalDescriptionRequest;
 
@@ -95,7 +95,7 @@
  public:
   RTCPeerConnectionHandler(
       blink::WebRTCPeerConnectionHandlerClient* client,
-      PeerConnectionDependencyFactory* dependency_factory,
+      blink::PeerConnectionDependencyFactory* dependency_factory,
       scoped_refptr<base::SingleThreadTaskRunner> task_runner);
   ~RTCPeerConnectionHandler() override;
 
@@ -352,7 +352,7 @@
 
   // |dependency_factory_| is a raw pointer, and is valid for the lifetime of
   // RenderThreadImpl.
-  PeerConnectionDependencyFactory* const dependency_factory_;
+  blink::PeerConnectionDependencyFactory* const dependency_factory_;
 
   blink::WebLocalFrame* frame_ = nullptr;
 
diff --git a/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc
index 786fd539..58ccdff 100644
--- a/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc
+++ b/content/renderer/media/webrtc/rtc_peer_connection_handler_unittest.cc
@@ -83,20 +83,12 @@
 }
 
 // Test blink::Platform implementation that overrides the known methods needed
-// by the tests, including creation of WebRtcAudioDevice and
-// AudioCapturerSource instances.
+// by the tests, including creation of AudioCapturerSource instances.
 //
 // TODO(crbug.com/704136): When this test moves to blink/renderer/ it should
 // inherit from TestingPlatformSupport and use ScopedTestingPlatformSupport.
-class WebRtcAudioDeviceTestingPlatformSupport : public blink::Platform {
+class AudioCapturerSourceTestingPlatformSupport : public blink::Platform {
  public:
-  WebRtcAudioDeviceTestingPlatformSupport(
-      MockPeerConnectionDependencyFactory* pc_factory)
-      : pc_factory_(pc_factory) {}
-  blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override {
-    return pc_factory_->GetWebRtcAudioDevice();
-  }
-
   scoped_refptr<base::SingleThreadTaskRunner> GetIOTaskRunner() const override {
     return ChildProcess::current() ? ChildProcess::current()->io_task_runner()
                                    : nullptr;
@@ -109,9 +101,6 @@
     EXPECT_EQ(nullptr, web_frame);
     return AudioDeviceFactory::NewAudioCapturerSource(MSG_ROUTING_NONE, params);
   }
-
- private:
-  MockPeerConnectionDependencyFactory* pc_factory_;
 };
 
 class MockRTCStatsResponse : public LocalRTCStatsResponse {
@@ -279,7 +268,7 @@
  public:
   RTCPeerConnectionHandlerUnderTest(
       WebRTCPeerConnectionHandlerClient* client,
-      PeerConnectionDependencyFactory* dependency_factory)
+      blink::PeerConnectionDependencyFactory* dependency_factory)
       : RTCPeerConnectionHandler(
             client,
             dependency_factory,
@@ -304,9 +293,8 @@
     mock_dependency_factory_.reset(new MockPeerConnectionDependencyFactory());
 
     platform_original_ = blink::Platform::Current();
-    webrtc_audio_device_platform_support_.reset(
-        new WebRtcAudioDeviceTestingPlatformSupport(
-            mock_dependency_factory_.get()));
+    webrtc_audio_device_platform_support_ =
+        std::make_unique<AudioCapturerSourceTestingPlatformSupport>();
     blink::Platform::SetCurrentPlatformForTesting(
         webrtc_audio_device_platform_support_.get());
 
@@ -596,7 +584,7 @@
   // ThreadPool.
   base::test::TaskEnvironment task_environment_;
   ChildProcess child_process_;
-  std::unique_ptr<WebRtcAudioDeviceTestingPlatformSupport>
+  std::unique_ptr<AudioCapturerSourceTestingPlatformSupport>
       webrtc_audio_device_platform_support_;
   blink::Platform* platform_original_ = nullptr;
   std::unique_ptr<MockWebRTCPeerConnectionHandlerClient> mock_client_;
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.cc b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.cc
index 70c2325e..48ee044 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.cc
+++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.cc
@@ -6,16 +6,16 @@
 
 #include "base/bind.h"
 #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "third_party/blink/public/platform/modules/mediastream/media_stream_audio_track.h"
 #include "third_party/blink/public/web/modules/mediastream/processed_local_audio_source.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 
 namespace content {
 
 // static
 scoped_refptr<WebRtcMediaStreamTrackAdapter>
 WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter(
-    PeerConnectionDependencyFactory* factory,
+    blink::PeerConnectionDependencyFactory* factory,
     const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
     const blink::WebMediaStreamTrack& web_track) {
   DCHECK(factory);
@@ -36,7 +36,7 @@
 // static
 scoped_refptr<WebRtcMediaStreamTrackAdapter>
 WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter(
-    PeerConnectionDependencyFactory* factory,
+    blink::PeerConnectionDependencyFactory* factory,
     const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
     const scoped_refptr<webrtc::MediaStreamTrackInterface>& webrtc_track) {
   DCHECK(factory);
@@ -57,7 +57,7 @@
 }
 
 WebRtcMediaStreamTrackAdapter::WebRtcMediaStreamTrackAdapter(
-    PeerConnectionDependencyFactory* factory,
+    blink::PeerConnectionDependencyFactory* factory,
     const scoped_refptr<base::SingleThreadTaskRunner>& main_thread)
     : factory_(factory),
       main_thread_(main_thread),
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h
index d14c01c..badb679 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h
+++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h
@@ -18,9 +18,12 @@
 #include "third_party/blink/public/web/modules/mediastream/remote_media_stream_track_adapter.h"
 #include "third_party/webrtc/api/media_stream_interface.h"
 
+namespace blink {
+class PeerConnectionDependencyFactory;
+}
+
 namespace content {
 
-class PeerConnectionDependencyFactory;
 struct WebRtcMediaStreamTrackAdapterTraits;
 
 // This is a mapping between a webrtc and blink media stream track. It takes
@@ -36,7 +39,7 @@
   // Invoke on the main thread. The returned adapter is fully initialized, see
   // |is_initialized|. The adapter will keep a reference to the |main_thread|.
   static scoped_refptr<WebRtcMediaStreamTrackAdapter> CreateLocalTrackAdapter(
-      PeerConnectionDependencyFactory* factory,
+      blink::PeerConnectionDependencyFactory* factory,
       const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
       const blink::WebMediaStreamTrack& web_track);
   // Invoke on the webrtc signaling thread. Initialization finishes on the main
@@ -44,7 +47,7 @@
   // in posts to the main thread, see |is_initialized|. The adapter will keep
   // references to the |main_thread| and |webrtc_track|.
   static scoped_refptr<WebRtcMediaStreamTrackAdapter> CreateRemoteTrackAdapter(
-      PeerConnectionDependencyFactory* factory,
+      blink::PeerConnectionDependencyFactory* factory,
       const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
       const scoped_refptr<webrtc::MediaStreamTrackInterface>& webrtc_track);
   // Must be called before all external references are released (i.e. before
@@ -83,7 +86,7 @@
   friend struct WebRtcMediaStreamTrackAdapterTraits;
 
   WebRtcMediaStreamTrackAdapter(
-      PeerConnectionDependencyFactory* factory,
+      blink::PeerConnectionDependencyFactory* factory,
       const scoped_refptr<base::SingleThreadTaskRunner>& main_thread);
   virtual ~WebRtcMediaStreamTrackAdapter();
 
@@ -112,7 +115,7 @@
 
   // Pointer to a |PeerConnectionDependencyFactory| owned by the |RenderThread|.
   // It's valid for the lifetime of |RenderThread|.
-  PeerConnectionDependencyFactory* const factory_;
+  blink::PeerConnectionDependencyFactory* const factory_;
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
 
   // Part of the initialization of remote tracks occurs on the signaling thread.
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc
index db6b0c604..53941f18 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc
+++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 
 namespace content {
 
@@ -72,7 +72,7 @@
 }
 
 WebRtcMediaStreamTrackAdapterMap::WebRtcMediaStreamTrackAdapterMap(
-    PeerConnectionDependencyFactory* const factory,
+    blink::PeerConnectionDependencyFactory* const factory,
     scoped_refptr<base::SingleThreadTaskRunner> main_thread)
     : factory_(factory), main_thread_(std::move(main_thread)) {
   DCHECK(factory_);
diff --git a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h
index 024e8fc..2c25e10 100644
--- a/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h
+++ b/content/renderer/media/webrtc/webrtc_media_stream_track_adapter_map.h
@@ -16,9 +16,11 @@
 #include "third_party/blink/public/platform/web_media_stream_track.h"
 #include "third_party/webrtc/api/media_stream_interface.h"
 
-namespace content {
-
+namespace blink {
 class PeerConnectionDependencyFactory;
+}
+
+namespace content {
 
 // A map and owner of |WebRtcMediaStreamTrackAdapter|s. It takes care of
 // creating, initializing and disposing track adapters independently of media
@@ -72,7 +74,7 @@
 
   // Must be invoked on the main thread.
   WebRtcMediaStreamTrackAdapterMap(
-      PeerConnectionDependencyFactory* const factory,
+      blink::PeerConnectionDependencyFactory* const factory,
       scoped_refptr<base::SingleThreadTaskRunner> main_thread);
 
   // Gets a new reference to the local track adapter, or null if no such adapter
@@ -140,7 +142,7 @@
 
   // Pointer to a |PeerConnectionDependencyFactory| owned by the |RenderThread|.
   // It's valid for the lifetime of |RenderThread|.
-  PeerConnectionDependencyFactory* const factory_;
+  blink::PeerConnectionDependencyFactory* const factory_;
   scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
 
   mutable base::Lock lock_;
diff --git a/content/renderer/p2p/OWNERS b/content/renderer/p2p/OWNERS
deleted file mode 100644
index 70573c4..0000000
--- a/content/renderer/p2p/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-sergeyu@chromium.org
-juberti@chromium.org
-
-# COMPONENT: Blink>WebRTC
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index cc6e0f1..93574a3f 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -502,9 +502,8 @@
     for (const auto& exchange : commit_params.prefetched_signed_exchanges) {
       blink::WebURLResponse web_response;
       WebURLLoaderImpl::PopulateURLResponse(
-          exchange->inner_url,
-          network::ResourceResponseHead(exchange->inner_response),
-          &web_response, false /* report_security_info*/, -1 /* request_id */);
+          exchange->inner_url, *exchange->inner_response, &web_response,
+          false /* report_security_info*/, -1 /* request_id */);
       navigation_params->prefetched_signed_exchanges.emplace_back(
           std::make_unique<
               blink::WebNavigationParams::PrefetchedSignedExchange>(
@@ -934,10 +933,6 @@
   internal_data->set_request_id(request_id);
 
   if (head) {
-    if (head->headers)
-      internal_data->set_http_status_code(head->headers->response_code());
-    else if (common_params.url.SchemeIs(url::kDataScheme))
-      internal_data->set_http_status_code(200);
     document_state->set_was_fetched_via_spdy(head->was_fetched_via_spdy);
     document_state->set_was_alpn_negotiated(head->was_alpn_negotiated);
     document_state->set_alpn_negotiated_protocol(
@@ -3015,36 +3010,6 @@
     observer.DidFailProvisionalLoad();
 }
 
-void RenderFrameImpl::LoadNavigationErrorPage(
-    WebDocumentLoader* document_loader,
-    const WebURLError& error,
-    const base::Optional<std::string>& error_page_content,
-    bool replace_current_item) {
-  std::string error_html;
-  if (error_page_content) {
-    error_html = error_page_content.value();
-  } else {
-    GetContentClient()->renderer()->PrepareErrorPage(
-        this, error, document_loader->HttpMethod().Ascii(), &error_html);
-  }
-
-  // Make sure we never show errors in view source mode.
-  frame_->EnableViewSourceMode(false);
-
-  auto navigation_params = WebNavigationParams::CreateForErrorPage(
-      document_loader, error_html, GURL(kUnreachableWebDataURL), error.url(),
-      error.reason());
-  if (replace_current_item)
-    navigation_params->frame_load_type = WebFrameLoadType::kReplaceCurrentItem;
-  navigation_params->service_worker_network_provider =
-      ServiceWorkerNetworkProviderForFrame::CreateInvalidInstance();
-
-  // The load of the error page can result in this frame being removed.
-  frame_->CommitNavigation(std::move(navigation_params), BuildDocumentState(),
-                           base::DoNothing::Once());
-  // Do not access |this| or |frame_| without checking weak self.
-}
-
 void RenderFrameImpl::DidMeaningfulLayout(
     blink::WebMeaningfulLayout layout_type) {
   for (auto& observer : observers_)
@@ -5026,30 +4991,34 @@
   // If this is an empty document with an http status code indicating an error,
   // we may want to display our own error page, so the user doesn't end up
   // with an unexplained blank page.
-  if (!document_is_empty)
+  if (!document_is_empty || !IsMainFrame())
     return;
 
   // Display error page instead of a blank page, if appropriate.
-  InternalDocumentStateData* internal_data =
-      InternalDocumentStateData::FromDocumentLoader(
-          frame_->GetDocumentLoader());
-  int http_status_code = internal_data->http_status_code();
-  if (GetContentClient()->renderer()->HasErrorPage(http_status_code)) {
-    WebDocumentLoader* document_loader = frame_->GetDocumentLoader();
-    WebURL unreachable_url = frame_->GetDocument().Url();
-    std::string error_html;
-    GetContentClient()->renderer()->PrepareErrorPageForHttpStatusError(
-        this, unreachable_url, document_loader->HttpMethod().Ascii(),
-        http_status_code, &error_html);
-    // This call may run scripts, e.g. via the beforeunload event, and possibly
-    // delete |this|.
-    LoadNavigationErrorPage(document_loader,
-                            WebURLError(net::ERR_FAILED, unreachable_url),
-                            error_html, true /* replace_current_item */);
-    if (!weak_self)
-      return;
-    // Do not use |this| or |frame_| here without checking |weak_self|.
-  }
+  WebDocumentLoader* document_loader = frame_->GetDocumentLoader();
+  int http_status_code = document_loader->GetResponse().HttpStatusCode();
+  if (!GetContentClient()->renderer()->HasErrorPage(http_status_code))
+    return;
+
+  WebURL unreachable_url = frame_->GetDocument().Url();
+  std::string error_html;
+  GetContentClient()->renderer()->PrepareErrorPageForHttpStatusError(
+      this, unreachable_url, document_loader->HttpMethod().Ascii(),
+      http_status_code, &error_html);
+  // Make sure we never show errors in view source mode.
+  frame_->EnableViewSourceMode(false);
+
+  auto navigation_params = WebNavigationParams::CreateForErrorPage(
+      document_loader, error_html, GURL(kUnreachableWebDataURL),
+      unreachable_url, net::ERR_FAILED);
+  navigation_params->frame_load_type = WebFrameLoadType::kReplaceCurrentItem;
+  navigation_params->service_worker_network_provider =
+      ServiceWorkerNetworkProviderForFrame::CreateInvalidInstance();
+
+  frame_->CommitNavigation(std::move(navigation_params), BuildDocumentState(),
+                           base::DoNothing::Once());
+  // WARNING: The previous call may have have deleted |this|.
+  // Do not use |this| or |frame_| here without checking |weak_self|.
 }
 
 void RenderFrameImpl::RunScriptsAtDocumentIdle() {
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 382574c0..fa140c99 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -1233,13 +1233,6 @@
                            const base::string16& default_value,
                            base::string16* result);
 
-  // Loads the appropriate error page for the specified failure into the frame.
-  void LoadNavigationErrorPage(
-      blink::WebDocumentLoader* document_loader,
-      const blink::WebURLError& error,
-      const base::Optional<std::string>& error_page_content,
-      bool replace_current_item);
-
   base::Value GetJavaScriptExecutionResult(v8::Local<v8::Value> result);
 
   void InitializeMediaStreamDeviceObserver();
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index b0a7f8037..061c5be 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -92,9 +92,7 @@
 #include "content/renderer/media/audio/audio_renderer_mixer_manager.h"
 #include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h"
 #include "content/renderer/media/render_media_client.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "content/renderer/media/webrtc/peer_connection_tracker.h"
-#include "content/renderer/media/webrtc/rtc_peer_connection_handler.h"
 #include "content/renderer/net_info_helper.h"
 #include "content/renderer/render_frame_proxy.h"
 #include "content/renderer/render_process_impl.h"
@@ -754,9 +752,6 @@
       new PeerConnectionTracker(main_thread_runner()));
   AddObserver(peer_connection_tracker_.get());
 
-  peer_connection_factory_.reset(new PeerConnectionDependencyFactory(
-      /*create_p2p_socket_dispatcher =*/true));
-
   unfreezable_message_filter_ = new UnfreezableMessageFilter(this);
   AddFilter(unfreezable_message_filter_.get());
 
@@ -2018,11 +2013,6 @@
   return &associated_interfaces_;
 }
 
-PeerConnectionDependencyFactory*
-RenderThreadImpl::GetPeerConnectionDependencyFactory() {
-  return peer_connection_factory_.get();
-}
-
 mojom::RenderMessageFilter* RenderThreadImpl::render_message_filter() {
   if (!render_message_filter_)
     GetChannel()->GetRemoteAssociatedInterface(&render_message_filter_);
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index b63ce36..bc7e43d 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -103,7 +103,6 @@
 class CategorizedWorkerPool;
 class GpuVideoAcceleratorFactoriesImpl;
 class LowMemoryModeController;
-class PeerConnectionDependencyFactory;
 class PeerConnectionTracker;
 class RenderThreadObserver;
 class RendererBlinkPlatformImpl;
@@ -292,9 +291,6 @@
     return browser_plugin_manager_.get();
   }
 
-  // Returns a factory used for creating RTC PeerConnection objects.
-  PeerConnectionDependencyFactory* GetPeerConnectionDependencyFactory();
-
   PeerConnectionTracker* peer_connection_tracker() {
     return peer_connection_tracker_.get();
   }
@@ -556,8 +552,6 @@
 
   std::unique_ptr<BrowserPluginManager> browser_plugin_manager_;
 
-  std::unique_ptr<PeerConnectionDependencyFactory> peer_connection_factory_;
-
   // This is used to communicate to the browser process the status
   // of all the peer connections created in the renderer.
   std::unique_ptr<PeerConnectionTracker> peer_connection_tracker_;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 38eeba6..4f79fb0 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -72,7 +72,6 @@
 #include "content/renderer/internal_document_state_data.h"
 #include "content/renderer/loader/request_extra_data.h"
 #include "content/renderer/media/audio/audio_device_factory.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "content/renderer/media/webrtc/rtc_peer_connection_handler.h"
 #include "content/renderer/render_frame_impl.h"
 #include "content/renderer/render_frame_proxy.h"
@@ -474,6 +473,9 @@
     RenderWidget::ShowCallback show_callback,
     scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
   DCHECK(RenderThread::IsMainThread());
+  // We have either a main frame or a proxy routing id.
+  DCHECK_NE(params->main_frame_routing_id != MSG_ROUTING_NONE,
+            params->proxy_routing_id != MSG_ROUTING_NONE);
 
   RenderThread::Get()->AddRoute(routing_id_, this);
 
@@ -494,16 +496,16 @@
   g_view_map.Get().insert(std::make_pair(webview(), this));
   g_routing_id_view_map.Get().insert(std::make_pair(GetRoutingID(), this));
 
-  webview()->SetDisplayMode(params->visual_properties.display_mode);
+  bool local_main_frame = params->main_frame_routing_id != MSG_ROUTING_NONE;
+
+  // TODO(danakj): Put this in with making the RenderFrame? Does order matter?
+  if (local_main_frame)
+    webview()->SetDisplayMode(params->visual_properties.display_mode);
 
   ApplyWebPreferences(webkit_preferences_, webview());
   ApplyCommandLineToSettings(webview()->GetSettings());
 
-  // We have either a main frame or a proxy routing id.
-  DCHECK_NE(params->main_frame_routing_id != MSG_ROUTING_NONE,
-            params->proxy_routing_id != MSG_ROUTING_NONE);
-
-  if (params->main_frame_routing_id != MSG_ROUTING_NONE) {
+  if (local_main_frame) {
     main_render_frame_ = RenderFrameImpl::CreateMainFrame(
         this, compositor_deps, opener_frame, &params, std::move(show_callback));
   } else {
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 441fed3..528eccc 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -47,10 +47,8 @@
 #include "content/renderer/media/audio/audio_device_factory.h"
 #include "content/renderer/media/audio_decoder.h"
 #include "content/renderer/media/renderer_webaudiodevice_impl.h"
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "content/renderer/media/webrtc/peer_connection_tracker.h"
 #include "content/renderer/media/webrtc/rtc_peer_connection_handler.h"
-#include "content/renderer/p2p/port_allocator.h"
 #include "content/renderer/render_frame_impl.h"
 #include "content/renderer/render_thread_impl.h"
 #include "content/renderer/storage_util.h"
@@ -96,6 +94,7 @@
 #include "third_party/blink/public/platform/web_url_loader_factory.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/public/platform/web_vector.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/public/web/web_user_media_request.h"
 #include "third_party/sqlite/sqlite3.h"
@@ -117,7 +116,6 @@
 #include "base/win/windows_version.h"
 #endif
 
-#include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
 #include "content/renderer/media/webrtc/rtc_certificate_generator.h"
 #include "third_party/blink/public/platform/modules/mediastream/webrtc_uma_histograms.h"
 
@@ -541,18 +539,13 @@
   // PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler
   // when it the file gets Onion soup'ed.
 
-  RenderThreadImpl* render_thread = RenderThreadImpl::current();
-  DCHECK(render_thread);
-  if (!render_thread)
-    return nullptr;
-
   // Save histogram data so we can see how much PeerConnection is used.
   // The histogram counts the number of calls to the JS API
   // RTCPeerConnection.
   UpdateWebRTCMethodCount(blink::WebRTCAPIName::kRTCPeerConnection);
 
-  PeerConnectionDependencyFactory* rtc_dependency_factory =
-      render_thread->GetPeerConnectionDependencyFactory();
+  auto* rtc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   return std::make_unique<RTCPeerConnectionHandler>(
       client, rtc_dependency_factory, task_runner);
 }
@@ -568,29 +561,23 @@
 
 scoped_refptr<base::SingleThreadTaskRunner>
 RendererBlinkPlatformImpl::GetWebRtcWorkerThread() {
-  RenderThreadImpl* render_thread = RenderThreadImpl::current();
-  DCHECK(render_thread);
-  PeerConnectionDependencyFactory* rtc_dependency_factory =
-      render_thread->GetPeerConnectionDependencyFactory();
+  auto* rtc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   rtc_dependency_factory->EnsureInitialized();
   return rtc_dependency_factory->GetWebRtcWorkerThread();
 }
 
 rtc::Thread* RendererBlinkPlatformImpl::GetWebRtcWorkerThreadRtcThread() {
-  RenderThreadImpl* render_thread = RenderThreadImpl::current();
-  DCHECK(render_thread);
-  PeerConnectionDependencyFactory* rtc_dependency_factory =
-      render_thread->GetPeerConnectionDependencyFactory();
+  auto* rtc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   rtc_dependency_factory->EnsureInitialized();
   return rtc_dependency_factory->GetWebRtcWorkerThreadRtcThread();
 }
 
 scoped_refptr<base::SingleThreadTaskRunner>
 RendererBlinkPlatformImpl::GetWebRtcSignalingTaskRunner() {
-  RenderThreadImpl* render_thread = RenderThreadImpl::current();
-  DCHECK(render_thread);
-  PeerConnectionDependencyFactory* rtc_dependency_factory =
-      render_thread->GetPeerConnectionDependencyFactory();
+  auto* rtc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   rtc_dependency_factory->EnsureInitialized();
   return rtc_dependency_factory->GetWebRtcSignalingThread();
 }
@@ -598,20 +585,16 @@
 std::unique_ptr<cricket::PortAllocator>
 RendererBlinkPlatformImpl::CreateWebRtcPortAllocator(
     blink::WebLocalFrame* frame) {
-  RenderThreadImpl* render_thread = RenderThreadImpl::current();
-  DCHECK(render_thread);
-  PeerConnectionDependencyFactory* rtc_dependency_factory =
-      render_thread->GetPeerConnectionDependencyFactory();
+  auto* rtc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   rtc_dependency_factory->EnsureInitialized();
   return rtc_dependency_factory->CreatePortAllocator(frame);
 }
 
 std::unique_ptr<webrtc::AsyncResolverFactory>
 RendererBlinkPlatformImpl::CreateWebRtcAsyncResolverFactory() {
-  RenderThreadImpl* render_thread = RenderThreadImpl::current();
-  DCHECK(render_thread);
-  PeerConnectionDependencyFactory* rtc_dependency_factory =
-      render_thread->GetPeerConnectionDependencyFactory();
+  auto* rtc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   rtc_dependency_factory->EnsureInitialized();
   return rtc_dependency_factory->CreateAsyncResolverFactory();
 }
@@ -621,8 +604,8 @@
 std::unique_ptr<webrtc::RtpCapabilities>
 RendererBlinkPlatformImpl::GetRtpSenderCapabilities(
     const blink::WebString& kind) {
-  PeerConnectionDependencyFactory* pc_dependency_factory =
-      RenderThreadImpl::current()->GetPeerConnectionDependencyFactory();
+  auto* pc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   pc_dependency_factory->EnsureInitialized();
   return pc_dependency_factory->GetSenderCapabilities(kind.Utf8());
 }
@@ -630,8 +613,8 @@
 std::unique_ptr<webrtc::RtpCapabilities>
 RendererBlinkPlatformImpl::GetRtpReceiverCapabilities(
     const blink::WebString& kind) {
-  PeerConnectionDependencyFactory* pc_dependency_factory =
-      RenderThreadImpl::current()->GetPeerConnectionDependencyFactory();
+  auto* pc_dependency_factory =
+      blink::PeerConnectionDependencyFactory::GetInstance();
   pc_dependency_factory->EnsureInitialized();
   return pc_dependency_factory->GetReceiverCapabilities(kind.Utf8());
 }
@@ -666,13 +649,6 @@
   return AudioDeviceFactory::GetSourceLatencyType(source_type);
 }
 
-blink::WebRtcAudioDeviceImpl*
-RendererBlinkPlatformImpl::GetWebRtcAudioDevice() {
-  PeerConnectionDependencyFactory* pc_dependency_factory =
-      RenderThreadImpl::current()->GetPeerConnectionDependencyFactory();
-  return pc_dependency_factory->GetWebRtcAudioDevice();
-}
-
 base::Optional<std::string>
 RendererBlinkPlatformImpl::GetWebRTCAudioProcessingConfiguration() {
   return GetContentClient()
@@ -696,6 +672,11 @@
       switches::kDisableWebRtcEncryption);
 }
 
+bool RendererBlinkPlatformImpl::IsWebRtcStunOriginEnabled() {
+  return base::CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kEnableWebRtcStunOrigin);
+}
+
 base::Optional<std::string>
 RendererBlinkPlatformImpl::WebRtcStunProbeTrialParameter() {
   const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
index b183977..16d420e5 100644
--- a/content/renderer/renderer_blink_platform_impl.h
+++ b/content/renderer/renderer_blink_platform_impl.h
@@ -151,11 +151,11 @@
       const media::AudioSinkParameters& params) override;
   media::AudioLatency::LatencyType GetAudioSourceLatencyType(
       blink::WebAudioDeviceSourceType source_type) override;
-  blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override;
   base::Optional<std::string> GetWebRTCAudioProcessingConfiguration() override;
   bool ShouldEnforceWebRTCRoutingPreferences() override;
   bool UsesFakeCodecForPeerConnection() override;
   bool IsWebRtcEncryptionEnabled() override;
+  bool IsWebRtcStunOriginEnabled() override;
   base::Optional<std::string> WebRtcStunProbeTrialParameter() override;
   media::MediaPermission* GetWebRTCMediaPermission(
       blink::WebLocalFrame* web_frame) override;
diff --git a/content/renderer/service_worker/navigation_preload_request.cc b/content/renderer/service_worker/navigation_preload_request.cc
index 15aa04b8..96ab9b3 100644
--- a/content/renderer/service_worker/navigation_preload_request.cc
+++ b/content/renderer/service_worker/navigation_preload_request.cc
@@ -33,9 +33,9 @@
   response_ = std::make_unique<blink::WebURLResponse>();
   // TODO(horo): Set report_security_info to true when DevTools is attached.
   const bool report_security_info = false;
-  WebURLLoaderImpl::PopulateURLResponse(
-      url_, network::ResourceResponseHead(response_head), response_.get(),
-      report_security_info, -1 /* request_id */);
+  WebURLLoaderImpl::PopulateURLResponse(url_, *response_head, response_.get(),
+                                        report_security_info,
+                                        -1 /* request_id */);
   MaybeReportResponseToOwner();
 }
 
@@ -47,9 +47,9 @@
       response_head->headers->response_code()));
 
   response_ = std::make_unique<blink::WebURLResponse>();
-  WebURLLoaderImpl::PopulateURLResponse(
-      url_, network::ResourceResponseHead(response_head), response_.get(),
-      false /* report_security_info */, -1 /* request_id */);
+  WebURLLoaderImpl::PopulateURLResponse(url_, *response_head, response_.get(),
+                                        false /* report_security_info */,
+                                        -1 /* request_id */);
   owner_->OnNavigationPreloadResponse(fetch_event_id_, std::move(response_),
                                       mojo::ScopedDataPipeConsumerHandle());
   // This will delete |this|.
diff --git a/extensions/browser/api/mime_handler_private/mime_handler_private.cc b/extensions/browser/api/mime_handler_private/mime_handler_private.cc
index 711f988..b04ccc8 100644
--- a/extensions/browser/api/mime_handler_private/mime_handler_private.cc
+++ b/extensions/browser/api/mime_handler_private/mime_handler_private.cc
@@ -12,7 +12,7 @@
 #include "content/public/common/content_constants.h"
 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
 #include "extensions/common/constants.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "net/http/http_response_headers.h"
 
 namespace extensions {
@@ -56,10 +56,10 @@
 // static
 void MimeHandlerServiceImpl::Create(
     base::WeakPtr<StreamContainer> stream_container,
-    mime_handler::MimeHandlerServiceRequest request) {
-  mojo::MakeStrongBinding(
+    mojo::PendingReceiver<mime_handler::MimeHandlerService> receiver) {
+  mojo::MakeSelfOwnedReceiver(
       std::make_unique<MimeHandlerServiceImpl>(stream_container),
-      std::move(request));
+      std::move(receiver));
 }
 
 void MimeHandlerServiceImpl::GetStreamInfo(GetStreamInfoCallback callback) {
diff --git a/extensions/browser/api/mime_handler_private/mime_handler_private.h b/extensions/browser/api/mime_handler_private/mime_handler_private.h
index a47f470..b2aea80 100644
--- a/extensions/browser/api/mime_handler_private/mime_handler_private.h
+++ b/extensions/browser/api/mime_handler_private/mime_handler_private.h
@@ -8,6 +8,7 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "extensions/common/api/mime_handler.mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
 
 namespace extensions {
 class StreamContainer;
@@ -19,8 +20,9 @@
       base::WeakPtr<StreamContainer> stream_container);
   ~MimeHandlerServiceImpl() override;
 
-  static void Create(base::WeakPtr<StreamContainer> stream_container,
-                     mime_handler::MimeHandlerServiceRequest request);
+  static void Create(
+      base::WeakPtr<StreamContainer> stream_container,
+      mojo::PendingReceiver<mime_handler::MimeHandlerService> receiver);
 
  private:
   friend class MimeHandlerServiceImplTest;
diff --git a/extensions/browser/guest_view/extensions_guest_view_message_filter.cc b/extensions/browser/guest_view/extensions_guest_view_message_filter.cc
index c935537..bfa9776 100644
--- a/extensions/browser/guest_view/extensions_guest_view_message_filter.cc
+++ b/extensions/browser/guest_view/extensions_guest_view_message_filter.cc
@@ -116,13 +116,14 @@
     const std::string& view_id,
     int32_t element_instance_id,
     const gfx::Size& element_size,
-    mime_handler::BeforeUnloadControlPtr before_unload_control) {
-  base::PostTask(FROM_HERE, {content::BrowserThread::UI},
-                 base::BindOnce(&ExtensionsGuestViewMessageFilter::
-                                    CreateMimeHandlerViewGuestOnUIThread,
-                                this, render_frame_id, view_id,
-                                element_instance_id, element_size,
-                                before_unload_control.PassInterface(), false));
+    mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+        before_unload_control) {
+  base::PostTask(
+      FROM_HERE, {content::BrowserThread::UI},
+      base::BindOnce(&ExtensionsGuestViewMessageFilter::
+                         CreateMimeHandlerViewGuestOnUIThread,
+                     this, render_frame_id, view_id, element_instance_id,
+                     element_size, std::move(before_unload_control), false));
 }
 
 void ExtensionsGuestViewMessageFilter::ReadyToCreateMimeHandlerView(
@@ -148,7 +149,8 @@
     const std::string& view_id,
     int element_instance_id,
     const gfx::Size& element_size,
-    mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+    mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+        before_unload_control,
     bool is_full_page_plugin) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
@@ -245,7 +247,7 @@
 
   CreateMimeHandlerViewGuestOnUIThread(render_frame_id, view_id,
                                        element_instance_id, element_size,
-                                       nullptr, false);
+                                       mojo::NullRemote(), false);
 }
 
 void ExtensionsGuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback(
@@ -253,7 +255,8 @@
     int embedder_render_process_id,
     int embedder_render_frame_id,
     const gfx::Size& element_size,
-    mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+    mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+        before_unload_control,
     bool is_full_page_plugin,
     WebContents* web_contents) {
   auto* guest_view = MimeHandlerViewGuest::FromWebContents(web_contents);
diff --git a/extensions/browser/guest_view/extensions_guest_view_message_filter.h b/extensions/browser/guest_view/extensions_guest_view_message_filter.h
index b5c6b9fa..fc9ce56 100644
--- a/extensions/browser/guest_view/extensions_guest_view_message_filter.h
+++ b/extensions/browser/guest_view/extensions_guest_view_message_filter.h
@@ -17,6 +17,7 @@
 #include "content/public/browser/browser_message_filter.h"
 #include "content/public/browser/browser_thread.h"
 #include "extensions/common/mojom/guest_view.mojom.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 
 namespace content {
 class BrowserContext;
@@ -81,7 +82,8 @@
       const std::string& view_id,
       int32_t element_instance_id,
       const gfx::Size& element_size,
-      mime_handler::BeforeUnloadControlPtr before_unload_control) override;
+      mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+          before_unload_control) override;
   void ReadyToCreateMimeHandlerView(int32_t render_frame_id,
                                     bool success) override;
 
@@ -90,7 +92,8 @@
       const std::string& view_id,
       int32_t element_instance_id,
       const gfx::Size& element_size,
-      mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+      mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+          before_unload_control,
       bool is_full_page_plugin);
 
   // Runs on UI thread.
@@ -99,7 +102,8 @@
       int embedder_render_process_id,
       int embedder_render_frame_id,
       const gfx::Size& element_size,
-      mime_handler::BeforeUnloadControlPtrInfo before_unload_control,
+      mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+          before_unload_control,
       bool is_full_page_plugin,
       content::WebContents* web_contents);
 
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc
index 0230a24e..76e6f1b 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.cc
@@ -143,7 +143,8 @@
 }
 
 void MimeHandlerViewEmbedder::CreateMimeHandlerViewGuest(
-    mime_handler::BeforeUnloadControlPtr before_unload_control) {
+    mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+        before_unload_control) {
   auto* browser_context = web_contents()->GetBrowserContext();
   auto* manager =
       guest_view::GuestViewManager::FromBrowserContext(browser_context);
@@ -153,7 +154,7 @@
         ExtensionsAPIClient::Get()->CreateGuestViewManagerDelegate(
             browser_context));
   }
-  pending_before_unload_control_ = before_unload_control.PassInterface();
+  pending_before_unload_control_ = std::move(before_unload_control);
   base::DictionaryValue create_params;
   create_params.SetString(mime_handler_view::kViewId, stream_id_);
   manager->CreateGuest(
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.h b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.h
index 4b5305f..f0f21bdd 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.h
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_embedder.h
@@ -11,6 +11,7 @@
 #include "extensions/common/api/mime_handler.mojom.h"
 #include "extensions/common/mojom/guest_view.mojom.h"
 #include "mojo/public/cpp/bindings/associated_remote.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "url/gurl.h"
 
 namespace content {
@@ -61,7 +62,8 @@
                           const std::string& stream_id,
                           const std::string& internal_id);
   void CreateMimeHandlerViewGuest(
-      mime_handler::BeforeUnloadControlPtr before_unload_control_ptr);
+      mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+          before_unload_control_remote);
   void DidCreateMimeHandlerViewGuest(content::WebContents* guest_web_contents);
   // Returns null before |render_frame_host_| is known.
   mojom::MimeHandlerViewContainerManager* GetContainerManager();
@@ -89,7 +91,8 @@
   int32_t element_instance_id_ = -1;
   // Initialized before creating MimeHandlerViewGuest and will be passed on to
   // to after it is created.
-  mime_handler::BeforeUnloadControlPtrInfo pending_before_unload_control_;
+  mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+      pending_before_unload_control_;
 
   mojo::AssociatedRemote<mojom::MimeHandlerViewContainerManager>
       container_manager_;
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
index af060f3..86dcfed5 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc
@@ -156,7 +156,8 @@
 }
 
 void MimeHandlerViewGuest::SetBeforeUnloadController(
-    mime_handler::BeforeUnloadControlPtrInfo pending_before_unload_control) {
+    mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+        pending_before_unload_control) {
   pending_before_unload_control_ = std::move(pending_before_unload_control);
 }
 
@@ -474,12 +475,12 @@
 }
 
 void MimeHandlerViewGuest::FuseBeforeUnloadControl(
-    mime_handler::BeforeUnloadControlRequest request) {
+    mojo::PendingReceiver<mime_handler::BeforeUnloadControl> receiver) {
   if (!pending_before_unload_control_)
     return;
 
-  mojo::FuseInterface(std::move(request),
-                      std::move(pending_before_unload_control_));
+  mojo::FusePipes(std::move(receiver),
+                  std::move(pending_before_unload_control_));
 }
 
 content::RenderFrameHost* MimeHandlerViewGuest::GetEmbedderFrame() {
diff --git a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h
index 14c969b9..908d183 100644
--- a/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h
+++ b/extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h
@@ -13,6 +13,8 @@
 #include "components/guest_view/browser/guest_view.h"
 #include "content/public/common/transferrable_url_loader.mojom.h"
 #include "extensions/common/api/mime_handler.mojom.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 
 namespace content {
@@ -87,7 +89,8 @@
   void SetEmbedderFrame(int process_id, int routing_id);
 
   void SetBeforeUnloadController(
-      mime_handler::BeforeUnloadControlPtrInfo pending_before_unload_control);
+      mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+          pending_before_unload_control);
 
   void SetPluginCanSave(bool can_save) { plugin_can_save_ = can_save; }
 
@@ -177,7 +180,7 @@
       content::NavigationHandle* navigation_handle) final;
 
   void FuseBeforeUnloadControl(
-      mime_handler::BeforeUnloadControlRequest request);
+      mojo::PendingReceiver<mime_handler::BeforeUnloadControl> receiver);
 
   std::unique_ptr<MimeHandlerViewGuestDelegate> delegate_;
   std::unique_ptr<StreamContainer> stream_;
@@ -197,7 +200,8 @@
   // True when the MimeHandlerViewGeust might have a frame container in its
   // embedder's parent frame to facilitate postMessage.
   bool maybe_has_frame_container_ = false;
-  mime_handler::BeforeUnloadControlPtrInfo pending_before_unload_control_;
+  mojo::PendingRemote<mime_handler::BeforeUnloadControl>
+      pending_before_unload_control_;
 
   base::WeakPtrFactory<MimeHandlerViewGuest> weak_factory_{this};
 
diff --git a/extensions/browser/mojo/keep_alive_impl.cc b/extensions/browser/mojo/keep_alive_impl.cc
index c4b3577c..891327d 100644
--- a/extensions/browser/mojo/keep_alive_impl.cc
+++ b/extensions/browser/mojo/keep_alive_impl.cc
@@ -15,21 +15,21 @@
 // static
 void KeepAliveImpl::Create(content::BrowserContext* context,
                            const Extension* extension,
-                           KeepAliveRequest request,
+                           mojo::PendingReceiver<KeepAlive> receiver,
                            content::RenderFrameHost* render_frame_host) {
   // Owns itself.
-  new KeepAliveImpl(context, extension, std::move(request));
+  new KeepAliveImpl(context, extension, std::move(receiver));
 }
 
 KeepAliveImpl::KeepAliveImpl(content::BrowserContext* context,
                              const Extension* extension,
-                             KeepAliveRequest request)
+                             mojo::PendingReceiver<KeepAlive> receiver)
     : context_(context),
       extension_(extension),
-      binding_(this, std::move(request)) {
+      receiver_(this, std::move(receiver)) {
   ProcessManager::Get(context_)->IncrementLazyKeepaliveCount(
       extension_, Activity::MOJO, std::string());
-  binding_.set_connection_error_handler(
+  receiver_.set_disconnect_handler(
       base::Bind(&KeepAliveImpl::OnDisconnected, base::Unretained(this)));
   extension_registry_observer_.Add(ExtensionRegistry::Get(context_));
 }
diff --git a/extensions/browser/mojo/keep_alive_impl.h b/extensions/browser/mojo/keep_alive_impl.h
index 98d2e79f9..2577967b 100644
--- a/extensions/browser/mojo/keep_alive_impl.h
+++ b/extensions/browser/mojo/keep_alive_impl.h
@@ -11,7 +11,8 @@
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_registry_observer.h"
 #include "extensions/common/mojom/keep_alive.mojom.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 
 namespace content {
 class BrowserContext;
@@ -26,16 +27,16 @@
 class KeepAliveImpl : public KeepAlive, public ExtensionRegistryObserver {
  public:
   // Create a keep alive for |extension| running in |context| and connect it to
-  // |request|. When the requester closes its pipe, the keep alive ends.
+  // |receiver|. When the receiver closes its pipe, the keep alive ends.
   static void Create(content::BrowserContext* browser_context,
                      const Extension* extension,
-                     KeepAliveRequest request,
+                     mojo::PendingReceiver<KeepAlive> receiver,
                      content::RenderFrameHost* render_frame_host);
 
  private:
   KeepAliveImpl(content::BrowserContext* context,
                 const Extension* extension,
-                KeepAliveRequest request);
+                mojo::PendingReceiver<KeepAlive> receiver);
   ~KeepAliveImpl() override;
 
   // ExtensionRegistryObserver overrides.
@@ -51,7 +52,7 @@
   const Extension* extension_;
   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
       extension_registry_observer_{this};
-  mojo::Binding<KeepAlive> binding_;
+  mojo::Receiver<KeepAlive> receiver_;
 
   DISALLOW_COPY_AND_ASSIGN(KeepAliveImpl);
 };
diff --git a/extensions/browser/mojo/keep_alive_impl_unittest.cc b/extensions/browser/mojo/keep_alive_impl_unittest.cc
index 4c6073d6..ad64b72 100644
--- a/extensions/browser/mojo/keep_alive_impl_unittest.cc
+++ b/extensions/browser/mojo/keep_alive_impl_unittest.cc
@@ -50,9 +50,9 @@
     }
   }
 
-  void CreateKeepAlive(KeepAliveRequest request) {
+  void CreateKeepAlive(mojo::PendingReceiver<KeepAlive> receiver) {
     KeepAliveImpl::Create(browser_context(), extension_.get(),
-                          std::move(request), nullptr);
+                          std::move(receiver), nullptr);
   }
 
   const Extension* extension() { return extension_.get(); }
diff --git a/extensions/common/mojom/guest_view.mojom b/extensions/common/mojom/guest_view.mojom
index 12e81f0e..52a1aafb 100644
--- a/extensions/common/mojom/guest_view.mojom
+++ b/extensions/common/mojom/guest_view.mojom
@@ -29,7 +29,8 @@
       string view_id,
       int32 element_instance_id,
       gfx.mojom.Size element_size,
-      extensions.mime_handler.BeforeUnloadControl? before_unload_control);
+      pending_remote<extensions.mime_handler.BeforeUnloadControl>?
+          before_unload_control);
 
   // Notifies the browser whether or not now is a good time to start loading the
   // MimeHandlerView. |routing_id| identifies the embedder frame. If |success|
@@ -60,7 +61,8 @@
   // document). This is only relevant for the non-embedded MimeHandlerView (
   // e.g., full page navigations to a relevant MIME type).
   CreateBeforeUnloadControl()
-      => (extensions.mime_handler.BeforeUnloadControl before_unload_control);
+      => (pending_remote<extensions.mime_handler.BeforeUnloadControl>
+              before_unload_control);
 
   // Asks the renderer to destroy the MimeHandlerViewFrameContainer associated
   // with MimeHandlerViewGuest with |element_instance_id|.
diff --git a/extensions/renderer/extensions_render_frame_observer.cc b/extensions/renderer/extensions_render_frame_observer.cc
index 2a05164..150dfd38 100644
--- a/extensions/renderer/extensions_render_frame_observer.cc
+++ b/extensions/renderer/extensions_render_frame_observer.cc
@@ -84,16 +84,16 @@
     : content::RenderFrameObserver(render_frame),
       webview_visually_deemphasized_(false) {
   registry->AddInterface(
-      base::Bind(&ExtensionsRenderFrameObserver::BindAppWindowRequest,
+      base::Bind(&ExtensionsRenderFrameObserver::BindAppWindowReceiver,
                  base::Unretained(this)));
 }
 
 ExtensionsRenderFrameObserver::~ExtensionsRenderFrameObserver() {
 }
 
-void ExtensionsRenderFrameObserver::BindAppWindowRequest(
-    mojom::AppWindowRequest request) {
-  bindings_.AddBinding(this, std::move(request));
+void ExtensionsRenderFrameObserver::BindAppWindowReceiver(
+    mojo::PendingReceiver<mojom::AppWindow> receiver) {
+  receivers_.Add(this, std::move(receiver));
 }
 
 void ExtensionsRenderFrameObserver::SetVisuallyDeemphasized(bool deemphasized) {
diff --git a/extensions/renderer/extensions_render_frame_observer.h b/extensions/renderer/extensions_render_frame_observer.h
index aed6eeb7..ab62072 100644
--- a/extensions/renderer/extensions_render_frame_observer.h
+++ b/extensions/renderer/extensions_render_frame_observer.h
@@ -10,7 +10,8 @@
 #include "base/macros.h"
 #include "content/public/renderer/render_frame_observer.h"
 #include "extensions/common/mojom/app_window.mojom.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 
 namespace extensions {
@@ -25,7 +26,7 @@
   ~ExtensionsRenderFrameObserver() override;
 
  private:
-  void BindAppWindowRequest(mojom::AppWindowRequest request);
+  void BindAppWindowReceiver(mojo::PendingReceiver<mojom::AppWindow> receiver);
 
   // Toggles visual muting of the render view area. This is on when a
   // constrained window is showing.
@@ -42,7 +43,7 @@
   // true if webview is overlayed with grey color.
   bool webview_visually_deemphasized_;
 
-  mojo::BindingSet<mojom::AppWindow> bindings_;
+  mojo::ReceiverSet<mojom::AppWindow> receivers_;
 
   DISALLOW_COPY_AND_ASSIGN(ExtensionsRenderFrameObserver);
 };
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc
index 88d1713..de7fb10 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.cc
@@ -112,8 +112,7 @@
     : original_url_(original_url),
       plugin_path_(info.path.MaybeAsASCII()),
       mime_type_(mime_type),
-      embedder_render_frame_routing_id_(embedder_render_frame->GetRoutingID()),
-      before_unload_control_binding_(this) {
+      embedder_render_frame_routing_id_(embedder_render_frame->GetRoutingID()) {
   DCHECK(!mime_type_.empty());
   g_mime_handler_view_container_base_map.Get()[embedder_render_frame].insert(
       this);
@@ -232,10 +231,10 @@
 
   DCHECK_NE(GetInstanceId(), guest_view::kInstanceIDNone);
 
-  mime_handler::BeforeUnloadControlPtr before_unload_control;
+  mojo::PendingRemote<mime_handler::BeforeUnloadControl> before_unload_control;
   if (!is_embedded_) {
-    before_unload_control_binding_.Bind(
-        mojo::MakeRequest(&before_unload_control));
+    before_unload_control =
+        before_unload_control_receiver_.BindNewPipeAndPassRemote();
   }
   guest_view->CreateMimeHandlerViewGuest(
       embedder_render_frame->GetRoutingID(), view_id_, GetInstanceId(),
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h
index 4a98a81..0b6a54d 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_base.h
@@ -14,7 +14,7 @@
 #include "extensions/common/mojom/guest_view.mojom.h"
 #include "extensions/renderer/guest_view/mime_handler_view/post_message_support.h"
 #include "ipc/ipc_message.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "services/network/public/mojom/url_loader.mojom.h"
 #include "third_party/blink/public/web/web_associated_url_loader_client.h"
 #include "ui/gfx/geometry/size.h"
@@ -130,8 +130,8 @@
   // The routing ID of the frame which contains the plugin element.
   const int32_t embedder_render_frame_routing_id_;
 
-  mojo::Binding<mime_handler::BeforeUnloadControl>
-      before_unload_control_binding_;
+  mojo::Receiver<mime_handler::BeforeUnloadControl>
+      before_unload_control_receiver_{this};
 
   base::WeakPtrFactory<MimeHandlerViewContainerBase> weak_factory_{this};
 
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc
index 0c723ce..92d4ab0 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.cc
@@ -137,8 +137,7 @@
 
 MimeHandlerViewContainerManager::MimeHandlerViewContainerManager(
     content::RenderFrame* render_frame)
-    : content::RenderFrameObserver(render_frame),
-      before_unload_control_binding_(this) {}
+    : content::RenderFrameObserver(render_frame) {}
 
 MimeHandlerViewContainerManager::~MimeHandlerViewContainerManager() {}
 
@@ -176,14 +175,10 @@
     CreateBeforeUnloadControlCallback callback) {
   if (!post_message_support_)
     post_message_support_ = std::make_unique<PostMessageSupport>(this);
-  mime_handler::BeforeUnloadControlPtr before_unload_control;
-  if (before_unload_control_binding_.is_bound()) {
-    // Might happen when reloading the same page.
-    before_unload_control_binding_.Close();
-  }
-  before_unload_control_binding_.Bind(
-      mojo::MakeRequest(&before_unload_control));
-  std::move(callback).Run(std::move(before_unload_control));
+  // It might be bound when reloading the same page.
+  before_unload_control_receiver_.reset();
+  std::move(callback).Run(
+      before_unload_control_receiver_.BindNewPipeAndPassRemote());
 }
 
 void MimeHandlerViewContainerManager::DestroyFrameContainer(
diff --git a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.h b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.h
index b2ab992..965b92c57 100644
--- a/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.h
+++ b/extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.h
@@ -15,8 +15,8 @@
 #include "extensions/common/mojom/guest_view.mojom.h"
 #include "extensions/renderer/guest_view/mime_handler_view/post_message_support.h"
 #include "mojo/public/cpp/bindings/associated_receiver_set.h"
-#include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/pending_associated_receiver.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/web/web_element.h"
 #include "url/gurl.h"
 
@@ -144,8 +144,8 @@
 
   mojo::AssociatedReceiverSet<mojom::MimeHandlerViewContainerManager>
       receivers_;
-  mojo::Binding<mime_handler::BeforeUnloadControl>
-      before_unload_control_binding_;
+  mojo::Receiver<mime_handler::BeforeUnloadControl>
+      before_unload_control_receiver_{this};
 
   DISALLOW_COPY_AND_ASSIGN(MimeHandlerViewContainerManager);
 };
diff --git a/fuchsia/engine/context_provider_impl.cc b/fuchsia/engine/context_provider_impl.cc
index f4a63b5c..858805b9 100644
--- a/fuchsia/engine/context_provider_impl.cc
+++ b/fuchsia/engine/context_provider_impl.cc
@@ -230,6 +230,10 @@
                                      gl::kGLImplementationStubName);
   }
 
+  if (enable_protected_graphics) {
+    launch_command.AppendSwitch(switches::kEnforceVulkanProtectedMemory);
+  }
+
   if (enable_widevine) {
     launch_command.AppendSwitch(switches::kEnableWidevine);
   }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
index 8d5aec4..ad87416 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -699,6 +699,15 @@
   if (entries_processed)
     *entries_processed = process_pos;
 
+#if defined(OS_MACOSX)
+  // Aggressively call glFlush on macOS. This is the only fix that has been
+  // found so far to avoid crashes on Intel drivers. The workaround
+  // isn't needed for WebGL contexts, though.
+  // https://crbug.com/863817
+  if (!feature_info_->IsWebGLContext())
+    context_->FlushForDriverCrashWorkaround();
+#endif
+
   return result;
 }
 
diff --git a/infra/config/cr-buildbucket.cfg b/infra/config/cr-buildbucket.cfg
index 415d8848..05d7d01f 100644
--- a/infra/config/cr-buildbucket.cfg
+++ b/infra/config/cr-buildbucket.cfg
@@ -484,7 +484,7 @@
 builder_mixins {
   name: "clang-tidy"
   recipe {
-    name: "tricium_analyze.py"
+    name: "tricium_analyze"
   }
 }
 
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg
index 415d8848..05d7d01f 100644
--- a/infra/config/generated/cr-buildbucket.cfg
+++ b/infra/config/generated/cr-buildbucket.cfg
@@ -484,7 +484,7 @@
 builder_mixins {
   name: "clang-tidy"
   recipe {
-    name: "tricium_analyze.py"
+    name: "tricium_analyze"
   }
 }
 
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index bfea010..0f0e991d 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1513,6 +1513,12 @@
       <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>
+      <message name="IDS_SEND_TAB_TO_SELF_INFOBAR_MESSAGE" desc="The message text for the infobar when a user receives a shared tab from another device.">
+        Tab received.
+      </message>
+      <message name="IDS_SEND_TAB_TO_SELF_INFOBAR_MESSAGE_URL" desc="Clickable text displayed as part of a URL in the inforbar displayed when a user receives a shared tab from another device.">
+        Open
+      </message>
       <message name="IDS_IOS_SEND_TAB_TO_SELF_SNACKBAR_MESSAGE" desc="Message briefly displayed at the bottom of the screen to the user to inform that the tab is being sent to the target device. [Length: 35em]" meaning="The is being sent to the target device. [Length: 35em]">
         Sending to <ph name="DEVICE_NAME">$1<ex>IPhone</ex></ph>...
       </message>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 3773916..baf4952 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">የአሰሳ ታሪክ</translation>
 <translation id="7887198238286927132">የእርስዎን ግላዊነት ለመጠበቅ፣ Chrome ይህን መስክ በራስ-ሰር ይሞላዋል።</translation>
 <translation id="7918293828610777738">የንባብ ዝርዝርዎ ከመስመር ውጭ ይገኛል። አንድ ገጽ ወደ የንባብ ዝርዝርዎ ለማከል በመጀመሪያ <ph name="SHARE_OPENING_ICON" />ን ከዚያም <ph name="READ_LATER_TEXT" />ን መታ ያድርጉ።</translation>
+<translation id="7930681627240672853">የይለፍ ቃል ደህንነትን ይፈትሹ</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">የይለፍ ቃላትን ወደ ውጭ ላክ...</translation>
 <translation id="7947953824732555851">ተቀበል እና ግባ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ar.xtb b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
index dad41c9..661da54 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ar.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ar.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">سجلّ التصفّح</translation>
 <translation id="7887198238286927132">‏لحماية خصوصيتك، لن يجري Chrome الملء التلقائي لهذا الحقل.</translation>
 <translation id="7918293828610777738">قائمة القراءة متاحة بلا اتصال بالإنترنت. لإضافة صفحة إلى قائمة القراءة، انقر على  <ph name="SHARE_OPENING_ICON" />  ثم <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">التحقق من أمان كلمة المرور</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">جارٍ تصدير كلمات المرور...</translation>
 <translation id="7947953824732555851">قبول وتسجيل الدخول</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index b0ed3ab..ee240fc1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">История на сърфирането</translation>
 <translation id="7887198238286927132">За да защити поверителността ви, Chrome няма да попълни автоматично това поле.</translation>
 <translation id="7918293828610777738">Списъкът ви за четене е достъпен офлайн. За да добавите страница към него, докоснете <ph name="SHARE_OPENING_ICON" /> и след това „<ph name="READ_LATER_TEXT" />“.</translation>
+<translation id="7930681627240672853">Проверка на безопасността на паролата</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Експортиране на паролите...</translation>
 <translation id="7947953824732555851">Приемам и влизам</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bn.xtb b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
index fd3bf16..6310c62 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bn.xtb
@@ -477,6 +477,7 @@
 <translation id="7859704718976024901">ব্রাউজিং ইতিহাস</translation>
 <translation id="7887198238286927132">আপনার গোপনীয়তা রক্ষার জন্য, Chrome এই ক্ষেত্রটি নিজে থেকে পূরণ করবে না।</translation>
 <translation id="7918293828610777738">আপনার পড়ার তালিকাটি অফলাইনে উপলভ্য। আপনার পড়ার তালিকায় কোনও পৃষ্ঠা যোগ করতে <ph name="SHARE_OPENING_ICON" />  তারপর <ph name="READ_LATER_TEXT" /> ট্যাপ করুন।</translation>
+<translation id="7930681627240672853">পাসওয়ার্ড সুরক্ষিত আছে কিনা চেক করে দেখুন</translation>
 <translation id="7938254975914653459">ফেসটাইম</translation>
 <translation id="7939128259257418052">পাসওয়ার্ড এক্সপোর্ট করুন...</translation>
 <translation id="7947953824732555851">সম্মত হয়ে সাইন-ইন করুন</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index f8eddab..4f2c98d9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Historial de navegació</translation>
 <translation id="7887198238286927132">Amb la finalitat de protegir la teva privadesa, Chrome no emplenarà aquest camp automàticament.</translation>
 <translation id="7918293828610777738">La llista de lectura està disponible sense connexió. Per afegir-hi una pàgina, toca <ph name="SHARE_OPENING_ICON" /> i després <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Comprova la seguretat de la contrasenya</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exporta les contrasenyes</translation>
 <translation id="7947953824732555851">Acc. i inicia sessió</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index 99eb98b..da10f02 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Historie procházení</translation>
 <translation id="7887198238286927132">Aby Chrome chránil vaše soukromí, nebude toto pole automaticky vyplňovat.</translation>
 <translation id="7918293828610777738">Seznam obsahu k přečtení je k dispozici offline. Chcete-li na něj přidat stránku, klepněte na <ph name="SHARE_OPENING_ICON" /> a poté na <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Zkontrolovat bezpečnost hesla</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportovat hesla...</translation>
 <translation id="7947953824732555851">Přijmout a přihlásit</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index 81d3f45..6471a742 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Browserhistorik</translation>
 <translation id="7887198238286927132">Af hensyn til beskyttelsen af dine personlige oplysninger autofylder Chrome ikke dette felt.</translation>
 <translation id="7918293828610777738">Din læseliste er tilgængelig offline. Du kan føje en side til din læseliste ved at trykke på <ph name="SHARE_OPENING_ICON" /> og derefter <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Tjek, om din adgangskode er blevet afsløret</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportér adgangskoder…</translation>
 <translation id="7947953824732555851">Acceptér og log ind</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 2477199..8bd20b9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Browserverlauf</translation>
 <translation id="7887198238286927132">Um Ihre Daten zu schützen, füllt Chrome dieses Feld nicht automatisch aus.</translation>
 <translation id="7918293828610777738">Ihre Leseliste ist offline verfügbar. Sie können eine Seite Ihrer Leseliste hinzufügen, indem Sie auf <ph name="SHARE_OPENING_ICON" /> &gt; <ph name="READ_LATER_TEXT" /> tippen.</translation>
+<translation id="7930681627240672853">Passwortsicherheit überprüfen</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Passwörter exportieren…</translation>
 <translation id="7947953824732555851">Akzeptieren und anmelden</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index 6c11302c..28e685f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -477,6 +477,7 @@
 <translation id="7859704718976024901">Ιστορικό περιήγησης</translation>
 <translation id="7887198238286927132">Προκειμένου να προστατεύσει το απόρρητό σας, το Chrome δεν θα συμπληρώνει αυτόματα αυτό το πεδίο.</translation>
 <translation id="7918293828610777738">Η λίστα ανάγνωσης είναι διαθέσιμη εκτός σύνδεσης. Για να προσθέσετε μια σελίδα στη λίστα ανάγνωσης, πατήστε το εικονίδιο <ph name="SHARE_OPENING_ICON" /> και μετά πατήστε το στοιχείο <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Ελέγξτε την ασφάλεια του κωδικού πρόσβασης</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Εξαγωγή κωδικών πρόσβασης…</translation>
 <translation id="7947953824732555851">Αποδοχή και σύνδεση</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
index 1946f96..f2e921c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_en-GB.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Browsing history</translation>
 <translation id="7887198238286927132">To protect your privacy, Chrome will not auto-fill this field.</translation>
 <translation id="7918293828610777738">Your reading list is available offline. To add a page to your reading list, tap <ph name="SHARE_OPENING_ICON" />, then <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Check password safety</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Export Passwords…</translation>
 <translation id="7947953824732555851">Accept and sign in</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
index ed9cb26b..5d046dc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es-419.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Historial de navegación</translation>
 <translation id="7887198238286927132">Para proteger tu privacidad, Chrome no completará este campo de forma automática.</translation>
 <translation id="7918293828610777738">Tu lista de lectura está disponible sin conexión. Para agregar una página a la lista, presiona <ph name="SHARE_OPENING_ICON" /> y, luego, <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Revisar la seguridad de las contraseñas</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportar contraseñas…</translation>
 <translation id="7947953824732555851">Aceptar y acceder</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index 41aab7c..4974de3 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Historial de navegación</translation>
 <translation id="7887198238286927132">Para proteger tu privacidad, Chrome no autocompletará este campo.</translation>
 <translation id="7918293828610777738">Tu lista de lectura está disponible sin conexión. Para añadir una página a la lista, toca <ph name="SHARE_OPENING_ICON" /> y, a continuación, <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Comprobar la seguridad de la contraseña</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportar contraseñas...</translation>
 <translation id="7947953824732555851">Aceptar y acceder</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index c2cf33b6..9029181 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Sirvimisajalugu</translation>
 <translation id="7887198238286927132">Teie privaatsuse kaitsmiseks ei täida Chrome seda välja automaatselt.</translation>
 <translation id="7918293828610777738">Teie lugemisloend on võrguühenduseta saadaval. Lugemisloendisse lehe lisamiseks puudutage ikooni <ph name="SHARE_OPENING_ICON" /> ja seejärel valikut <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Kontrolli parooli ohutust</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Paroolide eksportimine …</translation>
 <translation id="7947953824732555851">Nõustu ja logi sisse</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index 2edf1f0..b4ba97bc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">سابقه مرور</translation>
 <translation id="7887198238286927132">‏برای محافظت از حریم‌خصوصی‌تان، Chrome از ویژگی تکمیل خودکار برای این فیلد استفاده نخواهد کرد.</translation>
 <translation id="7918293828610777738">فهرست مطالعه‌تان درحالت آفلاین دردسترس است. برای اضافه کردن صفحه به فهرست مطالعه، روی <ph name="SHARE_OPENING_ICON" /> و بعد <ph name="READ_LATER_TEXT" /> ضربه بزنید.</translation>
+<translation id="7930681627240672853">بررسی امنیت گذرواژه</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">صادر کردن گذرواژه‌ها…</translation>
 <translation id="7947953824732555851">پذیرش و ورود به سیستم</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 43bfce8e..741c7ad 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Selaushistoria</translation>
 <translation id="7887198238286927132">Tietojesi suojaamiseksi Chrome ei täytä tätä kenttää automaattisesti.</translation>
 <translation id="7918293828610777738">Lukulistasi on käytettävissä offline-tilassa. Lisää sivu lukulistalle valitsemalla <ph name="SHARE_OPENING_ICON" /> ja sitten <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Salasanojen turvallisuuden tarkistaminen</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Vie salasanat…</translation>
 <translation id="7947953824732555851">Hyväksy ja kirjaudu sisään</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index b6ab859..3fcf5b4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">History ng Pag-browse</translation>
 <translation id="7887198238286927132">Para protektahan ang iyong privacy, hindi io-autofill ng Chrome ang field na ito.</translation>
 <translation id="7918293828610777738">Available ang iyong listahan ng babasahin offline. Para magdagdag ng page sa iyong listahan ng babasahin, i-tap ang <ph name="SHARE_OPENING_ICON" /> pagkatapos ay i-tap ang <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Suriin ang kaligtasan ng password</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">I-export Password...</translation>
 <translation id="7947953824732555851">I-accept, mag-sign in</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index d2f71796..aec5116a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Historique de navigation</translation>
 <translation id="7887198238286927132">Pour protéger votre vie privée, Chrome ne renseigne pas automatiquement de champ.</translation>
 <translation id="7918293828610777738">Votre liste de lecture est disponible hors connexion. Pour y ajouter une page, appuyez sur <ph name="SHARE_OPENING_ICON" />, puis sur <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Vérifier si le mot de passe est sûr</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Export mots de passe…</translation>
 <translation id="7947953824732555851">Accepter/Se connecter</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index 6d44c9b..462897e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">બ્રાઉઝિંગ ઇતિહાસ</translation>
 <translation id="7887198238286927132">તમારી પ્રાઇવસીની સુરક્ષા કરવા માટે, Chrome આ ફીલ્ડ સ્વતઃ નહીં ભરે.</translation>
 <translation id="7918293828610777738">તમારી વાંચન સૂચિ ઑફલાઇન ઉપલબ્ધ છે. તમારી વાંચન સૂચિમાં પેજ ઉમેરવા માટે, <ph name="SHARE_OPENING_ICON" /> પર અને પછી <ph name="READ_LATER_TEXT" /> પર ટૅપ કરો.</translation>
+<translation id="7930681627240672853">પાસવર્ડ સુરક્ષા ચેક કરો</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">પાસવર્ડની નિકાસ કરો...</translation>
 <translation id="7947953824732555851">સ્વીકારો અને સાઇન ઇન કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index 3981e4c..11345f9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">ब्राउज़िंग इतिहास</translation>
 <translation id="7887198238286927132">आपकी निजता को सुरक्षित रखने के लिए, Chrome इस फ़ील्ड को ऑटोमैटिक नहीं भरेगा.</translation>
 <translation id="7918293828610777738">आपकी पढ़ने की सूची ऑफ़लाइन उपलब्ध है. अपनी पढ़ने की सूची में कोई पेज जोड़ने के लिए, पहले  <ph name="SHARE_OPENING_ICON" />  पर और फिर <ph name="READ_LATER_TEXT" /> पर टैप करें.</translation>
+<translation id="7930681627240672853">पासवर्ड की सुरक्षा जांचें</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">पासवर्ड निर्यात करें...</translation>
 <translation id="7947953824732555851">स्वीकार करें और साइन इन करें</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 99f8705..b6f6291 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Povijest pregledavanja</translation>
 <translation id="7887198238286927132">Da bi zaštitio vašu privatnost, Chrome neće automatski popuniti ovo polje.</translation>
 <translation id="7918293828610777738">Vaš popis za čitanje dostupan je offline. Da biste dodali stranicu na popis za čitanje, dodirnite <ph name="SHARE_OPENING_ICON" />, a zatim <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Provjerite sigurnost zaporke</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Izvoz zaporki...</translation>
 <translation id="7947953824732555851">Prihv. i prijavi se</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 172063a..81a4820 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Böngészési előzmények</translation>
 <translation id="7887198238286927132">Adatai védelme érdekében a Chrome nem tölti ki automatikusan ezt a mezőt.</translation>
 <translation id="7918293828610777738">Olvasási listája hozzáférhető offline módban. Ha szeretne hozzáadni oldalakat a listához, koppintson a következőkre: <ph name="SHARE_OPENING_ICON" />, majd <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Jelszavak biztonságának ellenőrzése</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Jelszavak exportálása…</translation>
 <translation id="7947953824732555851">Elfogadás és bejelentkezés</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 0bd9f1f..31220ee 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Histori Browsing</translation>
 <translation id="7887198238286927132">Untuk melindungi privasi Anda, Chrome tidak akan melakukan IsiOtomatis pada kolom ini.</translation>
 <translation id="7918293828610777738">Daftar bacaan Anda tersedia secara offline. Untuk menambahkan halaman ke daftar bacaan, ketuk <ph name="SHARE_OPENING_ICON" /> lalu <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Periksa keamanan sandi</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Ekspor Sandi...</translation>
 <translation id="7947953824732555851">Terima dan masuk</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index 6bbb25e..46f0f064 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Cronologia di navigazione</translation>
 <translation id="7887198238286927132">Per tutelare la tua privacy, Chrome non compilerà automaticamente questo campo.</translation>
 <translation id="7918293828610777738">Il tuo elenco di lettura è disponibile offline. Per aggiungere una pagina all'elenco di lettura, tocca <ph name="SHARE_OPENING_ICON" />, quindi <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Controlla la sicurezza delle password</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Esporta password...</translation>
 <translation id="7947953824732555851">Accetta e accedi</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index 4f0c663c..8bb23de2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -475,6 +475,7 @@
 <translation id="7859704718976024901">היסטוריית הגלישה</translation>
 <translation id="7887198238286927132">‏כדי לשמור על הפרטיות שלך, מערכת Chrome לא ממלאת את השדה הזה באופן אוטומטי.</translation>
 <translation id="7918293828610777738">אפשר לגשת לרשימת הקריאה במצב לא מקוון. כדי להוסיף דף לרשימת הקריאה צריך להקיש על <ph name="SHARE_OPENING_ICON" /> ועל <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">בדיקת אבטחה של הסיסמאות</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">ייצוא סיסמאות...</translation>
 <translation id="7947953824732555851">קבל והיכנס</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index 99b67ab..39623cec 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">閲覧履歴</translation>
 <translation id="7887198238286927132">プライバシー保護のため、Chrome ではこの欄の自動入力は行われません。</translation>
 <translation id="7918293828610777738">リーディング リストをオフラインで利用できます。リーディング リストにページを追加するには、<ph name="SHARE_OPENING_ICON" /> &gt; [<ph name="READ_LATER_TEXT" />] をタップします。</translation>
+<translation id="7930681627240672853">パスワードの安全性を確認</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">パスワードをエクスポート...</translation>
 <translation id="7947953824732555851">同意してログイン</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index 4d15c75..3dba84b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸ</translation>
 <translation id="7887198238286927132">ನಿಮ್ಮ ಗೌಪ್ಯತೆಯನ್ನು ರಕ್ಷಿಸಲು, Chrome ಈ ಫೀಲ್ಡ್ ಅನ್ನು ಸ್ವಯಂ ಭರ್ತಿ ಮಾಡುವುದಿಲ್ಲ.</translation>
 <translation id="7918293828610777738">ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಯು ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿ ಲಭ್ಯವಿದೆ. ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಯಲ್ಲಿ ಪುಟವನ್ನು ಸೇರಿಸಲು, <ph name="SHARE_OPENING_ICON" /> ಟ್ಯಾಪ್ ಮಾಡಿ ನಂತರ <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">ಪಾಸ್‌ವರ್ಡ್ ಸುರಕ್ಷತೆಯನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಎಕ್ಸ್‌ಪೋರ್ಟ್ ಮಾಡಿ...</translation>
 <translation id="7947953824732555851">ಸಮ್ಮತಿಸಿ ಮತ್ತು ಸೈನ್‌ ಇನ್‌ ಮಾಡಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
index ffa418a..dbbb79f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">인터넷 사용 기록</translation>
 <translation id="7887198238286927132">Chrome에서는 개인정보 보호를 위해 이 입력란을 자동 완성하지 않습니다.</translation>
 <translation id="7918293828610777738">읽기 목록을 오프라인으로 사용할 수 있습니다. 읽기 목록에 페이지를 추가하려면 <ph name="SHARE_OPENING_ICON" />, <ph name="READ_LATER_TEXT" />을(를) 차례로 탭하세요.</translation>
+<translation id="7930681627240672853">비밀번호 보안 확인</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">비밀번호 내보내기...</translation>
 <translation id="7947953824732555851">수락 및 로그인</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index 0b3b5385..ac63f82 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Naršymo istorija</translation>
 <translation id="7887198238286927132">Siekiant apsaugoti jūsų privatumą, „Chrome“ šio lauko automatiškai nepildys.</translation>
 <translation id="7918293828610777738">Skaitymo sąrašas pasiekiamas neprisijungus. Kad pridėtumėte puslapį prie skaitymo sąrašo, palieskite <ph name="SHARE_OPENING_ICON" />, tada „<ph name="READ_LATER_TEXT" />“.</translation>
+<translation id="7930681627240672853">Slaptažodžių saugumo patikra</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportuoti slaptažodžius...</translation>
 <translation id="7947953824732555851">Sutikti ir prisij.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index 06b5508..1087a9b6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Pārlūkošanas vēsture</translation>
 <translation id="7887198238286927132">Lai aizsargātu jūsu konfidencialitāti, Chrome neveiks šī lauka automātisko aizpildi.</translation>
 <translation id="7918293828610777738">Jūsu lasīšanas saraksts ir pieejams bezsaistē. Lai pievienotu lapu lasīšanas sarakstam, pieskarieties vienumam <ph name="SHARE_OPENING_ICON" />, pēc tam — <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Paroļu drošības pārbaude</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportēt paroles...</translation>
 <translation id="7947953824732555851">Pieņemt un pierakst.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index dd30d9c0..c969940 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">ബ്രൗസിംഗ് ചരിത്രം</translation>
 <translation id="7887198238286927132">നിങ്ങളുടെ സ്വകാര്യത പരിരക്ഷിക്കാൻ, Chrome ഈ ഫീൽഡ് സ്വമേധയാ പൂരിപ്പിക്കില്ല.</translation>
 <translation id="7918293828610777738">നിങ്ങളുടെ വായനാ ലിസ്‌റ്റ് ഓഫ്‌ലൈനായി ലഭ്യമാണ്. വായനാ ലിസ്‌റ്റിലേക്ക് ഒരു പേജ് ചേർക്കാൻ, ആദ്യം <ph name="SHARE_OPENING_ICON" />, തുടർന്ന് <ph name="READ_LATER_TEXT" /> എന്നിവ ടാപ്പ് ചെയ്യുക.</translation>
+<translation id="7930681627240672853">പാസ്‌വേഡ് സുരക്ഷ പരിശോധിക്കുക</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യുക...</translation>
 <translation id="7947953824732555851">അംഗീകരിച്ച് സൈൻ ഇൻ ചെയ്യുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 719590f..c3da4c6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -477,6 +477,7 @@
 <translation id="7859704718976024901">ब्राउझिंग इतिहास</translation>
 <translation id="7887198238286927132">तुमच्या गोपनीयतेचे संरक्षण करण्‍यासाठी, Chrome हा भाग अॉटोफिल करणार नाही.</translation>
 <translation id="7918293828610777738">तुमची वाचन सूची ऑफलाइन उपलब्ध आहे. तुमच्या वाचन सूचीमध्‍ये पेज जोडण्‍यासाठी, <ph name="SHARE_OPENING_ICON" /> त्यानंतर <ph name="READ_LATER_TEXT" /> वर टॅप करा.</translation>
+<translation id="7930681627240672853">पासवर्डची सुरक्षितता तपासा</translation>
 <translation id="7938254975914653459">फेसटाइम</translation>
 <translation id="7939128259257418052">पासवर्ड एक्सपोर्ट करा...</translation>
 <translation id="7947953824732555851">स्वीकार करा आणि साइन इन करा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index 841713f74c..71019d7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Sejarah Penyemakan Imbas</translation>
 <translation id="7887198238286927132">Untuk melindungi privasi anda, Chrome tidak akan mengisi medan ini secara automatik.</translation>
 <translation id="7918293828610777738">Senarai bacaan anda tersedia di luar talian. Untuk menambahkan halaman pada senarai bacaan anda, ketik  <ph name="SHARE_OPENING_ICON" /> kemudian <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Semak keselamatan kata laluan</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksport Kata Laluan...</translation>
 <translation id="7947953824732555851">Terima dan log masuk</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index 6473b56..32baad83 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Browsegeschiedenis</translation>
 <translation id="7887198238286927132">Ter bescherming van je privacy wordt dit veld niet automatisch ingevuld door Chrome.</translation>
 <translation id="7918293828610777738">Je leeslijst is offline beschikbaar. Tik op <ph name="SHARE_OPENING_ICON" /> en vervolgens op <ph name="READ_LATER_TEXT" /> om een pagina toe te voegen aan je leeslijst.</translation>
+<translation id="7930681627240672853">Wachtwoordveiligheid controleren</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Wachtwoorden exporteren...</translation>
 <translation id="7947953824732555851">Accepteren en inloggen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index 9c22118..eb52395 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Nettleserlogg</translation>
 <translation id="7887198238286927132">For å beskytte personvernet ditt fyller ikke Chrome automatisk ut dette feltet.</translation>
 <translation id="7918293828610777738">Leselisten din er tilgjengelig uten nett. Du kan legge til sider i leselisten ved å trykke på <ph name="SHARE_OPENING_ICON" /> og deretter <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Sjekk passordsikkerheten</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportér passord</translation>
 <translation id="7947953824732555851">Godta og logg på</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 366d0ba..17a95e36f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Historia przeglądania</translation>
 <translation id="7887198238286927132">Aby chronić Twoją prywatność, Chrome nie będzie automatycznie wypełniać tego pola.</translation>
 <translation id="7918293828610777738">Twoja lista Do przeczytania jest dostępna offline. Aby dodać do niej stronę, kliknij <ph name="SHARE_OPENING_ICON" />, a następnie <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Sprawdź bezpieczeństwo haseł</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportuj hasła…</translation>
 <translation id="7947953824732555851">Zaakceptuj i zaloguj się</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 7de37f4..8437c83 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Histórico de navegação</translation>
 <translation id="7887198238286927132">Para proteger sua privacidade, o Chrome não preencherá esse campo automaticamente.</translation>
 <translation id="7918293828610777738">Sua lista de leitura está disponível off-line. Para adicionar uma página à lista, toque em <ph name="SHARE_OPENING_ICON" /> e depois em <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Verificar segurança da senha</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportar senhas…</translation>
 <translation id="7947953824732555851">Aceitar/fazer login</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index 06173b0..dc80c2a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Histórico de navegação</translation>
 <translation id="7887198238286927132">Para proteger a sua privacidade, o Chrome não irá preencher automaticamente este campo.</translation>
 <translation id="7918293828610777738">A sua lista de leitura está disponível offline. Para adicionar uma página à mesma, toque em <ph name="SHARE_OPENING_ICON" /> e, em seguida, em <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Verificar a segurança da palavra-passe</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportar palavras-passe...</translation>
 <translation id="7947953824732555851">Aceitar e in. sessão</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 8d1559f..59ceb75 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Istoricul de navigare</translation>
 <translation id="7887198238286927132">Pentru a-ți proteja confidențialitatea, Chrome nu va completa automat acest câmp.</translation>
 <translation id="7918293828610777738">Lista de lectură este disponibilă offline. Pentru a adăuga o pagină în lista de lectură, atinge <ph name="SHARE_OPENING_ICON" />, apoi <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Verifică siguranța parolei</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportă parolele...</translation>
 <translation id="7947953824732555851">Accept și conectare</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
index afdce0e5..c50ed53 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ru.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">История просмотра веб-страниц</translation>
 <translation id="7887198238286927132">Чтобы обеспечить конфиденциальность ваших данных, Chrome не использует автозаполнение для этого поля.</translation>
 <translation id="7918293828610777738">Список для чтения доступен без подключения к Интернету. Чтобы добавить в него страницу, нажмите <ph name="SHARE_OPENING_ICON" />, а затем –<ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Проверка безопасности паролей</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Экспорт паролей...</translation>
 <translation id="7947953824732555851">Принять и войти</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 59a9c57e..4cc559c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">História prehliadania</translation>
 <translation id="7887198238286927132">Chrome automaticky nedoplní toho pole, čím ochráni vaše súkromie.</translation>
 <translation id="7918293828610777738">Váš čitateľský zoznam je k dispozícii offline. Ak doň chcete pridať stránku, klepnite na položku <ph name="SHARE_OPENING_ICON" /> a potom na možnosť <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Skontrolovať bezpečnosť hesla</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportovať heslá...</translation>
 <translation id="7947953824732555851">Prijať a prihl. sa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index a6996a8..950722a 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Zgodovina brskanja</translation>
 <translation id="7887198238286927132">Chrome zaradi varovanja vaše zasebnosti ne bo samodejno izpolnil tega polja.</translation>
 <translation id="7918293828610777738">Bralni seznam je na voljo brez povezave. Če želite dodati stran na bralni seznam, se dotaknite <ph name="SHARE_OPENING_ICON" />, nato pa <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Preverjanje varnosti gesla</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Izvozi gesla ...</translation>
 <translation id="7947953824732555851">Sprejem in prijava</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index 1b044e8..51fca62 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Историја прегледања</translation>
 <translation id="7887198238286927132">Ради заштите приватности Chrome неће аутоматски попуњавати ово поље.</translation>
 <translation id="7918293828610777738">Листа за читање је доступна офлајн. Да бисте додали страницу на листу за читање, додирните <ph name="SHARE_OPENING_ICON" />, па <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Проверите безбедност лозинке</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Извези лозинке…</translation>
 <translation id="7947953824732555851">Прихвати и пријави ме</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
index 8c1538d0..dc1b0f7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Webbhistorik</translation>
 <translation id="7887198238286927132">Av sekretesskäl fylls det här fältet inte i automatiskt.</translation>
 <translation id="7918293828610777738">Läslistan är tillgänglig offline. Om du vill lägga till en sida i läslistan trycker du på <ph name="SHARE_OPENING_ICON" /> följt av <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Kontrollera om lösenordet är säkert</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportera lösenord …</translation>
 <translation id="7947953824732555851">Godkänn och logga in</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
index 5b4ddc0a..d03111b2ea 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Historia ya Kuvinjari</translation>
 <translation id="7887198238286927132">Ili kulinda faragha yako, Chrome haitajaza kiotomatiki sehemu hii.</translation>
 <translation id="7918293828610777738">Orodha yako ya kusoma inapatikana nje ya mtandao. Ili uongeze ukurasa kwenye orodha yako ya kusoma, gusa <ph name="SHARE_OPENING_ICON" /> kisha <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Angalia usalama wa nenosiri</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Hamisha Manenosiri...</translation>
 <translation id="7947953824732555851">Kubali na uingie</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
index 1d95b4c..842a739 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">உலாவல் வரலாறு</translation>
 <translation id="7887198238286927132">உங்கள் தனியுரிமையைப் பாதுகாக்க, Chrome இந்தப் புலத்தைத் தானாக நிரப்பாது.</translation>
 <translation id="7918293828610777738">உங்கள் வாசிப்புப் பட்டியலை ஆஃப்லைனில் அணுகலாம். வாசிப்புப் பட்டியலில் ஒரு பக்கத்தைச் சேர்க்க, <ph name="SHARE_OPENING_ICON" /> ஐகானைத் தட்டிய பின்னர் <ph name="READ_LATER_TEXT" /> என்பதைத் தட்டவும்.</translation>
+<translation id="7930681627240672853">கடவுச்சொல் பாதுகாப்பைச் சரிபார்</translation>
 <translation id="7938254975914653459">ஃபேஸ்டைம்</translation>
 <translation id="7939128259257418052">கடவுச்சொற்களை ஏற்று...</translation>
 <translation id="7947953824732555851">ஏற்று உள்நுழைக</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index aeb1a5e..b9527ac 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">బ్రౌజింగ్ చరిత్ర</translation>
 <translation id="7887198238286927132">మీ గోప్యతను సంరక్షించడానికి, Chrome ఈ ఫీల్డ్‌ను ఆటోమేటిక్‌గా పూరించదు.</translation>
 <translation id="7918293828610777738">మీ చదవాల్సిన జాబితా ఆఫ్‌లైన్‌లో అందుబాటులో ఉంది. మీ చదవాల్సిన జాబితాకు పేజీని జోడించడానికి, <ph name="SHARE_OPENING_ICON" />ని నొక్కి తర్వాత <ph name="READ_LATER_TEXT" /> ఎంపికను నొక్కండి.</translation>
+<translation id="7930681627240672853">పాస్‌వర్డ్ భద్రతను తనిఖీ చేయి</translation>
 <translation id="7938254975914653459">ఫేస్‌టైమ్</translation>
 <translation id="7939128259257418052">పాస్‌వర్డ్‌లను ఎగుమతి చేయి...</translation>
 <translation id="7947953824732555851">ఆమోదించి, సైన్ ఇన్ చేయండి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 001d9df..26375578 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">ประวัติการเข้าชม</translation>
 <translation id="7887198238286927132">Chrome จะไม่ป้อนข้อความลงในช่องนี้โดยอัตโนมัติเพื่อปกป้องความเป็นส่วนตัวของคุณ</translation>
 <translation id="7918293828610777738">เรื่องรออ่านของคุณพร้อมใช้งานในแบบออฟไลน์ หากต้องการเพิ่มหน้าลงในเรื่องรออ่าน ให้แตะ <ph name="SHARE_OPENING_ICON" /> แล้วแตะ "<ph name="READ_LATER_TEXT" />"</translation>
+<translation id="7930681627240672853">ตรวจสอบความปลอดภัยของรหัสผ่าน</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">ส่งออกรหัสผ่าน...</translation>
 <translation id="7947953824732555851">ยอมรับและลงชื่อเข้าใช้</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index dd9c1c6..493ab58 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Tarama Geçmişi</translation>
 <translation id="7887198238286927132">Gizliliğinizi korumak için Chrome bu alanı otomatik olarak doldurmayacaktır.</translation>
 <translation id="7918293828610777738">Okuma listeniz çevrimdışı olarak kullanılabilir. Okuma listenize sayfa eklemek için önce <ph name="SHARE_OPENING_ICON" />, ardından <ph name="READ_LATER_TEXT" /> öğesine dokunun.</translation>
+<translation id="7930681627240672853">Şifre güvenliğini kontrol et</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Şifreleri Dışa Aktar...</translation>
 <translation id="7947953824732555851">Kabul et ve oturum aç</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
index 3d50242..36cac1e7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">Історія веб-перегляду</translation>
 <translation id="7887198238286927132">Щоб захистити вашу конфіденційність, Chrome не буде автоматично заповнювати це поле.</translation>
 <translation id="7918293828610777738">Ваш список читання доступний офлайн. Щоб додати до нього сторінку, торкніться значка <ph name="SHARE_OPENING_ICON" /> й виберіть <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Перевіряти безпеку паролів</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Експортувати паролі…</translation>
 <translation id="7947953824732555851">Прийняти й увійти</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
index 2b36d29..49f846c9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -18,7 +18,7 @@
 <translation id="1176932207622159128">Không thể lưu ảnh</translation>
 <translation id="1180526666083833456">Đồng bộ hóa và cá nhân hóa trên các thiết bị.</translation>
 <translation id="1181037720776840403">Xóa</translation>
-<translation id="1207113853726624428">Tìm thông tin mới</translation>
+<translation id="1207113853726624428">Lượt tìm kiếm mới</translation>
 <translation id="1209206284964581585">Ẩn ngay bây giờ</translation>
 <translation id="1219674500290482172">Không thể kết nối Internet.</translation>
 <translation id="122699739164161391">Đóng tất cả các tab</translation>
@@ -129,7 +129,7 @@
 <translation id="2712127207578915686">Không thể mở tệp</translation>
 <translation id="2718352093833049315">Chỉ trên Wi-Fi</translation>
 <translation id="2747003861858887689">Trường trước</translation>
-<translation id="2773292004659987824">Tìm kiếm ẩn danh</translation>
+<translation id="2773292004659987824">Lượt tìm kiếm ẩn danh</translation>
 <translation id="2780046210906776326">Ko có TK email nào</translation>
 <translation id="2781692009645368755">Google Pay</translation>
 <translation id="2800683595868705743">Rời khỏi Trình chuyển đổi tab</translation>
@@ -412,6 +412,7 @@
 <translation id="6858855187367714033">Đã quét</translation>
 <translation id="6859944681507688231">Để quét mã QR hoặc thẻ tín dụng, hãy bật máy ảnh trong phần cài đặt.</translation>
 <translation id="6873263987691478642">Chế độ xem phân tách</translation>
+<translation id="6888009575607455378">Bạn có chắc chắn muốn hủy các nội dung mình thay đổi không?</translation>
 <translation id="6896758677409633944">Sao chép</translation>
 <translation id="6903907808598579934">Bật đồng bộ hóa</translation>
 <translation id="6914583639806229067">Tìm kiếm hình ảnh bạn đã sao chép</translation>
@@ -475,6 +476,7 @@
 <translation id="7859704718976024901">Lịch sử duyệt web</translation>
 <translation id="7887198238286927132">Để bảo vệ quyền riêng tư của bạn, Chrome sẽ không tự động điền trường này.</translation>
 <translation id="7918293828610777738">Danh sách đọc của bạn vẫn dùng được khi không có mạng. Để thêm một trang vào danh sách đọc, hãy nhấn vào biểu tượng <ph name="SHARE_OPENING_ICON" /> rồi nhấn vào <ph name="READ_LATER_TEXT" />.</translation>
+<translation id="7930681627240672853">Kiểm tra độ an toàn của mật khẩu</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Xuất mật khẩu...</translation>
 <translation id="7947953824732555851">Chấp nhận &amp; đăng nhập</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
index e49bfdc..79da1ea 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">浏览记录</translation>
 <translation id="7887198238286927132">为保护您的隐私,Chrome 不会自动填充此字段。</translation>
 <translation id="7918293828610777738">您的阅读清单支持离线访问。要将某个网页添加到该清单中,请依次点按 <ph name="SHARE_OPENING_ICON" /> 和“<ph name="READ_LATER_TEXT" />”。</translation>
+<translation id="7930681627240672853">检查密码安全性</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">导出密码…</translation>
 <translation id="7947953824732555851">接受并登录</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 41da3d1..f1ecebe2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -476,6 +476,7 @@
 <translation id="7859704718976024901">瀏覽記錄</translation>
 <translation id="7887198238286927132">為保護個人隱私,Chrome 不會自動填入這個欄位。</translation>
 <translation id="7918293828610777738">閱讀清單可供離線存取。如要將網頁加入閱讀清單,請依序輕觸 <ph name="SHARE_OPENING_ICON" /> &gt; [<ph name="READ_LATER_TEXT" />]。</translation>
+<translation id="7930681627240672853">檢查密碼安全性</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">匯出密碼...</translation>
 <translation id="7947953824732555851">接受並登入</translation>
diff --git a/ios/chrome/browser/autofill/automation/BUILD.gn b/ios/chrome/browser/autofill/automation/BUILD.gn
index 4cc06b9..0e51f1e8 100644
--- a/ios/chrome/browser/autofill/automation/BUILD.gn
+++ b/ios/chrome/browser/autofill/automation/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 source_set("eg_tests") {
+  defines = [ "CHROME_EARL_GREY_1" ]
   configs += [ "//build/config/compiler:enable_arc" ]
   testonly = true
   sources = [
diff --git a/ios/chrome/browser/autofill/automation/automation_action_egtest.mm b/ios/chrome/browser/autofill/automation/automation_action_egtest.mm
index 2822d59..87e6bd1 100644
--- a/ios/chrome/browser/autofill/automation/automation_action_egtest.mm
+++ b/ios/chrome/browser/autofill/automation/automation_action_egtest.mm
@@ -2,22 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import <EarlGrey/EarlGrey.h>
-
+#include "base/strings/sys_string_conversions.h"
 #include "base/values.h"
 #import "ios/chrome/browser/autofill/automation/automation_action.h"
-#import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
-#import "ios/web/public/test/js_test_util.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
 
-const char kTestPageDirectory[] = "components/test/data/autofill/";
-const char kTestPageUrl[] = "/credit_card_upload_form_address_and_cc.html";
+const char kTestPageUrl[] = "/components/test/data/autofill/"
+                            "credit_card_upload_form_address_and_cc.html";
 
 // Tests each automation that can be performed, by performing them individually
 // against a self-hosted webpage and verifying the action was performed through
@@ -30,8 +28,9 @@
 - (void)setUp {
   [super setUp];
 
-  self.testServer->ServeFilesFromSourceDirectory(
-      base::FilePath(FILE_PATH_LITERAL(kTestPageDirectory)));
+  NSString* bundlePath = [NSBundle bundleForClass:[self class]].resourcePath;
+  self.testServer->ServeFilesFromDirectory(
+      base::FilePath(base::SysNSStringToUTF8(bundlePath)));
   XCTAssertTrue(self.testServer->Start());
 
   [ChromeEarlGrey loadURL:self.testServer->GetURL(kTestPageUrl)];
@@ -47,12 +46,11 @@
   AutomationAction* action = [AutomationAction actionWithValueDictionary:dict];
   [action execute];
 
-  NSError* error;
-  id result = chrome_test_util::ExecuteJavaScript(
-      @"document.getElementsByName(\"name_address\")[0].value == \"John "
-      @"Smith\"",
-      &error);
-  GREYAssert([result boolValue] && !error,
+  id result = [ChromeEarlGrey
+      executeJavaScript:
+          @"document.getElementsByName(\"name_address\")[0].value == \"John "
+          @"Smith\""];
+  GREYAssert([result boolValue],
              @"Click automation action did not populate the name field.");
 }
 
@@ -88,11 +86,10 @@
       [AutomationAction actionWithValueDictionary:selectDict];
   [selectAction execute];
 
-  NSError* error;
-  id result = chrome_test_util::ExecuteJavaScript(
-      @"document.getElementsByName(\"cc_month_exp\")[0].value == \"6\"",
-      &error);
-  GREYAssert([result boolValue] && !error,
+  id result = [ChromeEarlGrey
+      executeJavaScript:
+          @"document.getElementsByName(\"cc_month_exp\")[0].value == \"6\""];
+  GREYAssert([result boolValue],
              @"Select automation action did not change the dropdown.");
 }
 
diff --git a/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.cc b/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.cc
index 52978bd9..d99e37c 100644
--- a/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.cc
+++ b/ios/chrome/browser/send_tab_to_self/ios_send_tab_to_self_infobar_delegate.cc
@@ -11,10 +11,10 @@
 #include "components/send_tab_to_self/send_tab_to_self_entry.h"
 #include "components/send_tab_to_self/send_tab_to_self_metrics.h"
 #include "components/send_tab_to_self/send_tab_to_self_model.h"
+#include "ios/chrome/grit/ios_strings.h"
 #include "ios/chrome/grit/ios_theme_resources.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/window_open_disposition.h"
-#include "ui/strings/grit/ui_strings.h"
 
 namespace send_tab_to_self {
 
diff --git a/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc b/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc
index dd246bb..76589dd 100644
--- a/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc
+++ b/ios/chrome/browser/sync/profile_sync_service_factory_unittest.cc
@@ -43,7 +43,7 @@
  protected:
   // Returns the collection of default datatypes.
   std::vector<syncer::ModelType> DefaultDatatypes() {
-    static_assert(39 == syncer::ModelType::NUM_ENTRIES,
+    static_assert(42 == syncer::ModelType::NUM_ENTRIES,
                   "When adding a new type, you probably want to add it here as "
                   "well (assuming it is already enabled).");
 
diff --git a/ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.mm b/ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.mm
index f16f96b..47b8fc3 100644
--- a/ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.mm
+++ b/ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.mm
@@ -40,10 +40,12 @@
 // Container Stack constants.
 const CGFloat kContainerStackSpacing = 10.0;
 const CGFloat kContainerStackVerticalPadding = 18.0;
-const CGFloat kContainerStackHorizontalPadding = 18.0;
+const CGFloat kContainerStackHorizontalPadding = 15.0;
 
 // Icon constants.
-const CGFloat kIconWidth = 25.0;
+const CGFloat kIconWidth = 28.0;
+const CGFloat kIconHeight = 28.0;
+const CGFloat kIconCornerRadius = 5.0;
 
 // Gesture constants.
 const CGFloat kChangeInPositionForDismissal = -15.0;
@@ -125,12 +127,41 @@
   self.view.accessibilityCustomActions = [self accessibilityActions];
 
   // Icon setup.
-  UIImageView* iconImageView = nil;
+  UIView* iconContainerView = nil;
   if (self.iconImage) {
     self.iconImage = [self.iconImage
         imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
-    iconImageView = [[UIImageView alloc] initWithImage:self.iconImage];
+    UIImageView* iconImageView =
+        [[UIImageView alloc] initWithImage:self.iconImage];
     iconImageView.contentMode = UIViewContentModeScaleAspectFit;
+    iconImageView.translatesAutoresizingMaskIntoConstraints = NO;
+
+    UIView* backgroundIconView =
+        [[UIView alloc] initWithFrame:iconImageView.frame];
+    backgroundIconView.backgroundColor = [UIColor colorNamed:kBlueHaloColor];
+    backgroundIconView.layer.cornerRadius = kIconCornerRadius;
+    backgroundIconView.translatesAutoresizingMaskIntoConstraints = NO;
+
+    iconContainerView = [[UIView alloc] init];
+    [iconContainerView addSubview:backgroundIconView];
+    [iconContainerView addSubview:iconImageView];
+    iconContainerView.translatesAutoresizingMaskIntoConstraints = NO;
+
+    [NSLayoutConstraint activateConstraints:@[
+      [backgroundIconView.centerXAnchor
+          constraintEqualToAnchor:iconContainerView.centerXAnchor],
+      [backgroundIconView.centerYAnchor
+          constraintEqualToAnchor:iconContainerView.centerYAnchor],
+      [backgroundIconView.widthAnchor constraintEqualToConstant:kIconWidth],
+      [backgroundIconView.heightAnchor constraintEqualToConstant:kIconHeight],
+      [iconImageView.centerXAnchor
+          constraintEqualToAnchor:iconContainerView.centerXAnchor],
+      [iconImageView.centerYAnchor
+          constraintEqualToAnchor:iconContainerView.centerYAnchor],
+      [iconImageView.widthAnchor constraintEqualToConstant:kIconWidth],
+      [iconContainerView.widthAnchor
+          constraintEqualToAnchor:backgroundIconView.widthAnchor],
+    ]];
   }
 
   // Labels setup.
@@ -180,10 +211,8 @@
   // Container Stack setup.
   UIStackView* containerStack = [[UIStackView alloc] init];
   // Check if it should have an icon.
-  if (iconImageView) {
-    [containerStack addArrangedSubview:iconImageView];
-    [iconImageView.widthAnchor constraintEqualToConstant:kIconWidth].active =
-        YES;
+  if (iconContainerView) {
+    [containerStack addArrangedSubview:iconContainerView];
   }
   // Add labels.
   [containerStack addArrangedSubview:labelsStackView];
diff --git a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm
index 90e4fea3..0f70e3b 100644
--- a/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/password/passwords_table_view_controller_unittest.mm
@@ -44,11 +44,6 @@
 
 namespace {
 
-typedef struct {
-  bool export_enabled;
-  int section_offset;
-} ExportPasswordsFeatureStatus;
-
 class PasswordsTableViewControllerTest : public ChromeTableViewControllerTest {
  protected:
   PasswordsTableViewControllerTest() = default;
diff --git a/ios/chrome/browser/ui/webui/flags_ui.cc b/ios/chrome/browser/ui/webui/flags_ui.cc
index ea7bb62d..d236d42b 100644
--- a/ios/chrome/browser/ui/webui/flags_ui.cc
+++ b/ios/chrome/browser/ui/webui/flags_ui.cc
@@ -218,6 +218,7 @@
   source->AddLocalizedString("enabled", IDS_FLAGS_UI_ENABLED_FEATURE);
   source->AddLocalizedString("experiment-enabled",
                              IDS_FLAGS_UI_EXPERIMENT_ENABLED);
+  source->AddLocalizedString("heading", IDS_FLAGS_UI_TITLE);
   source->AddLocalizedString("no-results", IDS_FLAGS_UI_NO_RESULTS);
   source->AddLocalizedString("not-available-platform",
                              IDS_FLAGS_UI_NOT_AVAILABLE_ON_PLATFORM);
diff --git a/media/gpu/linux/BUILD.gn b/media/gpu/linux/BUILD.gn
index eaff735..a3e72784 100644
--- a/media/gpu/linux/BUILD.gn
+++ b/media/gpu/linux/BUILD.gn
@@ -56,6 +56,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "mailbox_video_frame_converter_unittest.cc",
     "platform_video_frame_pool_unittest.cc",
     "platform_video_frame_utils_unittest.cc",
   ]
@@ -66,6 +67,7 @@
     "//media",
     "//media/gpu:common",
     "//skia",
+    "//testing/gmock",
     "//testing/gtest",
     "//ui/gfx:memory_buffer",
     "//ui/gfx/geometry",
diff --git a/media/gpu/linux/mailbox_video_frame_converter.h b/media/gpu/linux/mailbox_video_frame_converter.h
index f4ad2f3..d5200b8 100644
--- a/media/gpu/linux/mailbox_video_frame_converter.h
+++ b/media/gpu/linux/mailbox_video_frame_converter.h
@@ -61,6 +61,8 @@
   bool HasPendingFrames() const override;
 
  private:
+  friend class MailboxVideoFrameConverterTest;
+
   // Use VideoFrame::unique_id() as internal VideoFrame indexing.
   using UniqueID = decltype(std::declval<VideoFrame>().unique_id());
 
diff --git a/media/gpu/linux/mailbox_video_frame_converter_unittest.cc b/media/gpu/linux/mailbox_video_frame_converter_unittest.cc
new file mode 100644
index 0000000..a05c6bf
--- /dev/null
+++ b/media/gpu/linux/mailbox_video_frame_converter_unittest.cc
@@ -0,0 +1,62 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/gpu/linux/mailbox_video_frame_converter.h"
+
+#include "base/bind.h"
+#include "base/test/task_environment.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using ::testing::_;
+
+namespace media {
+
+namespace {
+
+VideoFrame* UnwrapVideoFrame(const VideoFrame& frame) {
+  return const_cast<VideoFrame*>(&frame);
+}
+
+base::WeakPtr<gpu::GpuChannel> GetGpuChannel() {
+  return nullptr;
+}
+
+}  // anonymous namespace
+
+class MailboxVideoFrameConverterTest : public testing::Test {
+ public:
+  MailboxVideoFrameConverterTest()
+      : converter_(new MailboxVideoFrameConverter(
+            base::BindRepeating(&UnwrapVideoFrame),
+            base::ThreadTaskRunnerHandle::Get(),
+            base::BindRepeating(&GetGpuChannel))) {}
+  ~MailboxVideoFrameConverterTest() override = default;
+
+  void TearDown() override {
+    // |converter_| might have created resources that need to be cleaned up.
+    converter_.reset();
+    task_environment_.RunUntilIdle();
+  }
+
+  MOCK_METHOD1(OutputCB, void(scoped_refptr<VideoFrame>));
+
+  base::test::TaskEnvironment task_environment_;
+
+  std::unique_ptr<VideoFrameConverter> converter_;
+
+  DISALLOW_COPY_AND_ASSIGN(MailboxVideoFrameConverterTest);
+};
+
+TEST_F(MailboxVideoFrameConverterTest, Initialize) {
+  EXPECT_CALL(*this, OutputCB(_)).Times(0);
+  converter_->Initialize(
+      base::ThreadTaskRunnerHandle::Get(),
+      base::BindRepeating(&MailboxVideoFrameConverterTest::OutputCB,
+                          base::Unretained(this)));
+  EXPECT_FALSE(converter_->HasPendingFrames());
+}
+
+}  // namespace media
diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h
index f46123e..f503319 100644
--- a/net/socket/socket_test_util.h
+++ b/net/socket/socket_test_util.h
@@ -540,7 +540,7 @@
   // should use a SYNCHRONOUS event with a return value of ERR_IO_PENDING
   // instead.
   bool IsPaused() const;
-  // Resumes events once |this| is in the paused state.  The next even will
+  // Resumes events once |this| is in the paused state.  The next event will
   // occur synchronously with the call if it can.
   void Resume();
   void RunUntilPaused();
@@ -561,7 +561,7 @@
   // Defines the state for the read or write path.
   enum IoState {
     IDLE,        // No async operation is in progress.
-    PENDING,     // An async operation in waiting for another opteration to
+    PENDING,     // An async operation in waiting for another operation to
                  // complete.
     COMPLETING,  // A task has been posted to complete an async operation.
     PAUSED,      // IO is paused until Resume() is called.
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc
index e1ee2fd..3a6f0cd9 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc
@@ -392,6 +392,11 @@
 
 TraceEventDataSource* g_trace_event_data_source_for_testing = nullptr;
 
+// crbug.com/914092: This has to be large enough for DevTools to be able to
+// start up and telemetry to start tracing through it before the buffer is
+// exhausted.
+constexpr size_t kMaxStartupWriterBufferSize = 10 * 1024 * 1024;
+
 }  // namespace
 
 // static
@@ -759,7 +764,7 @@
     // service.
     auto buffer_exhausted_policy = perfetto::BufferExhaustedPolicy::kDrop;
     trace_writer = startup_writer_registry_->CreateUnboundTraceWriter(
-        buffer_exhausted_policy);
+        buffer_exhausted_policy, kMaxStartupWriterBufferSize);
   } else if (producer_) {
     trace_writer = std::make_unique<perfetto::StartupTraceWriter>(
         producer_->CreateTraceWriter(target_buffer_));
diff --git a/testing/buildbot/filters/bfcache.chrome_public_test_apk.filter b/testing/buildbot/filters/bfcache.chrome_public_test_apk.filter
index 72f814e..1ee44b5 100644
--- a/testing/buildbot/filters/bfcache.chrome_public_test_apk.filter
+++ b/testing/buildbot/filters/bfcache.chrome_public_test_apk.filter
@@ -22,11 +22,10 @@
 -org.chromium.chrome.browser.infobar.InfoBarTest.testInfoBarForGeolocationDisappearsOnBack
 -org.chromium.chrome.browser.keyboard_accessory.PasswordGenerationIntegrationTest.testAutomaticGenerationUsePassword
 -org.chromium.chrome.browser.keyboard_accessory.PasswordGenerationIntegrationTest.testManualGenerationUsePassword
--org.chromium.chrome.browser.media.MediaLauncherActivityTest.testHandleImageIntent
--org.chromium.chrome.browser.media.MediaLauncherActivityTest.testHandleVideoIntent
+-org.chromium.chrome.browser.media.*
 -org.chromium.chrome.browser.notifications.NotificationPlatformBridgeIntentTest.testLaunchNotificationPreferencesForCategory
 -org.chromium.chrome.browser.notifications.NotificationPlatformBridgeIntentTest.testLaunchNotificationPreferencesForWebsite
--org.chromium.chrome.browser.offlinepages.indicator.OfflineIndicatorControllerTest.testDoNotShowOfflineIndicatorOnErrorPageWhenOffline
+-org.chromium.chrome.browser.offlinepages.*
 -org.chromium.chrome.browser.password_manager.OnboardingDialogIntegrationTest.testOnboardingAccepted
 -org.chromium.chrome.browser.password_manager.OnboardingDialogIntegrationTest.testOnboardingDismissedPressedBack
 -org.chromium.chrome.browser.password_manager.OnboardingDialogIntegrationTest.testOnboardingIsShown
diff --git a/testing/buildbot/filters/bfcache.content_browsertests.filter b/testing/buildbot/filters/bfcache.content_browsertests.filter
index f362aeaa..2ab98d0 100644
--- a/testing/buildbot/filters/bfcache.content_browsertests.filter
+++ b/testing/buildbot/filters/bfcache.content_browsertests.filter
@@ -58,7 +58,7 @@
 # FATAL:casting.h Security DCHECK failed: IsA<Derived>(from).
 # In content::RenderFrameProxy::OnSetFrameOwnerProperties()
 # https://crbug.com/999849
--WebContentsSplitCacheWithFrameOriginBrowserTest.SplitCache
+-WebContentsSplitCacheWithFrameOriginBrowserTest.SplitCache*
 
 # Histogram "PrefetchedSignedExchangeCache.Count" is recorded when the document
 # in the RenderFrameHost is replaced, or when the RenderFrameHost is deleted.
@@ -95,16 +95,25 @@
 # Failing on android only, need to be triaged, see https://crbug.com/1006267.
 -BackForwardCacheMetricsBrowserTest.Fetch
 -BackForwardCacheMetricsBrowserTest.XHR
--MSE_ClearKey/EncryptedMediaTest.ConfigChangeVideo_ClearToEncrypted/0
--WebContentsSplitCacheBrowserTestEnabled.SplitCache/1
 -WebRtcBrowserTest.CanSetupH264VideoCallOnSupportedDevice
 -WithoutCORBProtectionSniffing/CrossSiteDocumentBlockingTest.*
 -WithCORBProtectionSniffing/CrossSiteDocumentBlockingTest.*
 
 # Flaky on android only, need to be triaged, see https://crbug.com/1006267.
--IndexedDBBrowserTestWithVersion987654SSVData.DestroyTest
--MSE_ClearKey/EncryptedMediaTest.Playback_VideoAudio_WebM/0
+-IndexedDBBrowserTest*
+-MediaCanPlayTypeTest.*
 -MediaSessionImplBrowserTest.*
--MidiBrowserTest.RequestMIDIAccess
+-MediaSessionImplParamBrowserTest.*
+-MediaSourceTest.*
+-MidiBrowserTest.*
+-MHTMLGenerationTest/MHTMLGenerationTest.*
+-MSE_ClearKey/EncryptedMediaTest.*
+-MSE_ExternalClearKey/EncryptedMediaTest.*
+-NavigationControllerBrowserTest.BackOnBrowserInitiatedErrorPageNavigation
+-NavigationControllerBrowserTest.BackSameDocumentAfterBlockedSubframe
+-NavigationControllerBrowserTest.BrowserInitiatedLoadPostCommitErrorPageForSubframe
+-NavigationControllerBrowserTest.PageStateAfterForwardInCompetingFrames
+-NavigationControllerBrowserTest.ReplacedNavigationEntryData_Back
 -RenderViewHostTest.IsFocusedElementEditable
+-TouchInputBrowserTest.*
 -TouchpadPinchBrowserTest.*
diff --git a/testing/buildbot/filters/bfcache.unit_tests.filter b/testing/buildbot/filters/bfcache.unit_tests.filter
index 2ef0408..0918c5a 100644
--- a/testing/buildbot/filters/bfcache.unit_tests.filter
+++ b/testing/buildbot/filters/bfcache.unit_tests.filter
@@ -6,6 +6,7 @@
 # Crashing with:
 # [FATAL:deferred_sequenced_task_runner.cc(83)] Check failed: !target_task_runner_
 -ChromeBrowserMainExtraPartsMetricsTest.VerifyTouchEventsEnabledIsRecordedAfterPostBrowserStart
+-ChromeMetricsServiceClientTest.TestRegisterUKMProviders
 -ServicesTest.ConnectToFilePatch
 -SoundContentSettingObserverTest.*
 -SupervisedUserWhitelistInstallerTest.*
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 873d84b..3fd106d 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -1460,25 +1460,6 @@
             ]
         }
     ],
-    "CacheStorageSequence": [
-        {
-            "platforms": [
-                "windows",
-                "mac",
-                "chromeos",
-                "linux",
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled1",
-                    "enable_features": [
-                        "CacheStorageSequence"
-                    ]
-                }
-            ]
-        }
-    ],
     "CertDualVerificationTrial": [
         {
             "platforms": [
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index 2ec80bc..3d70bf2 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -148,22 +148,10 @@
     "platform/modules/mediastream/web_platform_media_stream_source.h",
     "platform/modules/mediastream/web_platform_media_stream_track.h",
     "platform/modules/mediastream/webrtc_uma_histograms.h",
-    "platform/modules/p2p/empty_network_manager.h",
-    "platform/modules/p2p/filtering_network_manager.h",
-    "platform/modules/p2p/ipc_network_manager.h",
-    "platform/modules/p2p/network_list_manager.h",
-    "platform/modules/p2p/network_list_observer.h",
-    "platform/modules/p2p/network_manager_uma.h",
-    "platform/modules/p2p/socket_client.h",
-    "platform/modules/p2p/socket_client_delegate.h",
     "platform/modules/peerconnection/audio_codec_factory.h",
     "platform/modules/peerconnection/rtc_event_log_output_sink.h",
     "platform/modules/peerconnection/rtc_event_log_output_sink_proxy_util.h",
-    "platform/modules/peerconnection/rtc_video_decoder_factory_util.h",
-    "platform/modules/peerconnection/rtc_video_encoder_factory_util.h",
-    "platform/modules/peerconnection/stun_field_trial.h",
     "platform/modules/peerconnection/two_keys_adapter_map.h",
-    "platform/modules/peerconnection/video_codec_factory.h",
     "platform/modules/peerconnection/webrtc_audio_sink.h",
     "platform/modules/peerconnection/webrtc_util.h",
     "platform/modules/peerconnection/webrtc_video_track_source.h",
@@ -385,6 +373,7 @@
     "web/modules/mediastream/web_media_stream_utils.h",
     "web/modules/mediastream/webmediaplayer_ms.h",
     "web/modules/peerconnection/media_stream_remote_video_source.h",
+    "web/modules/peerconnection/peer_connection_dependency_factory.h",
     "web/modules/service_worker/web_service_worker_context_client.h",
     "web/modules/service_worker/web_service_worker_context_proxy.h",
     "web/modules/webrtc/webrtc_audio_device_impl.h",
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom
index 99512e8b..2a7f261 100644
--- a/third_party/blink/public/mojom/web_feature/web_feature.mojom
+++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -2427,6 +2427,10 @@
   kInvalidFragmentDirective = 3043,
   kContactsManagerGetProperties = 3044,
   kEvaluateScriptMovedBetweenElementDocuments = 3045,
+  kPluginElementLoadedDocument = 3046,
+  kPluginElementLoadedImage = 3047,
+  kPluginElementLoadedExternal = 3048,
+
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/modules/p2p/DEPS b/third_party/blink/public/platform/modules/p2p/DEPS
deleted file mode 100644
index 66a3374..0000000
--- a/third_party/blink/public/platform/modules/p2p/DEPS
+++ /dev/null
@@ -1,4 +0,0 @@
-include_rules = [
-    "+net/base/ip_endpoint.h",
-    "+services/network/public/cpp/p2p_socket_type.h",
-]
diff --git a/third_party/blink/public/platform/modules/p2p/OWNERS b/third_party/blink/public/platform/modules/p2p/OWNERS
deleted file mode 100644
index de19af2..0000000
--- a/third_party/blink/public/platform/modules/p2p/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://third_party/blink/renderer/platform/p2p/OWNERS
diff --git a/third_party/blink/public/platform/modules/peerconnection/rtc_video_decoder_factory_util.h b/third_party/blink/public/platform/modules/peerconnection/rtc_video_decoder_factory_util.h
deleted file mode 100644
index de64ea4d..0000000
--- a/third_party/blink/public/platform/modules/peerconnection/rtc_video_decoder_factory_util.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_RTC_VIDEO_DECODER_FACTORY_UTIL_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_RTC_VIDEO_DECODER_FACTORY_UTIL_H_
-
-#include <memory>
-
-#include "third_party/blink/public/platform/web_common.h"
-
-namespace media {
-class GpuVideoAcceleratorFactories;
-}
-
-namespace webrtc {
-class VideoDecoderFactory;
-}
-
-namespace blink {
-
-// TODO(crbug.com/787254): Remove this API when its clients are Onion souped.
-BLINK_PLATFORM_EXPORT std::unique_ptr<webrtc::VideoDecoderFactory>
-CreateRTCVideoDecoderFactory(
-    media::GpuVideoAcceleratorFactories* gpu_factories);
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_RTC_VIDEO_DECODER_FACTORY_UTIL_H_
diff --git a/third_party/blink/public/platform/modules/peerconnection/rtc_video_encoder_factory_util.h b/third_party/blink/public/platform/modules/peerconnection/rtc_video_encoder_factory_util.h
deleted file mode 100644
index 45bafd3f..0000000
--- a/third_party/blink/public/platform/modules/peerconnection/rtc_video_encoder_factory_util.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_RTC_VIDEO_ENCODER_FACTORY_UTIL_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_RTC_VIDEO_ENCODER_FACTORY_UTIL_H_
-
-#include <memory>
-
-#include "third_party/blink/public/platform/web_common.h"
-
-namespace media {
-class GpuVideoAcceleratorFactories;
-}
-
-namespace webrtc {
-class VideoEncoderFactory;
-}
-
-namespace blink {
-
-// TODO(crbug.com/787254): Remove this API when its clients are Onion souped.
-BLINK_PLATFORM_EXPORT std::unique_ptr<webrtc::VideoEncoderFactory>
-CreateRTCVideoEncoderFactory(
-    media::GpuVideoAcceleratorFactories* gpu_factories);
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_RTC_VIDEO_ENCODER_FACTORY_UTIL_H_
diff --git a/third_party/blink/public/platform/modules/peerconnection/video_codec_factory.h b/third_party/blink/public/platform/modules/peerconnection/video_codec_factory.h
deleted file mode 100644
index 99a4fbd3..0000000
--- a/third_party/blink/public/platform/modules/peerconnection/video_codec_factory.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_VIDEO_CODEC_FACTORY_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_VIDEO_CODEC_FACTORY_H_
-
-#include "third_party/blink/public/platform/web_common.h"
-#include "third_party/webrtc/api/video_codecs/video_decoder_factory.h"
-#include "third_party/webrtc/api/video_codecs/video_encoder_factory.h"
-
-namespace media {
-class GpuVideoAcceleratorFactories;
-}
-
-namespace blink {
-
-// TODO(crbug.com/787254): Remove these APIs when their clients are Onion
-// souped.
-BLINK_PLATFORM_EXPORT std::unique_ptr<webrtc::VideoEncoderFactory>
-CreateWebrtcVideoEncoderFactory(
-    media::GpuVideoAcceleratorFactories* gpu_factories);
-BLINK_PLATFORM_EXPORT std::unique_ptr<webrtc::VideoDecoderFactory>
-CreateWebrtcVideoDecoderFactory(
-    media::GpuVideoAcceleratorFactories* gpu_factories);
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_VIDEO_CODEC_FACTORY_H_
diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h
index 83b3a264..52a4be1 100644
--- a/third_party/blink/public/platform/platform.h
+++ b/third_party/blink/public/platform/platform.h
@@ -125,7 +125,6 @@
 class WebMediaCapabilitiesClient;
 class WebPrescientNetworking;
 class WebPublicSuffixList;
-class WebRtcAudioDeviceImpl;
 class WebRTCCertificateGenerator;
 class WebRTCPeerConnectionHandler;
 class WebRTCPeerConnectionHandlerClient;
@@ -630,10 +629,6 @@
     return media::AudioLatency::LATENCY_PLAYBACK;
   }
 
-  virtual blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() {
-    return nullptr;
-  }
-
   virtual base::Optional<std::string> GetWebRTCAudioProcessingConfiguration() {
     return base::nullopt;
   }
@@ -649,6 +644,8 @@
 
   virtual bool IsWebRtcEncryptionEnabled() { return true; }
 
+  virtual bool IsWebRtcStunOriginEnabled() { return false; }
+
   virtual base::Optional<std::string> WebRtcStunProbeTrialParameter() {
     return base::nullopt;
   }
diff --git a/third_party/blink/public/strings/translations/blink_strings_am.xtb b/third_party/blink/public/strings/translations/blink_strings_am.xtb
index f917116..5d6a3c8c3 100644
--- a/third_party/blink/public/strings/translations/blink_strings_am.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_am.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">ማህደረ መረጃን አውርድ</translation>
 <translation id="6981594929165378967">ማስገባት</translation>
 <translation id="6989848892321993519">እባክዎ ይህን ጽሑፍ ወደ <ph name="MIN_CHARACTERS" /> ወይም ከዚያ በላይ ቁምፊዎች ያራዝሙት (አሁን እየተጠቀሙ ያሉት 1 ቁምፊ ነው)።</translation>
-<translation id="7033340931668032222">ድምጽ ለመቀየር ወደ ላይ እና ታች</translation>
 <translation id="7034405885550056553">የአስተያየት ጥቆማ</translation>
 <translation id="709897737746224366">እባክዎ የተጠየቀውን ቅርጸት ያዛምዱ።</translation>
 <translation id="7118469954320184356">ምንም መግለጫ የለም።</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">ሥዕላዊ ምልክት</translation>
 <translation id="8583702881314752957">የብየና ዝርዝር</translation>
 <translation id="8597182159515967513">ርዕስ</translation>
-<translation id="8603553056539299761">ለመፈለግ ወደ ግራ እና ቀኝ</translation>
 <translation id="860475260694818407">ማውጫ</translation>
 <translation id="8613126697340063924">በርቀት መልሶ ማጫወትን ተቆጣጠር</translation>
 <translation id="862370744433916922">የግርጌ ጽሑፍ</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ኢሜይል</translation>
 <translation id="9048119486235211610">አሰሳ</translation>
 <translation id="9062295712474918030">ሰነድ</translation>
-<translation id="9062307380734144336">አጫውት ባለበት አቁምን ለመቀያየር ይምረጡ</translation>
 <translation id="9093215626363556771">ከስዕል-ውስጥ-ስዕል ውጣ</translation>
 <translation id="9108370397979208512">ሒሳብ</translation>
 <translation id="9132465097189459683">ሌላ...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ar.xtb b/third_party/blink/public/strings/translations/blink_strings_ar.xtb
index 1976685..16b4f631 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ar.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ar.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">تنزيل وسائط</translation>
 <translation id="6981594929165378967">إدراج</translation>
 <translation id="6989848892321993519">يُرجى إطالة هذا النص إلى <ph name="MIN_CHARACTERS" /> من الحروف أو أكثر (أنت الآن تستخدم حرفًا واحدًا).</translation>
-<translation id="7033340931668032222">الضغط على السهم المتجه إلى الأعلى والآخر المتجه إلى الأسفل لتغيير مستوى الصوت</translation>
 <translation id="7034405885550056553">اقتراح</translation>
 <translation id="709897737746224366">يُرجى مطابقة التنسيق المطلوب.</translation>
 <translation id="7118469954320184356">لا يتوفر أي وصف.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">رمز رسومي</translation>
 <translation id="8583702881314752957">قائمة تعريف</translation>
 <translation id="8597182159515967513">العنوان</translation>
-<translation id="8603553056539299761">الضغط على السهم الأيمن والأيسر لتنفيذ الإجراء</translation>
 <translation id="860475260694818407">جدول المحتويات</translation>
 <translation id="8613126697340063924">التحكم في التشغيل عن بعد</translation>
 <translation id="862370744433916922">ترجمة مصاحِبة</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">بريد إلكتروني</translation>
 <translation id="9048119486235211610">تنقل</translation>
 <translation id="9062295712474918030">المستند</translation>
-<translation id="9062307380734144336">اختيار للتبديل بين تشغيل وإيقاف مؤقت</translation>
 <translation id="9093215626363556771">الخروج من وضع "نافذة ضمن نافذة"</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">آخر...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bg.xtb b/third_party/blink/public/strings/translations/blink_strings_bg.xtb
index 2eaf4f9..5568b78e3 100644
--- a/third_party/blink/public/strings/translations/blink_strings_bg.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_bg.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">изтегляне на мултимедията</translation>
 <translation id="6981594929165378967">вмъкване</translation>
 <translation id="6989848892321993519">Моля, удължете този текст до поне <ph name="MIN_CHARACTERS" /> знака (понастоящем използвате 1 знак).</translation>
-<translation id="7033340931668032222">нагоре и надолу за промяна на силата на звука</translation>
 <translation id="7034405885550056553">предложение</translation>
 <translation id="709897737746224366">Моля, спазвайте изисквания формат.</translation>
 <translation id="7118469954320184356">Няма описание.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">графичен символ</translation>
 <translation id="8583702881314752957">списък с дефиниции</translation>
 <translation id="8597182159515967513">заглавие</translation>
-<translation id="8603553056539299761">наляво и надясно за придвижване</translation>
 <translation id="860475260694818407">съдържание</translation>
 <translation id="8613126697340063924">управление на отдалеченото възпроизвеждане</translation>
 <translation id="862370744433916922">подзаглавие</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">имейл</translation>
 <translation id="9048119486235211610">навигация</translation>
 <translation id="9062295712474918030">документ</translation>
-<translation id="9062307380734144336">изберете за превключване между възпроизвеждане и пауза</translation>
 <translation id="9093215626363556771">изход от режима „Картина в картината“</translation>
 <translation id="9108370397979208512">математически израз</translation>
 <translation id="9132465097189459683">Други...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_bn.xtb b/third_party/blink/public/strings/translations/blink_strings_bn.xtb
index db6ff084..a4c910c 100644
--- a/third_party/blink/public/strings/translations/blink_strings_bn.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_bn.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">মিডিয়া ডাউনলোড করুন</translation>
 <translation id="6981594929165378967">যোগ করা হচ্ছে</translation>
 <translation id="6989848892321993519">দয়া করে এই পাঠ্যকে ন্যূনতম <ph name="MIN_CHARACTERS" /> অক্ষরের বা তার বেশি দৈর্ঘ্যের করুন (আপনি বর্তমানে ১টি অক্ষর ব্যবহার করেছেন)।</translation>
-<translation id="7033340931668032222">ভলিউম পরিবর্তন করতে উপরে এবং নিচে</translation>
 <translation id="7034405885550056553">সাজেশন</translation>
 <translation id="709897737746224366">দয়া করে অনুরোধ হওয়া বিন্যাসটি মেলান৷</translation>
 <translation id="7118469954320184356">কোনও বিবরণ নেই।</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">গ্রাফিক্স চিহ্ন</translation>
 <translation id="8583702881314752957">সংজ্ঞার তালিকা</translation>
 <translation id="8597182159515967513">শিরোনাম</translation>
-<translation id="8603553056539299761">খুঁজে পেতে ডানদিকে এবং বাঁদিকে</translation>
 <translation id="860475260694818407">সূচিপত্র</translation>
 <translation id="8613126697340063924">রিমোট প্লেব্যাক নিয়ন্ত্রণ করুন</translation>
 <translation id="862370744433916922">সাবটাইটেল</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ইমেল আইডি</translation>
 <translation id="9048119486235211610">নেভিগেশন</translation>
 <translation id="9062295712474918030">দস্তাবেজ</translation>
-<translation id="9062307380734144336">প্লে পজ টগল করতে বেছে নিন</translation>
 <translation id="9093215626363556771">ছবির-মধ্যে-ছবি মোড থেকে বেরিয়ে আসুন</translation>
 <translation id="9108370397979208512">গণিত</translation>
 <translation id="9132465097189459683">অন্যান্য...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ca.xtb b/third_party/blink/public/strings/translations/blink_strings_ca.xtb
index aa438e0..a25c0e2 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ca.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ca.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">baixa els fitxers multimèdia</translation>
 <translation id="6981594929165378967">inserció</translation>
 <translation id="6989848892321993519">Allarga aquest text fins a <ph name="MIN_CHARACTERS" /> caràcters o més (ara n'utilitzes 1).</translation>
-<translation id="7033340931668032222">amunt i avall per canviar el volum</translation>
 <translation id="7034405885550056553">suggeriment</translation>
 <translation id="709897737746224366">Feu servir el format sol·licitat.</translation>
 <translation id="7118469954320184356">No hi ha cap descripció disponible.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">símbol gràfic</translation>
 <translation id="8583702881314752957">llista de definicions</translation>
 <translation id="8597182159515967513">capçalera</translation>
-<translation id="8603553056539299761">dreta i esquerra per avançar i retrocedir</translation>
 <translation id="860475260694818407">taula de continguts</translation>
 <translation id="8613126697340063924">reproducció amb comandament</translation>
 <translation id="862370744433916922">subtítol</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">correu electrònic</translation>
 <translation id="9048119486235211610">navegació</translation>
 <translation id="9062295712474918030">document</translation>
-<translation id="9062307380734144336">selecciona aquesta opció per commutar entre reproduir i posar en pausa</translation>
 <translation id="9093215626363556771">surt del mode de pantalla en pantalla</translation>
 <translation id="9108370397979208512">matemàtiques</translation>
 <translation id="9132465097189459683">Altres...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_cs.xtb b/third_party/blink/public/strings/translations/blink_strings_cs.xtb
index fd6b7ec..d8708974 100644
--- a/third_party/blink/public/strings/translations/blink_strings_cs.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_cs.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">stáhnout média</translation>
 <translation id="6981594929165378967">vložení</translation>
 <translation id="6989848892321993519">Prodlužte prosím tento text na <ph name="MIN_CHARACTERS" /> či více znaků. (Aktuálně má 1 znak.)</translation>
-<translation id="7033340931668032222">směr nahoru a dolů slouží ke změně hlasitosti</translation>
 <translation id="7034405885550056553">návrh</translation>
 <translation id="709897737746224366">Zadejte hodnotu, která odpovídá požadovanému formátu.</translation>
 <translation id="7118469954320184356">Popis není k dispozici.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafický symbol</translation>
 <translation id="8583702881314752957">seznam definic</translation>
 <translation id="8597182159515967513">záhlaví</translation>
-<translation id="8603553056539299761">směr vlevo a vpravo slouží k vyhledávání</translation>
 <translation id="860475260694818407">obsah</translation>
 <translation id="8613126697340063924">ovládání vzdáleného přehrávání</translation>
 <translation id="862370744433916922">titulek</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">navigace</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">výběrem přepnete mezi přehráváním a pozastavením</translation>
 <translation id="9093215626363556771">ukončit režim obrazu v obraze</translation>
 <translation id="9108370397979208512">matematika</translation>
 <translation id="9132465097189459683">Jiné…</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_da.xtb b/third_party/blink/public/strings/translations/blink_strings_da.xtb
index 076ee97..03750e0 100644
--- a/third_party/blink/public/strings/translations/blink_strings_da.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_da.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">download medier</translation>
 <translation id="6981594929165378967">indsættelse</translation>
 <translation id="6989848892321993519">Forlæng denne tekst til <ph name="MIN_CHARACTERS" /> eller flere tegn (du bruger i øjeblikket ét tegn).</translation>
-<translation id="7033340931668032222">op og ned for at justere lydstyrken</translation>
 <translation id="7034405885550056553">forslag</translation>
 <translation id="709897737746224366">Find et match til det anmodede format.</translation>
 <translation id="7118469954320184356">Der er ingen beskrivelse.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafiksymbol</translation>
 <translation id="8583702881314752957">liste over definitioner</translation>
 <translation id="8597182159515967513">overskrift</translation>
-<translation id="8603553056539299761">venstre og højre for at søge</translation>
 <translation id="860475260694818407">indholdsfortegnelse</translation>
 <translation id="8613126697340063924">kontrollér afspilning via fjernadgang</translation>
 <translation id="862370744433916922">undertitel</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">mail</translation>
 <translation id="9048119486235211610">navigation</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">vælg for at aktivere eller deaktivere afspil sæt på pause</translation>
 <translation id="9093215626363556771">afslut integreret billede</translation>
 <translation id="9108370397979208512">matematik</translation>
 <translation id="9132465097189459683">Andet...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_de.xtb b/third_party/blink/public/strings/translations/blink_strings_de.xtb
index 3650daa..bc7e048a 100644
--- a/third_party/blink/public/strings/translations/blink_strings_de.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_de.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">Medien herunterladen</translation>
 <translation id="6981594929165378967">Einfügen</translation>
 <translation id="6989848892321993519">Verlängern Sie diesen Text auf mindestens <ph name="MIN_CHARACTERS" /> Zeichen. Derzeit verwenden Sie 1 Zeichen.</translation>
-<translation id="7033340931668032222">oben und unten zum Ändern der Lautstärke</translation>
 <translation id="7034405885550056553">Vorschlag</translation>
 <translation id="709897737746224366">Ihre Eingabe muss mit dem geforderten Format übereinstimmen.</translation>
 <translation id="7118469954320184356">Keine Beschreibung verfügbar.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">Grafiksymbol</translation>
 <translation id="8583702881314752957">Definitionsliste</translation>
 <translation id="8597182159515967513">Kopfzeile</translation>
-<translation id="8603553056539299761">links und rechts zum Suchen</translation>
 <translation id="860475260694818407">Inhaltsverzeichnis</translation>
 <translation id="8613126697340063924">Remote-Wiedergabe steuern</translation>
 <translation id="862370744433916922">Untertitel</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">E-Mail</translation>
 <translation id="9048119486235211610">Navigation</translation>
 <translation id="9062295712474918030">Dokument</translation>
-<translation id="9062307380734144336">Auswählen, um zwischen Wiedergabe und Pause zu wechseln</translation>
 <translation id="9093215626363556771">Bild-im-Bild-Modus beenden</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Andere...</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 9862a792..4e90df5 100644
--- a/third_party/blink/public/strings/translations/blink_strings_el.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_el.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">λήψη μέσων</translation>
 <translation id="6981594929165378967">εισαγωγή</translation>
 <translation id="6989848892321993519">Αυξήστε την έκταση αυτού του κειμένου στους <ph name="MIN_CHARACTERS" /> χαρακτήρες ή περισσότερο (αυτήν τη στιγμή χρησιμοποιείτε 1 χαρακτήρα).</translation>
-<translation id="7033340931668032222">επάνω και κάτω για αλλαγή της έντασης ήχου</translation>
 <translation id="7034405885550056553">πρόταση</translation>
 <translation id="709897737746224366">Αντιστοιχίστε τη ζητούμενη μορφή.</translation>
 <translation id="7118469954320184356">Δεν υπάρχει διαθέσιμη περιγραφή.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">σύμβολο γραφικών</translation>
 <translation id="8583702881314752957">λίστα ορισμών</translation>
 <translation id="8597182159515967513">επικεφαλίδα</translation>
-<translation id="8603553056539299761">αριστερά και δεξιά για αναζήτηση</translation>
 <translation id="860475260694818407">πίνακας περιεχομένων</translation>
 <translation id="8613126697340063924">έλεγχος απομακρυσμένης αναπαραγωγής</translation>
 <translation id="862370744433916922">υπότιτλος</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ηλεκτρονικό ταχυδρομείο</translation>
 <translation id="9048119486235211610">πλοήγηση</translation>
 <translation id="9062295712474918030">έγγραφο</translation>
-<translation id="9062307380734144336">Επιλέξτε για εναλλαγή αναπαραγωγής και παύσης.</translation>
 <translation id="9093215626363556771">έξοδος από τη λειτουργία picture-in-picture</translation>
 <translation id="9108370397979208512">μαθηματικά</translation>
 <translation id="9132465097189459683">Άλλες…</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb b/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb
index 17a64b2..5b254e5d 100644
--- a/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_en-GB.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">download media</translation>
 <translation id="6981594929165378967">insertion</translation>
 <translation id="6989848892321993519">Please lengthen this text to <ph name="MIN_CHARACTERS" /> characters or more (you are currently using 1 character).</translation>
-<translation id="7033340931668032222">up and down to change volume</translation>
 <translation id="7034405885550056553">suggestion</translation>
 <translation id="709897737746224366">Please match the format requested.</translation>
 <translation id="7118469954320184356">No description available.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">graphics symbol</translation>
 <translation id="8583702881314752957">definition list</translation>
 <translation id="8597182159515967513">heading</translation>
-<translation id="8603553056539299761">left and right to seek</translation>
 <translation id="860475260694818407">table of contents</translation>
 <translation id="8613126697340063924">control remote playback</translation>
 <translation id="862370744433916922">subtitle</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">email</translation>
 <translation id="9048119486235211610">navigation</translation>
 <translation id="9062295712474918030">document</translation>
-<translation id="9062307380734144336">select to toggle play pause</translation>
 <translation id="9093215626363556771">exit picture-in-picture</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Other...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_es-419.xtb b/third_party/blink/public/strings/translations/blink_strings_es-419.xtb
index 0a55531..8a3514f 100644
--- a/third_party/blink/public/strings/translations/blink_strings_es-419.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_es-419.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">descargar medios</translation>
 <translation id="6981594929165378967">contenido agregado</translation>
 <translation id="6989848892321993519">Extiende este texto para que tenga <ph name="MIN_CHARACTERS" /> caracteres o más (actualmente usas 1 carácter).</translation>
-<translation id="7033340931668032222">arriba y abajo para cambiar el volumen</translation>
 <translation id="7034405885550056553">sugerencia</translation>
 <translation id="709897737746224366">Haz coincidir el formato solicitado.</translation>
 <translation id="7118469954320184356">No hay una descripción disponible.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">símbolo gráfico</translation>
 <translation id="8583702881314752957">lista de definiciones</translation>
 <translation id="8597182159515967513">cabecera</translation>
-<translation id="8603553056539299761">izquierda y derecha para buscar</translation>
 <translation id="860475260694818407">índice</translation>
 <translation id="8613126697340063924">controlar la reproducción remota</translation>
 <translation id="862370744433916922">subtítulo</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">correo electrónico</translation>
 <translation id="9048119486235211610">navegación</translation>
 <translation id="9062295712474918030">documento</translation>
-<translation id="9062307380734144336">selecciona para activar o desactivar la reproducción</translation>
 <translation id="9093215626363556771">salir del modo de pantalla en pantalla</translation>
 <translation id="9108370397979208512">expr mtmtc</translation>
 <translation id="9132465097189459683">Otra...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_es.xtb b/third_party/blink/public/strings/translations/blink_strings_es.xtb
index 12ba77d..7264883 100644
--- a/third_party/blink/public/strings/translations/blink_strings_es.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_es.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">descargar archivos multimedia</translation>
 <translation id="6981594929165378967">inserción</translation>
 <translation id="6989848892321993519">Aumenta la longitud de este texto a <ph name="MIN_CHARACTERS" /> caracteres o más (actualmente, el texto tiene 1 carácter).</translation>
-<translation id="7033340931668032222">arriba o abajo para subir o bajar el volumen</translation>
 <translation id="7034405885550056553">sugerencia</translation>
 <translation id="709897737746224366">Utiliza un formato que coincida con el solicitado</translation>
 <translation id="7118469954320184356">No hay ninguna descripción disponible.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">símbolo gráfico</translation>
 <translation id="8583702881314752957">lista de definiciones</translation>
 <translation id="8597182159515967513">cabecera</translation>
-<translation id="8603553056539299761">izquierda o derecha para ir hacia delante o hacia atrás</translation>
 <translation id="860475260694818407">índice</translation>
 <translation id="8613126697340063924">reproducción de control remoto</translation>
 <translation id="862370744433916922">subtítulo</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">correo electrónico</translation>
 <translation id="9048119486235211610">navegación</translation>
 <translation id="9062295712474918030">documento</translation>
-<translation id="9062307380734144336">Selecciona para alternar entre reproducción y pausa</translation>
 <translation id="9093215626363556771">salir del modo imagen en imagen</translation>
 <translation id="9108370397979208512">expresión matemática</translation>
 <translation id="9132465097189459683">Otra...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_et.xtb b/third_party/blink/public/strings/translations/blink_strings_et.xtb
index 17edccd5..18b50d4e 100644
--- a/third_party/blink/public/strings/translations/blink_strings_et.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_et.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">laadi meedia alla</translation>
 <translation id="6981594929165378967">lisamine</translation>
 <translation id="6989848892321993519">Pikendage teksti vähemalt <ph name="MIN_CHARACTERS" /> tähemärgini (kasutate praegu ühte tähemärki).</translation>
-<translation id="7033340931668032222">hääletugevuse muutmiseks üles- ja allanoole klahvi</translation>
 <translation id="7034405885550056553">soovitus</translation>
 <translation id="709897737746224366">Vastendage nõutav vorming.</translation>
 <translation id="7118469954320184356">Kirjeldust pole.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">graafika sümbol</translation>
 <translation id="8583702881314752957">definitsioonide loend</translation>
 <translation id="8597182159515967513">pealkiri</translation>
-<translation id="8603553056539299761">otsimiseks vasakut ja paremat klahvi</translation>
 <translation id="860475260694818407">sisukord</translation>
 <translation id="8613126697340063924">kaugesituse juhtimine</translation>
 <translation id="862370744433916922">alapealkiri</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">meil:</translation>
 <translation id="9048119486235211610">navigeerimine</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">valige esitamiseks/peatamiseks</translation>
 <translation id="9093215626363556771">välju režiimist Pilt pildis</translation>
 <translation id="9108370397979208512">matemaatika</translation>
 <translation id="9132465097189459683">Muu ...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fa.xtb b/third_party/blink/public/strings/translations/blink_strings_fa.xtb
index 2780fb6..c37828c 100644
--- a/third_party/blink/public/strings/translations/blink_strings_fa.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_fa.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">بارگیری رسانه</translation>
 <translation id="6981594929165378967">درج</translation>
 <translation id="6989848892321993519">لطفاً این نوشتار را به <ph name="MIN_CHARACTERS" /> نویسه یا بیشتر افزایش دهید (درحال‌حاضر از ۱ نویسه استفاده می‌کنید).</translation>
-<translation id="7033340931668032222">برای تغییر میزان صدا، به بالا و پایین بروید</translation>
 <translation id="7034405885550056553">پیشنهاد</translation>
 <translation id="709897737746224366">لطفاً با قالب درخواستی مطابقت دهید.</translation>
 <translation id="7118469954320184356">توضیحی دردسترس نیست.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">نماد گرافیکی</translation>
 <translation id="8583702881314752957">فهرست معنی‌ها</translation>
 <translation id="8597182159515967513">عنوان</translation>
-<translation id="8603553056539299761">برای جستجو، به چپ و راست بروید</translation>
 <translation id="860475260694818407">فهرست مطالب</translation>
 <translation id="8613126697340063924">کنترل بازپخش راه دور</translation>
 <translation id="862370744433916922">زیرنویس</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ایمیل</translation>
 <translation id="9048119486235211610">پیمایش</translation>
 <translation id="9062295712474918030">سند</translation>
-<translation id="9062307380734144336">برای تغییر وضعیت بین پخش/توقف موقت، انتخاب کنید</translation>
 <translation id="9093215626363556771">خروج از تصویر در تصویر</translation>
 <translation id="9108370397979208512">حساب</translation>
 <translation id="9132465097189459683">موارد دیگر...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fi.xtb b/third_party/blink/public/strings/translations/blink_strings_fi.xtb
index a200784..c8bbb0d 100644
--- a/third_party/blink/public/strings/translations/blink_strings_fi.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_fi.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">lataa media</translation>
 <translation id="6981594929165378967">lisäys</translation>
 <translation id="6989848892321993519">Pidennä tämä teksti vähintään <ph name="MIN_CHARACTERS" /> merkkiin (tällä hetkellä käytössä 1 merkki).</translation>
-<translation id="7033340931668032222">ylös ja alas, niin voit muuttaa äänenvoimakkuutta</translation>
 <translation id="7034405885550056553">ehdotus</translation>
 <translation id="709897737746224366">Käytä pyydettyä muotoilua.</translation>
 <translation id="7118469954320184356">Ei kuvausta saatavilla</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafiikkasymboli</translation>
 <translation id="8583702881314752957">määritelmäluettelo</translation>
 <translation id="8597182159515967513">otsikko</translation>
-<translation id="8603553056539299761">vasemmalle ja oikealle, niin voit hakea</translation>
 <translation id="860475260694818407">sisällysluettelo</translation>
 <translation id="8613126697340063924">hallinnoi etätoistoa</translation>
 <translation id="862370744433916922">alaotsikko</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">sähköposti</translation>
 <translation id="9048119486235211610">navigointi</translation>
 <translation id="9062295712474918030">dokumentti</translation>
-<translation id="9062307380734144336">valitse, jos haluat toistaa tai keskeyttää toiston</translation>
 <translation id="9093215626363556771">sulje kuva kuvassa ‑tila</translation>
 <translation id="9108370397979208512">matematiikka</translation>
 <translation id="9132465097189459683">Muu...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fil.xtb b/third_party/blink/public/strings/translations/blink_strings_fil.xtb
index 410b00e..2bccd4c 100644
--- a/third_party/blink/public/strings/translations/blink_strings_fil.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_fil.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">i-download ang media</translation>
 <translation id="6981594929165378967">paglagay</translation>
 <translation id="6989848892321993519">Pakidagdagan ang text na ito nang hanggang <ph name="MIN_CHARACTERS" /> (na) character o higit pa (kasalukuyan kang gumagamit ng 1 character).</translation>
-<translation id="7033340931668032222">pataas at pababa para baguhin ang volume</translation>
 <translation id="7034405885550056553">suhestyon</translation>
 <translation id="709897737746224366">Pakitugma ang hiniling na format.</translation>
 <translation id="7118469954320184356">Walang available na paglalarawan.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">simbolo ng graphics</translation>
 <translation id="8583702881314752957">listahan ng kahulugan</translation>
 <translation id="8597182159515967513">heading</translation>
-<translation id="8603553056539299761">pakaliwa at pakanan para mag-seek</translation>
 <translation id="860475260694818407">talaan ng nilalaman</translation>
 <translation id="8613126697340063924">kontrolin ang malayuang pag-playback</translation>
 <translation id="862370744433916922">subtitle</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">email</translation>
 <translation id="9048119486235211610">navigation</translation>
 <translation id="9062295712474918030">dokumento</translation>
-<translation id="9062307380734144336">pillin para i-toggle ang i-play at i-pause</translation>
 <translation id="9093215626363556771">lumabas sa picture-in-picture</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Iba pa...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_fr.xtb b/third_party/blink/public/strings/translations/blink_strings_fr.xtb
index 72c85b2f..e16446a 100644
--- a/third_party/blink/public/strings/translations/blink_strings_fr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_fr.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">télécharger des contenus multimédias</translation>
 <translation id="6981594929165378967">insertion</translation>
 <translation id="6989848892321993519">Veuillez allonger ce texte pour qu'il comporte au moins <ph name="MIN_CHARACTERS" /> caractères. Il en compte actuellement un seul.</translation>
-<translation id="7033340931668032222">haut et bas pour modifier le volume</translation>
 <translation id="7034405885550056553">suggestion</translation>
 <translation id="709897737746224366">Veuillez respecter le format requis.</translation>
 <translation id="7118469954320184356">Aucune description disponible.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">symbole graphique</translation>
 <translation id="8583702881314752957">liste de définitions</translation>
 <translation id="8597182159515967513">en-tête</translation>
-<translation id="8603553056539299761">gauche et droite pour chercher</translation>
 <translation id="860475260694818407">sommaire</translation>
 <translation id="8613126697340063924">contrôler la lecture à distance</translation>
 <translation id="862370744433916922">sous-titre</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">navigation</translation>
 <translation id="9062295712474918030">document</translation>
-<translation id="9062307380734144336">sélectionner pour lire/mettre en pause</translation>
 <translation id="9093215626363556771">quitter le mode PIP</translation>
 <translation id="9108370397979208512">math.</translation>
 <translation id="9132465097189459683">Autre…</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_gu.xtb b/third_party/blink/public/strings/translations/blink_strings_gu.xtb
index 4b4eb7c..514a4de 100644
--- a/third_party/blink/public/strings/translations/blink_strings_gu.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_gu.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">મીડિયા ડાઉનલોડ કરો</translation>
 <translation id="6981594929165378967">ઉમેરો</translation>
 <translation id="6989848892321993519">કૃપા કરીને આ ટેક્સ્ટને <ph name="MIN_CHARACTERS" /> અથવા તેથી વધુ અક્ષર સુધી લંબાવો (તમે હાલમાં 1 અક્ષરનો ઉપયોગ કરી રહ્યાં છો).</translation>
-<translation id="7033340931668032222">વૉલ્યૂમમાં ફેરફાર કરવા માટે up અને down</translation>
 <translation id="7034405885550056553">સૂચન</translation>
 <translation id="709897737746224366">કૃપા કરીને વિનંતી કરેલા ફોર્મેટ સાથે મેળ કરો.</translation>
 <translation id="7118469954320184356">કોઈ વર્ણન ઉપલબ્ધ નથી.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">ગ્રાફિક્સ પ્રતીક</translation>
 <translation id="8583702881314752957">વિવરણ સૂચિ</translation>
 <translation id="8597182159515967513">મથાળું</translation>
-<translation id="8603553056539299761">શોધવા માટે left અને right</translation>
 <translation id="860475260694818407">અનુક્રમણિકા</translation>
 <translation id="8613126697340063924">રિમોટ પ્લેબેકનું નિયંત્રણ કરો</translation>
 <translation id="862370744433916922">(સબટાઇટલ)</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ઇમેઇલ</translation>
 <translation id="9048119486235211610">નેવિગેશન</translation>
 <translation id="9062295712474918030">દસ્તાવેજ</translation>
-<translation id="9062307380734144336">ચલાવવાનું અથવા થોભાવવાનું ટૉગલ કરવાનું પસંદ કરો</translation>
 <translation id="9093215626363556771">ચિત્ર-માં-ચિત્રમાંથી બહાર નીકળો</translation>
 <translation id="9108370397979208512">ગણિત</translation>
 <translation id="9132465097189459683">અન્ય...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hi.xtb b/third_party/blink/public/strings/translations/blink_strings_hi.xtb
index 8609c069..fdd004cb 100644
--- a/third_party/blink/public/strings/translations/blink_strings_hi.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_hi.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">मीडिया डाउनलोड करें</translation>
 <translation id="6981594929165378967">डालना</translation>
 <translation id="6989848892321993519">कृपया इस लेख को <ph name="MIN_CHARACTERS" /> या उससे ज़्यादा वर्णों तक बढ़ाएं (आप इस समय 1 वर्ण का उपयोग कर रहे हैं).</translation>
-<translation id="7033340931668032222">आवाज़ कम-ज़्यादा करने के लिए ऊपर और नीचे वाले बटन का इस्तेमाल करें</translation>
 <translation id="7034405885550056553">सुझाव</translation>
 <translation id="709897737746224366">कृपया अनुरोधित प्रारूप का मिलान करें.</translation>
 <translation id="7118469954320184356">कोई जानकारी मौजूद नहीं है.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">ग्राफ़िक्स चिह्न</translation>
 <translation id="8583702881314752957">परिभाषा सूची</translation>
 <translation id="8597182159515967513">हेडिंग</translation>
-<translation id="8603553056539299761">कार्रवाई के लिए बाएं और दाएं बटन का इस्तेमाल करें</translation>
 <translation id="860475260694818407">विषय सूची</translation>
 <translation id="8613126697340063924">दूरस्थ प्लेबैक नियंत्रित करें</translation>
 <translation id="862370744433916922">सबटाइटल</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ईमेल</translation>
 <translation id="9048119486235211610">मार्गदर्शक</translation>
 <translation id="9062295712474918030">दस्तावेज़</translation>
-<translation id="9062307380734144336">चलाएं और रोकें के बीच टॉगल करने के लिए चुनें</translation>
 <translation id="9093215626363556771">पिक्चर में पिक्चर से बाहर निकलें</translation>
 <translation id="9108370397979208512">गणित</translation>
 <translation id="9132465097189459683">अन्य...</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 8f7b92d..f593b987 100644
--- a/third_party/blink/public/strings/translations/blink_strings_hr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_hr.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">preuzmi medij</translation>
 <translation id="6981594929165378967">umetanje</translation>
 <translation id="6989848892321993519">Produljite broj znakova u tekstu na minimalno <ph name="MIN_CHARACTERS" /> (trenutačno imate 1 znak).</translation>
-<translation id="7033340931668032222">gore i dolje za regulaciju glasnoće</translation>
 <translation id="7034405885550056553">prijedlog</translation>
 <translation id="709897737746224366">Udovoljite zadanom formatu.</translation>
 <translation id="7118469954320184356">Opis nije dostupan.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafički simbol</translation>
 <translation id="8583702881314752957">popis definicija</translation>
 <translation id="8597182159515967513">naslov</translation>
-<translation id="8603553056539299761">lijevo i desno za preskakanje</translation>
 <translation id="860475260694818407">sadržaj</translation>
 <translation id="8613126697340063924">upravljaj daljinskom reprodukcijom</translation>
 <translation id="862370744433916922">titl</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-pošta</translation>
 <translation id="9048119486235211610">navigacija</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">odaberite da biste prebacili s reprodukcije na pauzu i obrnuto</translation>
 <translation id="9093215626363556771">izlaz iz načina slika u slici</translation>
 <translation id="9108370397979208512">mat</translation>
 <translation id="9132465097189459683">Drugo...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_hu.xtb b/third_party/blink/public/strings/translations/blink_strings_hu.xtb
index 2a8a392..25f46aa 100644
--- a/third_party/blink/public/strings/translations/blink_strings_hu.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_hu.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">médiafájlok letöltése</translation>
 <translation id="6981594929165378967">beszúrás</translation>
 <translation id="6989848892321993519">Legalább <ph name="MIN_CHARACTERS" /> karakter hosszú szöveget adjon meg (jelenleg 1 karaktert használ).</translation>
-<translation id="7033340931668032222">fel és le a hangerő módosításához</translation>
 <translation id="7034405885550056553">javaslat</translation>
 <translation id="709897737746224366">Kérjük, tartsa magát a kívánt formátumhoz.</translation>
 <translation id="7118469954320184356">Nincs leírás.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafikus szimbólum</translation>
 <translation id="8583702881314752957">definíciós lista</translation>
 <translation id="8597182159515967513">fejléc</translation>
-<translation id="8603553056539299761">balra és jobbra az ugráshoz</translation>
 <translation id="860475260694818407">tartalomjegyzék</translation>
 <translation id="8613126697340063924">távoli lejátszás kezelése</translation>
 <translation id="862370744433916922">felirat</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">navigáció</translation>
 <translation id="9062295712474918030">dokumentum</translation>
-<translation id="9062307380734144336">válassza ki a lejátszás és szüneteltetés közötti váltáshoz</translation>
 <translation id="9093215626363556771">kilépés a kép a képben funkcióból</translation>
 <translation id="9108370397979208512">matematika</translation>
 <translation id="9132465097189459683">Más...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_id.xtb b/third_party/blink/public/strings/translations/blink_strings_id.xtb
index 1c72fc8..ab5b11e 100644
--- a/third_party/blink/public/strings/translations/blink_strings_id.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_id.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">download media</translation>
 <translation id="6981594929165378967">penyisipan</translation>
 <translation id="6989848892321993519">Perpanjang teks ini menjadi <ph name="MIN_CHARACTERS" /> karakter atau lebih (saat ini Anda menggunakan 1 karakter).</translation>
-<translation id="7033340931668032222">ke atas dan ke bawah untuk mengubah volume</translation>
 <translation id="7034405885550056553">saran</translation>
 <translation id="709897737746224366">Sesuaikan dengan format yang diminta.</translation>
 <translation id="7118469954320184356">Deskripsi tidak tersedia.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">simbol grafis</translation>
 <translation id="8583702881314752957">daftar definisi</translation>
 <translation id="8597182159515967513">kepala</translation>
-<translation id="8603553056539299761">ke kiri dan ke kanan untuk mencari</translation>
 <translation id="860475260694818407">daftar isi</translation>
 <translation id="8613126697340063924">kontrol pemutaran jarak jauh</translation>
 <translation id="862370744433916922">subjudul</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">email</translation>
 <translation id="9048119486235211610">navigasi</translation>
 <translation id="9062295712474918030">dokumen</translation>
-<translation id="9062307380734144336">pilih untuk mengalihkan putar jeda</translation>
 <translation id="9093215626363556771">keluar dari mode picture-in-picture</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Lainnya...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_it.xtb b/third_party/blink/public/strings/translations/blink_strings_it.xtb
index 7acbfd8..666d8d07 100644
--- a/third_party/blink/public/strings/translations/blink_strings_it.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_it.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">scarica contenuti multimediali</translation>
 <translation id="6981594929165378967">inserimento</translation>
 <translation id="6989848892321993519">Prolunga questo testo a <ph name="MIN_CHARACTERS" /> o più caratteri (al momento stai utilizzando 1 carattere).</translation>
-<translation id="7033340931668032222">verso l'alto e verso il basso per regolare il volume</translation>
 <translation id="7034405885550056553">suggerimento</translation>
 <translation id="709897737746224366">Rispetta il formato richiesto.</translation>
 <translation id="7118469954320184356">Descrizione non disponibile.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">simbolo grafico</translation>
 <translation id="8583702881314752957">elenco di definizioni</translation>
 <translation id="8597182159515967513">intestazione</translation>
-<translation id="8603553056539299761">sinistra e destra per cercare</translation>
 <translation id="860475260694818407">sommario</translation>
 <translation id="8613126697340063924">gestisci riproduzione remota</translation>
 <translation id="862370744433916922">sottotitolo</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">email</translation>
 <translation id="9048119486235211610">navigazione</translation>
 <translation id="9062295712474918030">documento</translation>
-<translation id="9062307380734144336">seleziona per attivare/disattivare la riproduzione/pausa</translation>
 <translation id="9093215626363556771">esci da picture in picture</translation>
 <translation id="9108370397979208512">elemento matematico</translation>
 <translation id="9132465097189459683">Altro...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_iw.xtb b/third_party/blink/public/strings/translations/blink_strings_iw.xtb
index fc9c7f2..89a8a65 100644
--- a/third_party/blink/public/strings/translations/blink_strings_iw.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_iw.xtb
@@ -185,7 +185,6 @@
 <translation id="6941933287844615239">הורד מדיה</translation>
 <translation id="6981594929165378967">הוספה</translation>
 <translation id="6989848892321993519">עליך להאריך את הטקסט ל-<ph name="MIN_CHARACTERS" /> תווים או יותר (אתה משתמש כרגע בתו אחד).</translation>
-<translation id="7033340931668032222">מעלה ומטה כדי לשנות את עוצמת הקול</translation>
 <translation id="7034405885550056553">הצעה</translation>
 <translation id="709897737746224366">התאם את הפורמט המבוקש.</translation>
 <translation id="7118469954320184356">אין תיאור זמין.</translation>
@@ -240,7 +239,6 @@
 <translation id="8550857728288566671">סמל גרפי</translation>
 <translation id="8583702881314752957">רשימת הגדרות</translation>
 <translation id="8597182159515967513">כותרת</translation>
-<translation id="8603553056539299761">שמאלה וימינה כדי להריץ</translation>
 <translation id="860475260694818407">תוכן העניינים</translation>
 <translation id="8613126697340063924">שליטה בהפעלה מרחוק</translation>
 <translation id="862370744433916922">כותרת משנה</translation>
@@ -257,7 +255,6 @@
 <translation id="901834265349196618">אימייל</translation>
 <translation id="9048119486235211610">ניווט</translation>
 <translation id="9062295712474918030">מסמך</translation>
-<translation id="9062307380734144336">יש לבחור באפשרות הזו כדי להפעיל או להשהות</translation>
 <translation id="9093215626363556771">יציאה ממצב 'תמונה בתוך תמונה'</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">אחר...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ja.xtb b/third_party/blink/public/strings/translations/blink_strings_ja.xtb
index 3a096b8c..6c7ec9d 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ja.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ja.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">メディアをダウンロード</translation>
 <translation id="6981594929165378967">挿入</translation>
 <translation id="6989848892321993519">このテキストは <ph name="MIN_CHARACTERS" /> 文字以上で指定してください(現在 1 文字で指定されています)。</translation>
-<translation id="7033340931668032222">音量を変更するには上か下を押します</translation>
 <translation id="7034405885550056553">提案</translation>
 <translation id="709897737746224366">指定されている形式で入力してください。</translation>
 <translation id="7118469954320184356">説明はありません。</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">図形記号</translation>
 <translation id="8583702881314752957">定義リスト</translation>
 <translation id="8597182159515967513">見出し</translation>
-<translation id="8603553056539299761">再生位置を移動するには左か右を押します</translation>
 <translation id="860475260694818407">目次</translation>
 <translation id="8613126697340063924">リモート再生をコントロール</translation>
 <translation id="862370744433916922">副題</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">メール</translation>
 <translation id="9048119486235211610">ナビゲーション</translation>
 <translation id="9062295712474918030">ドキュメント</translation>
-<translation id="9062307380734144336">選択すると再生と一時停止を切り替えできます</translation>
 <translation id="9093215626363556771">ピクチャー イン ピクチャーを終了します</translation>
 <translation id="9108370397979208512">数式</translation>
 <translation id="9132465097189459683">その他...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_kn.xtb b/third_party/blink/public/strings/translations/blink_strings_kn.xtb
index b914a2e..11949db6 100644
--- a/third_party/blink/public/strings/translations/blink_strings_kn.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_kn.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">ಮಾಧ್ಯಮ ಡೌನ್‌ಲೋಡ್</translation>
 <translation id="6981594929165378967">ಅಳವಡಿಕೆ</translation>
 <translation id="6989848892321993519">ಈ ಪಠ್ಯವನ್ನು <ph name="MIN_CHARACTERS" /> ಅಥವಾ ಇದಕ್ಕಿಂತಲೂ ಹೆಚ್ಚಿನ ಅಕ್ಷರಗಳಿಗೆ ಉದ್ದಗೊಳಿಸಿ (ನೀವು ಪ್ರಸ್ತುತ 1 ಅಕ್ಷರಗಳನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ).</translation>
-<translation id="7033340931668032222">ವಾಲ್ಯೂಮ್ ಬದಲಾಯಿಸಲು ಮೇಲಕ್ಕೆ ಮತ್ತು ಕೆಳಕ್ಕೆ ಬಟನ್ ಒತ್ತಿರಿ</translation>
 <translation id="7034405885550056553">ಸಲಹೆ</translation>
 <translation id="709897737746224366">ದಯವಿಟ್ಟು ವಿನಂತಿಸಿದ ಸ್ವರೂಪವನ್ನು ಹೊಂದಿಸಿ.</translation>
 <translation id="7118469954320184356">ಯಾವುದೇ ವಿವರಣೆ ಲಭ್ಯವಿಲ್ಲ.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">ಗ್ರಾಫಿಕ್ಸ್ ಚಿಹ್ನೆ</translation>
 <translation id="8583702881314752957">ವಿವರಣೆ ಪಟ್ಟಿ</translation>
 <translation id="8597182159515967513">ಶೀರ್ಷಿಕೆ</translation>
-<translation id="8603553056539299761">ಸೀಕ್‌ಗಾಗಿ ಎಡ ಮತ್ತು ಬಲ ಬಟನ್ ಒತ್ತಿರಿ</translation>
 <translation id="860475260694818407">ಪರಿವಿಡಿ</translation>
 <translation id="8613126697340063924">ರಿಮೋಟ್ ಪ್ಲೇಬ್ಯಾಕ್ ನಿಯಂತ್ರಿಸಿ</translation>
 <translation id="862370744433916922">ಉಪಶೀರ್ಷಿಕೆ</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ಇಮೇಲ್</translation>
 <translation id="9048119486235211610">ನ್ಯಾವಿಗೇಷನ್</translation>
 <translation id="9062295712474918030">ಡಾಕ್ಯುಮೆಂಟ್</translation>
-<translation id="9062307380734144336">ಪ್ಲೇ/ವಿರಾಮಗೊಳಿಸಿ ಟಾಗಲ್ ಮಾಡಲು ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="9093215626363556771">ಚಿತ್ರದಲ್ಲಿನ ಚಿತ್ರದಿಂದ ನಿರ್ಗಮಿಸಿ</translation>
 <translation id="9108370397979208512">ಮ್ಯಾಥ್</translation>
 <translation id="9132465097189459683">ಇತರೆ...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ko.xtb b/third_party/blink/public/strings/translations/blink_strings_ko.xtb
index 0d935143..8f92ca41 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ko.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ko.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">미디어 다운로드</translation>
 <translation id="6981594929165378967">삽입</translation>
 <translation id="6989848892321993519">이 텍스트를 <ph name="MIN_CHARACTERS" />자 이상으로 늘리세요(현재 1자 사용 중).</translation>
-<translation id="7033340931668032222">위아래로 볼륨 조정</translation>
 <translation id="7034405885550056553">추천</translation>
 <translation id="709897737746224366">요청한 형식과 일치시키세요.</translation>
 <translation id="7118469954320184356">설명이 없습니다.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">그래픽 기호</translation>
 <translation id="8583702881314752957">정의 목록</translation>
 <translation id="8597182159515967513">항목</translation>
-<translation id="8603553056539299761">좌우로 검색</translation>
 <translation id="860475260694818407">목차</translation>
 <translation id="8613126697340063924">원격 재생 제어</translation>
 <translation id="862370744433916922">부제</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">이메일</translation>
 <translation id="9048119486235211610">탐색</translation>
 <translation id="9062295712474918030">문서</translation>
-<translation id="9062307380734144336">선택하여 재생/일시중지 전환</translation>
 <translation id="9093215626363556771">PIP 모드 종료</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">다른 달...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lt.xtb b/third_party/blink/public/strings/translations/blink_strings_lt.xtb
index 93b4bf4..dd3b231 100644
--- a/third_party/blink/public/strings/translations/blink_strings_lt.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_lt.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">atsisiųsti mediją</translation>
 <translation id="6981594929165378967">įterpimas</translation>
 <translation id="6989848892321993519">Pailginkite šį tekstą iki <ph name="MIN_CHARACTERS" /> simb. ar daugiau (šiuo metu naudojate 1 simbolį).</translation>
-<translation id="7033340931668032222">aukštyn ir žemyn – pakeisti garsumą</translation>
 <translation id="7034405885550056553">pasiūlymas</translation>
 <translation id="709897737746224366">Priderinkite reikalaujamą formatą.</translation>
 <translation id="7118469954320184356">Nepasiekiamas joks aprašas.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafikos simbolis</translation>
 <translation id="8583702881314752957">apibrėžimų sąrašas</translation>
 <translation id="8597182159515967513">antraštė</translation>
-<translation id="8603553056539299761">kairėn ir dešinėn – ieškoti</translation>
 <translation id="860475260694818407">turinys</translation>
 <translation id="8613126697340063924">valdyti nuotolinį atkūrimą</translation>
 <translation id="862370744433916922">paantraštė</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">El. paštas</translation>
 <translation id="9048119486235211610">naršymas</translation>
 <translation id="9062295712474918030">dokumentas</translation>
-<translation id="9062307380734144336">pasirinkite perjungti leidimo / pristabdymo veiksmus</translation>
 <translation id="9093215626363556771">išeiti iš vaizdo vaizde</translation>
 <translation id="9108370397979208512">matematika</translation>
 <translation id="9132465097189459683">Kita...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_lv.xtb b/third_party/blink/public/strings/translations/blink_strings_lv.xtb
index 7a78d2b..bd7c1b3 100644
--- a/third_party/blink/public/strings/translations/blink_strings_lv.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_lv.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">lejupielādēt multivides failus</translation>
 <translation id="6981594929165378967">ievietošana</translation>
 <translation id="6989848892321993519">Lūdzu, papildiniet šo tekstu līdz vismaz <ph name="MIN_CHARACTERS" /> rakstzīmēm (pašlaik tas ietver 1 rakstzīmi).</translation>
-<translation id="7033340931668032222">augšup un lejup, lai mainītu skaļumu</translation>
 <translation id="7034405885550056553">ieteikums</translation>
 <translation id="709897737746224366">Pieskaņojiet vērtību prasītajam formātam.</translation>
 <translation id="7118469954320184356">Nav apraksta.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafiskais simbols</translation>
 <translation id="8583702881314752957">definīciju saraksts</translation>
 <translation id="8597182159515967513">Virsraksts</translation>
-<translation id="8603553056539299761">pa kreisi un pa labi, lai meklētu</translation>
 <translation id="860475260694818407">satura rādītājs</translation>
 <translation id="8613126697340063924">kontrolēt attālināto atskaņošanu</translation>
 <translation id="862370744433916922">apakšvirsraksts</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-pasts</translation>
 <translation id="9048119486235211610">navigācija</translation>
 <translation id="9062295712474918030">dokuments</translation>
-<translation id="9062307380734144336">lai pārslēgtu no atskaņošanas uz pauzēšanu vai otrādi, atlasiet šo darbību</translation>
 <translation id="9093215626363556771">aizvērt režīmu “attēls attēlā”</translation>
 <translation id="9108370397979208512">matemātiska izteiksme</translation>
 <translation id="9132465097189459683">Cits...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ml.xtb b/third_party/blink/public/strings/translations/blink_strings_ml.xtb
index 8e43d4d..ee438df 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ml.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ml.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">മീഡിയ ഡൗൺലോഡ് ചെയ്യുക</translation>
 <translation id="6981594929165378967">ചേർക്കൽ</translation>
 <translation id="6989848892321993519">ഈ ടെക്‌സ്റ്റിന്‍റെ ദൈർഘ്യം <ph name="MIN_CHARACTERS" /> പ്രതീകങ്ങളോ അതിൽ കൂടുതലോ ആയി വർദ്ധിപ്പിക്കുക (നിങ്ങൾ നിലവിൽ ഒരു പ്രതീകം മാത്രമേ ഉപയോഗിക്കുന്നുള്ളൂ).</translation>
-<translation id="7033340931668032222">ശബ്‌ദം മാറ്റാൻ മുകളിലും താഴെയുമുള്ള ബട്ടണുകളിൽ അമർത്തുക</translation>
 <translation id="7034405885550056553">നിർദ്ദേശം</translation>
 <translation id="709897737746224366">അഭ്യര്‍ത്ഥി ച്ചഫോര്‍മാറ്റ് ദയവായി പൊരുത്തപ്പെടുത്തുക.</translation>
 <translation id="7118469954320184356">വിവരണം ലഭ്യമല്ല.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">ഗ്രാഫിക്സ് ചിഹ്നം</translation>
 <translation id="8583702881314752957">നിർവചന ലിസ്റ്റ്</translation>
 <translation id="8597182159515967513">തലക്കെട്ട്</translation>
-<translation id="8603553056539299761">നീക്കാൻ ഇടത്തും വലത്തുമുള്ള ബട്ടണുകളിൽ അമർത്തുക</translation>
 <translation id="860475260694818407">ഉള്ളടക്ക പട്ടിക</translation>
 <translation id="8613126697340063924">വിദൂര പ്ലേബാക്ക് നിയന്ത്രിക്കുക</translation>
 <translation id="862370744433916922">ഉപശീർഷകം</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ഇമെയില്‍</translation>
 <translation id="9048119486235211610">നാവിഗേഷൻ</translation>
 <translation id="9062295712474918030">പ്രമാണം</translation>
-<translation id="9062307380734144336">പ്ലേ ചെയ്യുക/തൽക്കാലം നിർത്തുക എന്നിവ മാറ്റാൻ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="9093215626363556771">ചിത്രത്തിനുള്ളിലെ ചിത്രത്തിന് പുറത്ത് കടക്കുക</translation>
 <translation id="9108370397979208512">മാത്ത്</translation>
 <translation id="9132465097189459683">മറ്റുള്ളവ...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_mr.xtb b/third_party/blink/public/strings/translations/blink_strings_mr.xtb
index ec23a6e..874ad64 100644
--- a/third_party/blink/public/strings/translations/blink_strings_mr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_mr.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">मीडिया डाउनलोड करा</translation>
 <translation id="6981594929165378967">घालणे</translation>
 <translation id="6989848892321993519">कृपया हा मजकूर <ph name="MIN_CHARACTERS" /> वर्ण किंवा त्यापेक्षा अधिक मोठा करा (तुम्ही सध्‍या 1 वर्ण वापरत आहात).</translation>
-<translation id="7033340931668032222">व्हॉल्यूम बदलण्यासाठी अप आणि डाउन बटण</translation>
 <translation id="7034405885550056553">सूचना</translation>
 <translation id="709897737746224366">कृपया विनंती केलेले स्वरूपन जुळवा.</translation>
 <translation id="7118469954320184356">कोणतेही वर्णन उपलब्ध नाही.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">ग्राफिक्स चिन्ह</translation>
 <translation id="8583702881314752957">परिभाषा सूची</translation>
 <translation id="8597182159515967513">शीर्षलेख</translation>
-<translation id="8603553056539299761">मिळवण्यासाठी डावे आणि उजवे बटण</translation>
 <translation id="860475260694818407">अनुक्रमणिका</translation>
 <translation id="8613126697340063924">दूरस्थ प्लेबॅक नियंत्रित करा</translation>
 <translation id="862370744433916922">उपशीर्षक</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ईमेल</translation>
 <translation id="9048119486235211610">नेव्हिगेशन</translation>
 <translation id="9062295712474918030">दस्तऐवज</translation>
-<translation id="9062307380734144336">प्ले करणे थांबवणे टॉगल करण्यासाठी निवडा</translation>
 <translation id="9093215626363556771">चित्रात-चित्र मधून बाहेर पडा</translation>
 <translation id="9108370397979208512">गणित</translation>
 <translation id="9132465097189459683">अन्य...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ms.xtb b/third_party/blink/public/strings/translations/blink_strings_ms.xtb
index 1fb5545e..af549a7 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ms.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ms.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">muat turun media</translation>
 <translation id="6981594929165378967">penyisipan</translation>
 <translation id="6989848892321993519">Sila panjangkan teks ini kepada <ph name="MIN_CHARACTERS" /> aksara atau lebih (anda sedang menggunakan 1 aksara).</translation>
-<translation id="7033340931668032222">atas dan bawah untuk mengubah kelantangan</translation>
 <translation id="7034405885550056553">cadangan</translation>
 <translation id="709897737746224366">Sila padankan dengan format yang diminta.</translation>
 <translation id="7118469954320184356">Perihalan tidak tersedia.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">simbol grafik</translation>
 <translation id="8583702881314752957">senarai takrif</translation>
 <translation id="8597182159515967513">tajuk</translation>
-<translation id="8603553056539299761">kiri dan kanan untuk mencari</translation>
 <translation id="860475260694818407">isi kandungan</translation>
 <translation id="8613126697340063924">kawal main balik jauh</translation>
 <translation id="862370744433916922">sari kata</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mel</translation>
 <translation id="9048119486235211610">navigasi</translation>
 <translation id="9062295712474918030">dokumen</translation>
-<translation id="9062307380734144336">pilih untuk togol main jeda</translation>
 <translation id="9093215626363556771">keluar daripada gambar dalam gambar</translation>
 <translation id="9108370397979208512">matematik</translation>
 <translation id="9132465097189459683">Lain-lain...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_nl.xtb b/third_party/blink/public/strings/translations/blink_strings_nl.xtb
index 5d110dd..d5821c88 100644
--- a/third_party/blink/public/strings/translations/blink_strings_nl.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_nl.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">media downloaden</translation>
 <translation id="6981594929165378967">invoeging</translation>
 <translation id="6989848892321993519">Breid deze tekst uit tot <ph name="MIN_CHARACTERS" /> tekens of meer (je gebruikt momenteel één teken).</translation>
-<translation id="7033340931668032222">omhoog en omlaag om het volume te wijzigen</translation>
 <translation id="7034405885550056553">suggestie</translation>
 <translation id="709897737746224366">Zorg dat de indeling voldoet aan de gevraagde indeling.</translation>
 <translation id="7118469954320184356">Geen beschrijving beschikbaar.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafisch symbool</translation>
 <translation id="8583702881314752957">definitielijst</translation>
 <translation id="8597182159515967513">kop</translation>
-<translation id="8603553056539299761">naar links en rechts om te zoeken</translation>
 <translation id="860475260694818407">inhoudsopgave</translation>
 <translation id="8613126697340063924">afspelen bedienen op afstand</translation>
 <translation id="862370744433916922">ondertitel</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">navigatie</translation>
 <translation id="9062295712474918030">document</translation>
-<translation id="9062307380734144336">selecteer om te schakelen tussen afspelen en pauzeren</translation>
 <translation id="9093215626363556771">scherm-in-scherm afsluiten</translation>
 <translation id="9108370397979208512">wiskunde</translation>
 <translation id="9132465097189459683">Anders...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_no.xtb b/third_party/blink/public/strings/translations/blink_strings_no.xtb
index 8722383..9e42991 100644
--- a/third_party/blink/public/strings/translations/blink_strings_no.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_no.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">last ned medier</translation>
 <translation id="6981594929165378967">innsetting</translation>
 <translation id="6989848892321993519">Øk lengden på denne teksten med minst <ph name="MIN_CHARACTERS" /> tegn (du bruker for øyeblikket 1 tegn).</translation>
-<translation id="7033340931668032222">opp og ned for å endre volum</translation>
 <translation id="7034405885550056553">forslag</translation>
 <translation id="709897737746224366">Sørg for samsvar med det forespurte formatet.</translation>
 <translation id="7118469954320184356">Ingen beskrivelse er tilgjengelig.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafikksymbol</translation>
 <translation id="8583702881314752957">definisjonsliste</translation>
 <translation id="8597182159515967513">overskrift</translation>
-<translation id="8603553056539299761">venstre og høyre for å hoppe</translation>
 <translation id="860475260694818407">innholdsfortegnelse</translation>
 <translation id="8613126697340063924">kontrollér ekstern avspilling</translation>
 <translation id="862370744433916922">undertittel</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-post</translation>
 <translation id="9048119486235211610">navigasjon</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">velg for å veksle mellom avspilling og pause</translation>
 <translation id="9093215626363556771">avslutt bilde-i-bilde</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Andre</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pl.xtb b/third_party/blink/public/strings/translations/blink_strings_pl.xtb
index 8de4b5c..2c2f80b 100644
--- a/third_party/blink/public/strings/translations/blink_strings_pl.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_pl.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">pobierz multimedia</translation>
 <translation id="6981594929165378967">wstawienie</translation>
 <translation id="6989848892321993519">Wydłuż ten tekst co najmniej do <ph name="MIN_CHARACTERS" /> znaków (teraz używasz jednego znaku).</translation>
-<translation id="7033340931668032222">klawisze w górę i w dół – zmiana głośności</translation>
 <translation id="7034405885550056553">sugestia</translation>
 <translation id="709897737746224366">Podaj wartość w wymaganym formacie.</translation>
 <translation id="7118469954320184356">Brak opisu.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">symbol graficzny</translation>
 <translation id="8583702881314752957">lista definicji</translation>
 <translation id="8597182159515967513">nagłówek</translation>
-<translation id="8603553056539299761">klawisze w lewo i w prawo – przewijanie</translation>
 <translation id="860475260694818407">spis treści</translation>
 <translation id="8613126697340063924">sterowanie zdalnym odtwarzaniem</translation>
 <translation id="862370744433916922">podtytuł</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">nawigacja</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">wybierz, by odtworzyć treść lub wstrzymać odtwarzanie</translation>
 <translation id="9093215626363556771">wyłącz tryb obrazu w obrazie</translation>
 <translation id="9108370397979208512">matematyczny</translation>
 <translation id="9132465097189459683">Inny...</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 003334c..92e9393 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
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">fazer o download da mídia</translation>
 <translation id="6981594929165378967">inserção</translation>
 <translation id="6989848892321993519">Aumente esse texto para <ph name="MIN_CHARACTERS" /> caracteres ou mais. No momento, você está usando 1 caractere.</translation>
-<translation id="7033340931668032222">para cima e para baixo para controlar o volume</translation>
 <translation id="7034405885550056553">sugestão</translation>
 <translation id="709897737746224366">É preciso que o formato corresponda ao exigido.</translation>
 <translation id="7118469954320184356">Nenhuma descrição disponível.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">símbolo gráfico</translation>
 <translation id="8583702881314752957">lista de definições</translation>
 <translation id="8597182159515967513">cabeçalho</translation>
-<translation id="8603553056539299761">direita e esquerda para procurar</translation>
 <translation id="860475260694818407">sumário</translation>
 <translation id="8613126697340063924">controlar reprodução remota</translation>
 <translation id="862370744433916922">subtítulo</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">navegação</translation>
 <translation id="9062295712474918030">documento</translation>
-<translation id="9062307380734144336">selecione para tocar ou pausar</translation>
 <translation id="9093215626363556771">sair de picture-in-picture</translation>
 <translation id="9108370397979208512">matemática</translation>
 <translation id="9132465097189459683">Outras...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
index 2558095..9b8d7015 100644
--- a/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_pt-PT.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">transferir multimédia</translation>
 <translation id="6981594929165378967">inserção</translation>
 <translation id="6989848892321993519">Aumente este texto para <ph name="MIN_CHARACTERS" /> ou mais carateres (atualmente, está a utilizar 1 caráter).</translation>
-<translation id="7033340931668032222">para cima e para baixo para alterar o volume</translation>
 <translation id="7034405885550056553">sugestão</translation>
 <translation id="709897737746224366">Faça corresponder o formato pedido.</translation>
 <translation id="7118469954320184356">Nenhuma descrição disponível.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">símbolo de gráficos</translation>
 <translation id="8583702881314752957">lista de definições</translation>
 <translation id="8597182159515967513">cabeçalho</translation>
-<translation id="8603553056539299761">para a esquerda e para a direita para procurar</translation>
 <translation id="860475260694818407">índice</translation>
 <translation id="8613126697340063924">controlar a reprodução remota</translation>
 <translation id="862370744433916922">legenda</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">email</translation>
 <translation id="9048119486235211610">navegação</translation>
 <translation id="9062295712474918030">documento</translation>
-<translation id="9062307380734144336">selecione para alternar entre reproduzir e colocar em pausa.</translation>
 <translation id="9093215626363556771">sair do modo ecrã no ecrã</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Outra...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ro.xtb b/third_party/blink/public/strings/translations/blink_strings_ro.xtb
index 613d288..dd4c886 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ro.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ro.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">descarcă conținut media</translation>
 <translation id="6981594929165378967">inserare</translation>
 <translation id="6989848892321993519">Mărește acest text la cel puțin <ph name="MIN_CHARACTERS" /> caractere (în prezent folosești 1 caracter).</translation>
-<translation id="7033340931668032222">în sus și în jos pentru a modifica volumul</translation>
 <translation id="7034405885550056553">sugestie</translation>
 <translation id="709897737746224366">Respectă formatul solicitat.</translation>
 <translation id="7118469954320184356">Nu există nicio descriere disponibilă.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">simbol grafic</translation>
 <translation id="8583702881314752957">listă de definiții</translation>
 <translation id="8597182159515967513">antet</translation>
-<translation id="8603553056539299761">în stânga și în dreapta pentru a derula</translation>
 <translation id="860475260694818407">cuprins</translation>
 <translation id="8613126697340063924">controlează redarea la distanță</translation>
 <translation id="862370744433916922">subtitlu</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">navigare</translation>
 <translation id="9062295712474918030">document</translation>
-<translation id="9062307380734144336">selectează pentru a comuta între redă și întrerupe</translation>
 <translation id="9093215626363556771">ieși din modul picture-in-picture</translation>
 <translation id="9108370397979208512">matematică</translation>
 <translation id="9132465097189459683">Altele...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ru.xtb b/third_party/blink/public/strings/translations/blink_strings_ru.xtb
index fb6f5a17..20216357 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ru.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ru.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">скачать файл</translation>
 <translation id="6981594929165378967">вставка</translation>
 <translation id="6989848892321993519">Текст должен быть не короче <ph name="MIN_CHARACTERS" /> симв. Длина текста сейчас: 1 символ.</translation>
-<translation id="7033340931668032222">вверх и вниз для регулировки громкости</translation>
 <translation id="7034405885550056553">рекомендация</translation>
 <translation id="709897737746224366">Введите данные в указанном формате.</translation>
 <translation id="7118469954320184356">Нет описания.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">графический символ</translation>
 <translation id="8583702881314752957">список описаний</translation>
 <translation id="8597182159515967513">заголовок</translation>
-<translation id="8603553056539299761">вправо и влево для поиска</translation>
 <translation id="860475260694818407">оглавление</translation>
 <translation id="8613126697340063924">управлять воспроизведением на удаленных устройствах</translation>
 <translation id="862370744433916922">подзаголовок</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">электронная почта</translation>
 <translation id="9048119486235211610">навигация</translation>
 <translation id="9062295712474918030">документ</translation>
-<translation id="9062307380734144336">Выберите, чтобы включить или поставить на паузу</translation>
 <translation id="9093215626363556771">выйти из режима "Картинка в картинке"</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Другое…</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sk.xtb b/third_party/blink/public/strings/translations/blink_strings_sk.xtb
index d462f1b6..9bf9e7e 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sk.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sk.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">stiahnuť médiá</translation>
 <translation id="6981594929165378967">vloženie</translation>
 <translation id="6989848892321993519">Predĺžte tento text aspoň na <ph name="MIN_CHARACTERS" /> alebo viac znakov (momentálne používate jeden znak).</translation>
-<translation id="7033340931668032222">smery nahor a nadol slúžia na zmenu hlasitosti</translation>
 <translation id="7034405885550056553">návrh</translation>
 <translation id="709897737746224366">Zadajte hodnotu zodpovedajúcu požadovanému formátu.</translation>
 <translation id="7118469954320184356">Nie je k dispozícii žiadny popis.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafický symbol</translation>
 <translation id="8583702881314752957">zoznam definícií</translation>
 <translation id="8597182159515967513">nadpis</translation>
-<translation id="8603553056539299761">smery vľavo a vpravo slúžia na hľadanie</translation>
 <translation id="860475260694818407">obsah</translation>
 <translation id="8613126697340063924">ovládať vzdialené prehrávanie</translation>
 <translation id="862370744433916922">podnadpis</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-mail</translation>
 <translation id="9048119486235211610">navigácia</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">prepnutie medzi možnosťami Prehrať a Pozastaviť</translation>
 <translation id="9093215626363556771">ukončiť obraz v obraze</translation>
 <translation id="9108370397979208512">matematika</translation>
 <translation id="9132465097189459683">Iné...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sl.xtb b/third_party/blink/public/strings/translations/blink_strings_sl.xtb
index 85cbb48..1c7b534 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sl.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sl.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">prenos predstavnosti</translation>
 <translation id="6981594929165378967">vstavljanje</translation>
 <translation id="6989848892321993519">Podaljšajte to besedilo na toliko znakov ali več: <ph name="MIN_CHARACTERS" /> (trenutno uporabljate en znak).</translation>
-<translation id="7033340931668032222">navzgor in navzdol za spreminjanje glasnosti</translation>
 <translation id="7034405885550056553">predlog</translation>
 <translation id="709897737746224366">Poskrbite za ujemanje z zahtevano obliko.</translation>
 <translation id="7118469954320184356">Ni opisa.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafični simbol</translation>
 <translation id="8583702881314752957">seznam opredelitev</translation>
 <translation id="8597182159515967513">naslov</translation>
-<translation id="8603553056539299761">levo in desno za iskanje</translation>
 <translation id="860475260694818407">kazalo</translation>
 <translation id="8613126697340063924">upravljanje oddaljenega predvajanja</translation>
 <translation id="862370744433916922">podnaslov</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-pošta</translation>
 <translation id="9048119486235211610">krmarjenje</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">izbira za preklop predvajanja/začasne zaustavitve</translation>
 <translation id="9093215626363556771">zapiranje načina slike v sliki</translation>
 <translation id="9108370397979208512">matematika</translation>
 <translation id="9132465097189459683">Drugo ...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sr.xtb b/third_party/blink/public/strings/translations/blink_strings_sr.xtb
index 4264b3d17..a31a9f3 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sr.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">преузми медије</translation>
 <translation id="6981594929165378967">уметање</translation>
 <translation id="6989848892321993519">Продужите овај текст на бар <ph name="MIN_CHARACTERS" /> знак(ов)а (тренутно користите 1 знак).</translation>
-<translation id="7033340931668032222">горе и доле да бисте променили јачину звука</translation>
 <translation id="7034405885550056553">предлог</translation>
 <translation id="709897737746224366">Изаберите захтевани формат.</translation>
 <translation id="7118469954320184356">Опис није доступан.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">графички симбол</translation>
 <translation id="8583702881314752957">листа дефиниција</translation>
 <translation id="8597182159515967513">наслов</translation>
-<translation id="8603553056539299761">улево и удесно да бисте премотали</translation>
 <translation id="860475260694818407">садржај</translation>
 <translation id="8613126697340063924">контролишите репродукцију на удаљеном уређају</translation>
 <translation id="862370744433916922">титл</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">имејл</translation>
 <translation id="9048119486235211610">навигација</translation>
 <translation id="9062295712474918030">документ</translation>
-<translation id="9062307380734144336">изаберите да бисте пуштали/паузирали</translation>
 <translation id="9093215626363556771">изађи из режима слике у слици</translation>
 <translation id="9108370397979208512">математички</translation>
 <translation id="9132465097189459683">Друго...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sv.xtb b/third_party/blink/public/strings/translations/blink_strings_sv.xtb
index 0652b6c..69feea5 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sv.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sv.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">ladda ned media</translation>
 <translation id="6981594929165378967">infogning</translation>
 <translation id="6989848892321993519">Lägg till minst <ph name="MIN_CHARACTERS" /> tecken (för närvarande har du angett 1 tecken).</translation>
-<translation id="7033340931668032222">ändra volym med uppåt och nedåt</translation>
 <translation id="7034405885550056553">förslag</translation>
 <translation id="709897737746224366">Matcha det format som anges.</translation>
 <translation id="7118469954320184356">Det finns ingen tillgänglig beskrivning.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafisk symbol</translation>
 <translation id="8583702881314752957">definitionslista</translation>
 <translation id="8597182159515967513">rubrik</translation>
-<translation id="8603553056539299761">sök med vänster och höger</translation>
 <translation id="860475260694818407">innehållsförteckning</translation>
 <translation id="8613126697340063924">styra fjärruppspelning</translation>
 <translation id="862370744433916922">undertext</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-post</translation>
 <translation id="9048119486235211610">navigering</translation>
 <translation id="9062295712474918030">dokument</translation>
-<translation id="9062307380734144336">välj för att spela upp och pausa</translation>
 <translation id="9093215626363556771">avsluta bild-i-bild-läge</translation>
 <translation id="9108370397979208512">matte</translation>
 <translation id="9132465097189459683">Annat ...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_sw.xtb b/third_party/blink/public/strings/translations/blink_strings_sw.xtb
index 350e8c8..923a4cd 100644
--- a/third_party/blink/public/strings/translations/blink_strings_sw.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_sw.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">pakua maudhui</translation>
 <translation id="6981594929165378967">uwekaji</translation>
 <translation id="6989848892321993519">Tafadhali refusha maandishi haya hadi herufi <ph name="MIN_CHARACTERS" /> au zaidi (kwa sasa unatumia herufi 1).</translation>
-<translation id="7033340931668032222">juu na chini ili kubadilisha sauti</translation>
 <translation id="7034405885550056553">pendekezo</translation>
 <translation id="709897737746224366">Tafadhali linganisha umbizo lililoombwa.</translation>
 <translation id="7118469954320184356">Hakuna maelezo yanayopatikana.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">ishara ya picha</translation>
 <translation id="8583702881314752957">orodha ya ufafanuzi</translation>
 <translation id="8597182159515967513">kichwa</translation>
-<translation id="8603553056539299761">kushoto na kulia ili kusogeza</translation>
 <translation id="860475260694818407">jedwali la yaliyomo</translation>
 <translation id="8613126697340063924">dhibiti kucheza kwa mbali</translation>
 <translation id="862370744433916922">kichwa kidogo</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">Barua pepe</translation>
 <translation id="9048119486235211610">kuvinjari</translation>
 <translation id="9062295712474918030">hati</translation>
-<translation id="9062307380734144336">chagua ili ugeuze swichi ya kucheza au kusitisha</translation>
 <translation id="9093215626363556771">funga hali ya picha ndani ya picha</translation>
 <translation id="9108370397979208512">hisabati</translation>
 <translation id="9132465097189459683">Nyingine...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_ta.xtb b/third_party/blink/public/strings/translations/blink_strings_ta.xtb
index 0ffc1ef..045bfc1 100644
--- a/third_party/blink/public/strings/translations/blink_strings_ta.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_ta.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">மீடியாவைப் பதிவிறக்கு</translation>
 <translation id="6981594929165378967">செருகும்</translation>
 <translation id="6989848892321993519">இந்த உரையில் <ph name="MIN_CHARACTERS" /> அல்லது அதற்கு மேற்பட்ட எழுத்துக்குறிகளைப் பயன்படுத்தவும் (தற்போது 1 எழுத்துக்குறியைப் பயன்படுத்துகிறீர்கள்).</translation>
-<translation id="7033340931668032222">ஒலியளவை மாற்ற மேலும் கீழும் அசைக்கவும்</translation>
 <translation id="7034405885550056553">பரிந்துரை</translation>
 <translation id="709897737746224366">கோரிய வடிவமைப்பில் தருக.</translation>
 <translation id="7118469954320184356">விவரம் எதுவுமில்லை.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">கிராஃபிக்ஸ் சின்னம்</translation>
 <translation id="8583702881314752957">விளக்கப் பட்டியல்</translation>
 <translation id="8597182159515967513">தலைப்பு</translation>
-<translation id="8603553056539299761">நகர்த்த இடது புறமும் வலது புறமும் அசைக்கவும்</translation>
 <translation id="860475260694818407">உள்ளடக்க அட்டவணை</translation>
 <translation id="8613126697340063924">தொலைநிலை இயக்கத்தைக் கட்டுப்படுத்தவும்</translation>
 <translation id="862370744433916922">துணை தலைப்பு</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">மின்னஞ்சல்</translation>
 <translation id="9048119486235211610">வழிசெலுத்தல்</translation>
 <translation id="9062295712474918030">ஆவணம்</translation>
-<translation id="9062307380734144336">பிளே செய்தல்/இடைநிறுத்துதலுக்கு இடையே நிலைமாற்றுவதற்குத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="9093215626363556771">பிக்ச்சர்-இன்-பிக்ச்சர் பயன்முறையிலிருந்து வெளியேறும்</translation>
 <translation id="9108370397979208512">கணிதம்</translation>
 <translation id="9132465097189459683">மற்றவை…</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_te.xtb b/third_party/blink/public/strings/translations/blink_strings_te.xtb
index 889049e..00e058e 100644
--- a/third_party/blink/public/strings/translations/blink_strings_te.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_te.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">మీడియా అంశం డౌన్‌లోడ్ చేయి</translation>
 <translation id="6981594929165378967">చొప్పించడం</translation>
 <translation id="6989848892321993519">దయచేసి ఈ వచనాన్ని <ph name="MIN_CHARACTERS" /> లేదా అంతకంటే ఎక్కువ అక్షరాలకు పొడిగించండి (ప్రస్తుతం మీరు 1 అక్షరాన్ని ఉపయోగిస్తున్నారు).</translation>
-<translation id="7033340931668032222">వాల్యూమ్ మార్చడానికి కిందకు లేదా పైకి బటన్‌ను ఉపయోగించండి</translation>
 <translation id="7034405885550056553">సూచన</translation>
 <translation id="709897737746224366">దయచేసి అభ్యర్థించిన ఆకృతీకరణను సరిపోల్చండి.</translation>
 <translation id="7118469954320184356">వివరణ అందుబాటులో లేదు.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">గ్రాఫిక్స్ చిహ్నం</translation>
 <translation id="8583702881314752957">నిర్వచన జాబితా</translation>
 <translation id="8597182159515967513">శీర్షిక</translation>
-<translation id="8603553056539299761">దాటవేయడానికి ఎడమ లేదా కుడి బటన్‌ను ఉపయోగించండి</translation>
 <translation id="860475260694818407">కంటెంట్‌ల‌ పట్టిక</translation>
 <translation id="8613126697340063924">రిమోట్ ప్లేబ్యాక్‌ను నియంత్రిస్తుంది</translation>
 <translation id="862370744433916922">ఉపశీర్షిక</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">ఇమెయిల్</translation>
 <translation id="9048119486235211610">నావిగేషన్</translation>
 <translation id="9062295712474918030">పత్రం</translation>
-<translation id="9062307380734144336">ప్లే చేయడం, పాజ్ చేయడం టోగుల్ చేసేలా ఎంచుకోండి</translation>
 <translation id="9093215626363556771">చిత్రంలో చిత్రం మోడ్ నుండి నిష్క్రమింపజేస్తుంది</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">ఇతర...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_th.xtb b/third_party/blink/public/strings/translations/blink_strings_th.xtb
index 1fbf2aab..385e590b 100644
--- a/third_party/blink/public/strings/translations/blink_strings_th.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_th.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">ดาวน์โหลดสื่อ</translation>
 <translation id="6981594929165378967">การแทรก</translation>
 <translation id="6989848892321993519">โปรดกรอกข้อความนี้ให้มีอักขระอย่างน้อย <ph name="MIN_CHARACTERS" /> ตัว (ตอนนี้คุณมี 1 ตัว)</translation>
-<translation id="7033340931668032222">ขึ้นและลงเพื่อเปลี่ยนระดับเสียง</translation>
 <translation id="7034405885550056553">คำแนะนำ</translation>
 <translation id="709897737746224366">โปรดจับคู่รูปแบบที่ร้องขอ</translation>
 <translation id="7118469954320184356">ไม่มีคำอธิบาย</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">สัญลักษณ์กราฟิก</translation>
 <translation id="8583702881314752957">รายการคำจำกัดความ</translation>
 <translation id="8597182159515967513">ส่วนหัว</translation>
-<translation id="8603553056539299761">ซ้ายและขวาเพื่อกรอ</translation>
 <translation id="860475260694818407">สารบัญ</translation>
 <translation id="8613126697340063924">ควบคุมการเล่นระยะไกล</translation>
 <translation id="862370744433916922">คำบรรยาย</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">อีเมล</translation>
 <translation id="9048119486235211610">การนำทาง</translation>
 <translation id="9062295712474918030">เอกสาร</translation>
-<translation id="9062307380734144336">เลือกเพื่อสลับระหว่างเล่นและหยุดชั่วคราว</translation>
 <translation id="9093215626363556771">ออกจากการแสดงภาพซ้อนภาพ</translation>
 <translation id="9108370397979208512">คณิตศาสตร์</translation>
 <translation id="9132465097189459683">อื่นๆ...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_tr.xtb b/third_party/blink/public/strings/translations/blink_strings_tr.xtb
index 09cda4c..3a16aee 100644
--- a/third_party/blink/public/strings/translations/blink_strings_tr.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_tr.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">medyayı indir</translation>
 <translation id="6981594929165378967">ekleme</translation>
 <translation id="6989848892321993519">Lütfen bu metni <ph name="MIN_CHARACTERS" /> karakter veya daha fazla olacak şekilde uzatın (şu anda 1 karakter kullanıyorsunuz).</translation>
-<translation id="7033340931668032222">sesi değiştirmek için yukarı ve aşağı</translation>
 <translation id="7034405885550056553">öneri</translation>
 <translation id="709897737746224366">Lütfen istenen biçimi eşleştirin.</translation>
 <translation id="7118469954320184356">Açıklama yok.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">grafik sembolü</translation>
 <translation id="8583702881314752957">tanım listesi</translation>
 <translation id="8597182159515967513">başlık</translation>
-<translation id="8603553056539299761">belirli bir yere gitmek için sol ve sağ</translation>
 <translation id="860475260694818407">içindekiler</translation>
 <translation id="8613126697340063924">uzaktan oynatmayı kontrol et</translation>
 <translation id="862370744433916922">alt başlık</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">e-posta</translation>
 <translation id="9048119486235211610">gezinme</translation>
 <translation id="9062295712474918030">doküman</translation>
-<translation id="9062307380734144336">Oynatmak/duraklatmak için seçin</translation>
 <translation id="9093215626363556771">pencere içinde pencere modundan çıkın</translation>
 <translation id="9108370397979208512">math</translation>
 <translation id="9132465097189459683">Diğer...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_uk.xtb b/third_party/blink/public/strings/translations/blink_strings_uk.xtb
index 3f69367..76191ac 100644
--- a/third_party/blink/public/strings/translations/blink_strings_uk.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_uk.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">завантажити медіафайл</translation>
 <translation id="6981594929165378967">вставлення</translation>
 <translation id="6989848892321993519">У тексті має бути не менше стількох символів: <ph name="MIN_CHARACTERS" />. Наразі ви ввели 1 символ.</translation>
-<translation id="7033340931668032222">угору та вниз, щоб змінити гучність</translation>
 <translation id="7034405885550056553">пропозиція</translation>
 <translation id="709897737746224366">Виберіть потрібний формат.</translation>
 <translation id="7118469954320184356">Немає опису.</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">графічний символ</translation>
 <translation id="8583702881314752957">список визначень</translation>
 <translation id="8597182159515967513">заголовок</translation>
-<translation id="8603553056539299761">уліво та вправо, щоб шукати</translation>
 <translation id="860475260694818407">зміст</translation>
 <translation id="8613126697340063924">керувати віддаленим відтворенням</translation>
 <translation id="862370744433916922">підзаголовок</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">електронна адреса</translation>
 <translation id="9048119486235211610">навігація</translation>
 <translation id="9062295712474918030">документ</translation>
-<translation id="9062307380734144336">Виберіть, щоб перемикати між опціями "відтворити" та "призупинити"</translation>
 <translation id="9093215626363556771">вийти з режиму "Картинка в картинці"</translation>
 <translation id="9108370397979208512">математика</translation>
 <translation id="9132465097189459683">Інші...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_vi.xtb b/third_party/blink/public/strings/translations/blink_strings_vi.xtb
index 2cf86121..87e7948c5 100644
--- a/third_party/blink/public/strings/translations/blink_strings_vi.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_vi.xtb
@@ -54,7 +54,7 @@
 <translation id="2674318244760992338">chân trang</translation>
 <translation id="2709516037105925701">Tự động điền</translation>
 <translation id="2723001399770238859">âm thanh</translation>
-<translation id="2725963129578236554">bình luận</translation>
+<translation id="2725963129578236554">nhận xét</translation>
 <translation id="2746543609216772311">Giá trị phải là <ph name="MINIMUM_DATE_OR_TIME" /> hoặc muộn hơn.</translation>
 <translation id="2759744352195237655">nút cửa sổ bật lên</translation>
 <translation id="2761667185364618470">Vui lòng chọn hộp kiểm này nếu bạn muốn tiếp tục.</translation>
@@ -134,6 +134,7 @@
 <translation id="5516424706154626233">bộ chọn ngày</translation>
 <translation id="5537725057119320332">Truyền</translation>
 <translation id="5546461542133609677">bật tiếng</translation>
+<translation id="5608153257855394627">nội dung nổi bật</translation>
 <translation id="561939826962581046">thời gian</translation>
 <translation id="5630795885300617244">Nhấn đúp vào bên trái hoặc phải để bỏ qua sau 10 giây</translation>
 <translation id="5631759159893697722">bản tóm tắt</translation>
@@ -185,8 +186,7 @@
 <translation id="6941933287844615239">tải xuống phương tiện</translation>
 <translation id="6981594929165378967">chèn</translation>
 <translation id="6989848892321993519">Vui lòng kéo dài văn bản này thành <ph name="MIN_CHARACTERS" /> ký tự trở lên (bạn hiện đang sử dụng 1 ký tự).</translation>
-<translation id="7033340931668032222">lên và xuống để thay đổi âm lượng</translation>
-<translation id="7034405885550056553">thay đổi đề xuất</translation>
+<translation id="7034405885550056553">đề xuất</translation>
 <translation id="709897737746224366">Vui lòng khớp với định dạng được yêu cầu.</translation>
 <translation id="7118469954320184356">Không có nội dung mô tả.</translation>
 <translation id="7139483182332611405">lời nói đầu</translation>
@@ -226,6 +226,7 @@
 <translation id="8208673686607688524">bộ chọn ngày và giờ địa phương</translation>
 <translation id="8261464734335370856">Chính tả không hợp lệ</translation>
 <translation id="8284326494547611709">Phụ đề</translation>
+<translation id="8346634859695247203">phần mục</translation>
 <translation id="835897206747267392">Giá trị không hợp lệ.</translation>
 <translation id="8403857369060869934">thời gian trôi qua: <ph name="ELAPSED_TIME" /></translation>
 <translation id="8415319359811155763">phần</translation>
@@ -240,7 +241,6 @@
 <translation id="8550857728288566671">biểu tượng đồ họa</translation>
 <translation id="8583702881314752957">danh sách định nghĩa</translation>
 <translation id="8597182159515967513">đầu đề</translation>
-<translation id="8603553056539299761">trái và phải để tìm kiếm</translation>
 <translation id="860475260694818407">mục lục</translation>
 <translation id="8613126697340063924">điều khiển phát lại từ xa</translation>
 <translation id="862370744433916922">phụ đề</translation>
@@ -257,7 +257,6 @@
 <translation id="901834265349196618">email</translation>
 <translation id="9048119486235211610">điều hướng</translation>
 <translation id="9062295712474918030">tài liệu</translation>
-<translation id="9062307380734144336">chọn để phát/tạm dừng</translation>
 <translation id="9093215626363556771">thoát chế độ hình trong hình</translation>
 <translation id="9108370397979208512">toán học</translation>
 <translation id="9132465097189459683">Khác...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb b/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb
index d9bbfd9..cd1721e8 100644
--- a/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_zh-CN.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">下载媒体</translation>
 <translation id="6981594929165378967">插入</translation>
 <translation id="6989848892321993519">请将该内容增加到 <ph name="MIN_CHARACTERS" /> 个或更多字符(目前您使用了 1 个字符)。</translation>
-<translation id="7033340931668032222">上下键用于更改音量</translation>
 <translation id="7034405885550056553">建议</translation>
 <translation id="709897737746224366">请与所请求的格式保持一致。</translation>
 <translation id="7118469954320184356">尚无说明。</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">图形符号</translation>
 <translation id="8583702881314752957">定义列表</translation>
 <translation id="8597182159515967513">标题</translation>
-<translation id="8603553056539299761">左右键用于快进/快退</translation>
 <translation id="860475260694818407">目录</translation>
 <translation id="8613126697340063924">控制远程播放</translation>
 <translation id="862370744433916922">副标题</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">电子邮件</translation>
 <translation id="9048119486235211610">导航</translation>
 <translation id="9062295712474918030">文档</translation>
-<translation id="9062307380734144336">只需做出选择,即可在播放与暂停之间切换</translation>
 <translation id="9093215626363556771">退出“画中画”模式</translation>
 <translation id="9108370397979208512">数学</translation>
 <translation id="9132465097189459683">其他...</translation>
diff --git a/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb b/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb
index dfdd43025..c462fea 100644
--- a/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_zh-TW.xtb
@@ -186,7 +186,6 @@
 <translation id="6941933287844615239">下載媒體</translation>
 <translation id="6981594929165378967">插入</translation>
 <translation id="6989848892321993519">請將這段文字加長到 <ph name="MIN_CHARACTERS" /> 個字元以上 (目前已有 1 個字元)。</translation>
-<translation id="7033340931668032222">上下鍵可調整音量</translation>
 <translation id="7034405885550056553">建議</translation>
 <translation id="709897737746224366">請符合要求的格式。</translation>
 <translation id="7118469954320184356">目前沒有說明。</translation>
@@ -242,7 +241,6 @@
 <translation id="8550857728288566671">圖形符號</translation>
 <translation id="8583702881314752957">定義清單</translation>
 <translation id="8597182159515967513">標題</translation>
-<translation id="8603553056539299761">左右鍵可調整播放進度</translation>
 <translation id="860475260694818407">目錄</translation>
 <translation id="8613126697340063924">控制遠端播放</translation>
 <translation id="862370744433916922">副標題</translation>
@@ -259,7 +257,6 @@
 <translation id="901834265349196618">電子郵件</translation>
 <translation id="9048119486235211610">導覽</translation>
 <translation id="9062295712474918030">文件</translation>
-<translation id="9062307380734144336">選取即可在播放/暫停之間切換</translation>
 <translation id="9093215626363556771">離開子母畫面</translation>
 <translation id="9108370397979208512">數學</translation>
 <translation id="9132465097189459683">其他...</translation>
diff --git a/third_party/blink/public/web/modules/peerconnection/DEPS b/third_party/blink/public/web/modules/peerconnection/DEPS
new file mode 100644
index 0000000..1db93ebc
--- /dev/null
+++ b/third_party/blink/public/web/modules/peerconnection/DEPS
@@ -0,0 +1,9 @@
+include_rules = [
+    # TODO(crbug.com/787254): Remove the use of base::MessageLoopCurrent.
+    "+base/message_loop/message_loop_current.h",
+
+    # TODO(crbug.com/787254): Replace base::SequenceChecker by base::ThreadChecker.
+    "+base/sequence_checker.h",
+    "+base/single_thread_task_runner.h",
+    "+base/threading/thread.h",
+]
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.h b/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h
similarity index 86%
rename from content/renderer/media/webrtc/peer_connection_dependency_factory.h
rename to third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h
index 11e112c..2e97405 100644
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.h
+++ b/third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h
@@ -2,20 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
-#define CONTENT_RENDERER_MEDIA_WEBRTC_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
+#ifndef THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_PEERCONNECTION_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
+#define THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_PEERCONNECTION_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
 
 #include <string>
 
-#include "base/files/file.h"
 #include "base/macros.h"
 #include "base/message_loop/message_loop_current.h"
 #include "base/sequence_checker.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread.h"
-#include "content/common/content_export.h"
-#include "ipc/ipc_platform_file.h"
-#include "third_party/blink/public/platform/modules/peerconnection/stun_field_trial.h"
+#include "third_party/blink/public/platform/web_common.h"
 #include "third_party/webrtc/api/peer_connection_interface.h"
 #include "third_party/webrtc/p2p/stunprober/stun_prober.h"
 
@@ -36,26 +33,29 @@
 }
 
 namespace blink {
+
 class IpcNetworkManager;
+class IpcPacketSocketFactory;
+class MdnsResponderAdapter;
+class P2PSocketDispatcher;
+class StunProberTrial;
 class WebLocalFrame;
 class WebRTCPeerConnectionHandler;
 class WebRTCPeerConnectionHandlerClient;
 class WebRtcAudioDeviceImpl;
-}
-
-namespace content {
-
-class IpcPacketSocketFactory;
-class MdnsResponderAdapter;
-class P2PSocketDispatcher;
 
 // Object factory for RTC PeerConnections.
-class CONTENT_EXPORT PeerConnectionDependencyFactory
+class BLINK_MODULES_EXPORT PeerConnectionDependencyFactory
     : base::MessageLoopCurrent::DestructionObserver {
  public:
+  // TODO(crbug.com/787254): Make this constructor private, when
+  // MockPeerConnectionDependencyFactory gets moved to blink.
+  // (friend class declaration will be needed).
   PeerConnectionDependencyFactory(bool create_p2p_socket_dispatcher);
   ~PeerConnectionDependencyFactory() override;
 
+  static PeerConnectionDependencyFactory* GetInstance();
+
   // Create a RTCPeerConnectionHandler object that implements the
   // WebKit WebRTCPeerConnectionHandler interface.
   std::unique_ptr<blink::WebRTCPeerConnectionHandler>
@@ -69,8 +69,8 @@
   CreateVideoTrackSourceProxy(webrtc::VideoTrackSourceInterface* source);
 
   // Asks the PeerConnection factory to create a Local MediaStream object.
-  virtual scoped_refptr<webrtc::MediaStreamInterface>
-      CreateLocalMediaStream(const std::string& label);
+  virtual scoped_refptr<webrtc::MediaStreamInterface> CreateLocalMediaStream(
+      const std::string& label);
 
   // Asks the PeerConnection factory to create a Local VideoTrack object.
   virtual scoped_refptr<webrtc::VideoTrackInterface> CreateLocalVideoTrack(
@@ -125,7 +125,7 @@
 
  protected:
   virtual const scoped_refptr<webrtc::PeerConnectionFactoryInterface>&
-      GetPcFactory();
+  GetPcFactory();
   virtual bool PeerConnectionFactoryCreated();
 
   // Helper method to create a WebRtcAudioDeviceImpl.
@@ -150,8 +150,7 @@
       media::GpuVideoAcceleratorFactories* gpu_factories,
       base::WaitableEvent* event);
 
-  void InitializeWorkerThread(rtc::Thread** thread,
-                              base::WaitableEvent* event);
+  void InitializeWorkerThread(rtc::Thread** thread, base::WaitableEvent* event);
 
   void CreateIpcNetworkManagerOnWorkerThread(
       base::WaitableEvent* event,
@@ -185,6 +184,6 @@
   DISALLOW_COPY_AND_ASSIGN(PeerConnectionDependencyFactory);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_RENDERER_MEDIA_WEBRTC_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
+#endif  // THIRD_PARTY_BLINK_PUBLIC_WEB_MODULES_PEERCONNECTION_PEER_CONNECTION_DEPENDENCY_FACTORY_H_
diff --git a/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc b/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc
index fe93eac..678a929e 100644
--- a/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc
+++ b/third_party/blink/renderer/core/css/invalidation/pending_invalidations.cc
@@ -31,14 +31,19 @@
   if (node.GetStyleChangeType() < kSubtreeStyleChange) {
     for (auto& invalidation_set : invalidation_lists.descendants) {
       if (invalidation_set->WholeSubtreeInvalid()) {
-        node.SetNeedsStyleRecalc(kSubtreeStyleChange,
-                                 StyleChangeReasonForTracing::Create(
+        ContainerNode* subtree_root = &node;
+        if (RuntimeEnabledFeatures::FlatTreeStyleRecalcEnabled()) {
+          if (auto* shadow_root = DynamicTo<ShadowRoot>(node))
+            subtree_root = &shadow_root->host();
+        }
+        subtree_root->SetNeedsStyleRecalc(
+            kSubtreeStyleChange, StyleChangeReasonForTracing::Create(
                                      style_change_reason::kStyleInvalidator));
         requires_descendant_invalidation = false;
         break;
       }
 
-      if (invalidation_set->InvalidatesSelf()) {
+      if (invalidation_set->InvalidatesSelf() && node.IsElementNode()) {
         node.SetNeedsStyleRecalc(kLocalStyleChange,
                                  StyleChangeReasonForTracing::Create(
                                      style_change_reason::kStyleInvalidator));
diff --git a/third_party/blink/renderer/core/dom/document_test.cc b/third_party/blink/renderer/core/dom/document_test.cc
index b60bdf9..99eebc4 100644
--- a/third_party/blink/renderer/core/dom/document_test.cc
+++ b/third_party/blink/renderer/core/dom/document_test.cc
@@ -63,7 +63,6 @@
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
 #include "third_party/blink/renderer/platform/heap/heap.h"
-#include "third_party/blink/renderer/platform/mojo/interface_invalidator.h"
 #include "third_party/blink/renderer/platform/scheduler/public/event_loop.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 #include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
@@ -974,27 +973,6 @@
   EXPECT_EQ(1, new_element_count - old_element_count);
 }
 
-class InvalidatorObserver : public InterfaceInvalidator::Observer {
- public:
-  void OnInvalidate() override { ++invalidate_called_counter_; }
-
-  int CountInvalidateCalled() const { return invalidate_called_counter_; }
-
- private:
-  int invalidate_called_counter_ = 0;
-};
-
-TEST_F(DocumentTest, InterfaceInvalidatorDestruction) {
-  InvalidatorObserver obs;
-  InterfaceInvalidator* invalidator = GetDocument().GetInterfaceInvalidator();
-  invalidator->AddObserver(&obs);
-  EXPECT_EQ(obs.CountInvalidateCalled(), 0);
-
-  GetDocument().Shutdown();
-  EXPECT_FALSE(GetDocument().GetInterfaceInvalidator());
-  EXPECT_EQ(1, obs.CountInvalidateCalled());
-}
-
 // Test fixture parameterized on whether the "IsolatedWorldCSP" feature is
 // enabled.
 class IsolatedWorldCSPTest : public DocumentTest,
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc
index 0f60dfa..10f5c24 100644
--- a/third_party/blink/renderer/core/dom/node.cc
+++ b/third_party/blink/renderer/core/dom/node.cc
@@ -1322,21 +1322,19 @@
   if (!GetComputedStyle()) {
     // If we don't have a computed style, and our parent element does not have a
     // computed style it's not necessary to mark this node for style recalc.
-    if (RuntimeEnabledFeatures::FlatTreeStyleRecalcEnabled()) {
-      if (auto* parent = GetStyleRecalcParent()) {
-        DCHECK(parent->IsElementNode());
-        if (!parent->GetComputedStyle())
-          return;
-      } else if (GetDocument().documentElement() != this) {
-        // If this is the root element, and it does not have a parent computed
-        // style, we still need to mark it for style recalc since it may change
-        // from display:none. Otherwise, the node is not in the flat tree, and
-        // we can return here.
-        return;
-      }
-    } else if (auto* parent = ParentOrShadowHostElement()) {
+    if (auto* parent = GetStyleRecalcParent()) {
+      while (parent && !parent->CanParticipateInFlatTree())
+        parent = parent->GetStyleRecalcParent();
+      DCHECK(parent);
       if (!parent->GetComputedStyle())
         return;
+    } else if (RuntimeEnabledFeatures::FlatTreeStyleRecalcEnabled() &&
+               GetDocument().documentElement() != this) {
+      // If this is the root element, and it does not have a computed style, we
+      // still need to mark it for style recalc since it may change from
+      // display:none. Otherwise, the node is not in the flat tree, and we can
+      // return here.
+      return;
     }
   }
 
diff --git a/third_party/blink/renderer/core/events/touch_event_test.cc b/third_party/blink/renderer/core/events/touch_event_test.cc
index ef62cd7..71d5b0ee2 100644
--- a/third_party/blink/renderer/core/events/touch_event_test.cc
+++ b/third_party/blink/renderer/core/events/touch_event_test.cc
@@ -7,7 +7,6 @@
 #include "base/time/time.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
 #include "third_party/blink/renderer/core/frame/frame_console.h"
 #include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/loader/empty_clients.h"
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc
index f520b26..ab17eb1 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.cc
+++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -46,7 +46,6 @@
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h"
 #include "third_party/blink/renderer/platform/loader/fetch/memory_cache.h"
-#include "third_party/blink/renderer/platform/mojo/interface_invalidator.h"
 #include "third_party/blink/renderer/platform/scheduler/public/event_loop.h"
 #include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 
@@ -64,8 +63,7 @@
       agent_(agent),
       origin_trial_context_(origin_trial_context),
       window_interaction_tokens_(0),
-      referrer_policy_(network::mojom::ReferrerPolicy::kDefault),
-      invalidator_(std::make_unique<InterfaceInvalidator>()) {
+      referrer_policy_(network::mojom::ReferrerPolicy::kDefault) {
   if (origin_trial_context_)
     origin_trial_context_->BindExecutionContext(this);
 }
@@ -107,7 +105,6 @@
 
 void ExecutionContext::NotifyContextDestroyed() {
   is_context_destroyed_ = true;
-  invalidator_.reset();
   ContextLifecycleNotifier::NotifyContextDestroyed();
 }
 
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
index 5e25add..727817f 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -71,7 +71,6 @@
 class ErrorEvent;
 class EventTarget;
 class FrameOrWorkerScheduler;
-class InterfaceInvalidator;
 class KURL;
 class LocalDOMWindow;
 class OriginTrialContext;
@@ -287,8 +286,6 @@
   virtual scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(
       TaskType) = 0;
 
-  InterfaceInvalidator* GetInterfaceInvalidator() { return invalidator_.get(); }
-
   v8::Isolate* GetIsolate() const { return isolate_; }
   Agent* GetAgent() const { return agent_; }
 
@@ -352,8 +349,6 @@
 
   network::mojom::ReferrerPolicy referrer_policy_;
 
-  std::unique_ptr<InterfaceInvalidator> invalidator_;
-
   // Tracks which feature policies have already been parsed, so as not to count
   // them multiple times.
   // The size of this vector is 0 until FeaturePolicyFeatureObserved is called.
diff --git a/third_party/blink/renderer/core/frame/frame_serializer.cc b/third_party/blink/renderer/core/frame/frame_serializer.cc
index ae549776..943d7cb 100644
--- a/third_party/blink/renderer/core/frame/frame_serializer.cc
+++ b/third_party/blink/renderer/core/frame/frame_serializer.cc
@@ -384,7 +384,7 @@
   if (const auto* image = ToHTMLImageElementOrNull(element)) {
     AtomicString image_url_value;
     const Element* parent = element.parentElement();
-    if (parent && IsHTMLPictureElement(parent)) {
+    if (parent && IsA<HTMLPictureElement>(parent)) {
       // If parent element is <picture>, use ImageSourceURL() to get best fit
       // image URL from sibling source.
       image_url_value = image->ImageSourceURL();
diff --git a/third_party/blink/renderer/core/frame/viewport_data.cc b/third_party/blink/renderer/core/frame/viewport_data.cc
index edec6c1f..043605a 100644
--- a/third_party/blink/renderer/core/frame/viewport_data.cc
+++ b/third_party/blink/renderer/core/frame/viewport_data.cc
@@ -21,8 +21,6 @@
 }
 
 void ViewportData::Shutdown() {
-  // TODO(https://crbug.com/800641): Use InterfaceInvalidator once it works with
-  // associated interfaces.
   display_cutout_host_.reset();
 }
 
diff --git a/third_party/blink/renderer/core/html/html_image_element.cc b/third_party/blink/renderer/core/html/html_image_element.cc
index 22c06f3..f706e20b 100644
--- a/third_party/blink/renderer/core/html/html_image_element.cc
+++ b/third_party/blink/renderer/core/html/html_image_element.cc
@@ -328,7 +328,7 @@
   DCHECK(IsMainThread());
   Node* parent = parentNode();
   source_ = nullptr;
-  if (!parent || !IsHTMLPictureElement(*parent))
+  if (!parent || !IsA<HTMLPictureElement>(*parent))
     return ImageCandidate();
   for (Node* child = parent->firstChild(); child;
        child = child->nextSibling()) {
@@ -418,7 +418,7 @@
   if (listener_)
     GetDocument().GetMediaQueryMatcher().AddViewportListener(listener_);
   bool was_added_to_picture_parent = false;
-  if (auto* picture_parent = ToHTMLPictureElementOrNull(parentNode())) {
+  if (auto* picture_parent = DynamicTo<HTMLPictureElement>(parentNode())) {
     picture_parent->AddListenerToSourceChildren();
     was_added_to_picture_parent = picture_parent == insertion_point;
   }
@@ -446,7 +446,7 @@
     ResetFormOwner();
   if (listener_) {
     GetDocument().GetMediaQueryMatcher().RemoveViewportListener(listener_);
-    if (auto* picture_parent = ToHTMLPictureElementOrNull(parentNode()))
+    if (auto* picture_parent = DynamicTo<HTMLPictureElement>(parentNode()))
       picture_parent->RemoveListenerFromSourceChildren();
   }
   HTMLElement::RemovedFrom(insertion_point);
diff --git a/third_party/blink/renderer/core/html/html_plugin_element.cc b/third_party/blink/renderer/core/html/html_plugin_element.cc
index 68c160f..39e5851 100644
--- a/third_party/blink/renderer/core/html/html_plugin_element.cc
+++ b/third_party/blink/renderer/core/html/html_plugin_element.cc
@@ -53,6 +53,7 @@
 #include "third_party/blink/renderer/core/page/scrolling/scrolling_coordinator.h"
 #include "third_party/blink/renderer/platform/bindings/v8_per_isolate_data.h"
 #include "third_party/blink/renderer/platform/instrumentation/histogram.h"
+#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
 #include "third_party/blink/renderer/platform/network/mime/mime_type_from_url.h"
 #include "third_party/blink/renderer/platform/network/mime/mime_type_registry.h"
@@ -581,6 +582,16 @@
     ResetInstance();
   if (object_type == ObjectContentType::kFrame ||
       object_type == ObjectContentType::kImage || handled_externally) {
+    if (object_type == ObjectContentType::kFrame) {
+      UseCounter::Count(GetDocument(),
+                        WebFeature::kPluginElementLoadedDocument);
+    } else if (object_type == ObjectContentType::kImage) {
+      UseCounter::Count(GetDocument(), WebFeature::kPluginElementLoadedImage);
+    } else {
+      UseCounter::Count(GetDocument(),
+                        WebFeature::kPluginElementLoadedExternal);
+    }
+
     if (ContentFrame() && ContentFrame()->IsRemoteFrame()) {
       // During lazy reattaching, the plugin element loses EmbeddedContentView.
       // Since the ContentFrame() is not torn down the options here are to
diff --git a/third_party/blink/renderer/core/html/html_source_element.cc b/third_party/blink/renderer/core/html/html_source_element.cc
index ef77c39..ff29f8c 100644
--- a/third_party/blink/renderer/core/html/html_source_element.cc
+++ b/third_party/blink/renderer/core/html/html_source_element.cc
@@ -100,8 +100,13 @@
   Element* parent = parentElement();
   if (auto* media = ToHTMLMediaElementOrNull(parent))
     media->SourceWasAdded(this);
-  if (parent == insertion_point && IsHTMLPictureElement(parent))
-    ToHTMLPictureElement(parent)->SourceOrMediaChanged();
+
+  auto* html_picture_element = parent == insertion_point
+                                   ? DynamicTo<HTMLPictureElement>(parent)
+                                   : nullptr;
+  if (html_picture_element)
+    html_picture_element->SourceOrMediaChanged();
+
   return kInsertionDone;
 }
 
@@ -112,7 +117,7 @@
     parent = DynamicTo<Element>(&removal_root);
   if (auto* media = ToHTMLMediaElementOrNull(parent))
     media->SourceWasRemoved(this);
-  if (auto* picture = ToHTMLPictureElementOrNull(parent)) {
+  if (auto* picture = DynamicTo<HTMLPictureElement>(parent)) {
     RemoveMediaQueryListListener();
     if (was_removed_from_parent)
       picture->SourceOrMediaChanged();
@@ -177,13 +182,13 @@
     CreateMediaQueryList(params.new_value);
   if (name == kSrcsetAttr || name == kSizesAttr || name == kMediaAttr ||
       name == kTypeAttr) {
-    if (auto* picture = ToHTMLPictureElementOrNull(parentElement()))
+    if (auto* picture = DynamicTo<HTMLPictureElement>(parentElement()))
       picture->SourceOrMediaChanged();
   }
 }
 
 void HTMLSourceElement::NotifyMediaQueryChanged() {
-  if (auto* picture = ToHTMLPictureElementOrNull(parentElement()))
+  if (auto* picture = DynamicTo<HTMLPictureElement>(parentElement()))
     picture->SourceOrMediaChanged();
 }
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
index f1718d4..d44ef40 100644
--- a/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_css_agent.cc
@@ -264,7 +264,7 @@
 
     if (IsA<HTMLCanvasElement>(element) || IsHTMLEmbedElement(element) ||
         IsHTMLImageElement(element) || IsHTMLObjectElement(element) ||
-        IsHTMLPictureElement(element) || element->IsSVGElement() ||
+        IsA<HTMLPictureElement>(element) || element->IsSVGElement() ||
         IsHTMLVideoElement(element)) {
       colors.clear();
       found_opaque_color = false;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
index ac44502a..0d9ffb3 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_node.cc
@@ -953,22 +953,26 @@
   // If we don't have |NGInlineItemSegments| yet, create a segment for the
   // entire content.
   const unsigned capacity = items.size() + text_content.length() / 10;
-  if (!data->segments) {
-    data->segments = std::make_unique<NGInlineItemSegments>();
-    data->segments->ReserveCapacity(capacity);
-    data->segments->Append(text_content.length(), items.front());
-  } else {
+  NGInlineItemSegments* segments = data->segments.get();
+  if (segments) {
     DCHECK(!data->segments->IsEmpty());
     data->segments->ReserveCapacity(capacity);
+    DCHECK_EQ(text_content.length(), data->segments->EndOffset());
   }
-  DCHECK_EQ(text_content.length(), data->segments->EndOffset());
   unsigned segment_index = 0;
 
   for (const NGInlineItem& item : items) {
     if (item.Type() == NGInlineItem::kText && item.Length() &&
         item.Style()->GetFont().GetFontDescription().Orientation() ==
             FontOrientation::kVerticalMixed) {
-      segment_index = data->segments->AppendMixedFontOrientation(
+      if (!segments) {
+        data->segments = std::make_unique<NGInlineItemSegments>();
+        segments = data->segments.get();
+        segments->ReserveCapacity(capacity);
+        segments->Append(text_content.length(), item);
+        DCHECK_EQ(text_content.length(), data->segments->EndOffset());
+      }
+      segment_index = segments->AppendMixedFontOrientation(
           text_content, item.StartOffset(), item.EndOffset(), segment_index);
     }
   }
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
index b2d5b7d..5cd12de 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -748,6 +748,31 @@
   return inline_size <= available_width ? kSuccess : kOverflow;
 }
 
+// Breaks the text item at the previous break opportunity from
+// |item_result->end_offset|. Returns false if there were no previous break
+// opportunities.
+bool NGLineBreaker::BreakTextAtPreviousBreakOpportunity(
+    NGInlineItemResult* item_result) {
+  DCHECK(item_result->item);
+  DCHECK(item_result->may_break_inside);
+  const NGInlineItem& item = *item_result->item;
+  DCHECK_EQ(item.Type(), NGInlineItem::kText);
+  DCHECK(item.Style() && item.Style()->AutoWrap());
+
+  unsigned break_opportunity = break_iterator_.PreviousBreakOpportunity(
+      item_result->end_offset - 1, item_result->start_offset);
+  if (break_opportunity <= item_result->start_offset)
+    return false;
+  item_result->end_offset = break_opportunity;
+  item_result->shape_result =
+      ShapeResultView::Create(item.TextShapeResult(), item_result->start_offset,
+                              item_result->end_offset);
+  item_result->inline_size =
+      item_result->shape_result->SnappedWidth().ClampNegativeToZero();
+  item_result->can_break_after = true;
+  return true;
+}
+
 // This function handles text item for min-content. The specialized logic is
 // because min-content is very expensive by breaking at every break opportunity
 // and producing as many lines as the number of break opportunities.
@@ -1596,10 +1621,24 @@
       // If space is available, and if this text is breakable, part of the text
       // may fit. Try to break this item.
       if (width_to_rewind < 0 && item_result->may_break_inside) {
-        // When the text fits but its right margin does not, the break point
-        // must not be at the end.
-        LayoutUnit item_available_width =
-            std::min(-width_to_rewind, item_result->inline_size - 1);
+        LayoutUnit item_available_width = -width_to_rewind;
+        // Make sure the available width is smaller than the current width. The
+        // break point must not be at the end when e.g., the text fits but its
+        // right margin does not or following items do not.
+        const LayoutUnit min_available_width = item_result->inline_size - 1;
+        if (item_available_width > min_available_width) {
+          item_available_width = min_available_width;
+          // If |inline_size| is zero (e.g., `font-size: 0`), |BreakText| cannot
+          // make it shorter. Take the previous break opportunity.
+          if (UNLIKELY(item_available_width <= 0)) {
+            if (BreakTextAtPreviousBreakOpportunity(item_result)) {
+              state_ = LineBreakState::kTrailing;
+              Rewind(i + 1, line_info);
+              return;
+            }
+            continue;
+          }
+        }
         auto was_current_style = current_style_;
         SetCurrentStyle(*item.Style());
         BreakResult break_result =
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
index 5893d379..7d444eb 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
@@ -138,6 +138,7 @@
                         const ShapeResult&,
                         LayoutUnit available_width,
                         NGLineInfo*);
+  bool BreakTextAtPreviousBreakOpportunity(NGInlineItemResult* item_result);
   bool ShouldHangTraillingSpaces(const NGInlineItem&);
   bool HandleTextForFastMinContent(NGInlineItemResult*,
                                    const NGInlineItem&,
diff --git a/third_party/blink/renderer/core/loader/image_loader.cc b/third_party/blink/renderer/core/loader/image_loader.cc
index 4c67799..a285b86 100644
--- a/third_party/blink/renderer/core/loader/image_loader.cc
+++ b/third_party/blink/renderer/core/loader/image_loader.cc
@@ -486,7 +486,7 @@
     resource_request.SetReferrerPolicy(referrer_policy);
 
     // Correct the RequestContext if necessary.
-    if (IsHTMLPictureElement(GetElement()->parentNode()) ||
+    if (IsA<HTMLPictureElement>(GetElement()->parentNode()) ||
         !GetElement()->FastGetAttribute(html_names::kSrcsetAttr).IsNull()) {
       resource_request.SetRequestContext(mojom::RequestContextType::IMAGE_SET);
     } else if (IsHTMLObjectElement(GetElement())) {
diff --git a/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc b/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc
index d75037a4..a5d5157 100644
--- a/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc
+++ b/third_party/blink/renderer/core/loader/loader_factory_for_frame.cc
@@ -5,7 +5,6 @@
 #include "third_party/blink/renderer/core/loader/loader_factory_for_frame.h"
 
 #include "base/single_thread_task_runner.h"
-#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
 #include "third_party/blink/public/common/blob/blob_utils.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h"
 #include "third_party/blink/public/platform/platform.h"
diff --git a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
index 088efc2..65a616b 100644
--- a/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.cc
@@ -4,7 +4,6 @@
 
 #include "third_party/blink/renderer/core/loader/modulescript/worker_module_script_fetcher.h"
 
-#include "services/network/public/mojom/ip_address_space.mojom-blink.h"
 #include "services/network/public/mojom/referrer_policy.mojom-blink.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
index 483df84..d65e705 100644
--- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
+++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
@@ -7,7 +7,6 @@
 #include "base/callback.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
-#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
 #include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/task_type.h"
diff --git a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h
index a0fb7fc..88df341 100644
--- a/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h
+++ b/third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_PREFETCHED_SIGNED_EXCHANGE_MANAGER_H_
 
 #include "base/macros.h"
-#include "services/network/public/mojom/url_loader_factory.mojom-blink-forward.h"
+#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
 #include "third_party/blink/public/web/web_navigation_params.h"
 #include "third_party/blink/renderer/core/loader/preload_helper.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.h b/third_party/blink/renderer/core/loader/worker_fetch_context.h
index 2b19280..b71d391 100644
--- a/third_party/blink/renderer/core/loader/worker_fetch_context.h
+++ b/third_party/blink/renderer/core/loader/worker_fetch_context.h
@@ -7,8 +7,8 @@
 
 #include <memory>
 #include "base/single_thread_task_runner.h"
-#include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom-blink-forward.h"
-#include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/loader/request_context_frame_type.mojom-blink.h"
+#include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/loader/base_fetch_context.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
diff --git a/third_party/blink/renderer/core/page/chrome_client.h b/third_party/blink/renderer/core/page/chrome_client.h
index aff7c9a..a0b1cf8 100644
--- a/third_party/blink/renderer/core/page/chrome_client.h
+++ b/third_party/blink/renderer/core/page/chrome_client.h
@@ -32,7 +32,7 @@
 #include "cc/trees/paint_holding_commit_trigger.h"
 #include "third_party/blink/public/common/dom_storage/session_storage_namespace_id.h"
 #include "third_party/blink/public/common/feature_policy/feature_policy.h"
-#include "third_party/blink/public/mojom/devtools/console_message.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/devtools/console_message.mojom-blink.h"
 #include "third_party/blink/public/platform/blame_context.h"
 #include "third_party/blink/public/platform/web_drag_operation.h"
 #include "third_party/blink/public/platform/web_focus_type.h"
diff --git a/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h b/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h
index 69f964c..4587ec3 100644
--- a/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h
+++ b/third_party/blink/renderer/core/script/fetch_client_settings_object_impl.h
@@ -5,7 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_FETCH_CLIENT_SETTINGS_OBJECT_IMPL_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_FETCH_CLIENT_SETTINGS_OBJECT_IMPL_H_
 
-#include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h"
+#include "services/network/public/mojom/referrer_policy.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/heap/member.h"
 #include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object.h"
diff --git a/third_party/blink/renderer/core/script/modulator.h b/third_party/blink/renderer/core/script/modulator.h
index 39b6255..04d5c75 100644
--- a/third_party/blink/renderer/core/script/modulator.h
+++ b/third_party/blink/renderer/core/script/modulator.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_MODULATOR_H_
 
 #include "base/single_thread_task_runner.h"
-#include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h"
+#include "services/network/public/mojom/referrer_policy.mojom-blink.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/bindings/core/v8/module_record.h"
 #include "third_party/blink/renderer/bindings/core/v8/sanitize_script_errors.h"
diff --git a/third_party/blink/renderer/core/script/pending_script.h b/third_party/blink/renderer/core/script/pending_script.h
index 8ba0a5d..2b58285 100644
--- a/third_party/blink/renderer/core/script/pending_script.h
+++ b/third_party/blink/renderer/core/script/pending_script.h
@@ -27,7 +27,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_PENDING_SCRIPT_H_
 
 #include "base/macros.h"
-#include "third_party/blink/public/mojom/script/script_type.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/script/script.h"
diff --git a/third_party/blink/renderer/core/script/script_loader.h b/third_party/blink/renderer/core/script/script_loader.h
index 22b6838..c0cbbaf9 100644
--- a/third_party/blink/renderer/core/script/script_loader.h
+++ b/third_party/blink/renderer/core/script/script_loader.h
@@ -21,7 +21,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_SCRIPT_LOADER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_SCRIPT_SCRIPT_LOADER_H_
 
-#include "third_party/blink/public/mojom/script/script_type.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/public/platform/web_url_request.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_source_location_type.h"
 #include "third_party/blink/renderer/core/core_export.h"
diff --git a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc
index ae07f4b..a4d2d3f 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc
+++ b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.cc
@@ -76,14 +76,14 @@
   }
 }
 
-SMILTime SMILAnimationSandwich::NextInterestingTime(
+SMILTime SMILAnimationSandwich::NextIntervalTime(
     SMILTime presentation_time) const {
-  SMILTime interesting_time = SMILTime::Indefinite();
+  SMILTime interval_time = SMILTime::Indefinite();
   for (const auto& animation : sandwich_) {
-    interesting_time = std::min(
-        interesting_time, animation->NextInterestingTime(presentation_time));
+    interval_time =
+        std::min(interval_time, animation->NextIntervalTime(presentation_time));
   }
-  return interesting_time;
+  return interval_time;
 }
 
 SMILTime SMILAnimationSandwich::NextProgressTime(
diff --git a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h
index 08a938a..3abdcb6 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h
+++ b/third_party/blink/renderer/core/svg/animation/smil_animation_sandwich.h
@@ -113,7 +113,7 @@
   void UpdateActiveAnimationStack(SMILTime presentation_time);
   SVGSMILElement* ApplyAnimationValues();
 
-  SMILTime NextInterestingTime(SMILTime presentation_time) const;
+  SMILTime NextIntervalTime(SMILTime presentation_time) const;
   SMILTime NextProgressTime(SMILTime presentation_time) const;
 
   bool IsEmpty() { return sandwich_.IsEmpty(); }
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
index 93ec2f2d..49386ba1 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
+++ b/third_party/blink/renderer/core/svg/animation/smil_time_container.cc
@@ -458,18 +458,17 @@
 }
 
 // A helper function to fetch the next interesting time after document_time
-SMILTime SMILTimeContainer::NextInterestingTime(
-    SMILTime presentation_time) const {
+SMILTime SMILTimeContainer::NextIntervalTime(SMILTime presentation_time) const {
   DCHECK_GE(presentation_time, SMILTime());
-  SMILTime next_interesting_time = SMILTime::Indefinite();
+  SMILTime next_interval_time = SMILTime::Indefinite();
   for (const auto& sandwich : scheduled_animations_) {
-    next_interesting_time =
-        std::min(next_interesting_time,
-                 sandwich.value->NextInterestingTime(presentation_time));
+    next_interval_time =
+        std::min(next_interval_time,
+                 sandwich.value->NextIntervalTime(presentation_time));
   }
-  DCHECK(!next_interesting_time.IsFinite() ||
-         presentation_time < next_interesting_time);
-  return next_interesting_time;
+  DCHECK(!next_interval_time.IsFinite() ||
+         presentation_time < next_interval_time);
+  return next_interval_time;
 }
 
 void SMILTimeContainer::RemoveUnusedKeys() {
@@ -512,9 +511,9 @@
     UpdateIntervals(latest_update_time_);
 
   while (latest_update_time_ < presentation_time) {
-    const SMILTime interesting_time = NextInterestingTime(latest_update_time_);
-    if (interesting_time <= presentation_time) {
-      latest_update_time_ = interesting_time;
+    const SMILTime interval_time = NextIntervalTime(latest_update_time_);
+    if (interval_time <= presentation_time) {
+      latest_update_time_ = interval_time;
       UpdateIntervals(latest_update_time_);
     } else {
       latest_update_time_ = presentation_time;
diff --git a/third_party/blink/renderer/core/svg/animation/smil_time_container.h b/third_party/blink/renderer/core/svg/animation/smil_time_container.h
index a562778..f735bcd 100644
--- a/third_party/blink/renderer/core/svg/animation/smil_time_container.h
+++ b/third_party/blink/renderer/core/svg/animation/smil_time_container.h
@@ -118,7 +118,7 @@
   void UpdateAnimationsAndScheduleFrameIfNeeded(SMILTime elapsed);
   void RemoveUnusedKeys();
   void UpdateIntervals(SMILTime);
-  SMILTime NextInterestingTime(SMILTime elapsed) const;
+  SMILTime NextIntervalTime(SMILTime elapsed) const;
   void UpdateAnimationTimings(SMILTime elapsed);
   void ApplyAnimationValues(SMILTime elapsed);
   void ServiceOnNextFrame();
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
index 5d4fefd..24842f7 100644
--- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
+++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.cc
@@ -188,6 +188,7 @@
       is_scheduled_(false),
       interval_{SMILTime::Unresolved(), SMILTime::Unresolved()},
       previous_interval_{SMILTime::Unresolved(), SMILTime::Unresolved()},
+      next_interval_time_(SMILTime::Unresolved()),
       active_state_(kInactive),
       restart_(kRestartAlways),
       fill_(kFillRemove),
@@ -256,8 +257,9 @@
   is_waiting_for_first_interval_ = true;
   interval_ = {SMILTime::Unresolved(), SMILTime::Unresolved()};
   previous_interval_ = {SMILTime::Unresolved(), SMILTime::Unresolved()};
+  next_interval_time_ = SMILTime::Unresolved();
   last_progress_ = {0.0f, 0};
-  ResolveFirstInterval();
+  ResolveFirstInterval(SMILTime());
 }
 
 Node::InsertionNotificationRequest SVGSMILElement::InsertedInto(
@@ -817,46 +819,65 @@
   return SMILInterval(SMILTime::Unresolved(), SMILTime::Unresolved());
 }
 
-bool SVGSMILElement::ResolveFirstInterval() {
+bool SVGSMILElement::ResolveFirstInterval(SMILTime presentation_time) {
   SMILInterval first_interval =
-      ResolveInterval(SMILTime::Earliest(), SMILTime());
+      ResolveInterval(SMILTime::Earliest(), presentation_time);
   if (!first_interval.IsResolved() || first_interval == interval_)
     return false;
-  interval_ = first_interval;
-  NotifyDependentsOnNewInterval(interval_);
+  SetNewInterval(first_interval, presentation_time);
   return true;
 }
 
-SMILTime SVGSMILElement::NextInterestingTime(SMILTime presentation_time) const {
+void SVGSMILElement::SetNewInterval(const SMILInterval& interval,
+                                    SMILTime presentation_time) {
+  interval_ = interval;
+  next_interval_time_ = ComputeNextIntervalTime(presentation_time);
+  NotifyDependentsOnNewInterval(interval_);
+}
+
+void SVGSMILElement::SetNewIntervalEnd(SMILTime new_end,
+                                       SMILTime presentation_time) {
+  interval_.end = new_end;
+  next_interval_time_ = ComputeNextIntervalTime(presentation_time);
+  NotifyDependentsOnNewInterval(interval_);
+}
+
+SMILTime SVGSMILElement::NextIntervalTime(SMILTime presentation_time) const {
+  if (presentation_time < next_interval_time_)
+    return next_interval_time_;
+  return SMILTime::Unresolved();
+}
+
+SMILTime SVGSMILElement::ComputeNextIntervalTime(
+    SMILTime presentation_time) const {
   DCHECK_GE(presentation_time, SMILTime());
-  SMILTime next_interesting_interval_time = SMILTime::Indefinite();
+  SMILTime next_interval_time = SMILTime::Unresolved();
   if (interval_.BeginsAfter(presentation_time)) {
-    next_interesting_interval_time = interval_.begin;
+    next_interval_time = interval_.begin;
   } else if (interval_.EndsAfter(presentation_time)) {
     if (SMILTime simple_duration = SimpleDuration()) {
       SMILTime next_repeat_time = ComputeNextRepeatTime(
           interval_.begin, simple_duration, presentation_time);
       DCHECK(next_repeat_time.IsFinite());
-      next_interesting_interval_time =
-          std::min(next_repeat_time, interval_.end);
+      next_interval_time = std::min(next_repeat_time, interval_.end);
     } else {
-      next_interesting_interval_time = interval_.end;
+      next_interval_time = interval_.end;
     }
   }
-  return std::min(next_interesting_interval_time,
+  return std::min(next_interval_time,
                   FindInstanceTime(kBegin, presentation_time, false));
 }
 
 void SVGSMILElement::InstanceListChanged() {
   DCHECK(instance_lists_have_changed_);
-  if (is_waiting_for_first_interval_) {
-    instance_lists_have_changed_ = false;
-    ResolveFirstInterval();
-    return;
-  }
   SMILTime current_presentation_time =
       time_container_ ? time_container_->CurrentDocumentTime() : SMILTime();
   DCHECK(!current_presentation_time.IsUnresolved());
+  if (is_waiting_for_first_interval_) {
+    instance_lists_have_changed_ = false;
+    ResolveFirstInterval(current_presentation_time);
+    return;
+  }
   SMILInterval old_interval = interval_;
   UpdateInterval(current_presentation_time);
   if (interval_ != old_interval) {
@@ -886,10 +907,8 @@
     SMILTime new_end = FindInstanceTime(kEnd, interval_.begin, false);
     DCHECK(!new_end.IsUnresolved());
     new_end = ResolveActiveEnd(interval_.begin, new_end);
-    if (new_end != interval_.end) {
-      interval_.end = new_end;
-      NotifyDependentsOnNewInterval(interval_);
-    }
+    if (new_end != interval_.end)
+      SetNewIntervalEnd(new_end, presentation_time);
   }
 }
 
@@ -902,8 +921,7 @@
   if (restart == kRestartAlways) {
     SMILTime next_begin = FindInstanceTime(kBegin, interval_.begin, false);
     if (interval_.EndsAfter(next_begin)) {
-      interval_.end = next_begin;
-      NotifyDependentsOnNewInterval(interval_);
+      SetNewIntervalEnd(next_begin, presentation_time);
       return interval_.EndsBefore(presentation_time);
     }
   }
@@ -925,17 +943,16 @@
     return;
   if (interval_.IsResolved())
     previous_interval_ = interval_;
-  interval_ = next_interval;
-  NotifyDependentsOnNewInterval(interval_);
+  SetNewInterval(next_interval, presentation_time);
   interval_has_changed_ = true;
 }
 
 void SVGSMILElement::AddedToTimeContainer() {
   DCHECK(time_container_);
-  if (is_waiting_for_first_interval_)
-    ResolveFirstInterval();
-
   SMILTime current_presentation_time = time_container_->CurrentDocumentTime();
+  if (is_waiting_for_first_interval_)
+    ResolveFirstInterval(current_presentation_time);
+
   if (IntervalBegin() <= current_presentation_time ||
       NextProgressTime(current_presentation_time).IsFinite()) {
     time_container_->MarkIntervalsDirty();
@@ -1078,7 +1095,7 @@
   if (is_waiting_for_first_interval_) {
     // The current internal must be the first, and has started, so clear the flag and (re)resolve.
     is_waiting_for_first_interval_ = false;
-    if (ResolveFirstInterval())
+    if (ResolveFirstInterval(elapsed))
       time_container_->MarkIntervalsDirty();
   }
   return true;
@@ -1109,6 +1126,7 @@
       NotifyDependentsOnRepeat(progress_state.repeat, elapsed);
       ScheduleRepeatEvents();
     }
+    next_interval_time_ = ComputeNextIntervalTime(elapsed);
     last_progress_ = progress_state;
   }
 }
diff --git a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
index 9097d14..dcfff72 100644
--- a/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
+++ b/third_party/blink/renderer/core/svg/animation/svg_smil_element.h
@@ -91,7 +91,8 @@
   bool IsHigherPriorityThan(const SVGSMILElement* other,
                             SMILTime presentation_time) const;
 
-  SMILTime NextInterestingTime(SMILTime elapsed) const;
+  SMILTime NextIntervalTime(SMILTime presentation_time) const;
+  SMILTime ComputeNextIntervalTime(SMILTime presentation_time) const;
   SMILTime NextProgressTime(SMILTime elapsed) const;
   void UpdateAnimatedValue(SVGSMILElement* result_element) {
     UpdateAnimation(last_progress_.progress, last_progress_.repeat,
@@ -163,7 +164,7 @@
   SMILTime BeginTimeForPrioritization(SMILTime presentation_time) const;
 
   SMILInterval ResolveInterval(SMILTime begin_after, SMILTime end_after) const;
-  bool ResolveFirstInterval();
+  bool ResolveFirstInterval(SMILTime presentation_time);
   // Check if the current interval is still current, and apply restart
   // semantics. Returns true if a new interval should be resolved.
   bool HandleIntervalRestart(SMILTime presentation_time);
@@ -172,6 +173,8 @@
                             SMILTime resolved_end) const;
   SMILTime RepeatingDuration() const;
   const SMILInterval& GetActiveInterval(SMILTime elapsed) const;
+  void SetNewInterval(const SMILInterval&, SMILTime presentation_time);
+  void SetNewIntervalEnd(SMILTime new_end, SMILTime presentation_time);
 
   void AddInstanceTime(BeginOrEnd begin_or_end,
                        SMILTime time,
@@ -275,6 +278,7 @@
   // This is the previous interval. It should always be non-overlapping and
   // "before" |interval_|.
   SMILInterval previous_interval_;
+  SMILTime next_interval_time_;
 
   unsigned active_state_ : 2;
   unsigned restart_ : 2;
diff --git a/third_party/blink/renderer/core/testing/document_interface_broker_test_helpers.h b/third_party/blink/renderer/core/testing/document_interface_broker_test_helpers.h
index f00a018a..6e0d088 100644
--- a/third_party/blink/renderer/core/testing/document_interface_broker_test_helpers.h
+++ b/third_party/blink/renderer/core/testing/document_interface_broker_test_helpers.h
@@ -9,7 +9,7 @@
 
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver.h"
-#include "third_party/blink/public/mojom/frame/document_interface_broker.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/frame/document_interface_broker.mojom-blink.h"
 #include "third_party/blink/public/mojom/frame/frame_host_test_interface.mojom-blink.h"
 #include "third_party/blink/renderer/core/testing/test_document_interface_broker.h"
 
diff --git a/third_party/blink/renderer/core/workers/abstract_worker.h b/third_party/blink/renderer/core/workers/abstract_worker.h
index aa6cd7d..7b21022 100644
--- a/third_party/blink/renderer/core/workers/abstract_worker.h
+++ b/third_party/blink/renderer/core/workers/abstract_worker.h
@@ -31,7 +31,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_ABSTRACT_WORKER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_ABSTRACT_WORKER_H_
 
-#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/dom/events/event_listener.h"
 #include "third_party/blink/renderer/core/dom/events/event_target.h"
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index b0d498d..73c8c4b 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -12,7 +12,6 @@
 #include "services/service_manager/public/mojom/interface_provider.mojom-blink.h"
 #include "third_party/blink/public/common/blob/blob_utils.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink.h"
 #include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom-blink.h"
 #include "third_party/blink/public/platform/web_content_settings_client.h"
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.h b/third_party/blink/renderer/core/workers/dedicated_worker.h
index a3291d7dec..72d5bbc 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 #include "base/memory/scoped_refptr.h"
-#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink.h"
 #include "third_party/blink/public/platform/web_dedicated_worker.h"
 #include "third_party/blink/public/platform/web_dedicated_worker_host_factory_client.h"
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h b/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h
index c43b26d5..0347fe0d 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h
+++ b/third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h
@@ -9,8 +9,8 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/optional.h"
-#include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h"
-#include "third_party/blink/public/mojom/messaging/transferable_message.mojom-blink-forward.h"
+#include "services/network/public/mojom/referrer_policy.mojom-blink.h"
+#include "third_party/blink/public/mojom/messaging/transferable_message.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/core/messaging/message_port.h"
 #include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
index 0ad228d9..27cabe55 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.cc
@@ -8,7 +8,6 @@
 
 #include "base/feature_list.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/renderer/platform/network/content_security_policy_parsers.h"
 
 namespace blink {
diff --git a/third_party/blink/renderer/core/workers/global_scope_creation_params.h b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
index 6b3e731..b77a367 100644
--- a/third_party/blink/renderer/core/workers/global_scope_creation_params.h
+++ b/third_party/blink/renderer/core/workers/global_scope_creation_params.h
@@ -9,12 +9,12 @@
 #include "base/macros.h"
 #include "base/optional.h"
 #include "base/unguessable_token.h"
-#include "services/network/public/mojom/ip_address_space.mojom-blink-forward.h"
-#include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h"
-#include "services/service_manager/public/mojom/interface_provider.mojom-blink-forward.h"
+#include "services/network/public/mojom/ip_address_space.mojom-blink.h"
+#include "services/network/public/mojom/referrer_policy.mojom-blink.h"
+#include "services/service_manager/public/mojom/interface_provider.mojom-blink.h"
 #include "third_party/blink/public/common/feature_policy/feature_policy.h"
-#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink-forward.h"
-#include "third_party/blink/public/mojom/script/script_type.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink.h"
+#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
 #include "third_party/blink/public/platform/web_content_settings_client.h"
 #include "third_party/blink/public/platform/web_worker_fetch_context.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_cache_options.h"
diff --git a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc
index 3925620..ecc4c90 100644
--- a/third_party/blink/renderer/core/workers/installed_scripts_manager.cc
+++ b/third_party/blink/renderer/core/workers/installed_scripts_manager.cc
@@ -4,7 +4,6 @@
 
 #include "third_party/blink/renderer/core/workers/installed_scripts_manager.h"
 
-#include "services/network/public/mojom/ip_address_space.mojom-blink.h"
 #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
 #include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
 #include "third_party/blink/renderer/platform/network/http_names.h"
diff --git a/third_party/blink/renderer/core/workers/installed_scripts_manager.h b/third_party/blink/renderer/core/workers/installed_scripts_manager.h
index bdb32e3d..7f21620 100644
--- a/third_party/blink/renderer/core/workers/installed_scripts_manager.h
+++ b/third_party/blink/renderer/core/workers/installed_scripts_manager.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_CORE_WORKERS_INSTALLED_SCRIPTS_MANAGER_H_
 
 #include "base/optional.h"
-#include "services/network/public/mojom/ip_address_space.mojom-blink-forward.h"
+#include "services/network/public/mojom/ip_address_space.mojom-blink.h"
 #include "third_party/blink/renderer/core/core_export.h"
 #include "third_party/blink/renderer/platform/network/content_security_policy_response_headers.h"
 #include "third_party/blink/renderer/platform/network/http_header_map.h"
diff --git a/third_party/blink/renderer/core/workers/shared_worker.cc b/third_party/blink/renderer/core/workers/shared_worker.cc
index 9b69f968..55a4189 100644
--- a/third_party/blink/renderer/core/workers/shared_worker.cc
+++ b/third_party/blink/renderer/core/workers/shared_worker.cc
@@ -33,7 +33,6 @@
 
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "third_party/blink/public/common/blob/blob_utils.h"
-#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/fileapi/public_url_manager.h"
 #include "third_party/blink/renderer/core/messaging/message_channel.h"
diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/renderer/devtools/BUILD.gn
index 8107166..eb2516d 100644
--- a/third_party/blink/renderer/devtools/BUILD.gn
+++ b/third_party/blink/renderer/devtools/BUILD.gn
@@ -61,24 +61,7 @@
   "front_end/audits_test_runner/module.json",
   "front_end/axe_core_test_runner/AxeCoreTestRunner.js",
   "front_end/axe_core_test_runner/module.json",
-  "front_end/bindings/BlackboxManager.js",
-  "front_end/bindings/BreakpointManager.js",
-  "front_end/bindings/CompilerScriptMapping.js",
-  "front_end/bindings/ContentProviderBasedProject.js",
-  "front_end/bindings/CSSWorkspaceBinding.js",
-  "front_end/bindings/DebuggerWorkspaceBinding.js",
-  "front_end/bindings/DefaultScriptMapping.js",
-  "front_end/bindings/FileUtils.js",
-  "front_end/bindings/LiveLocation.js",
   "front_end/bindings/module.json",
-  "front_end/bindings/NetworkProject.js",
-  "front_end/bindings/PresentationConsoleMessageHelper.js",
-  "front_end/bindings/ResourceMapping.js",
-  "front_end/bindings/ResourceScriptMapping.js",
-  "front_end/bindings/ResourceUtils.js",
-  "front_end/bindings/SASSSourceMapping.js",
-  "front_end/bindings/StylesSourceMapping.js",
-  "front_end/bindings/TempFile.js",
   "front_end/bindings_test_runner/AutomappingTestRunner.js",
   "front_end/bindings_test_runner/BindingsTestRunner.js",
   "front_end/bindings_test_runner/IsolatedFilesystemTestRunner.js",
@@ -590,7 +573,6 @@
   "front_end/security_test_runner/module.json",
   "front_end/security_test_runner/SecurityTestRunner.js",
   "front_end/services/module.json",
-  "front_end/services/ServiceManager.js",
   "front_end/settings/frameworkBlackboxSettingsTab.css",
   "front_end/settings/FrameworkBlackboxSettingsTab.js",
   "front_end/settings/module.json",
@@ -786,10 +768,7 @@
   "front_end/worker_main/module.json",
   "front_end/worker_service/module.json",
   "front_end/worker_service/ServiceDispatcher.js",
-  "front_end/workspace/FileManager.js",
   "front_end/workspace/module.json",
-  "front_end/workspace/UISourceCode.js",
-  "front_end/workspace/Workspace.js",
   "front_end/workspace_diff/WorkspaceDiff.js",
   "front_end/workspace_diff/module.json",
 ]
@@ -848,6 +827,30 @@
 all_devtools_files += lighthouse_locale_files
 
 all_devtools_modules = [
+  "front_end/bindings/bindings.js",
+  "front_end/bindings/TempFile.js",
+  "front_end/bindings/StylesSourceMapping.js",
+  "front_end/bindings/SASSSourceMapping.js",
+  "front_end/bindings/ResourceUtils.js",
+  "front_end/bindings/ResourceScriptMapping.js",
+  "front_end/bindings/ResourceMapping.js",
+  "front_end/bindings/PresentationConsoleMessageHelper.js",
+  "front_end/bindings/NetworkProject.js",
+  "front_end/bindings/LiveLocation.js",
+  "front_end/bindings/FileUtils.js",
+  "front_end/bindings/DefaultScriptMapping.js",
+  "front_end/bindings/DebuggerWorkspaceBinding.js",
+  "front_end/bindings/CSSWorkspaceBinding.js",
+  "front_end/bindings/ContentProviderBasedProject.js",
+  "front_end/bindings/CompilerScriptMapping.js",
+  "front_end/bindings/BreakpointManager.js",
+  "front_end/bindings/BlackboxManager.js",
+  "front_end/workspace/workspace.js",
+  "front_end/workspace/WorkspaceImpl.js",
+  "front_end/workspace/UISourceCode.js",
+  "front_end/workspace/FileManager.js",
+  "front_end/services/services.js",
+  "front_end/services/ServiceManager.js",
   "front_end/sdk/sdk.js",
   "front_end/sdk/TracingModel.js",
   "front_end/sdk/TracingManager.js",
@@ -1193,6 +1196,30 @@
 ]
 
 copied_devtools_modules = [
+  "$resources_out_dir/bindings/bindings.js",
+  "$resources_out_dir/bindings/TempFile.js",
+  "$resources_out_dir/bindings/StylesSourceMapping.js",
+  "$resources_out_dir/bindings/SASSSourceMapping.js",
+  "$resources_out_dir/bindings/ResourceUtils.js",
+  "$resources_out_dir/bindings/ResourceScriptMapping.js",
+  "$resources_out_dir/bindings/ResourceMapping.js",
+  "$resources_out_dir/bindings/PresentationConsoleMessageHelper.js",
+  "$resources_out_dir/bindings/NetworkProject.js",
+  "$resources_out_dir/bindings/LiveLocation.js",
+  "$resources_out_dir/bindings/FileUtils.js",
+  "$resources_out_dir/bindings/DefaultScriptMapping.js",
+  "$resources_out_dir/bindings/DebuggerWorkspaceBinding.js",
+  "$resources_out_dir/bindings/CSSWorkspaceBinding.js",
+  "$resources_out_dir/bindings/ContentProviderBasedProject.js",
+  "$resources_out_dir/bindings/CompilerScriptMapping.js",
+  "$resources_out_dir/bindings/BreakpointManager.js",
+  "$resources_out_dir/bindings/BlackboxManager.js",
+  "$resources_out_dir/workspace/workspace.js",
+  "$resources_out_dir/workspace/WorkspaceImpl.js",
+  "$resources_out_dir/workspace/UISourceCode.js",
+  "$resources_out_dir/workspace/FileManager.js",
+  "$resources_out_dir/services/services.js",
+  "$resources_out_dir/services/ServiceManager.js",
   "$resources_out_dir/sdk/sdk.js",
   "$resources_out_dir/sdk/TracingModel.js",
   "$resources_out_dir/sdk/TracingManager.js",
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/BlackboxManager.js b/third_party/blink/renderer/devtools/front_end/bindings/BlackboxManager.js
index fd784f68c..0952be4b 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/BlackboxManager.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/BlackboxManager.js
@@ -5,7 +5,7 @@
  * @unrestricted
  * @implements {SDK.SDKModelObserver<!SDK.DebuggerModel>}
  */
-Bindings.BlackboxManager = class {
+export default class BlackboxManager {
   /**
    * @param {!Bindings.DebuggerWorkspaceBinding} debuggerWorkspaceBinding
    */
@@ -143,8 +143,8 @@
       hasBlackboxedMappings = sourceMap ? sourceMap.sourceURLs().some(url => this.isBlackboxedURL(url)) : false;
     }
     if (!hasBlackboxedMappings) {
-      if (script[Bindings.BlackboxManager._blackboxedRanges] && await script.setBlackboxedRanges([])) {
-        delete script[Bindings.BlackboxManager._blackboxedRanges];
+      if (script[_blackboxedRanges] && await script.setBlackboxedRanges([])) {
+        delete script[_blackboxedRanges];
       }
       this._debuggerWorkspaceBinding.updateLocations(script);
       return;
@@ -164,9 +164,9 @@
       }
     }
 
-    const oldRanges = script[Bindings.BlackboxManager._blackboxedRanges] || [];
+    const oldRanges = script[_blackboxedRanges] || [];
     if (!isEqual(oldRanges, newRanges) && await script.setBlackboxedRanges(newRanges)) {
-      script[Bindings.BlackboxManager._blackboxedRanges] = newRanges;
+      script[_blackboxedRanges] = newRanges;
     }
     this._debuggerWorkspaceBinding.updateLocations(script);
 
@@ -344,9 +344,20 @@
     }
     return prefix + name.escapeForRegExp() + (url.endsWith(name) ? '$' : '\\b');
   }
-};
+}
 
-Bindings.BlackboxManager._blackboxedRanges = Symbol('blackboxedRanged');
+export const _blackboxedRanges = Symbol('blackboxedRanged');
 
-/** @type {!Bindings.BlackboxManager} */
-Bindings.blackboxManager;
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.BlackboxManager = BlackboxManager;
+
+Bindings.BlackboxManager._blackboxedRanges = _blackboxedRanges;
+
+/** @type {!BlackboxManager} */
+Bindings.blackboxManager;
\ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/BreakpointManager.js b/third_party/blink/renderer/devtools/front_end/bindings/BreakpointManager.js
index 13a74be..6287949 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/BreakpointManager.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/BreakpointManager.js
@@ -30,7 +30,7 @@
 /**
  * @unrestricted
  */
-Bindings.BreakpointManager = class extends Common.Object {
+export default class BreakpointManager extends Common.Object {
   /**
    * @param {!Workspace.Workspace} workspace
    * @param {!SDK.TargetManager} targetManager
@@ -38,14 +38,14 @@
    */
   constructor(workspace, targetManager, debuggerWorkspaceBinding) {
     super();
-    this._storage = new Bindings.BreakpointManager.Storage();
+    this._storage = new Storage();
     this._workspace = workspace;
     this._targetManager = targetManager;
     this._debuggerWorkspaceBinding = debuggerWorkspaceBinding;
 
     /** @type {!Map<!Workspace.UISourceCode, !Map<string, !Bindings.BreakpointManager.BreakpointLocation>>} */
     this._breakpointsForUISourceCode = new Map();
-    /** @type {!Map<string, !Bindings.BreakpointManager.Breakpoint>} */
+    /** @type {!Map<string, !Breakpoint>} */
     this._breakpointByStorageId = new Map();
 
     this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this);
@@ -106,7 +106,7 @@
    * @param {number} columnNumber
    * @param {string} condition
    * @param {boolean} enabled
-   * @return {!Bindings.BreakpointManager.Breakpoint}
+   * @return {!Breakpoint}
    */
   setBreakpoint(uiSourceCode, lineNumber, columnNumber, condition, enabled) {
     let uiLocation = new Workspace.UILocation(uiSourceCode, lineNumber, columnNumber);
@@ -125,10 +125,10 @@
    * @param {number} columnNumber
    * @param {string} condition
    * @param {boolean} enabled
-   * @return {!Bindings.BreakpointManager.Breakpoint}
+   * @return {!Breakpoint}
    */
   _innerSetBreakpoint(uiSourceCode, lineNumber, columnNumber, condition, enabled) {
-    const itemId = Bindings.BreakpointManager._breakpointStorageId(uiSourceCode.url(), lineNumber, columnNumber);
+    const itemId = BreakpointManager._breakpointStorageId(uiSourceCode.url(), lineNumber, columnNumber);
     let breakpoint = this._breakpointByStorageId.get(itemId);
     if (breakpoint) {
       breakpoint._updateState(condition, enabled);
@@ -136,8 +136,7 @@
       breakpoint._updateBreakpoint();
       return breakpoint;
     }
-    breakpoint = new Bindings.BreakpointManager.Breakpoint(
-        this, uiSourceCode, uiSourceCode.url(), lineNumber, columnNumber, condition, enabled);
+    breakpoint = new Breakpoint(this, uiSourceCode, uiSourceCode.url(), lineNumber, columnNumber, condition, enabled);
     this._breakpointByStorageId.set(itemId, breakpoint);
     return breakpoint;
   }
@@ -184,7 +183,7 @@
         .then(toUILocations.bind(this));
 
     /**
-     * @this {!Bindings.BreakpointManager}
+     * @this {!BreakpointManager}
      * @param {!Array<!SDK.DebuggerModel.BreakLocation>} locations
      * @return {!Array<!Workspace.UILocation>}
      */
@@ -229,7 +228,7 @@
   }
 
   /**
-   * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint
+   * @param {!Breakpoint} breakpoint
    * @param {boolean} removeFromStorage
    */
   _removeBreakpoint(breakpoint, removeFromStorage) {
@@ -240,7 +239,7 @@
   }
 
   /**
-   * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint
+   * @param {!Breakpoint} breakpoint
    * @param {!Workspace.UILocation} uiLocation
    */
   _uiLocationAdded(breakpoint, uiLocation) {
@@ -251,11 +250,11 @@
     }
     const breakpointLocation = {breakpoint: breakpoint, uiLocation: uiLocation};
     breakpoints.set(uiLocation.id(), breakpointLocation);
-    this.dispatchEventToListeners(Bindings.BreakpointManager.Events.BreakpointAdded, breakpointLocation);
+    this.dispatchEventToListeners(Events.BreakpointAdded, breakpointLocation);
   }
 
   /**
-   * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint
+   * @param {!Breakpoint} breakpoint
    * @param {!Workspace.UILocation} uiLocation
    */
   _uiLocationRemoved(breakpoint, uiLocation) {
@@ -271,31 +270,23 @@
     if (breakpoints.size === 0) {
       this._breakpointsForUISourceCode.delete(uiLocation.uiSourceCode);
     }
-    this.dispatchEventToListeners(
-        Bindings.BreakpointManager.Events.BreakpointRemoved, {breakpoint: breakpoint, uiLocation: uiLocation});
+    this.dispatchEventToListeners(Events.BreakpointRemoved, {breakpoint: breakpoint, uiLocation: uiLocation});
   }
-};
+}
 
 /** @enum {symbol} */
-Bindings.BreakpointManager.Events = {
+export const Events = {
   BreakpointAdded: Symbol('breakpoint-added'),
   BreakpointRemoved: Symbol('breakpoint-removed')
 };
 
-/** @typedef {{
- *    breakpoint: !Bindings.BreakpointManager.Breakpoint,
- *    uiLocation: !Workspace.UILocation
- *  }}
- */
-Bindings.BreakpointManager.BreakpointLocation;
-
 /**
  * @unrestricted
  * @implements {SDK.SDKModelObserver<!SDK.DebuggerModel>}
  */
-Bindings.BreakpointManager.Breakpoint = class {
+export class Breakpoint {
   /**
-   * @param {!Bindings.BreakpointManager} breakpointManager
+   * @param {!BreakpointManager} breakpointManager
    * @param {!Workspace.UISourceCode} primaryUISourceCode
    * @param {string} url
    * @param {number} lineNumber
@@ -319,7 +310,7 @@
     /** @type {boolean} */ this._isRemoved;
 
     this._currentState = null;
-    /** @type {!Map.<!SDK.DebuggerModel, !Bindings.BreakpointManager.ModelBreakpoint>}*/
+    /** @type {!Map.<!SDK.DebuggerModel, !ModelBreakpoint>}*/
     this._modelBreakpoints = new Map();
     this._updateState(condition, enabled);
     this.setPrimaryUISourceCode(primaryUISourceCode);
@@ -341,8 +332,7 @@
    */
   modelAdded(debuggerModel) {
     const debuggerWorkspaceBinding = this._breakpointManager._debuggerWorkspaceBinding;
-    this._modelBreakpoints.set(
-        debuggerModel, new Bindings.BreakpointManager.ModelBreakpoint(debuggerModel, this, debuggerWorkspaceBinding));
+    this._modelBreakpoints.set(debuggerModel, new ModelBreakpoint(debuggerModel, this, debuggerWorkspaceBinding));
   }
 
   /**
@@ -494,7 +484,7 @@
    * @return {string}
    */
   _breakpointStorageId() {
-    return Bindings.BreakpointManager._breakpointStorageId(this._url, this._lineNumber, this._columnNumber);
+    return BreakpointManager._breakpointStorageId(this._url, this._lineNumber, this._columnNumber);
   }
 
   _resetLocations() {
@@ -504,15 +494,15 @@
       modelBreakpoints[i]._resetLocations();
     }
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.BreakpointManager.ModelBreakpoint = class {
+export class ModelBreakpoint {
   /**
    * @param {!SDK.DebuggerModel} debuggerModel
-   * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint
+   * @param {!Breakpoint} breakpoint
    * @param {!Bindings.DebuggerWorkspaceBinding} debuggerWorkspaceBinding
    */
   constructor(debuggerModel, breakpoint, debuggerWorkspaceBinding) {
@@ -606,21 +596,19 @@
     } else if (debuggerLocation) {
       const script = debuggerLocation.script();
       if (script.sourceURL) {
-        newState = new Bindings.BreakpointManager.Breakpoint.State(
+        newState = new Breakpoint.State(
             script.sourceURL, null, null, debuggerLocation.lineNumber, debuggerLocation.columnNumber, condition);
       } else {
-        newState = new Bindings.BreakpointManager.Breakpoint.State(
+        newState = new Breakpoint.State(
             null, script.scriptId, script.hash, debuggerLocation.lineNumber, debuggerLocation.columnNumber, condition);
       }
     } else if (this._breakpoint._currentState && this._breakpoint._currentState.url) {
       const position = this._breakpoint._currentState;
-      newState = new Bindings.BreakpointManager.Breakpoint.State(
-          position.url, null, null, position.lineNumber, position.columnNumber, condition);
+      newState = new Breakpoint.State(position.url, null, null, position.lineNumber, position.columnNumber, condition);
     } else if (uiSourceCode) {
-      newState = new Bindings.BreakpointManager.Breakpoint.State(
-          uiSourceCode.url(), null, null, lineNumber, columnNumber, condition);
+      newState = new Breakpoint.State(uiSourceCode.url(), null, null, lineNumber, columnNumber, condition);
     }
-    if (this._debuggerId && Bindings.BreakpointManager.Breakpoint.State.equals(newState, this._currentState)) {
+    if (this._debuggerId && Breakpoint.State.equals(newState, this._currentState)) {
       callback();
       return;
     }
@@ -773,9 +761,9 @@
     this._debuggerModel.removeEventListener(
         SDK.DebuggerModel.Events.DebuggerWasEnabled, this._scheduleUpdateInDebugger, this);
   }
-};
+}
 
-Bindings.BreakpointManager.Breakpoint.State = class {
+Breakpoint.State = class {
   /**
    * @param {?string} url
    * @param {?string} scriptId
@@ -794,8 +782,8 @@
   }
 
   /**
-   * @param {?Bindings.BreakpointManager.Breakpoint.State|undefined} stateA
-   * @param {?Bindings.BreakpointManager.Breakpoint.State|undefined} stateB
+   * @param {?Breakpoint.State|undefined} stateA
+   * @param {?Breakpoint.State|undefined} stateB
    * @return {boolean}
    */
   static equals(stateA, stateB) {
@@ -809,16 +797,15 @@
 };
 
 
-Bindings.BreakpointManager.Storage = class {
+export class Storage {
   constructor() {
     this._setting = Common.settings.createLocalSetting('breakpoints', []);
-    /** @type {!Map<string, !Bindings.BreakpointManager.Storage.Item>} */
+    /** @type {!Map<string, !Storage.Item>} */
     this._breakpoints = new Map();
-    const items = /** @type {!Array<!Bindings.BreakpointManager.Storage.Item>} */ (this._setting.get());
+    const items = /** @type {!Array<!Storage.Item>} */ (this._setting.get());
     for (const item of items) {
       item.columnNumber = item.columnNumber || 0;
-      this._breakpoints.set(
-          Bindings.BreakpointManager._breakpointStorageId(item.url, item.lineNumber, item.columnNumber), item);
+      this._breakpoints.set(BreakpointManager._breakpointStorageId(item.url, item.lineNumber, item.columnNumber), item);
     }
     /** @type {boolean|undefined} */ this._muted;
   }
@@ -833,25 +820,25 @@
 
   /**
    * @param {string} url
-   * @return {!Array<!Bindings.BreakpointManager.Storage.Item>}
+   * @return {!Array<!Storage.Item>}
    */
   breakpointItems(url) {
     return Array.from(this._breakpoints.values()).filter(item => item.url === url);
   }
 
   /**
-   * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint
+   * @param {!Breakpoint} breakpoint
    */
   _updateBreakpoint(breakpoint) {
     if (this._muted || !breakpoint._breakpointStorageId()) {
       return;
     }
-    this._breakpoints.set(breakpoint._breakpointStorageId(), new Bindings.BreakpointManager.Storage.Item(breakpoint));
+    this._breakpoints.set(breakpoint._breakpointStorageId(), new Storage.Item(breakpoint));
     this._save();
   }
 
   /**
-   * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint
+   * @param {!Breakpoint} breakpoint
    */
   _removeBreakpoint(breakpoint) {
     if (this._muted) {
@@ -864,14 +851,14 @@
   _save() {
     this._setting.set(Array.from(this._breakpoints.values()));
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.BreakpointManager.Storage.Item = class {
+Storage.Item = class {
   /**
-   * @param {!Bindings.BreakpointManager.Breakpoint} breakpoint
+   * @param {!Breakpoint} breakpoint
    */
   constructor(breakpoint) {
     this.url = breakpoint._url;
@@ -882,5 +869,33 @@
   }
 };
 
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.BreakpointManager = BreakpointManager;
+
+/** @enum {symbol} */
+Bindings.BreakpointManager.Events = Events;
+
+/** @constructor */
+Bindings.BreakpointManager.Breakpoint = Breakpoint;
+
+/** @constructor */
+Bindings.BreakpointManager.ModelBreakpoint = ModelBreakpoint;
+
+/** @constructor */
+Bindings.BreakpointManager.Storage = Storage;
+
+/** @typedef {{
+ *    breakpoint: !Breakpoint,
+ *    uiLocation: !Workspace.UILocation
+ *  }}
+ */
+Bindings.BreakpointManager.BreakpointLocation;
+
 /** @type {!Bindings.BreakpointManager} */
-Bindings.breakpointManager;
+Bindings.breakpointManager;
\ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/CSSWorkspaceBinding.js b/third_party/blink/renderer/devtools/front_end/bindings/CSSWorkspaceBinding.js
index c7872bd..8d5ab20 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/CSSWorkspaceBinding.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/CSSWorkspaceBinding.js
@@ -5,7 +5,7 @@
 /**
  * @implements {SDK.SDKModelObserver<!SDK.CSSModel>}
  */
-Bindings.CSSWorkspaceBinding = class {
+export default class CSSWorkspaceBinding {
   /**
    * @param {!SDK.TargetManager} targetManager
    * @param {!Workspace.Workspace} workspace
@@ -13,9 +13,9 @@
   constructor(targetManager, workspace) {
     this._workspace = workspace;
 
-    /** @type {!Map.<!SDK.CSSModel, !Bindings.CSSWorkspaceBinding.ModelInfo>} */
+    /** @type {!Map.<!SDK.CSSModel, !ModelInfo>} */
     this._modelToInfo = new Map();
-    /** @type {!Array<!Bindings.CSSWorkspaceBinding.SourceMapping>} */
+    /** @type {!Array<!SourceMapping>} */
     this._sourceMappings = [];
     targetManager.observeModels(SDK.CSSModel, this);
   }
@@ -25,7 +25,7 @@
    * @param {!SDK.CSSModel} cssModel
    */
   modelAdded(cssModel) {
-    this._modelToInfo.set(cssModel, new Bindings.CSSWorkspaceBinding.ModelInfo(cssModel, this._workspace));
+    this._modelToInfo.set(cssModel, new ModelInfo(cssModel, this._workspace));
   }
 
   /**
@@ -48,7 +48,7 @@
    * @param {!SDK.CSSLocation} rawLocation
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
-   * @return {!Bindings.CSSWorkspaceBinding.LiveLocation}
+   * @return {!LiveLocation}
    */
   createLiveLocation(rawLocation, updateDelegate, locationPool) {
     return this._modelToInfo.get(rawLocation.cssModel())._createLiveLocation(rawLocation, updateDelegate, locationPool);
@@ -114,33 +114,33 @@
   }
 
   /**
-   * @param {!Bindings.CSSWorkspaceBinding.SourceMapping} sourceMapping
+   * @param {!SourceMapping} sourceMapping
    */
   addSourceMapping(sourceMapping) {
     this._sourceMappings.push(sourceMapping);
   }
-};
+}
 
 /**
  * @interface
  */
-Bindings.CSSWorkspaceBinding.SourceMapping = function() {};
-
-Bindings.CSSWorkspaceBinding.SourceMapping.prototype = {
+export class SourceMapping {
   /**
    * @param {!SDK.CSSLocation} rawLocation
    * @return {?Workspace.UILocation}
    */
-  rawLocationToUILocation(rawLocation) {},
+  rawLocationToUILocation(rawLocation) {
+  }
 
   /**
    * @param {!Workspace.UILocation} uiLocation
    * @return {!Array<!SDK.CSSLocation>}
    */
-  uiLocationToRawLocations(uiLocation) {},
-};
+  uiLocationToRawLocations(uiLocation) {
+  }
+}
 
-Bindings.CSSWorkspaceBinding.ModelInfo = class {
+export class ModelInfo {
   /**
    * @param {!SDK.CSSModel} cssModel
    * @param {!Workspace.Workspace} workspace
@@ -155,9 +155,9 @@
     const sourceMapManager = cssModel.sourceMapManager();
     this._sassSourceMapping = new Bindings.SASSSourceMapping(cssModel.target(), sourceMapManager, workspace);
 
-    /** @type {!Platform.Multimap<!SDK.CSSStyleSheetHeader, !Bindings.CSSWorkspaceBinding.LiveLocation>} */
+    /** @type {!Platform.Multimap<!SDK.CSSStyleSheetHeader, !LiveLocation>} */
     this._locations = new Platform.Multimap();
-    /** @type {!Platform.Multimap<string, !Bindings.CSSWorkspaceBinding.LiveLocation>} */
+    /** @type {!Platform.Multimap<string, !LiveLocation>} */
     this._unboundLocations = new Platform.Multimap();
   }
 
@@ -165,10 +165,10 @@
    * @param {!SDK.CSSLocation} rawLocation
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
-   * @return {!Bindings.CSSWorkspaceBinding.LiveLocation}
+   * @return {!LiveLocation}
    */
   _createLiveLocation(rawLocation, updateDelegate, locationPool) {
-    const location = new Bindings.CSSWorkspaceBinding.LiveLocation(rawLocation, this, updateDelegate, locationPool);
+    const location = new LiveLocation(rawLocation, this, updateDelegate, locationPool);
     const header = rawLocation.header();
     if (header) {
       location._header = header;
@@ -181,7 +181,7 @@
   }
 
   /**
-   * @param {!Bindings.CSSWorkspaceBinding.LiveLocation} location
+   * @param {!LiveLocation} location
    */
   _disposeLocation(location) {
     if (location._header) {
@@ -263,15 +263,15 @@
     this._stylesSourceMapping.dispose();
     this._sassSourceMapping.dispose();
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.CSSWorkspaceBinding.LiveLocation = class extends Bindings.LiveLocationWithPool {
+export class LiveLocation extends Bindings.LiveLocationWithPool {
   /**
    * @param {!SDK.CSSLocation} rawLocation
-   * @param {!Bindings.CSSWorkspaceBinding.ModelInfo} info
+   * @param {!ModelInfo} info
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
    */
@@ -311,9 +311,30 @@
   isBlackboxed() {
     return false;
   }
-};
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.CSSWorkspaceBinding = CSSWorkspaceBinding;
+
+/** @interface */
+Bindings.CSSWorkspaceBinding.SourceMapping = SourceMapping;
+
+/** @interface */
+Bindings.SourceMapping = SourceMapping;
+
+/** @constructor */
+Bindings.CSSWorkspaceBinding.ModelInfo = ModelInfo;
+
+/** @constructor */
+Bindings.CSSWorkspaceBinding.LiveLocation = LiveLocation;
 
 /**
- * @type {!Bindings.CSSWorkspaceBinding}
+ * @type {!CSSWorkspaceBinding}
  */
 Bindings.cssWorkspaceBinding;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js
index 42b1180..a53e3af 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/CompilerScriptMapping.js
@@ -31,7 +31,7 @@
  * @implements {Bindings.DebuggerSourceMapping}
  * @unrestricted
  */
-Bindings.CompilerScriptMapping = class {
+export default class CompilerScriptMapping {
   /**
    * @param {!SDK.DebuggerModel} debuggerModel
    * @param {!Workspace.Workspace} workspace
@@ -52,9 +52,9 @@
     Bindings.NetworkProject.setTargetForProject(this._regularProject, target);
     Bindings.NetworkProject.setTargetForProject(this._contentScriptsProject, target);
 
-    /** @type {!Map<string, !Bindings.CompilerScriptMapping.Binding>} */
+    /** @type {!Map<string, !Binding>} */
     this._regularBindings = new Map();
-    /** @type {!Map<string, !Bindings.CompilerScriptMapping.Binding>} */
+    /** @type {!Map<string, !Binding>} */
     this._contentScriptsBindings = new Map();
 
     /** @type {!Map<!SDK.Script, !Workspace.UISourceCode>} */
@@ -102,7 +102,7 @@
    * @return {?string}
    */
   static uiSourceCodeOrigin(uiSourceCode) {
-    const sourceMap = uiSourceCode[Bindings.CompilerScriptMapping._sourceMapSymbol];
+    const sourceMap = uiSourceCode[_sourceMapSymbol];
     if (!sourceMap) {
       return null;
     }
@@ -178,7 +178,7 @@
    * @return {!Array<!SDK.DebuggerModel.Location>}
    */
   uiLocationToRawLocations(uiSourceCode, lineNumber, columnNumber) {
-    const sourceMap = uiSourceCode[Bindings.CompilerScriptMapping._sourceMapSymbol];
+    const sourceMap = uiSourceCode[_sourceMapSymbol];
     if (!sourceMap) {
       return [];
     }
@@ -236,7 +236,7 @@
    */
   _sourceMapDetached(event) {
     const script = /** @type {!SDK.Script} */ (event.data.client);
-    const frameId = script[Bindings.CompilerScriptMapping._frameIdSymbol];
+    const frameId = script[_frameIdSymbol];
     const sourceMap = /** @type {!SDK.SourceMap} */ (event.data.sourceMap);
     const bindings = script.isContentScript() ? this._contentScriptsBindings : this._regularBindings;
     for (const sourceURL of sourceMap.sourceURLs()) {
@@ -271,13 +271,13 @@
    */
   _populateSourceMapSources(script, sourceMap) {
     const frameId = Bindings.frameIdForScript(script);
-    script[Bindings.CompilerScriptMapping._frameIdSymbol] = frameId;
+    script[_frameIdSymbol] = frameId;
     const project = script.isContentScript() ? this._contentScriptsProject : this._regularProject;
     const bindings = script.isContentScript() ? this._contentScriptsBindings : this._regularBindings;
     for (const sourceURL of sourceMap.sourceURLs()) {
       let binding = bindings.get(sourceURL);
       if (!binding) {
-        binding = new Bindings.CompilerScriptMapping.Binding(project, sourceURL);
+        binding = new Binding(project, sourceURL);
         bindings.set(sourceURL, binding);
       }
       binding.addSourceMap(sourceMap, frameId);
@@ -291,7 +291,7 @@
    * @return {boolean}
    */
   static uiLineHasMapping(uiSourceCode, lineNumber) {
-    const sourceMap = uiSourceCode[Bindings.CompilerScriptMapping._sourceMapSymbol];
+    const sourceMap = uiSourceCode[_sourceMapSymbol];
     if (!sourceMap) {
       return true;
     }
@@ -304,13 +304,12 @@
     this._contentScriptsProject.dispose();
     this._stubProject.dispose();
   }
-};
+}
 
-Bindings.CompilerScriptMapping._frameIdSymbol = Symbol('Bindings.CompilerScriptMapping._frameIdSymbol');
-Bindings.CompilerScriptMapping._sourceMapSymbol = Symbol('Bindings.CompilerScriptMapping._sourceMapSymbol');
+export const _frameIdSymbol = Symbol('_frameIdSymbol');
+export const _sourceMapSymbol = Symbol('_sourceMapSymbol');
 
-
-Bindings.CompilerScriptMapping.Binding = class {
+export class Binding {
   /**
    * @param {!Bindings.ContentProviderBasedProject} project
    * @param {string} url
@@ -336,7 +335,7 @@
     this._activeSourceMap = sourceMap;
 
     const newUISourceCode = this._project.createUISourceCode(this._url, Common.resourceTypes.SourceMapScript);
-    newUISourceCode[Bindings.CompilerScriptMapping._sourceMapSymbol] = sourceMap;
+    newUISourceCode[_sourceMapSymbol] = sourceMap;
     const contentProvider = sourceMap.sourceContentProvider(this._url, Common.resourceTypes.SourceMapScript);
     const mimeType = Common.ResourceType.mimeFromURL(this._url) || 'text/javascript';
     const embeddedContent = sourceMap.embeddedContentByURL(this._url);
@@ -383,4 +382,19 @@
       this._recreateUISourceCodeIfNeeded(frameId);
     }
   }
-};
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.CompilerScriptMapping = CompilerScriptMapping;
+
+Bindings.CompilerScriptMapping._frameIdSymbol = _frameIdSymbol;
+Bindings.CompilerScriptMapping._sourceMapSymbol = _sourceMapSymbol;
+
+/** @constructor */
+Bindings.CompilerScriptMapping.Binding = Binding;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/ContentProviderBasedProject.js b/third_party/blink/renderer/devtools/front_end/bindings/ContentProviderBasedProject.js
index d978e76..124bf148 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/ContentProviderBasedProject.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/ContentProviderBasedProject.js
@@ -32,7 +32,7 @@
  * @implements {Workspace.Project}
  * @unrestricted
  */
-Bindings.ContentProviderBasedProject = class extends Workspace.ProjectStore {
+export default class ContentProviderBasedProject extends Workspace.ProjectStore {
   /**
    * @param {!Workspace.Workspace} workspace
    * @param {string} id
@@ -74,7 +74,7 @@
    * @return {!Promise<?Workspace.UISourceCodeMetadata>}
    */
   requestMetadata(uiSourceCode) {
-    return Promise.resolve(uiSourceCode[Bindings.ContentProviderBasedProject._metadata]);
+    return Promise.resolve(uiSourceCode[_metadata]);
   }
 
   /**
@@ -115,7 +115,7 @@
    * @return {string}
    */
   mimeType(uiSourceCode) {
-    return /** @type {string} */ (uiSourceCode[Bindings.ContentProviderBasedProject._mimeType]);
+    return /** @type {string} */ (uiSourceCode[_mimeType]);
   }
 
   /**
@@ -139,7 +139,7 @@
     /**
      * @param {boolean} success
      * @param {string=} newName
-     * @this {Bindings.ContentProviderBasedProject}
+     * @this {ContentProviderBasedProject}
      */
     function innerCallback(success, newName) {
       if (success && newName) {
@@ -240,7 +240,7 @@
 
     /**
      * @param {string} path
-     * @this {Bindings.ContentProviderBasedProject}
+     * @this {ContentProviderBasedProject}
      */
     async function searchInContent(path) {
       const provider = this._contentProviders[path];
@@ -274,9 +274,9 @@
    * @param {string} mimeType
    */
   addUISourceCodeWithProvider(uiSourceCode, contentProvider, metadata, mimeType) {
-    uiSourceCode[Bindings.ContentProviderBasedProject._mimeType] = mimeType;
+    uiSourceCode[_mimeType] = mimeType;
     this._contentProviders[uiSourceCode.url()] = contentProvider;
-    uiSourceCode[Bindings.ContentProviderBasedProject._metadata] = metadata;
+    uiSourceCode[_metadata] = metadata;
     this.addUISourceCode(uiSourceCode);
   }
 
@@ -310,7 +310,19 @@
     this._contentProviders = {};
     this.removeProject();
   }
-};
+}
 
-Bindings.ContentProviderBasedProject._metadata = Symbol('ContentProviderBasedProject.Metadata');
-Bindings.ContentProviderBasedProject._mimeType = Symbol('Bindings.ContentProviderBasedProject._mimeType');
+export const _metadata = Symbol('ContentProviderBasedProject.Metadata');
+export const _mimeType = Symbol('ContentProviderBasedProject.MimeType');
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.ContentProviderBasedProject = ContentProviderBasedProject;
+
+Bindings.ContentProviderBasedProject._metadata = _metadata;
+Bindings.ContentProviderBasedProject._mimeType = _mimeType;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/DebuggerWorkspaceBinding.js b/third_party/blink/renderer/devtools/front_end/bindings/DebuggerWorkspaceBinding.js
index 5acb86e0..02149ad 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/DebuggerWorkspaceBinding.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/DebuggerWorkspaceBinding.js
@@ -6,7 +6,7 @@
  * @unrestricted
  * @implements {SDK.SDKModelObserver<!SDK.DebuggerModel>}
  */
-Bindings.DebuggerWorkspaceBinding = class {
+export default class DebuggerWorkspaceBinding {
   /**
    * @param {!SDK.TargetManager} targetManager
    * @param {!Workspace.Workspace} workspace
@@ -14,10 +14,10 @@
   constructor(targetManager, workspace) {
     this._workspace = workspace;
 
-    /** @type {!Array<!Bindings.DebuggerSourceMapping>} */
+    /** @type {!Array<!DebuggerSourceMapping>} */
     this._sourceMappings = [];
 
-    /** @type {!Map.<!SDK.DebuggerModel, !Bindings.DebuggerWorkspaceBinding.ModelData>} */
+    /** @type {!Map.<!SDK.DebuggerModel, !ModelData>} */
     this._debuggerModelToData = new Map();
     targetManager.addModelListener(
         SDK.DebuggerModel, SDK.DebuggerModel.Events.GlobalObjectCleared, this._globalObjectCleared, this);
@@ -27,7 +27,7 @@
   }
 
   /**
-   * @param {!Bindings.DebuggerSourceMapping} sourceMapping
+   * @param {!DebuggerSourceMapping} sourceMapping
    */
   addSourceMapping(sourceMapping) {
     this._sourceMappings.push(sourceMapping);
@@ -38,7 +38,7 @@
    * @param {!SDK.DebuggerModel} debuggerModel
    */
   modelAdded(debuggerModel) {
-    this._debuggerModelToData.set(debuggerModel, new Bindings.DebuggerWorkspaceBinding.ModelData(debuggerModel, this));
+    this._debuggerModelToData.set(debuggerModel, new ModelData(debuggerModel, this));
   }
 
   /**
@@ -65,7 +65,7 @@
    * @param {!SDK.DebuggerModel.Location} rawLocation
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
-   * @return {!Bindings.DebuggerWorkspaceBinding.Location}
+   * @return {!Location}
    */
   createLiveLocation(rawLocation, updateDelegate, locationPool) {
     const modelData = this._debuggerModelToData.get(rawLocation.script().debuggerModel);
@@ -80,8 +80,7 @@
    */
   createStackTraceTopFrameLiveLocation(rawLocations, updateDelegate, locationPool) {
     console.assert(rawLocations.length);
-    const location = new Bindings.DebuggerWorkspaceBinding.StackTraceTopFrameLocation(
-        rawLocations, this, updateDelegate, locationPool);
+    const location = new StackTraceTopFrameLocation(rawLocations, this, updateDelegate, locationPool);
     location.update();
     return location;
   }
@@ -90,7 +89,7 @@
    * @param {!SDK.DebuggerModel.Location} location
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
-   * @return {?Bindings.DebuggerWorkspaceBinding.Location}
+   * @return {?Location}
    */
   createCallFrameLiveLocation(location, updateDelegate, locationPool) {
     const script = location.script();
@@ -217,7 +216,7 @@
 
   /**
    * @param {!SDK.DebuggerModel} debuggerModel
-   * @param {!Bindings.DebuggerWorkspaceBinding.Location} location
+   * @param {!Location} location
    */
   _registerCallFrameLiveLocation(debuggerModel, location) {
     const locations = this._debuggerModelToData.get(debuggerModel).callFrameLocations;
@@ -225,7 +224,7 @@
   }
 
   /**
-   * @param {!Bindings.DebuggerWorkspaceBinding.Location} location
+   * @param {!Location} location
    */
   _removeLiveLocation(location) {
     const modelData = this._debuggerModelToData.get(location._script.debuggerModel);
@@ -241,21 +240,21 @@
     const debuggerModel = /** @type {!SDK.DebuggerModel} */ (event.data);
     this._reset(debuggerModel);
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.DebuggerWorkspaceBinding.ModelData = class {
+export class ModelData {
   /**
    * @param {!SDK.DebuggerModel} debuggerModel
-   * @param {!Bindings.DebuggerWorkspaceBinding} debuggerWorkspaceBinding
+   * @param {!DebuggerWorkspaceBinding} debuggerWorkspaceBinding
    */
   constructor(debuggerModel, debuggerWorkspaceBinding) {
     this._debuggerModel = debuggerModel;
     this._debuggerWorkspaceBinding = debuggerWorkspaceBinding;
 
-    /** @type {!Set.<!Bindings.DebuggerWorkspaceBinding.Location>} */
+    /** @type {!Set.<!Location>} */
     this.callFrameLocations = new Set();
 
     const workspace = debuggerWorkspaceBinding._workspace;
@@ -264,7 +263,7 @@
     this._resourceMapping = new Bindings.ResourceScriptMapping(debuggerModel, workspace, debuggerWorkspaceBinding);
     this._compilerMapping = new Bindings.CompilerScriptMapping(debuggerModel, workspace, debuggerWorkspaceBinding);
 
-    /** @type {!Platform.Multimap<!SDK.Script, !Bindings.DebuggerWorkspaceBinding.Location>} */
+    /** @type {!Platform.Multimap<!SDK.Script, !Location>} */
     this._locations = new Platform.Multimap();
 
     debuggerModel.setBeforePausedCallback(this._beforePaused.bind(this));
@@ -274,20 +273,19 @@
    * @param {!SDK.DebuggerModel.Location} rawLocation
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
-   * @return {!Bindings.DebuggerWorkspaceBinding.Location}
+   * @return {!Location}
    */
   _createLiveLocation(rawLocation, updateDelegate, locationPool) {
     const script = /** @type {!SDK.Script} */ (rawLocation.script());
     console.assert(script);
-    const location = new Bindings.DebuggerWorkspaceBinding.Location(
-        script, rawLocation, this._debuggerWorkspaceBinding, updateDelegate, locationPool);
+    const location = new Location(script, rawLocation, this._debuggerWorkspaceBinding, updateDelegate, locationPool);
     this._locations.set(script, location);
     location.update();
     return location;
   }
 
   /**
-   * @param {!Bindings.DebuggerWorkspaceBinding.Location} location
+   * @param {!Location} location
    */
   _disposeLocation(location) {
     this._locations.delete(location._script, location);
@@ -349,16 +347,16 @@
     this._resourceMapping.dispose();
     this._defaultMapping.dispose();
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.DebuggerWorkspaceBinding.Location = class extends Bindings.LiveLocationWithPool {
+export class Location extends Bindings.LiveLocationWithPool {
   /**
    * @param {!SDK.Script} script
    * @param {!SDK.DebuggerModel.Location} rawLocation
-   * @param {!Bindings.DebuggerWorkspaceBinding} binding
+   * @param {!DebuggerWorkspaceBinding} binding
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
    */
@@ -394,12 +392,12 @@
     const uiLocation = this.uiLocation();
     return uiLocation ? Bindings.blackboxManager.isBlackboxedUISourceCode(uiLocation.uiSourceCode) : false;
   }
-};
+}
 
-Bindings.DebuggerWorkspaceBinding.StackTraceTopFrameLocation = class extends Bindings.LiveLocationWithPool {
+export class StackTraceTopFrameLocation extends Bindings.LiveLocationWithPool {
   /**
    * @param {!Array<!SDK.DebuggerModel.Location>} rawLocations
-   * @param {!Bindings.DebuggerWorkspaceBinding} binding
+   * @param {!DebuggerWorkspaceBinding} binding
    * @param {function(!Bindings.LiveLocation)} updateDelegate
    * @param {!Bindings.LiveLocationPool} locationPool
    */
@@ -456,19 +454,18 @@
     this._current = this._locations.find(location => !location.isBlackboxed()) || this._locations[0];
     this.update();
   }
-};
+}
 
 /**
  * @interface
  */
-Bindings.DebuggerSourceMapping = function() {};
-
-Bindings.DebuggerSourceMapping.prototype = {
+export class DebuggerSourceMapping {
   /**
    * @param {!SDK.DebuggerModel.Location} rawLocation
    * @return {?Workspace.UILocation}
    */
-  rawLocationToUILocation(rawLocation) {},
+  rawLocationToUILocation(rawLocation) {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
@@ -476,10 +473,32 @@
    * @param {number} columnNumber
    * @return {!Array<!SDK.DebuggerModel.Location>}
    */
-  uiLocationToRawLocations(uiSourceCode, lineNumber, columnNumber) {},
-};
+  uiLocationToRawLocations(uiSourceCode, lineNumber, columnNumber) {
+  }
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.DebuggerWorkspaceBinding = DebuggerWorkspaceBinding;
+
+/** @constructor */
+Bindings.DebuggerWorkspaceBinding.ModelData = ModelData;
+
+/** @constructor */
+Bindings.DebuggerWorkspaceBinding.Location = Location;
+
+/** @constructor */
+Bindings.DebuggerWorkspaceBinding.StackTraceTopFrameLocation = StackTraceTopFrameLocation;
+
+/** @interface */
+Bindings.DebuggerSourceMapping = DebuggerSourceMapping;
 
 /**
- * @type {!Bindings.DebuggerWorkspaceBinding}
+ * @type {!DebuggerWorkspaceBinding}
  */
 Bindings.debuggerWorkspaceBinding;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/DefaultScriptMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/DefaultScriptMapping.js
index e0768294..b0191c2 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/DefaultScriptMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/DefaultScriptMapping.js
@@ -31,7 +31,7 @@
  * @implements {Bindings.DebuggerSourceMapping}
  * @unrestricted
  */
-Bindings.DefaultScriptMapping = class {
+export default class DefaultScriptMapping {
   /**
    * @param {!SDK.DebuggerModel} debuggerModel
    * @param {!Workspace.Workspace} workspace
@@ -57,7 +57,7 @@
    * @return {?SDK.Script}
    */
   static scriptForUISourceCode(uiSourceCode) {
-    const scripts = uiSourceCode[Bindings.DefaultScriptMapping._scriptsSymbol];
+    const scripts = uiSourceCode[_scriptsSymbol];
     return scripts ? scripts.values().next().value : null;
   }
 
@@ -71,7 +71,7 @@
     if (!script) {
       return null;
     }
-    const uiSourceCode = script[Bindings.DefaultScriptMapping._uiSourceCodeSymbol];
+    const uiSourceCode = script[_uiSourceCodeSymbol];
     const lineNumber = rawLocation.lineNumber - (script.isInlineScriptWithSourceURL() ? script.lineOffset : 0);
     let columnNumber = rawLocation.columnNumber || 0;
     if (script.isInlineScriptWithSourceURL() && !lineNumber && columnNumber) {
@@ -109,12 +109,12 @@
 
     const uiSourceCode = this._project.createUISourceCode(url, Common.resourceTypes.Script);
     uiSourceCode[this._scriptSymbol] = script;
-    if (!uiSourceCode[Bindings.DefaultScriptMapping._scriptsSymbol]) {
-      uiSourceCode[Bindings.DefaultScriptMapping._scriptsSymbol] = new Set([script]);
+    if (!uiSourceCode[_scriptsSymbol]) {
+      uiSourceCode[_scriptsSymbol] = new Set([script]);
     } else {
-      uiSourceCode[Bindings.DefaultScriptMapping._scriptsSymbol].add(script);
+      uiSourceCode[_scriptsSymbol].add(script);
     }
-    script[Bindings.DefaultScriptMapping._uiSourceCodeSymbol] = uiSourceCode;
+    script[_uiSourceCodeSymbol] = uiSourceCode;
     this._project.addUISourceCodeWithProvider(uiSourceCode, script, null, 'text/javascript');
     this._debuggerWorkspaceBinding.updateLocations(script);
   }
@@ -124,15 +124,15 @@
    */
   _discardedScriptSource(event) {
     const script = /** @type {!SDK.Script} */ (event.data);
-    const uiSourceCode = script[Bindings.DefaultScriptMapping._uiSourceCodeSymbol];
+    const uiSourceCode = script[_uiSourceCodeSymbol];
     if (!uiSourceCode) {
       return;
     }
-    delete script[Bindings.DefaultScriptMapping._uiSourceCodeSymbol];
+    delete script[_uiSourceCodeSymbol];
     delete uiSourceCode[this._scriptSymbol];
-    uiSourceCode[Bindings.DefaultScriptMapping._scriptsSymbol].delete(script);
-    if (!uiSourceCode[Bindings.DefaultScriptMapping._scriptsSymbol].size) {
-      delete uiSourceCode[Bindings.DefaultScriptMapping._scriptsSymbol];
+    uiSourceCode[_scriptsSymbol].delete(script);
+    if (!uiSourceCode[_scriptsSymbol].size) {
+      delete uiSourceCode[_scriptsSymbol];
     }
     this._project.removeUISourceCode(uiSourceCode.url());
   }
@@ -146,7 +146,19 @@
     this._debuggerReset();
     this._project.dispose();
   }
-};
+}
 
-Bindings.DefaultScriptMapping._scriptsSymbol = Symbol('symbol');
-Bindings.DefaultScriptMapping._uiSourceCodeSymbol = Symbol('uiSourceCodeSymbol');
+export const _scriptsSymbol = Symbol('symbol');
+export const _uiSourceCodeSymbol = Symbol('uiSourceCodeSymbol');
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.DefaultScriptMapping = DefaultScriptMapping;
+
+Bindings.DefaultScriptMapping._scriptsSymbol = _scriptsSymbol;
+Bindings.DefaultScriptMapping._uiSourceCodeSymbol = _uiSourceCodeSymbol;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js b/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js
index 0ce7c74..ab99bf5 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/FileUtils.js
@@ -31,41 +31,43 @@
 /**
  * @interface
  */
-Bindings.ChunkedReader = function() {};
-
-Bindings.ChunkedReader.prototype = {
+export class ChunkedReader {
   /**
    * @return {number}
    */
-  fileSize() {},
+  fileSize() {
+  }
 
   /**
    * @return {number}
    */
-  loadedSize() {},
+  loadedSize() {
+  }
 
   /**
    * @return {string}
    */
-  fileName() {},
+  fileName() {
+  }
 
-  cancel() {},
+  cancel() {
+  }
 
   /**
    * @return {?FileError}
    */
   error() {}
-};
+}
 
 /**
- * @implements {Bindings.ChunkedReader}
+ * @implements {ChunkedReader}
  * @unrestricted
  */
-Bindings.ChunkedFileReader = class {
+export class ChunkedFileReader {
   /**
    * @param {!Blob} blob
    * @param {number} chunkSize
-   * @param {function(!Bindings.ChunkedReader)=} chunkTransferredCallback
+   * @param {function(!ChunkedReader)=} chunkTransferredCallback
    */
   constructor(blob, chunkSize, chunkTransferredCallback) {
     this._file = blob;
@@ -183,13 +185,13 @@
     this._error = event.target.error;
     this._transferFinished(false);
   }
-};
+}
 
 /**
  * @implements {Common.OutputStream}
  * @unrestricted
  */
-Bindings.FileOutputStream = class {
+export class FileOutputStream {
   /**
    * @param {string} fileName
    * @return {!Promise<boolean>}
@@ -247,4 +249,19 @@
     Workspace.fileManager.removeEventListener(Workspace.FileManager.Events.AppendedToURL, this._onAppendDone, this);
     Workspace.fileManager.close(this._fileName);
   }
-};
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @interface */
+Bindings.ChunkedReader = ChunkedReader;
+
+/** @constructor */
+Bindings.ChunkedFileReader = ChunkedFileReader;
+
+/** @constructor */
+Bindings.FileOutputStream = FileOutputStream;
\ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/LiveLocation.js b/third_party/blink/renderer/devtools/front_end/bindings/LiveLocation.js
index 0e3b042d..e6fe900 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/LiveLocation.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/LiveLocation.js
@@ -1,33 +1,35 @@
 // Copyright 2014 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-/** @interface */
-Bindings.LiveLocation = function() {};
 
-Bindings.LiveLocation.prototype = {
-  update() {},
+/** @interface */
+export default class LiveLocation {
+  update() {
+  }
 
   /**
    * @return {?Workspace.UILocation}
    */
-  uiLocation() {},
+  uiLocation() {
+  }
 
-  dispose() {},
+  dispose() {
+  }
 
   /**
    * @return {boolean}
    */
   isBlackboxed() {}
-};
+}
 
 /**
- * @implements {Bindings.LiveLocation}
+ * @implements {LiveLocation}
  * @unrestricted
  */
-Bindings.LiveLocationWithPool = class {
+export class LiveLocationWithPool {
   /**
-   * @param {function(!Bindings.LiveLocation)} updateDelegate
-   * @param {!Bindings.LiveLocationPool} locationPool
+   * @param {function(!LiveLocation)} updateDelegate
+   * @param {!LiveLocationPool} locationPool
    */
   constructor(updateDelegate, locationPool) {
     this._updateDelegate = updateDelegate;
@@ -65,25 +67,25 @@
   isBlackboxed() {
     throw 'Not implemented';
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.LiveLocationPool = class {
+export class LiveLocationPool {
   constructor() {
     this._locations = new Set();
   }
 
   /**
-   * @param {!Bindings.LiveLocation} location
+   * @param {!LiveLocation} location
    */
   _add(location) {
     this._locations.add(location);
   }
 
   /**
-   * @param {!Bindings.LiveLocation} location
+   * @param {!LiveLocation} location
    */
   _delete(location) {
     this._locations.delete(location);
@@ -94,4 +96,19 @@
       location.dispose();
     }
   }
-};
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @interface */
+Bindings.LiveLocation = LiveLocation;
+
+/** @constructor */
+Bindings.LiveLocationWithPool = LiveLocationWithPool;
+
+/** @constructor */
+Bindings.LiveLocationPool = LiveLocationPool;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/NetworkProject.js b/third_party/blink/renderer/devtools/front_end/bindings/NetworkProject.js
index 43d0093..5c8c997 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/NetworkProject.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/NetworkProject.js
@@ -27,10 +27,9 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-Bindings.NetworkProjectManager = class extends Common.Object {
-};
+export class NetworkProjectManager extends Common.Object {}
 
-Bindings.NetworkProjectManager.Events = {
+export const Events = {
   FrameAttributionAdded: Symbol('FrameAttributionAdded'),
   FrameAttributionRemoved: Symbol('FrameAttributionRemoved')
 };
@@ -38,13 +37,13 @@
 /**
  * @unrestricted
  */
-Bindings.NetworkProject = class {
+export default class NetworkProject {
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @param {string} frameId
    */
   static _resolveFrame(uiSourceCode, frameId) {
-    const target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
+    const target = NetworkProject.targetForUISourceCode(uiSourceCode);
     const resourceTreeModel = target && target.model(SDK.ResourceTreeModel);
     return resourceTreeModel ? resourceTreeModel.frameForId(frameId) : null;
   }
@@ -54,14 +53,14 @@
    * @param {string} frameId
    */
   static setInitialFrameAttribution(uiSourceCode, frameId) {
-    const frame = Bindings.NetworkProject._resolveFrame(uiSourceCode, frameId);
+    const frame = NetworkProject._resolveFrame(uiSourceCode, frameId);
     if (!frame) {
       return;
     }
     /** @type {!Map<string, !{frame: !SDK.ResourceTreeFrame, count: number}>} */
     const attribution = new Map();
     attribution.set(frameId, {frame: frame, count: 1});
-    uiSourceCode[Bindings.NetworkProject._frameAttributionSymbol] = attribution;
+    uiSourceCode[_frameAttributionSymbol] = attribution;
   }
 
   /**
@@ -69,13 +68,13 @@
    * @param {!Workspace.UISourceCode} toUISourceCode
    */
   static cloneInitialFrameAttribution(fromUISourceCode, toUISourceCode) {
-    const fromAttribution = fromUISourceCode[Bindings.NetworkProject._frameAttributionSymbol];
+    const fromAttribution = fromUISourceCode[_frameAttributionSymbol];
     if (!fromAttribution) {
       return;
     }
     /** @type {!Map<string, !{frame: !SDK.ResourceTreeFrame, count: number}>} */
     const toAttribution = new Map();
-    toUISourceCode[Bindings.NetworkProject._frameAttributionSymbol] = toAttribution;
+    toUISourceCode[_frameAttributionSymbol] = toAttribution;
     for (const frameId of fromAttribution.keys()) {
       const value = fromAttribution.get(frameId);
       toAttribution.set(frameId, {frame: value.frame, count: value.count});
@@ -87,11 +86,11 @@
    * @param {string} frameId
    */
   static addFrameAttribution(uiSourceCode, frameId) {
-    const frame = Bindings.NetworkProject._resolveFrame(uiSourceCode, frameId);
+    const frame = NetworkProject._resolveFrame(uiSourceCode, frameId);
     if (!frame) {
       return;
     }
-    const frameAttribution = uiSourceCode[Bindings.NetworkProject._frameAttributionSymbol];
+    const frameAttribution = uiSourceCode[_frameAttributionSymbol];
     const attributionInfo = frameAttribution.get(frameId) || {frame: frame, count: 0};
     attributionInfo.count += 1;
     frameAttribution.set(frameId, attributionInfo);
@@ -100,8 +99,7 @@
     }
 
     const data = {uiSourceCode: uiSourceCode, frame: frame};
-    Bindings.networkProjectManager.dispatchEventToListeners(
-        Bindings.NetworkProjectManager.Events.FrameAttributionAdded, data);
+    Bindings.networkProjectManager.dispatchEventToListeners(Events.FrameAttributionAdded, data);
   }
 
   /**
@@ -109,7 +107,7 @@
    * @param {string} frameId
    */
   static removeFrameAttribution(uiSourceCode, frameId) {
-    const frameAttribution = uiSourceCode[Bindings.NetworkProject._frameAttributionSymbol];
+    const frameAttribution = uiSourceCode[_frameAttributionSymbol];
     if (!frameAttribution) {
       return;
     }
@@ -121,8 +119,7 @@
     }
     frameAttribution.delete(frameId);
     const data = {uiSourceCode: uiSourceCode, frame: attributionInfo.frame};
-    Bindings.networkProjectManager.dispatchEventToListeners(
-        Bindings.NetworkProjectManager.Events.FrameAttributionRemoved, data);
+    Bindings.networkProjectManager.dispatchEventToListeners(Events.FrameAttributionRemoved, data);
   }
 
   /**
@@ -130,7 +127,7 @@
    * @return {?SDK.Target} target
    */
   static targetForUISourceCode(uiSourceCode) {
-    return uiSourceCode.project()[Bindings.NetworkProject._targetSymbol] || null;
+    return uiSourceCode.project()[_targetSymbol] || null;
   }
 
   /**
@@ -138,7 +135,7 @@
    * @param {!SDK.Target} target
    */
   static setTargetForProject(project, target) {
-    project[Bindings.NetworkProject._targetSymbol] = target;
+    project[_targetSymbol] = target;
   }
 
   /**
@@ -146,16 +143,33 @@
    * @return {!Array<!SDK.ResourceTreeFrame>}
    */
   static framesForUISourceCode(uiSourceCode) {
-    const target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
+    const target = NetworkProject.targetForUISourceCode(uiSourceCode);
     const resourceTreeModel = target && target.model(SDK.ResourceTreeModel);
-    const attribution = uiSourceCode[Bindings.NetworkProject._frameAttributionSymbol];
+    const attribution = uiSourceCode[_frameAttributionSymbol];
     if (!resourceTreeModel || !attribution) {
       return [];
     }
     const frames = Array.from(attribution.keys()).map(frameId => resourceTreeModel.frameForId(frameId));
     return frames.filter(frame => !!frame);
   }
-};
+}
 
-Bindings.NetworkProject._targetSymbol = Symbol('target');
-Bindings.NetworkProject._frameAttributionSymbol = Symbol('Bindings.NetworkProject._frameAttributionSymbol');
+export const _targetSymbol = Symbol('target');
+export const _frameAttributionSymbol = Symbol('_frameAttributionSymbol');
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.NetworkProjectManager = NetworkProjectManager;
+
+Bindings.NetworkProjectManager.Events = Events;
+
+/** @constructor */
+Bindings.NetworkProject = NetworkProject;
+
+Bindings.NetworkProject._targetSymbol = _targetSymbol;
+Bindings.NetworkProject._frameAttributionSymbol = _frameAttributionSymbol;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/PresentationConsoleMessageHelper.js b/third_party/blink/renderer/devtools/front_end/bindings/PresentationConsoleMessageHelper.js
index b12a99b..66e9d4c 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/PresentationConsoleMessageHelper.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/PresentationConsoleMessageHelper.js
@@ -31,7 +31,7 @@
 /**
  * @implements {SDK.SDKModelObserver<!SDK.DebuggerModel>}
  */
-Bindings.PresentationConsoleMessageManager = class {
+export class PresentationConsoleMessageManager {
   constructor() {
     SDK.targetManager.observeModels(SDK.DebuggerModel, this);
 
@@ -47,8 +47,7 @@
    * @param {!SDK.DebuggerModel} debuggerModel
    */
   modelAdded(debuggerModel) {
-    debuggerModel[Bindings.PresentationConsoleMessageManager._symbol] =
-        new Bindings.PresentationConsoleMessageHelper(debuggerModel);
+    debuggerModel[PresentationConsoleMessageManager._symbol] = new PresentationConsoleMessageHelper(debuggerModel);
   }
 
   /**
@@ -56,7 +55,7 @@
    * @param {!SDK.DebuggerModel} debuggerModel
    */
   modelRemoved(debuggerModel) {
-    debuggerModel[Bindings.PresentationConsoleMessageManager._symbol]._consoleCleared();
+    debuggerModel[PresentationConsoleMessageManager._symbol]._consoleCleared();
   }
 
   /**
@@ -68,19 +67,19 @@
       return;
     }
     const debuggerModel = message.runtimeModel().debuggerModel();
-    debuggerModel[Bindings.PresentationConsoleMessageManager._symbol]._consoleMessageAdded(message);
+    debuggerModel[PresentationConsoleMessageManager._symbol]._consoleMessageAdded(message);
   }
 
   _consoleCleared() {
     for (const debuggerModel of SDK.targetManager.models(SDK.DebuggerModel)) {
-      debuggerModel[Bindings.PresentationConsoleMessageManager._symbol]._consoleCleared();
+      debuggerModel[PresentationConsoleMessageManager._symbol]._consoleCleared();
     }
   }
-};
+}
 
-Bindings.PresentationConsoleMessageManager._symbol = Symbol('PresentationConsoleMessageHelper');
+PresentationConsoleMessageManager._symbol = Symbol('PresentationConsoleMessageHelper');
 
-Bindings.PresentationConsoleMessageHelper = class {
+export default class PresentationConsoleMessageHelper {
   /**
    * @param {!SDK.DebuggerModel} debuggerModel
    */
@@ -90,7 +89,7 @@
     /** @type {!Object.<string, !Array.<!SDK.ConsoleMessage>>} */
     this._pendingConsoleMessages = {};
 
-    /** @type {!Array.<!Bindings.PresentationConsoleMessage>} */
+    /** @type {!Array.<!PresentationConsoleMessage>} */
     this._presentationConsoleMessages = [];
 
     // TODO(dgozman): setImmediate because we race with DebuggerWorkspaceBinding on ParsedScriptSource event delivery.
@@ -137,8 +136,7 @@
    * @param {!SDK.DebuggerModel.Location} rawLocation
    */
   _addConsoleMessageToScript(message, rawLocation) {
-    this._presentationConsoleMessages.push(
-        new Bindings.PresentationConsoleMessage(message, rawLocation, this._locationPool));
+    this._presentationConsoleMessages.push(new PresentationConsoleMessage(message, rawLocation, this._locationPool));
   }
 
   /**
@@ -198,12 +196,12 @@
     this._presentationConsoleMessages = [];
     this._locationPool.disposeAll();
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.PresentationConsoleMessage = class {
+export class PresentationConsoleMessage {
   /**
    * @param {!SDK.ConsoleMessage} message
    * @param {!SDK.DebuggerModel.Location} rawLocation
@@ -237,4 +235,19 @@
       this._uiMessage.remove();
     }
   }
-};
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.PresentationConsoleMessageHelper = PresentationConsoleMessageHelper;
+
+/** @constructor */
+Bindings.PresentationConsoleMessageManager = PresentationConsoleMessageManager;
+
+/** @constructor */
+Bindings.PresentationConsoleMessage = PresentationConsoleMessage;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js
index 49c8fa8b..f79f378 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/ResourceMapping.js
@@ -5,14 +5,14 @@
 /**
  * @implements {SDK.SDKModelObserver<!SDK.ResourceTreeModel>}
  */
-Bindings.ResourceMapping = class {
+export default class ResourceMapping {
   /**
    * @param {!SDK.TargetManager} targetManager
    * @param {!Workspace.Workspace} workspace
    */
   constructor(targetManager, workspace) {
     this._workspace = workspace;
-    /** @type {!Map<!SDK.ResourceTreeModel, !Bindings.ResourceMapping.ModelInfo>} */
+    /** @type {!Map<!SDK.ResourceTreeModel, !ModelInfo>} */
     this._modelToInfo = new Map();
     targetManager.observeModels(SDK.ResourceTreeModel, this);
   }
@@ -22,7 +22,7 @@
    * @param {!SDK.ResourceTreeModel} resourceTreeModel
    */
   modelAdded(resourceTreeModel) {
-    const info = new Bindings.ResourceMapping.ModelInfo(this._workspace, resourceTreeModel);
+    const info = new ModelInfo(this._workspace, resourceTreeModel);
     this._modelToInfo.set(resourceTreeModel, info);
   }
 
@@ -38,7 +38,7 @@
 
   /**
    * @param {!SDK.Target} target
-   * @return {?Bindings.ResourceMapping.ModelInfo}
+   * @return {?ModelInfo}
    */
   _infoForTarget(target) {
     const resourceTreeModel = target.model(SDK.ResourceTreeModel);
@@ -62,8 +62,8 @@
     if (!uiSourceCode) {
       return null;
     }
-    const offset = header[Bindings.ResourceMapping._offsetSymbol] ||
-        TextUtils.TextRange.createFromLocation(header.startLine, header.startColumn);
+    const offset =
+        header[_offsetSymbol] || TextUtils.TextRange.createFromLocation(header.startLine, header.startColumn);
     const lineNumber = cssLocation.lineNumber + offset.startLine - header.startLine;
     let columnNumber = cssLocation.columnNumber;
     if (cssLocation.lineNumber === header.startLine) {
@@ -89,8 +89,8 @@
     if (!uiSourceCode) {
       return null;
     }
-    const offset = script[Bindings.ResourceMapping._offsetSymbol] ||
-        TextUtils.TextRange.createFromLocation(script.lineOffset, script.columnOffset);
+    const offset =
+        script[_offsetSymbol] || TextUtils.TextRange.createFromLocation(script.lineOffset, script.columnOffset);
     const lineNumber = jsLocation.lineNumber + offset.startLine - script.lineOffset;
     let columnNumber = jsLocation.columnNumber;
     if (jsLocation.lineNumber === script.lineOffset) {
@@ -106,7 +106,7 @@
    * @return {!Array<!SDK.DebuggerModel.Location>}
    */
   uiLocationToJSLocations(uiSourceCode, lineNumber, columnNumber) {
-    if (!uiSourceCode[Bindings.ResourceMapping._symbol]) {
+    if (!uiSourceCode[_symbol]) {
       return [];
     }
     const target = Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);
@@ -129,7 +129,7 @@
    * @return {!Array<!SDK.CSSLocation>}
    */
   uiLocationToCSSLocations(uiLocation) {
-    if (!uiLocation.uiSourceCode[Bindings.ResourceMapping._symbol]) {
+    if (!uiLocation.uiSourceCode[_symbol]) {
       return [];
     }
     const target = Bindings.NetworkProject.targetForUISourceCode(uiLocation.uiSourceCode);
@@ -154,9 +154,9 @@
       info._resetForTest();
     }
   }
-};
+}
 
-Bindings.ResourceMapping.ModelInfo = class {
+export class ModelInfo {
   /**
    * @param {!Workspace.Workspace} workspace
    * @param {!SDK.ResourceTreeModel} resourceTreeModel
@@ -167,7 +167,7 @@
         workspace, 'resources:' + target.id(), Workspace.projectTypes.Network, '', false /* isServiceProject */);
     Bindings.NetworkProject.setTargetForProject(this._project, target);
 
-    /** @type {!Map<string, !Bindings.ResourceMapping.Binding>} */
+    /** @type {!Map<string, !Binding>} */
     this._bindings = new Map();
 
     const cssModel = target.model(SDK.CSSModel);
@@ -231,7 +231,7 @@
 
     let binding = this._bindings.get(resource.url);
     if (!binding) {
-      binding = new Bindings.ResourceMapping.Binding(this._project, resource);
+      binding = new Binding(this._project, resource);
       this._bindings.set(resource.url, binding);
     } else {
       binding.addResource(resource);
@@ -287,12 +287,12 @@
     this._bindings.clear();
     this._project.removeProject();
   }
-};
+}
 
 /**
  * @implements {Common.ContentProvider}
  */
-Bindings.ResourceMapping.Binding = class {
+export class Binding {
   /**
    * @param {!Bindings.ContentProviderBasedProject} project
    * @param {!SDK.Resource} resource
@@ -301,7 +301,7 @@
     this._resources = new Set([resource]);
     this._project = project;
     this._uiSourceCode = this._project.createUISourceCode(resource.url, resource.contentType());
-    this._uiSourceCode[Bindings.ResourceMapping._symbol] = true;
+    this._uiSourceCode[_symbol] = true;
     Bindings.NetworkProject.setInitialFrameAttribution(this._uiSourceCode, resource.frameId);
     this._project.addUISourceCodeWithProvider(
         this._uiSourceCode, this, Bindings.resourceMetadata(resource), resource.mimeType);
@@ -366,28 +366,28 @@
     for (const data of this._edits) {
       const edit = data.edit;
       const stylesheet = data.stylesheet;
-      const startLocation = stylesheet[Bindings.ResourceMapping._offsetSymbol] ||
+      const startLocation = stylesheet[_offsetSymbol] ||
           TextUtils.TextRange.createFromLocation(stylesheet.startLine, stylesheet.startColumn);
 
       const oldRange = edit.oldRange.relativeFrom(startLocation.startLine, startLocation.startColumn);
       const newRange = edit.newRange.relativeFrom(startLocation.startLine, startLocation.startColumn);
       text = new TextUtils.Text(text.replaceRange(oldRange, edit.newText));
       for (const script of scripts) {
-        const scriptOffset = script[Bindings.ResourceMapping._offsetSymbol] ||
-            TextUtils.TextRange.createFromLocation(script.lineOffset, script.columnOffset);
+        const scriptOffset =
+            script[_offsetSymbol] || TextUtils.TextRange.createFromLocation(script.lineOffset, script.columnOffset);
         if (!scriptOffset.follows(oldRange)) {
           continue;
         }
-        script[Bindings.ResourceMapping._offsetSymbol] = scriptOffset.rebaseAfterTextEdit(oldRange, newRange);
+        script[_offsetSymbol] = scriptOffset.rebaseAfterTextEdit(oldRange, newRange);
         Bindings.debuggerWorkspaceBinding.updateLocations(script);
       }
       for (const style of styles) {
-        const styleOffset = style[Bindings.ResourceMapping._offsetSymbol] ||
-            TextUtils.TextRange.createFromLocation(style.startLine, style.startColumn);
+        const styleOffset =
+            style[_offsetSymbol] || TextUtils.TextRange.createFromLocation(style.startLine, style.startColumn);
         if (!styleOffset.follows(oldRange)) {
           continue;
         }
-        style[Bindings.ResourceMapping._offsetSymbol] = styleOffset.rebaseAfterTextEdit(oldRange, newRange);
+        style[_offsetSymbol] = styleOffset.rebaseAfterTextEdit(oldRange, newRange);
         Bindings.cssWorkspaceBinding.updateLocations(style);
       }
     }
@@ -456,7 +456,25 @@
   searchInContent(query, caseSensitive, isRegex) {
     return this._resources.firstValue().searchInContent(query, caseSensitive, isRegex);
   }
-};
+}
 
-Bindings.ResourceMapping._symbol = Symbol('Bindings.ResourceMapping._symbol');
-Bindings.ResourceMapping._offsetSymbol = Symbol('Bindings.ResourceMapping._offsetSymbol');
+export const _symbol = Symbol('Bindings.ResourceMapping._symbol');
+export const _offsetSymbol = Symbol('Bindings.ResourceMapping._offsetSymbol');
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.ResourceMapping = ResourceMapping;
+
+/** @constructor */
+Bindings.ResourceMapping.ModelInfo = ModelInfo;
+
+/** @constructor */
+Bindings.ResourceMapping.Binding = Binding;
+
+Bindings.ResourceMapping._symbol = _symbol;
+Bindings.ResourceMapping._offsetSymbol = _offsetSymbol;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/ResourceScriptMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/ResourceScriptMapping.js
index a7c2d3f..d83f8c53 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/ResourceScriptMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/ResourceScriptMapping.js
@@ -31,7 +31,7 @@
  * @implements {Bindings.DebuggerSourceMapping}
  * @unrestricted
  */
-Bindings.ResourceScriptMapping = class {
+export default class ResourceScriptMapping {
   /**
    * @param {!SDK.DebuggerModel} debuggerModel
    * @param {!Workspace.Workspace} workspace
@@ -41,7 +41,7 @@
     this._debuggerModel = debuggerModel;
     this._workspace = workspace;
     this._debuggerWorkspaceBinding = debuggerWorkspaceBinding;
-    /** @type {!Map.<!Workspace.UISourceCode, !Bindings.ResourceScriptFile>} */
+    /** @type {!Map.<!Workspace.UISourceCode, !ResourceScriptFile>} */
     this._uiSourceCodeToScriptFile = new Map();
 
     /** @type {!Map<string, !Bindings.ContentProviderBasedProject>} */
@@ -64,7 +64,7 @@
    * @return {!Bindings.ContentProviderBasedProject}
    */
   _project(script) {
-    const frameId = script[Bindings.ResourceScriptMapping._frameIdSymbol];
+    const frameId = script[_frameIdSymbol];
     const prefix = script.isContentScript() ? 'js:extensions:' : 'js::';
     const projectId = prefix + this._debuggerModel.target().id() + ':' + frameId;
     let project = this._projects.get(projectId);
@@ -161,7 +161,7 @@
     this._acceptedScripts.add(script);
     const originalContentProvider = script.originalContentProvider();
     const frameId = Bindings.frameIdForScript(script);
-    script[Bindings.ResourceScriptMapping._frameIdSymbol] = frameId;
+    script[_frameIdSymbol] = frameId;
 
     const url = script.sourceURL;
     const project = this._project(script);
@@ -179,7 +179,7 @@
     const metadata = Bindings.metadataForURL(this._debuggerModel.target(), frameId, url);
 
     // Bind UISourceCode to scripts.
-    const scriptFile = new Bindings.ResourceScriptFile(this, uiSourceCode, [script]);
+    const scriptFile = new ResourceScriptFile(this, uiSourceCode, [script]);
     this._uiSourceCodeToScriptFile.set(uiSourceCode, scriptFile);
 
     project.addUISourceCodeWithProvider(uiSourceCode, originalContentProvider, metadata, 'text/javascript');
@@ -188,7 +188,7 @@
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
-   * @return {?Bindings.ResourceScriptFile}
+   * @return {?ResourceScriptFile}
    */
   scriptFile(uiSourceCode) {
     return this._uiSourceCodeToScriptFile.get(uiSourceCode) || null;
@@ -250,14 +250,14 @@
     }
     this._projects.clear();
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Bindings.ResourceScriptFile = class extends Common.Object {
+export class ResourceScriptFile extends Common.Object {
   /**
-   * @param {!Bindings.ResourceScriptMapping} resourceScriptMapping
+   * @param {!ResourceScriptMapping} resourceScriptMapping
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @param {!Array.<!SDK.Script>} scripts
    */
@@ -338,7 +338,7 @@
     /**
      * @param {?string} error
      * @param {!Protocol.Runtime.ExceptionDetails=} exceptionDetails
-     * @this {Bindings.ResourceScriptFile}
+     * @this {ResourceScriptFile}
      */
     async function scriptSourceWasSet(error, exceptionDetails) {
       if (!error && !exceptionDetails) {
@@ -376,7 +376,7 @@
     this._resourceScriptMapping._debuggerWorkspaceBinding.updateLocations(this._script);
     delete this._isDivergingFromVM;
     this._hasDivergedFromVM = true;
-    this.dispatchEventToListeners(Bindings.ResourceScriptFile.Events.DidDivergeFromVM, this._uiSourceCode);
+    this.dispatchEventToListeners(ResourceScriptFile.Events.DidDivergeFromVM, this._uiSourceCode);
   }
 
   _mergeToVM() {
@@ -384,7 +384,7 @@
     this._isMergingToVM = true;
     this._resourceScriptMapping._debuggerWorkspaceBinding.updateLocations(this._script);
     delete this._isMergingToVM;
-    this.dispatchEventToListeners(Bindings.ResourceScriptFile.Events.DidMergeToVM, this._uiSourceCode);
+    this.dispatchEventToListeners(ResourceScriptFile.Events.DidMergeToVM, this._uiSourceCode);
   }
 
   /**
@@ -417,7 +417,7 @@
 
     /**
      * @param {?string} source
-     * @this {Bindings.ResourceScriptFile}
+     * @this {ResourceScriptFile}
      */
     function callback(source) {
       this._scriptSource = source;
@@ -452,12 +452,26 @@
   hasSourceMapURL() {
     return this._script && !!this._script.sourceMapURL;
   }
-};
+}
 
-Bindings.ResourceScriptMapping._frameIdSymbol = Symbol('frameid');
+export const _frameIdSymbol = Symbol('frameid');
 
 /** @enum {symbol} */
-Bindings.ResourceScriptFile.Events = {
+ResourceScriptFile.Events = {
   DidMergeToVM: Symbol('DidMergeToVM'),
   DidDivergeFromVM: Symbol('DidDivergeFromVM'),
 };
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.ResourceScriptMapping = ResourceScriptMapping;
+
+Bindings.ResourceScriptMapping._frameIdSymbol = _frameIdSymbol;
+
+/** @constructor */
+Bindings.ResourceScriptFile = ResourceScriptFile;
\ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/ResourceUtils.js b/third_party/blink/renderer/devtools/front_end/bindings/ResourceUtils.js
index 85bda82..bb4c3e4 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/ResourceUtils.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/ResourceUtils.js
@@ -31,7 +31,7 @@
  * @param {string} url
  * @return {?SDK.Resource}
  */
-Bindings.resourceForURL = function(url) {
+export function resourceForURL(url) {
   for (const resourceTreeModel of SDK.targetManager.models(SDK.ResourceTreeModel)) {
     const resource = resourceTreeModel.resourceForURL(url);
     if (resource) {
@@ -39,22 +39,22 @@
     }
   }
   return null;
-};
+}
 
 /**
  * @param {function(!SDK.Resource)} callback
  */
-Bindings.forAllResources = function(callback) {
+export function forAllResources(callback) {
   for (const resourceTreeModel of SDK.targetManager.models(SDK.ResourceTreeModel)) {
     resourceTreeModel.forAllResources(callback);
   }
-};
+}
 
 /**
  * @param {string} url
  * @return {string}
  */
-Bindings.displayNameForURL = function(url) {
+export function displayNameForURL(url) {
   if (!url) {
     return '';
   }
@@ -91,7 +91,7 @@
 
   const displayName = url.trimURL(parsedURL.host);
   return displayName === '/' ? parsedURL.host + '/' : displayName;
-};
+}
 
 /**
  * @param {!SDK.Target} target
@@ -99,7 +99,7 @@
  * @param {string} url
  * @return {?Workspace.UISourceCodeMetadata}
  */
-Bindings.metadataForURL = function(target, frameId, url) {
+export function metadataForURL(target, frameId, url) {
   const resourceTreeModel = target.model(SDK.ResourceTreeModel);
   if (!resourceTreeModel) {
     return null;
@@ -109,24 +109,24 @@
     return null;
   }
   return Bindings.resourceMetadata(frame.resourceForURL(url));
-};
+}
 
 /**
  * @param {?SDK.Resource} resource
  * @return {?Workspace.UISourceCodeMetadata}
  */
-Bindings.resourceMetadata = function(resource) {
+export function resourceMetadata(resource) {
   if (!resource || (typeof resource.contentSize() !== 'number' && !resource.lastModified())) {
     return null;
   }
   return new Workspace.UISourceCodeMetadata(resource.lastModified(), resource.contentSize());
-};
+}
 
 /**
  * @param {!SDK.Script} script
  * @return {string}
  */
-Bindings.frameIdForScript = function(script) {
+export function frameIdForScript(script) {
   const executionContext = script.executionContext();
   if (executionContext) {
     return executionContext.frameId || '';
@@ -137,4 +137,17 @@
     return '';
   }
   return resourceTreeModel.mainFrame.id;
-};
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+Bindings.resourceForURL = resourceForURL;
+Bindings.forAllResources = forAllResources;
+Bindings.displayNameForURL = displayNameForURL;
+Bindings.metadataForURL = metadataForURL;
+Bindings.resourceMetadata = resourceMetadata;
+Bindings.frameIdForScript = frameIdForScript;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/SASSSourceMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/SASSSourceMapping.js
index 2c28692..7e4f350d 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/SASSSourceMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/SASSSourceMapping.js
@@ -31,7 +31,7 @@
 /**
  * @implements {Bindings.CSSWorkspaceBinding.SourceMapping}
  */
-Bindings.SASSSourceMapping = class {
+export default class SASSSourceMapping {
   /**
    * @param {!SDK.Target} target
    * @param {!SDK.SourceMapManager} sourceMapManager
@@ -79,7 +79,7 @@
           typeof embeddedContent === 'string' ? new Workspace.UISourceCodeMetadata(null, embeddedContent.length) : null;
       uiSourceCode = this._project.createUISourceCode(sassURL, contentProvider.contentType());
       Bindings.NetworkProject.setInitialFrameAttribution(uiSourceCode, header.frameId);
-      uiSourceCode[Bindings.SASSSourceMapping._sourceMapSymbol] = sourceMap;
+      uiSourceCode[_sourceMapSymbol] = sourceMap;
       this._project.addUISourceCodeWithProvider(uiSourceCode, contentProvider, metadata, mimeType);
     }
     Bindings.cssWorkspaceBinding.updateLocations(header);
@@ -156,7 +156,7 @@
    * @return {!Array<!SDK.CSSLocation>}
    */
   uiLocationToRawLocations(uiLocation) {
-    const sourceMap = uiLocation.uiSourceCode[Bindings.SASSSourceMapping._sourceMapSymbol];
+    const sourceMap = uiLocation.uiSourceCode[_sourceMapSymbol];
     if (!sourceMap) {
       return [];
     }
@@ -173,6 +173,17 @@
     this._project.dispose();
     Common.EventTarget.removeEventListeners(this._eventListeners);
   }
-};
+}
 
-Bindings.SASSSourceMapping._sourceMapSymbol = Symbol('sourceMap');
+export const _sourceMapSymbol = Symbol('sourceMap');
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.SASSSourceMapping = SASSSourceMapping;
+
+Bindings.SASSSourceMapping._sourceMapSymbol = _sourceMapSymbol;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js b/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js
index e5a3267b..a5f3c5c 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/StylesSourceMapping.js
@@ -32,7 +32,7 @@
  * @implements {Bindings.CSSWorkspaceBinding.SourceMapping}
  * @unrestricted
  */
-Bindings.StylesSourceMapping = class {
+export default class StylesSourceMapping {
   /**
    * @param {!SDK.CSSModel} cssModel
    * @param {!Workspace.Workspace} workspace
@@ -44,7 +44,7 @@
         workspace, 'css:' + target.id(), Workspace.projectTypes.Network, '', false /* isServiceProject */);
     Bindings.NetworkProject.setTargetForProject(this._project, target);
 
-    /** @type {!Map.<string, !Bindings.StyleFile>} */
+    /** @type {!Map.<string, !StyleFile>} */
     this._styleFiles = new Map();
     this._eventListeners = [
       this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded, this._styleSheetAdded, this),
@@ -82,7 +82,7 @@
    * @return {!Array<!SDK.CSSLocation>}
    */
   uiLocationToRawLocations(uiLocation) {
-    const styleFile = uiLocation.uiSourceCode[Bindings.StyleFile._symbol];
+    const styleFile = uiLocation.uiSourceCode[StyleFile._symbol];
     if (!styleFile) {
       return [];
     }
@@ -124,7 +124,7 @@
     const url = header.resourceURL();
     let styleFile = this._styleFiles.get(url);
     if (!styleFile) {
-      styleFile = new Bindings.StyleFile(this._cssModel, this._project, header);
+      styleFile = new StyleFile(this._cssModel, this._project, header);
       this._styleFiles.set(url, styleFile);
     } else {
       styleFile.addHeader(header);
@@ -169,13 +169,13 @@
     Common.EventTarget.removeEventListeners(this._eventListeners);
     this._project.removeProject();
   }
-};
+}
 
 /**
  * @implements {Common.ContentProvider}
  * @unrestricted
  */
-Bindings.StyleFile = class {
+export class StyleFile {
   /**
    * @param {!SDK.CSSModel} cssModel
    * @param {!Bindings.ContentProviderBasedProject} project
@@ -193,7 +193,7 @@
     const metadata = Bindings.metadataForURL(target, header.frameId, url);
 
     this._uiSourceCode = this._project.createUISourceCode(url, header.contentType());
-    this._uiSourceCode[Bindings.StyleFile._symbol] = this;
+    this._uiSourceCode[StyleFile._symbol] = this;
     Bindings.NetworkProject.setInitialFrameAttribution(this._uiSourceCode, header.frameId);
     this._project.addUISourceCodeWithProvider(this._uiSourceCode, this, metadata, 'text/css');
 
@@ -203,7 +203,7 @@
       this._uiSourceCode.addEventListener(
           Workspace.UISourceCode.Events.WorkingCopyCommitted, this._workingCopyCommitted, this)
     ];
-    this._throttler = new Common.Throttler(Bindings.StyleFile.updateTimeout);
+    this._throttler = new Common.Throttler(StyleFile.updateTimeout);
     this._terminated = false;
   }
 
@@ -355,8 +355,20 @@
   searchInContent(query, caseSensitive, isRegex) {
     return this._headers.firstValue().originalContentProvider().searchInContent(query, caseSensitive, isRegex);
   }
-};
+}
 
-Bindings.StyleFile._symbol = Symbol('Bindings.StyleFile._symbol');
+StyleFile._symbol = Symbol('Bindings.StyleFile._symbol');
 
-Bindings.StyleFile.updateTimeout = 200;
+StyleFile.updateTimeout = 200;
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.StylesSourceMapping = StylesSourceMapping;
+
+/** @constructor */
+Bindings.StyleFile = StyleFile;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js b/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js
index c1374ec2..cc1fdee8 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js
+++ b/third_party/blink/renderer/devtools/front_end/bindings/TempFile.js
@@ -28,7 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-Bindings.TempFile = class {
+export default class TempFile {
   constructor() {
     /** @type {?Blob} */
     this._lastBlob = null;
@@ -103,14 +103,14 @@
   remove() {
     this._lastBlob = null;
   }
-};
+}
 
 /**
  * @implements {SDK.BackingStorage}
  */
-Bindings.TempFileBackingStorage = class {
+export class TempFileBackingStorage {
   constructor() {
-    /** @type {?Bindings.TempFile} */
+    /** @type {?TempFile} */
     this._file = null;
     /** @type {!Array<string>} */
     this._strings;
@@ -150,7 +150,7 @@
       return;
     }
     if (!this._file) {
-      this._file = new Bindings.TempFile();
+      this._file = new TempFile();
     }
     this._stringsLength = 0;
     this._file.write(this._strings.splice(0));
@@ -183,12 +183,24 @@
   writeToStream(outputStream) {
     return this._file ? this._file.copyToOutputStream(outputStream) : Promise.resolve(null);
   }
-};
+}
+
+/* Legacy exported object */
+self.Bindings = self.Bindings || {};
+
+/* Legacy exported object */
+Bindings = Bindings || {};
+
+/** @constructor */
+Bindings.TempFile = TempFile;
+
+/** @constructor */
+Bindings.TempFileBackingStorage = TempFileBackingStorage;
 
 /**
  * @typedef {{
- *      startOffset: number,
- *      endOffset: number
- * }}
- */
+  *      startOffset: number,
+  *      endOffset: number
+  * }}
+  */
 Bindings.TempFileBackingStorage.Chunk;
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/bindings.js b/third_party/blink/renderer/devtools/front_end/bindings/bindings.js
new file mode 100644
index 0000000..ad6fd2f
--- /dev/null
+++ b/third_party/blink/renderer/devtools/front_end/bindings/bindings.js
@@ -0,0 +1,44 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import './LiveLocation.js';
+import './ResourceMapping.js';
+
+import * as BlackboxManager from './BlackboxManager.js';
+import * as BreakpointManager from './BreakpointManager.js';
+import * as CompilerScriptMapping from './CompilerScriptMapping.js';
+import * as ContentProviderBasedProject from './ContentProviderBasedProject.js';
+import * as CSSWorkspaceBinding from './CSSWorkspaceBinding.js';
+import * as DebuggerWorkspaceBinding from './DebuggerWorkspaceBinding.js';
+import * as DefaultScriptMapping from './DefaultScriptMapping.js';
+import * as FileUtils from './FileUtils.js';
+import * as LiveLocation from './LiveLocation.js';
+import * as NetworkProject from './NetworkProject.js';
+import * as PresentationConsoleMessageHelper from './PresentationConsoleMessageHelper.js';
+import * as ResourceMapping from './ResourceMapping.js';
+import * as ResourceScriptMapping from './ResourceScriptMapping.js';
+import * as ResourceUtils from './ResourceUtils.js';
+import * as SASSSourceMapping from './SASSSourceMapping.js';
+import * as StylesSourceMapping from './StylesSourceMapping.js';
+import * as TempFile from './TempFile.js';
+
+export {
+  BlackboxManager,
+  BreakpointManager,
+  CompilerScriptMapping,
+  ContentProviderBasedProject,
+  CSSWorkspaceBinding,
+  DebuggerWorkspaceBinding,
+  DefaultScriptMapping,
+  FileUtils,
+  LiveLocation,
+  NetworkProject,
+  PresentationConsoleMessageHelper,
+  ResourceMapping,
+  ResourceScriptMapping,
+  ResourceUtils,
+  SASSSourceMapping,
+  StylesSourceMapping,
+  TempFile,
+};
diff --git a/third_party/blink/renderer/devtools/front_end/bindings/module.json b/third_party/blink/renderer/devtools/front_end/bindings/module.json
index 918802a..eb6f9ef 100644
--- a/third_party/blink/renderer/devtools/front_end/bindings/module.json
+++ b/third_party/blink/renderer/devtools/front_end/bindings/module.json
@@ -5,7 +5,9 @@
         "services",
         "workspace"
     ],
-    "scripts": [
+    "scripts": [],
+    "modules": [
+        "bindings.js",
         "LiveLocation.js",
         "ResourceMapping.js",
         "CompilerScriptMapping.js",
diff --git a/third_party/blink/renderer/devtools/front_end/persistence/NetworkPersistenceManager.js b/third_party/blink/renderer/devtools/front_end/persistence/NetworkPersistenceManager.js
index a1f591c..b8b5088a 100644
--- a/third_party/blink/renderer/devtools/front_end/persistence/NetworkPersistenceManager.js
+++ b/third_party/blink/renderer/devtools/front_end/persistence/NetworkPersistenceManager.js
@@ -324,8 +324,9 @@
     const url = Common.ParsedURL.urlWithoutHash(uiSourceCode.url());
     this._networkUISourceCodeForEncodedPath.set(this._encodedPathFromUrl(url), uiSourceCode);
 
-    const fileSystemUISourceCode =
-        this._project.uiSourceCodeForURL(this._project.fileSystemPath() + '/' + this._encodedPathFromUrl(url));
+    const fileSystemUISourceCode = this._project.uiSourceCodeForURL(
+        /** @type {!Persistence.FileSystemWorkspaceBinding.FileSystem} */ (this._project).fileSystemPath() + '/' +
+        this._encodedPathFromUrl(url));
     if (!fileSystemUISourceCode) {
       return;
     }
@@ -465,7 +466,8 @@
     if (!this._active || (method !== 'GET' && method !== 'POST')) {
       return;
     }
-    const path = this._project.fileSystemPath() + '/' + this._encodedPathFromUrl(interceptedRequest.request.url);
+    const path = /** @type {!Persistence.FileSystemWorkspaceBinding.FileSystem} */ (this._project).fileSystemPath() +
+        '/' + this._encodedPathFromUrl(interceptedRequest.request.url);
     const fileSystemUISourceCode = this._project.uiSourceCodeForURL(path);
     if (!fileSystemUISourceCode) {
       return;
diff --git a/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js b/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js
index 75b0a8f..748b76a 100644
--- a/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js
+++ b/third_party/blink/renderer/devtools/front_end/persistence/WorkspaceSettingsTab.js
@@ -88,7 +88,9 @@
     }
     const networkPersistenceProject = Persistence.networkPersistenceManager.project();
     if (networkPersistenceProject &&
-        Persistence.isolatedFileSystemManager.fileSystem(networkPersistenceProject.fileSystemPath()) === fileSystem) {
+        Persistence.isolatedFileSystemManager.fileSystem(
+            /** @type {!Persistence.FileSystemWorkspaceBinding.FileSystem} */ (networkPersistenceProject)
+                .fileSystemPath()) === fileSystem) {
       return;
     }
     const element = this._renderFileSystem(fileSystem);
diff --git a/third_party/blink/renderer/devtools/front_end/root.js b/third_party/blink/renderer/devtools/front_end/root.js
index 25d20558..047d265 100644
--- a/third_party/blink/renderer/devtools/front_end/root.js
+++ b/third_party/blink/renderer/devtools/front_end/root.js
@@ -10,3 +10,7 @@
 import './protocol/protocol.js';
 import './sdk/sdk.js';
 import './ui/ui.js';
+
+import './services/services.js';
+import './workspace/workspace.js';
+import './bindings/bindings.js';
diff --git a/third_party/blink/renderer/devtools/front_end/services/ServiceManager.js b/third_party/blink/renderer/devtools/front_end/services/ServiceManager.js
index 36fb53c8..c7213b8 100644
--- a/third_party/blink/renderer/devtools/front_end/services/ServiceManager.js
+++ b/third_party/blink/renderer/devtools/front_end/services/ServiceManager.js
@@ -4,20 +4,19 @@
 /**
  * @unrestricted
  */
-Services.ServiceManager = class {
+export default class ServiceManager {
   /**
    * @param {string} serviceName
-   * @return {!Promise<?Services.ServiceManager.Service>}
+   * @return {!Promise<?Service>}
    */
   createRemoteService(serviceName) {
     if (!this._remoteConnection) {
       const url = Root.Runtime.queryParam('service-backend');
       if (!url) {
         console.error('No endpoint address specified');
-        return /** @type {!Promise<?Services.ServiceManager.Service>} */ (Promise.resolve(null));
+        return /** @type {!Promise<?Service>} */ (Promise.resolve(null));
       }
-      this._remoteConnection =
-          new Services.ServiceManager.Connection(new Services.ServiceManager.RemoteServicePort(url));
+      this._remoteConnection = new Connection(new RemoteServicePort(url));
     }
     return this._remoteConnection._createService(serviceName);
   }
@@ -25,7 +24,7 @@
   /**
    * @param {string} appName
    * @param {string} serviceName
-   * @return {!Promise<?Services.ServiceManager.Service>}
+   * @return {!Promise<?Service>}
    */
   createAppService(appName, serviceName) {
     let url = appName + '.js';
@@ -49,15 +48,15 @@
     }
 
     const worker = new Worker(url);
-    const connection = new Services.ServiceManager.Connection(new Services.ServiceManager.WorkerServicePort(worker));
+    const connection = new Connection(new WorkerServicePort(worker));
     return connection._createService(serviceName);
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Services.ServiceManager.Connection = class {
+export class Connection {
   /**
    * @param {!ServicePort} port
    */
@@ -68,13 +67,13 @@
     this._lastId = 1;
     /** @type {!Map<number, function(?Object)>}*/
     this._callbacks = new Map();
-    /** @type {!Map<string, !Services.ServiceManager.Service>}*/
+    /** @type {!Map<string, !Service>}*/
     this._services = new Map();
   }
 
   /**
    * @param {string} serviceName
-   * @return {!Promise<?Services.ServiceManager.Service>}
+   * @return {!Promise<?Service>}
    */
   _createService(serviceName) {
     return this._sendCommand(serviceName + '.create').then(result => {
@@ -82,14 +81,14 @@
         console.error('Could not initialize service: ' + serviceName);
         return null;
       }
-      const service = new Services.ServiceManager.Service(this, serviceName, result.id);
+      const service = new Service(this, serviceName, result.id);
       this._services.set(serviceName + ':' + result.id, service);
       return service;
     });
   }
 
   /**
-   * @param {!Services.ServiceManager.Service} service
+   * @param {!Service} service
    */
   _serviceDisposed(service) {
     this._services.delete(service._serviceName + ':' + service._objectId);
@@ -156,14 +155,14 @@
     }
     this._services.clear();
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Services.ServiceManager.Service = class {
+export class Service {
   /**
-   * @param {!Services.ServiceManager.Connection} connection
+   * @param {!Connection} connection
    * @param {string} serviceName
    * @param {string} objectId
    */
@@ -216,13 +215,13 @@
     }
     handler(params);
   }
-};
+}
 
 /**
  * @implements {ServicePort}
  * @unrestricted
  */
-Services.ServiceManager.RemoteServicePort = class {
+export class RemoteServicePort {
   /**
    * @param {string} url
    */
@@ -251,7 +250,7 @@
 
     /**
      * @param {function(boolean)} fulfill
-     * @this {Services.ServiceManager.RemoteServicePort}
+     * @this {RemoteServicePort}
      */
     function promiseBody(fulfill) {
       let socket;
@@ -265,7 +264,7 @@
       }
 
       /**
-       * @this {Services.ServiceManager.RemoteServicePort}
+       * @this {RemoteServicePort}
        */
       function onConnect() {
         this._socket = socket;
@@ -274,14 +273,14 @@
 
       /**
        * @param {!Event} event
-       * @this {Services.ServiceManager.RemoteServicePort}
+       * @this {RemoteServicePort}
        */
       function onMessage(event) {
         this._messageHandler(event.data);
       }
 
       /**
-       * @this {Services.ServiceManager.RemoteServicePort}
+       * @this {RemoteServicePort}
        */
       function onClose() {
         if (!this._socket) {
@@ -331,13 +330,13 @@
       this._closeHandler();
     }
   }
-};
+}
 
 /**
  * @implements {ServicePort}
  * @unrestricted
  */
-Services.ServiceManager.WorkerServicePort = class {
+export class WorkerServicePort {
   /**
    * @param {!Worker} worker
    */
@@ -352,7 +351,7 @@
 
     /**
      * @param {!Event} event
-     * @this {Services.ServiceManager.WorkerServicePort}
+     * @this {WorkerServicePort}
      */
     function onMessage(event) {
       if (event.data === 'workerReady') {
@@ -401,6 +400,27 @@
       return false;
     });
   }
-};
+}
 
-Services.serviceManager = new Services.ServiceManager();
+/* Legacy exported object */
+self.Services = self.Services || {};
+
+/* Legacy exported object */
+Services = Services || {};
+
+/** @constructor */
+Services.ServiceManager = ServiceManager;
+
+/** @constructor */
+Services.ServiceManager.Connection = Connection;
+
+/** @constructor */
+Services.ServiceManager.Service = Service;
+
+/** @constructor */
+Services.ServiceManager.RemoteServicePort = RemoteServicePort;
+
+/** @constructor */
+Services.ServiceManager.WorkerServicePort = WorkerServicePort;
+
+Services.serviceManager = new ServiceManager();
diff --git a/third_party/blink/renderer/devtools/front_end/services/module.json b/third_party/blink/renderer/devtools/front_end/services/module.json
index 633b254..85648ae4 100644
--- a/third_party/blink/renderer/devtools/front_end/services/module.json
+++ b/third_party/blink/renderer/devtools/front_end/services/module.json
@@ -3,7 +3,9 @@
         "common",
         "host"
     ],
-    "scripts": [
+    "scripts": [],
+    "modules": [
+        "services.js",
         "ServiceManager.js"
     ]
 }
diff --git a/third_party/blink/renderer/devtools/front_end/services/services.js b/third_party/blink/renderer/devtools/front_end/services/services.js
new file mode 100644
index 0000000..90e00f6
--- /dev/null
+++ b/third_party/blink/renderer/devtools/front_end/services/services.js
@@ -0,0 +1,9 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import * as ServiceManager from './ServiceManager.js';
+
+export {
+  ServiceManager,
+};
diff --git a/third_party/blink/renderer/devtools/front_end/workspace/FileManager.js b/third_party/blink/renderer/devtools/front_end/workspace/FileManager.js
index 1c69850..d22427c 100644
--- a/third_party/blink/renderer/devtools/front_end/workspace/FileManager.js
+++ b/third_party/blink/renderer/devtools/front_end/workspace/FileManager.js
@@ -31,7 +31,7 @@
 /**
  * @unrestricted
  */
-Workspace.FileManager = class extends Common.Object {
+export default class FileManager extends Common.Object {
   constructor() {
     super();
     /** @type {!Map<string, function(?{fileSystemPath: (string|undefined)})>} */
@@ -101,16 +101,28 @@
    */
   _appendedToURL(event) {
     const url = /** @type {string} */ (event.data);
-    this.dispatchEventToListeners(Workspace.FileManager.Events.AppendedToURL, url);
+    this.dispatchEventToListeners(Events.AppendedToURL, url);
   }
-};
+}
 
 /** @enum {symbol} */
-Workspace.FileManager.Events = {
+export const Events = {
   AppendedToURL: Symbol('AppendedToURL')
 };
 
+/* Legacy exported object */
+self.Workspace = self.Workspace || {};
+
+/* Legacy exported object */
+Workspace = Workspace || {};
+
+/** @constructor */
+Workspace.FileManager = FileManager;
+
+/** @enum {symbol} */
+Workspace.FileManager.Events = Events;
+
 /**
- * @type {?Workspace.FileManager}
+ * @type {?FileManager}
  */
-Workspace.fileManager;
+Workspace.fileManager;
\ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js b/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js
index b27ae30..d427e34 100644
--- a/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js
+++ b/third_party/blink/renderer/devtools/front_end/workspace/UISourceCode.js
@@ -31,7 +31,7 @@
  * @implements {Common.ContentProvider}
  * @unrestricted
  */
-Workspace.UISourceCode = class extends Common.Object {
+export default class UISourceCode extends Common.Object {
   /**
    * @param {!Workspace.Project} project
    * @param {string} url
@@ -59,10 +59,10 @@
     this._contentType = contentType;
     /** @type {?Promise<string>} */
     this._requestContentPromise = null;
-    /** @type {?Platform.Multimap<string, !Workspace.UISourceCode.LineMarker>} */
+    /** @type {?Platform.Multimap<string, !LineMarker>} */
     this._decorations = null;
     this._hasCommits = false;
-    /** @type {?Set<!Workspace.UISourceCode.Message>} */
+    /** @type {?Set<!Message>} */
     this._messages = null;
     this._contentLoaded = false;
     /** @type {?string} */
@@ -80,7 +80,7 @@
   }
 
   /**
-   * @return {!Promise<?Workspace.UISourceCodeMetadata>}
+   * @return {!Promise<?UISourceCodeMetadata>}
    */
   requestMetadata() {
     return this._project.requestMetadata(this);
@@ -170,7 +170,7 @@
      * @param {string=} newName
      * @param {string=} newURL
      * @param {!Common.ResourceType=} newContentType
-     * @this {Workspace.UISourceCode}
+     * @this {UISourceCode}
      */
     function innerCallback(success, newName, newURL, newContentType) {
       if (success) {
@@ -201,7 +201,7 @@
     if (contentType) {
       this._contentType = contentType;
     }
-    this.dispatchEventToListeners(Workspace.UISourceCode.Events.TitleChanged, this);
+    this.dispatchEventToListeners(Events.TitleChanged, this);
     this.project().workspace().dispatchEventToListeners(
         Workspace.Workspace.Events.UISourceCodeRenamed, {oldURL: oldURL, uiSourceCode: this});
   }
@@ -279,7 +279,7 @@
     /**
      * @param {?string} updatedContent
      * @param {boolean} encoded
-     * @this {Workspace.UISourceCode}
+     * @this {UISourceCode}
      */
     async function contentLoaded(updatedContent, encoded) {
       this._checkingContent = false;
@@ -346,7 +346,7 @@
 
     this._innerResetWorkingCopy();
     const data = {uiSourceCode: this, content, encoded: this._contentEncoded};
-    this.dispatchEventToListeners(Workspace.UISourceCode.Events.WorkingCopyCommitted, data);
+    this.dispatchEventToListeners(Events.WorkingCopyCommitted, data);
     this._project.workspace().dispatchEventToListeners(Workspace.Workspace.Events.WorkingCopyCommitted, data);
     if (committedByUser) {
       this._project.workspace().dispatchEventToListeners(Workspace.Workspace.Events.WorkingCopyCommittedByUser, data);
@@ -422,7 +422,7 @@
 
   _workingCopyChanged() {
     this._removeAllMessages();
-    this.dispatchEventToListeners(Workspace.UISourceCode.Events.WorkingCopyChanged, this);
+    this.dispatchEventToListeners(Events.WorkingCopyChanged, this);
     this._project.workspace().dispatchEventToListeners(
         Workspace.Workspace.Events.WorkingCopyChanged, {uiSourceCode: this});
   }
@@ -487,28 +487,28 @@
   /**
    * @param {number} lineNumber
    * @param {number=} columnNumber
-   * @return {!Workspace.UILocation}
+   * @return {!UILocation}
    */
   uiLocation(lineNumber, columnNumber) {
     if (typeof columnNumber === 'undefined') {
       columnNumber = 0;
     }
-    return new Workspace.UILocation(this, lineNumber, columnNumber);
+    return new UILocation(this, lineNumber, columnNumber);
   }
 
   /**
-   * @return {!Set<!Workspace.UISourceCode.Message>}
+   * @return {!Set<!Message>}
    */
   messages() {
     return this._messages ? new Set(this._messages) : new Set();
   }
 
   /**
-   * @param {!Workspace.UISourceCode.Message.Level} level
+   * @param {!Message.Level} level
    * @param {string} text
    * @param {number} lineNumber
    * @param {number=} columnNumber
-   * @return {!Workspace.UISourceCode.Message} message
+   * @return {!Message} message
    */
   addLineMessage(level, text, lineNumber, columnNumber) {
     return this.addMessage(
@@ -516,27 +516,27 @@
   }
 
   /**
-   * @param {!Workspace.UISourceCode.Message.Level} level
+   * @param {!Message.Level} level
    * @param {string} text
    * @param {!TextUtils.TextRange} range
-   * @return {!Workspace.UISourceCode.Message} message
+   * @return {!Message} message
    */
   addMessage(level, text, range) {
-    const message = new Workspace.UISourceCode.Message(this, level, text, range);
+    const message = new Message(this, level, text, range);
     if (!this._messages) {
       this._messages = new Set();
     }
     this._messages.add(message);
-    this.dispatchEventToListeners(Workspace.UISourceCode.Events.MessageAdded, message);
+    this.dispatchEventToListeners(Events.MessageAdded, message);
     return message;
   }
 
   /**
-   * @param {!Workspace.UISourceCode.Message} message
+   * @param {!Message} message
    */
   removeMessage(message) {
     if (this._messages && this._messages.delete(message)) {
-      this.dispatchEventToListeners(Workspace.UISourceCode.Events.MessageRemoved, message);
+      this.dispatchEventToListeners(Events.MessageRemoved, message);
     }
   }
 
@@ -545,7 +545,7 @@
       return;
     }
     for (const message of this._messages) {
-      this.dispatchEventToListeners(Workspace.UISourceCode.Events.MessageRemoved, message);
+      this.dispatchEventToListeners(Events.MessageRemoved, message);
     }
     this._messages = null;
   }
@@ -565,12 +565,12 @@
    * @param {?} data
    */
   addDecoration(range, type, data) {
-    const marker = new Workspace.UISourceCode.LineMarker(range, type, data);
+    const marker = new LineMarker(range, type, data);
     if (!this._decorations) {
       this._decorations = new Platform.Multimap();
     }
     this._decorations.set(type, marker);
-    this.dispatchEventToListeners(Workspace.UISourceCode.Events.LineDecorationAdded, marker);
+    this.dispatchEventToListeners(Events.LineDecorationAdded, marker);
   }
 
   /**
@@ -583,12 +583,12 @@
     const markers = this._decorations.get(type);
     this._decorations.deleteAll(type);
     markers.forEach(marker => {
-      this.dispatchEventToListeners(Workspace.UISourceCode.Events.LineDecorationRemoved, marker);
+      this.dispatchEventToListeners(Events.LineDecorationRemoved, marker);
     });
   }
 
   /**
-   * @return {!Array<!Workspace.UISourceCode.LineMarker>}
+   * @return {!Array<!LineMarker>}
    */
   allDecorations() {
     return this._decorations ? this._decorations.valuesArray() : [];
@@ -600,21 +600,20 @@
     }
     const decorationList = this._decorations.valuesArray();
     this._decorations.clear();
-    decorationList.forEach(
-        marker => this.dispatchEventToListeners(Workspace.UISourceCode.Events.LineDecorationRemoved, marker));
+    decorationList.forEach(marker => this.dispatchEventToListeners(Events.LineDecorationRemoved, marker));
   }
 
   /**
    * @param {string} type
-   * @return {?Set<!Workspace.UISourceCode.LineMarker>}
+   * @return {?Set<!LineMarker>}
    */
   decorationsForType(type) {
     return this._decorations ? this._decorations.get(type) : null;
   }
-};
+}
 
 /** @enum {symbol} */
-Workspace.UISourceCode.Events = {
+export const Events = {
   WorkingCopyChanged: Symbol('WorkingCopyChanged'),
   WorkingCopyCommitted: Symbol('WorkingCopyCommitted'),
   TitleChanged: Symbol('TitleChanged'),
@@ -627,9 +626,9 @@
 /**
  * @unrestricted
  */
-Workspace.UILocation = class {
+export class UILocation {
   /**
-   * @param {!Workspace.UISourceCode} uiSourceCode
+   * @param {!UISourceCode} uiSourceCode
    * @param {number} lineNumber
    * @param {number} columnNumber
    */
@@ -667,8 +666,8 @@
   }
 
   /**
-   * @param {!Workspace.UILocation} location1
-   * @param {!Workspace.UILocation} location2
+   * @param {!UILocation} location1
+   * @param {!UILocation} location2
    * @return {number}
    */
   static comparator(location1, location2) {
@@ -676,7 +675,7 @@
   }
 
   /**
-   * @param {!Workspace.UILocation} other
+   * @param {!UILocation} other
    * @return {number}
    */
   compareTo(other) {
@@ -688,15 +687,15 @@
     }
     return this.columnNumber - other.columnNumber;
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Workspace.UISourceCode.Message = class {
+export class Message {
   /**
-   * @param {!Workspace.UISourceCode} uiSourceCode
-   * @param {!Workspace.UISourceCode.Message.Level} level
+   * @param {!UISourceCode} uiSourceCode
+   * @param {!Message.Level} level
    * @param {string} text
    * @param {!TextUtils.TextRange} range
    */
@@ -708,14 +707,14 @@
   }
 
   /**
-   * @return {!Workspace.UISourceCode}
+   * @return {!UISourceCode}
    */
   uiSourceCode() {
     return this._uiSourceCode;
   }
 
   /**
-   * @return {!Workspace.UISourceCode.Message.Level}
+   * @return {!Message.Level}
    */
   level() {
     return this._level;
@@ -750,7 +749,7 @@
   }
 
   /**
-   * @param {!Workspace.UISourceCode.Message} another
+   * @param {!Message} another
    * @return {boolean}
    */
   isEqual(another) {
@@ -761,12 +760,12 @@
   remove() {
     this._uiSourceCode.removeMessage(this);
   }
-};
+}
 
 /**
  * @enum {string}
  */
-Workspace.UISourceCode.Message.Level = {
+Message.Level = {
   Error: 'Error',
   Warning: 'Warning'
 };
@@ -774,7 +773,7 @@
 /**
  * @unrestricted
  */
-Workspace.UISourceCode.LineMarker = class {
+export class LineMarker {
   /**
    * @param {!TextUtils.TextRange} range
    * @param {string} type
@@ -806,12 +805,12 @@
   data() {
     return this._data;
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Workspace.UISourceCodeMetadata = class {
+export class UISourceCodeMetadata {
   /**
    * @param {?Date} modificationTime
    * @param {?number} contentSize
@@ -820,4 +819,28 @@
     this.modificationTime = modificationTime;
     this.contentSize = contentSize;
   }
-};
+}
+
+/* Legacy exported object */
+self.Workspace = self.Workspace || {};
+
+/* Legacy exported object */
+Workspace = Workspace || {};
+
+/** @constructor */
+Workspace.UISourceCode = UISourceCode;
+
+/** @enum {symbol} */
+Workspace.UISourceCode.Events = Events;
+
+/** @constructor */
+Workspace.UISourceCode.Message = Message;
+
+/** @constructor */
+Workspace.UISourceCode.LineMarker = LineMarker;
+
+/** @constructor */
+Workspace.UILocation = UILocation;
+
+/** @constructor */
+Workspace.UISourceCodeMetadata = UISourceCodeMetadata;
\ No newline at end of file
diff --git a/third_party/blink/renderer/devtools/front_end/workspace/Workspace.js b/third_party/blink/renderer/devtools/front_end/workspace/WorkspaceImpl.js
similarity index 81%
rename from third_party/blink/renderer/devtools/front_end/workspace/Workspace.js
rename to third_party/blink/renderer/devtools/front_end/workspace/WorkspaceImpl.js
index c858526..fe2c63d 100644
--- a/third_party/blink/renderer/devtools/front_end/workspace/Workspace.js
+++ b/third_party/blink/renderer/devtools/front_end/workspace/WorkspaceImpl.js
@@ -30,83 +30,92 @@
 /**
  * @interface
  */
-Workspace.ProjectSearchConfig = function() {};
-
-Workspace.ProjectSearchConfig.prototype = {
+export class ProjectSearchConfig {
   /**
    * @return {string}
    */
-  query() {},
+  query() {
+  }
 
   /**
    * @return {boolean}
    */
-  ignoreCase() {},
+  ignoreCase() {
+  }
 
   /**
    * @return {boolean}
    */
-  isRegex() {},
+  isRegex() {
+  }
 
   /**
    * @return {!Array.<string>}
    */
-  queries() {},
+  queries() {
+  }
 
   /**
    * @param {string} filePath
    * @return {boolean}
    */
-  filePathMatchesFileQuery(filePath) {}
-};
+  filePathMatchesFileQuery(filePath) {
+  }
+}
 
 /**
  * @interface
  */
-Workspace.Project = function() {};
-
-Workspace.Project.prototype = {
+export class Project {
   /**
-   * @return {!Workspace.Workspace}
+   * @return {!WorkspaceImpl}
    */
-  workspace() {},
+  workspace() {
+  }
 
   /**
    * @return {string}
    */
-  id() {},
+  id() {
+  }
 
   /**
    * @return {string}
    */
-  type() {},
+  type() {
+  }
 
   /**
    * @return {boolean}
    */
-  isServiceProject() {},
+  isServiceProject() {
+  }
 
   /**
    * @return {string}
    */
-  displayName() {},
+  displayName() {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @return {!Promise<?Workspace.UISourceCodeMetadata>}
    */
-  requestMetadata(uiSourceCode) {},
+  requestMetadata(uiSourceCode) {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @param {function(?string,boolean)} callback
    */
-  requestFileContent(uiSourceCode, callback) {},
+  requestFileContent(uiSourceCode, callback) {
+  }
 
   /**
    * @return {boolean}
    */
-  canSetFileContent() {},
+  canSetFileContent() {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
@@ -114,42 +123,49 @@
    * @param {boolean} isBase64
    * @return {!Promise}
    */
-  setFileContent(uiSourceCode, newContent, isBase64) {},
+  setFileContent(uiSourceCode, newContent, isBase64) {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @return {string}
    */
-  fullDisplayName(uiSourceCode) {},
+  fullDisplayName(uiSourceCode) {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @return {string}
    */
-  mimeType(uiSourceCode) {},
+  mimeType(uiSourceCode) {
+  }
 
   /**
    * @return {boolean}
    */
-  canRename() {},
+  canRename() {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
    * @param {string} newName
    * @param {function(boolean, string=, string=, !Common.ResourceType=)} callback
    */
-  rename(uiSourceCode, newName, callback) {},
+  rename(uiSourceCode, newName, callback) {
+  }
 
   /**
    * @param {string} path
    */
-  excludeFolder(path) {},
+  excludeFolder(path) {
+  }
 
   /**
    * @param {string} path
    * @return {boolean}
    */
-  canExcludeFolder(path) {},
+  canExcludeFolder(path) {
+  }
 
   /**
    * @param {string} path
@@ -158,19 +174,23 @@
    * @param {boolean=} isBase64
    * @return {!Promise<?Workspace.UISourceCode>}
    */
-  createFile(path, name, content, isBase64) {},
+  createFile(path, name, content, isBase64) {
+  }
 
   /**
    * @return {boolean}
    */
-  canCreateFile() {},
+  canCreateFile() {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
    */
-  deleteFile(uiSourceCode) {},
+  deleteFile(uiSourceCode) {
+  }
 
-  remove() {},
+  remove() {
+  }
 
   /**
    * @param {!Workspace.UISourceCode} uiSourceCode
@@ -179,37 +199,42 @@
    * @param {boolean} isRegex
    * @return {!Promise<!Array<!Common.ContentProvider.SearchMatch>>}
    */
-  searchInFileContent(uiSourceCode, query, caseSensitive, isRegex) {},
+  searchInFileContent(uiSourceCode, query, caseSensitive, isRegex) {
+  }
 
   /**
-   * @param {!Workspace.ProjectSearchConfig} searchConfig
+   * @param {!ProjectSearchConfig} searchConfig
    * @param {!Array.<string>} filesMathingFileQuery
    * @param {!Common.Progress} progress
    * @return {!Promise<!Array<string>>}
    */
-  findFilesMatchingSearchRequest(searchConfig, filesMathingFileQuery, progress) {},
+  findFilesMatchingSearchRequest(searchConfig, filesMathingFileQuery, progress) {
+  }
 
   /**
    * @param {!Common.Progress} progress
    */
-  indexContent(progress) {},
+  indexContent(progress) {
+  }
 
   /**
    * @param {string} url
    * @return {?Workspace.UISourceCode}
    */
-  uiSourceCodeForURL(url) {},
+  uiSourceCodeForURL(url) {
+  }
 
   /**
    * @return {!Array.<!Workspace.UISourceCode>}
    */
-  uiSourceCodes() {}
-};
+  uiSourceCodes() {
+  }
+}
 
 /**
  * @enum {string}
  */
-Workspace.projectTypes = {
+export const projectTypes = {
   Debugger: 'debugger',
   Formatter: 'formatter',
   Network: 'network',
@@ -221,9 +246,9 @@
 /**
  * @unrestricted
  */
-Workspace.ProjectStore = class {
+export class ProjectStore {
   /**
-   * @param {!Workspace.Workspace} workspace
+   * @param {!WorkspaceImpl} workspace
    * @param {string} id
    * @param {!Workspace.projectTypes} type
    * @param {string} displayName
@@ -239,7 +264,7 @@
     /** @type {!Array.<!Workspace.UISourceCode>} */
     this._uiSourceCodesList = [];
 
-    this._project = /** @type {!Workspace.Project} */ (this);
+    this._project = /** @type {!Project} */ (this);
   }
 
   /**
@@ -264,7 +289,7 @@
   }
 
   /**
-   * @return {!Workspace.Workspace}
+   * @return {!WorkspaceImpl}
    */
   workspace() {
     return this._workspace;
@@ -290,7 +315,7 @@
     }
     this._uiSourceCodesMap.set(url, {uiSourceCode: uiSourceCode, index: this._uiSourceCodesList.length});
     this._uiSourceCodesList.push(uiSourceCode);
-    this._workspace.dispatchEventToListeners(Workspace.Workspace.Events.UISourceCodeAdded, uiSourceCode);
+    this._workspace.dispatchEventToListeners(Events.UISourceCodeAdded, uiSourceCode);
     return true;
   }
 
@@ -310,7 +335,7 @@
     movedEntry.index = entry.index;
     this._uiSourceCodesList.splice(this._uiSourceCodesList.length - 1, 1);
     this._uiSourceCodesMap.delete(url);
-    this._workspace.dispatchEventToListeners(Workspace.Workspace.Events.UISourceCodeRemoved, entry.uiSourceCode);
+    this._workspace.dispatchEventToListeners(Events.UISourceCodeRemoved, entry.uiSourceCode);
   }
 
   removeProject() {
@@ -347,15 +372,15 @@
     this._uiSourceCodesMap.set(newPath, value);
     this._uiSourceCodesMap.delete(oldPath);
   }
-};
+}
 
 /**
  * @unrestricted
  */
-Workspace.Workspace = class extends Common.Object {
+export default class WorkspaceImpl extends Common.Object {
   constructor() {
     super();
-    /** @type {!Map<string, !Workspace.Project>} */
+    /** @type {!Map<string, !Project>} */
     this._projects = new Map();
     this._hasResourceContentTrackingExtensions = false;
   }
@@ -399,32 +424,32 @@
   }
 
   /**
-   * @param {!Workspace.Project} project
+   * @param {!Project} project
    */
   addProject(project) {
     console.assert(!this._projects.has(project.id()), `A project with id ${project.id()} already exists!`);
     this._projects.set(project.id(), project);
-    this.dispatchEventToListeners(Workspace.Workspace.Events.ProjectAdded, project);
+    this.dispatchEventToListeners(Events.ProjectAdded, project);
   }
 
   /**
-   * @param {!Workspace.Project} project
+   * @param {!Project} project
    */
   _removeProject(project) {
     this._projects.delete(project.id());
-    this.dispatchEventToListeners(Workspace.Workspace.Events.ProjectRemoved, project);
+    this.dispatchEventToListeners(Events.ProjectRemoved, project);
   }
 
   /**
    * @param {string} projectId
-   * @return {?Workspace.Project}
+   * @return {?Project}
    */
   project(projectId) {
     return this._projects.get(projectId) || null;
   }
 
   /**
-   * @return {!Array.<!Workspace.Project>}
+   * @return {!Array.<!Project>}
    */
   projects() {
     return this._projects.valuesArray();
@@ -432,7 +457,7 @@
 
   /**
    * @param {string} type
-   * @return {!Array.<!Workspace.Project>}
+   * @return {!Array.<!Project>}
    */
   projectsForType(type) {
     function filterByType(project) {
@@ -465,10 +490,10 @@
   hasResourceContentTrackingExtensions() {
     return this._hasResourceContentTrackingExtensions;
   }
-};
+}
 
 /** @enum {symbol} */
-Workspace.Workspace.Events = {
+export const Events = {
   UISourceCodeAdded: Symbol('UISourceCodeAdded'),
   UISourceCodeRemoved: Symbol('UISourceCodeRemoved'),
   UISourceCodeRenamed: Symbol('UISourceCodeRenamed'),
@@ -479,7 +504,31 @@
   ProjectRemoved: Symbol('ProjectRemoved')
 };
 
+/* Legacy exported object */
+self.Workspace = self.Workspace || {};
+
+/* Legacy exported object */
+Workspace = Workspace || {};
+
+/** @constructor */
+Workspace.Workspace = WorkspaceImpl;
+
+/** @enum {symbol} */
+Workspace.Workspace.Events = Events;
+
+/** @interface */
+Workspace.ProjectSearchConfig = ProjectSearchConfig;
+
+/** @interface */
+Workspace.Project = Project;
+
+/** @enum {string} */
+Workspace.projectTypes = projectTypes;
+
+/** @constructor */
+Workspace.ProjectStore = ProjectStore;
+
 /**
- * @type {!Workspace.Workspace}
+ * @type {!WorkspaceImpl}
  */
 Workspace.workspace;
diff --git a/third_party/blink/renderer/devtools/front_end/workspace/module.json b/third_party/blink/renderer/devtools/front_end/workspace/module.json
index 56005a8..0d025c4 100644
--- a/third_party/blink/renderer/devtools/front_end/workspace/module.json
+++ b/third_party/blink/renderer/devtools/front_end/workspace/module.json
@@ -4,9 +4,11 @@
         "host",
         "platform"
     ],
-    "scripts": [
+    "scripts": [],
+    "modules": [
+        "workspace.js",
         "FileManager.js",
         "UISourceCode.js",
-        "Workspace.js"
+        "WorkspaceImpl.js"
     ]
 }
diff --git a/third_party/blink/renderer/devtools/front_end/workspace/workspace.js b/third_party/blink/renderer/devtools/front_end/workspace/workspace.js
new file mode 100644
index 0000000..3b2268c4
--- /dev/null
+++ b/third_party/blink/renderer/devtools/front_end/workspace/workspace.js
@@ -0,0 +1,13 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import * as FileManager from './FileManager.js';
+import * as UISourceCode from './UISourceCode.js';
+import * as Workspace from './WorkspaceImpl.js';
+
+export {
+  FileManager,
+  UISourceCode,
+  Workspace,
+};
diff --git a/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js b/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js
index 21e3736..706554e 100644
--- a/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js
+++ b/third_party/blink/renderer/devtools/scripts/check_localizable_resources.js
@@ -36,7 +36,6 @@
       getErrors();
   } catch (e) {
     console.log(e.stack);
-    console.log(`Error: ${e.message}`);
     process.exit(1);
   }
 }
diff --git a/third_party/blink/renderer/modules/BUILD.gn b/third_party/blink/renderer/modules/BUILD.gn
index 9248871..ca57079 100644
--- a/third_party/blink/renderer/modules/BUILD.gn
+++ b/third_party/blink/renderer/modules/BUILD.gn
@@ -136,6 +136,7 @@
     "//third_party/blink/renderer/modules/nfc",
     "//third_party/blink/renderer/modules/notifications",
     "//third_party/blink/renderer/modules/payments",
+    "//third_party/blink/renderer/modules/p2p",
     "//third_party/blink/renderer/modules/peerconnection",
     "//third_party/blink/renderer/modules/permissions",
     "//third_party/blink/renderer/modules/picture_in_picture",
@@ -172,6 +173,7 @@
   deps = [
     ":make_modules_generated",
     ":module_names",
+    "//jingle:webrtc_glue",
     "//net:net",
     "//third_party/blink/renderer/bindings/modules:generated",
     "//third_party/blink/renderer/bindings/modules/v8:bindings_modules_impl",
@@ -179,6 +181,9 @@
     "//third_party/blink/renderer/core",
     "//third_party/icu",
     "//third_party/webrtc/api/audio:aec3_config_json",
+    "//third_party/webrtc/api/rtc_event_log:rtc_event_log_factory",
+    "//third_party/webrtc/media:rtc_internal_video_codecs",
+    "//third_party/webrtc/modules/video_coding:webrtc_h264",
     "//third_party/webrtc/pc:libjingle_peerconnection",
     "//third_party/webrtc/rtc_base:rtc_base",
     "//third_party/webrtc_overrides:init_webrtc",
diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
index 1d8e4d8b..50fdf34 100644
--- a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
+++ b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
@@ -35,7 +35,6 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/mojom/referrer_policy.mojom-blink.h"
-#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_installed_scripts_manager.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h"
 #include "third_party/blink/public/platform/modules/service_worker/web_service_worker_provider.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_devices.cc b/third_party/blink/renderer/modules/mediastream/media_devices.cc
index f407db7..faaaf76 100644
--- a/third_party/blink/renderer/modules/mediastream/media_devices.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_devices.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "mojo/public/cpp/bindings/remote.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/modules/mediastream/webrtc_uma_histograms.h"
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
@@ -346,7 +346,7 @@
 const mojo::Remote<mojom::blink::MediaDevicesDispatcherHost>&
 MediaDevices::GetDispatcherHost(LocalFrame* frame) {
   if (!dispatcher_host_) {
-    frame->GetInterfaceProvider().GetInterface(
+    frame->GetBrowserInterfaceBroker().GetInterface(
         dispatcher_host_.BindNewPipeAndPassReceiver());
     dispatcher_host_.set_disconnect_handler(
         WTF::Bind(&MediaDevices::OnDispatcherHostConnectionError,
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc
index e5605bb..a1028f4 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc
@@ -34,22 +34,6 @@
 using blink::AudioProcessingProperties;
 using EchoCancellationType = AudioProcessingProperties::EchoCancellationType;
 
-// Test blink::Platform imlementation that overrides the known methods needed
-// by the tests, including creation of WebRtcAudioDevice instances.
-class WebRtcAudioDeviceTestingPlatformSupport
-    : public IOTaskRunnerTestingPlatformSupport {
- public:
-  WebRtcAudioDeviceTestingPlatformSupport()
-      : webrtc_audio_device_(
-            new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()) {}
-  blink::WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override {
-    return webrtc_audio_device_.get();
-  }
-
- private:
-  scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device_;
-};
-
 namespace {
 
 using BoolSetFunction = void (blink::BooleanConstraint::*)(bool);
@@ -450,8 +434,7 @@
       blink::WebString::FromASCII("system")};
 
  private:
-  ScopedTestingPlatformSupport<WebRtcAudioDeviceTestingPlatformSupport>
-      platform_;
+  ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_;
 };
 
 class MediaStreamConstraintsUtilAudioTest
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc
index fdab8d4..57715ca 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory_impl.cc
@@ -11,6 +11,7 @@
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_media_stream.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_video_track.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_device_impl.h"
 #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_renderer.h"
 #include "third_party/blink/public/web/web_local_frame.h"
@@ -32,7 +33,7 @@
 // will not be able to pick an appropriate device and return 0.
 base::UnguessableToken GetSessionIdForWebRtcAudioRenderer() {
   WebRtcAudioDeviceImpl* audio_device =
-      Platform::Current()->GetWebRtcAudioDevice();
+      PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice();
   return audio_device
              ? audio_device->GetAuthorizedDeviceSessionIdForAudioRenderer()
              : base::UnguessableToken();
@@ -117,7 +118,7 @@
 
   // This is a remote WebRTC media stream.
   WebRtcAudioDeviceImpl* audio_device =
-      Platform::Current()->GetWebRtcAudioDevice();
+      PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice();
   DCHECK(audio_device);
 
   // Share the existing renderer if any, otherwise create a new one.
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc
index ebc845f..3305239 100644
--- a/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_capturer_source.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "media/capture/video_capturer_source.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
 #include "third_party/blink/renderer/core/frame/local_frame.h"
@@ -210,7 +210,7 @@
 MediaStreamVideoCapturerSource::GetMediaStreamDispatcherHost() {
   DCHECK(frame_);
   if (!host_) {
-    frame_->GetInterfaceProvider().GetInterface(
+    frame_->GetBrowserInterfaceBroker().GetInterface(
         host_.BindNewPipeAndPassReceiver());
   }
   return host_.get();
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
index 7dee523..740459b 100644
--- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
+++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
@@ -21,6 +21,7 @@
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/web/modules/mediastream/media_stream_constraints_util.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_device_impl.h"
 #include "third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h"
 #include "third_party/blink/renderer/modules/mediastream/media_stream_local_frame_wrapper.h"
@@ -202,7 +203,7 @@
   // Create the MediaStreamAudioProcessor, bound to the WebRTC audio device
   // module.
   WebRtcAudioDeviceImpl* const rtc_audio_device =
-      Platform::Current()->GetWebRtcAudioDevice();
+      PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice();
   if (!rtc_audio_device) {
     blink::WebRtcLogMessage(
         "ProcessedLocalAudioSource::EnsureSourceIsStarted() fails"
@@ -326,7 +327,8 @@
   scoped_refptr<media::AudioCapturerSource> source_to_stop(std::move(source_));
 
   if (WebRtcAudioDeviceImpl* rtc_audio_device =
-          Platform::Current()->GetWebRtcAudioDevice()) {
+          PeerConnectionDependencyFactory::GetInstance()
+              ->GetWebRtcAudioDevice()) {
     rtc_audio_device->RemoveAudioCapturer(this);
   }
 
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc
index 3a6d0a9e..9ea18522 100644
--- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc
+++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc
@@ -69,14 +69,11 @@
 MockAudioCapturerSource::~MockAudioCapturerSource() {}
 
 // Test Platform implementation that overrides the known methods needed
-// by the tests, including creation of WebRtcAudioDevice and
-// AudioCapturerSource instances.
-class WebRtcAudioDeviceTestingPlatformSupport : public TestingPlatformSupport {
+// by the tests, including creation of AudioCapturerSource instances.
+class AudioCapturerSourceTestingPlatformSupport
+    : public TestingPlatformSupport {
  public:
-  WebRtcAudioDeviceTestingPlatformSupport() = default;
-  WebRtcAudioDeviceImpl* GetWebRtcAudioDevice() override {
-    return audio_device_.get();
-  }
+  AudioCapturerSourceTestingPlatformSupport() = default;
 
   scoped_refptr<media::AudioCapturerSource> NewAudioCapturerSource(
       WebLocalFrame* web_frame,
@@ -91,8 +88,6 @@
   }
 
  private:
-  scoped_refptr<blink::WebRtcAudioDeviceImpl> audio_device_ =
-      new rtc::RefCountedObject<blink::WebRtcAudioDeviceImpl>();
   scoped_refptr<MockAudioCapturerSource> mock_audio_capturer_source_ =
       base::MakeRefCounted<MockAudioCapturerSource>();
 };
@@ -188,7 +183,7 @@
   }
 
  private:
-  ScopedTestingPlatformSupport<WebRtcAudioDeviceTestingPlatformSupport>
+  ScopedTestingPlatformSupport<AudioCapturerSourceTestingPlatformSupport>
       webrtc_audio_device_platform_support_;
   WebMediaStreamSource blink_audio_source_;
   WebMediaStreamTrack blink_audio_track_;
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client.cc b/third_party/blink/renderer/modules/mediastream/user_media_client.cc
index 1e912aa..377ab119 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_client.cc
+++ b/third_party/blink/renderer/modules/mediastream/user_media_client.cc
@@ -11,7 +11,7 @@
 #include "base/location.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/stringprintf.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/modules/mediastream/webrtc_uma_histograms.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -303,7 +303,7 @@
 blink::mojom::blink::MediaDevicesDispatcherHost*
 UserMediaClient::GetMediaDevicesDispatcher() {
   if (!media_devices_dispatcher_) {
-    frame_->GetInterfaceProvider().GetInterface(
+    frame_->GetBrowserInterfaceBroker().GetInterface(
         media_devices_dispatcher_.BindNewPipeAndPassReceiver());
   }
 
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client.h b/third_party/blink/renderer/modules/mediastream/user_media_client.h
index a4055e4..f6c403a87 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_client.h
+++ b/third_party/blink/renderer/modules/mediastream/user_media_client.h
@@ -13,7 +13,7 @@
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/blink/public/common/mediastream/media_devices.h"
-#include "third_party/blink/public/mojom/mediastream/media_devices.mojom-blink.h"
+#include "third_party/blink/public/mojom/mediastream/media_devices.mojom-blink-forward.h"
 #include "third_party/blink/public/web/web_user_media_request.h"
 #include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/modules/mediastream/apply_constraints_request.h"
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 878abd6..2434c36 100644
--- a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
+++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
@@ -17,7 +17,7 @@
 #include "base/strings/stringprintf.h"
 #include "media/base/audio_parameters.h"
 #include "media/capture/video_capture_types.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/common/mediastream/media_stream_controls.h"
 #include "third_party/blink/public/common/mediastream/media_stream_request.h"
 #include "third_party/blink/public/platform/modules/mediastream/media_stream_audio_source.h"
@@ -1694,7 +1694,7 @@
 blink::mojom::blink::MediaStreamDispatcherHost*
 UserMediaProcessor::GetMediaStreamDispatcherHost() {
   if (!dispatcher_host_) {
-    frame_->GetInterfaceProvider().GetInterface(
+    frame_->GetBrowserInterfaceBroker().GetInterface(
         dispatcher_host_.BindNewPipeAndPassReceiver());
   }
   return dispatcher_host_.get();
diff --git a/third_party/blink/renderer/modules/native_file_system/native_file_system_directory_iterator.h b/third_party/blink/renderer/modules/native_file_system/native_file_system_directory_iterator.h
index 50af82a..7a7200b 100644
--- a/third_party/blink/renderer/modules/native_file_system/native_file_system_directory_iterator.h
+++ b/third_party/blink/renderer/modules/native_file_system/native_file_system_directory_iterator.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_NATIVE_FILE_SYSTEM_NATIVE_FILE_SYSTEM_DIRECTORY_ITERATOR_H_
 
 #include "base/files/file.h"
-#include "third_party/blink/public/mojom/native_file_system/native_file_system_directory_handle.mojom-blink.h"
+#include "third_party/blink/public/mojom/native_file_system/native_file_system_directory_handle.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom-blink.h"
 #include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
diff --git a/third_party/blink/renderer/modules/native_file_system/native_file_system_error.cc b/third_party/blink/renderer/modules/native_file_system/native_file_system_error.cc
index dcbbcc1..8abe64a 100644
--- a/third_party/blink/renderer/modules/native_file_system/native_file_system_error.cc
+++ b/third_party/blink/renderer/modules/native_file_system/native_file_system_error.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/native_file_system/native_file_system_error.h"
 
+#include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_throw_dom_exception.h"
 #include "third_party/blink/renderer/core/dom/dom_exception.h"
diff --git a/third_party/blink/renderer/modules/native_file_system/native_file_system_error.h b/third_party/blink/renderer/modules/native_file_system/native_file_system_error.h
index ea63282..3620186 100644
--- a/third_party/blink/renderer/modules/native_file_system/native_file_system_error.h
+++ b/third_party/blink/renderer/modules/native_file_system/native_file_system_error.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_NATIVE_FILE_SYSTEM_NATIVE_FILE_SYSTEM_ERROR_H_
 
 #include "base/files/file.h"
-#include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom-blink.h"
+#include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom-blink-forward.h"
 
 namespace blink {
 class ScriptPromiseResolver;
diff --git a/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc b/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc
index 1375c01..7d9b73f 100644
--- a/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc
+++ b/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.cc
@@ -7,6 +7,7 @@
 #include <memory>
 #include <utility>
 
+#include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/array_buffer_or_array_buffer_view_or_blob_or_usv_string.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_blob.h"
diff --git a/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.h b/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.h
index 5c55dc4..f7de9e0 100644
--- a/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.h
+++ b/third_party/blink/renderer/modules/native_file_system/native_file_system_writer.h
@@ -6,7 +6,7 @@
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_NATIVE_FILE_SYSTEM_NATIVE_FILE_SYSTEM_WRITER_H_
 
 #include "mojo/public/cpp/bindings/remote.h"
-#include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom-blink.h"
+#include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/native_file_system/native_file_system_file_writer.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/array_buffer_or_array_buffer_view_or_blob_or_usv_string.h"
 #include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h"
diff --git a/third_party/blink/renderer/modules/notifications/notification.h b/third_party/blink/renderer/modules/notifications/notification.h
index 11347c6..b45101e 100644
--- a/third_party/blink/renderer/modules/notifications/notification.h
+++ b/third_party/blink/renderer/modules/notifications/notification.h
@@ -33,8 +33,8 @@
 
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "third_party/blink/public/mojom/notifications/notification_service.mojom-blink.h"
-#include "third_party/blink/public/mojom/permissions/permission.mojom-blink.h"
-#include "third_party/blink/public/mojom/permissions/permission_status.mojom-blink.h"
+#include "third_party/blink/public/mojom/permissions/permission.mojom-blink-forward.h"
+#include "third_party/blink/public/mojom/permissions/permission_status.mojom-blink-forward.h"
 #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
diff --git a/third_party/blink/renderer/modules/notifications/notification_resources_loader.cc b/third_party/blink/renderer/modules/notifications/notification_resources_loader.cc
index b583b7f..d5f838d 100644
--- a/third_party/blink/renderer/modules/notifications/notification_resources_loader.cc
+++ b/third_party/blink/renderer/modules/notifications/notification_resources_loader.cc
@@ -9,6 +9,7 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
+#include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/notifications/web_notification_constants.h"
 #include "third_party/blink/public/platform/web_size.h"
 #include "third_party/blink/renderer/platform/heap/persistent.h"
diff --git a/third_party/blink/renderer/modules/notifications/notification_resources_loader.h b/third_party/blink/renderer/modules/notifications/notification_resources_loader.h
index f676ac24..c772d11 100644
--- a/third_party/blink/renderer/modules/notifications/notification_resources_loader.h
+++ b/third_party/blink/renderer/modules/notifications/notification_resources_loader.h
@@ -7,7 +7,7 @@
 
 #include <memory>
 
-#include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
+#include "third_party/blink/public/mojom/notifications/notification.mojom-blink-forward.h"
 #include "third_party/blink/renderer/core/loader/threaded_icon_loader.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/modules/notifications/notification_resources_loader_test.cc b/third_party/blink/renderer/modules/notifications/notification_resources_loader_test.cc
index 35c6414..185e351 100644
--- a/third_party/blink/renderer/modules/notifications/notification_resources_loader_test.cc
+++ b/third_party/blink/renderer/modules/notifications/notification_resources_loader_test.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
 #include "third_party/blink/public/platform/modules/notifications/web_notification_constants.h"
 #include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
 #include "third_party/blink/renderer/core/testing/page_test_base.h"
diff --git a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h
index 8b2424e..ae6680b 100644
--- a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h
+++ b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h
@@ -9,7 +9,7 @@
 
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
-#include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
+#include "third_party/blink/public/mojom/notifications/notification.mojom-blink-forward.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/core/execution_context/context_lifecycle_observer.h"
 #include "third_party/blink/renderer/platform/heap/garbage_collected.h"
diff --git a/third_party/blink/renderer/modules/p2p/BUILD.gn b/third_party/blink/renderer/modules/p2p/BUILD.gn
new file mode 100644
index 0000000..4253a358
--- /dev/null
+++ b/third_party/blink/renderer/modules/p2p/BUILD.gn
@@ -0,0 +1,12 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//third_party/blink/renderer/modules/modules.gni")
+
+blink_modules_sources("p2p") {
+  sources = [
+    "port_allocator.cc",
+    "port_allocator.h",
+  ]
+}
diff --git a/third_party/blink/renderer/modules/p2p/DEPS b/third_party/blink/renderer/modules/p2p/DEPS
new file mode 100644
index 0000000..0e460b9
--- /dev/null
+++ b/third_party/blink/renderer/modules/p2p/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+    # TODO(crbug.com/787254): Remove use of GURL.
+    "+url/gurl.h",
+]
diff --git a/content/renderer/p2p/port_allocator.cc b/third_party/blink/renderer/modules/p2p/port_allocator.cc
similarity index 80%
rename from content/renderer/p2p/port_allocator.cc
rename to third_party/blink/renderer/modules/p2p/port_allocator.cc
index 00ee3bed..b12fadda 100644
--- a/content/renderer/p2p/port_allocator.cc
+++ b/third_party/blink/renderer/modules/p2p/port_allocator.cc
@@ -2,19 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/renderer/p2p/port_allocator.h"
+#include "third_party/blink/renderer/modules/p2p/port_allocator.h"
 
 #include <stdint.h>
 
 #include <memory>
 #include <utility>
 
-#include "base/command_line.h"
 #include "base/logging.h"
-#include "content/public/common/content_switches.h"
-#include "content/renderer/p2p/socket_dispatcher.h"
+#include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
 
-namespace content {
+namespace blink {
 
 P2PPortAllocator::P2PPortAllocator(
     const scoped_refptr<P2PSocketDispatcher>& socket_dispatcher,
@@ -44,9 +43,8 @@
   }
   set_flags(flags);
   set_allow_tcp_listen(false);
-  const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
   bool enable_webrtc_stun_origin =
-      cmd_line->HasSwitch(switches::kEnableWebRtcStunOrigin);
+      Platform::Current()->IsWebRtcStunOriginEnabled();
   if (enable_webrtc_stun_origin) {
     set_origin(origin_.spec());
   }
@@ -59,4 +57,4 @@
   network_manager_->Initialize();
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/content/renderer/p2p/port_allocator.h b/third_party/blink/renderer/modules/p2p/port_allocator.h
similarity index 83%
rename from content/renderer/p2p/port_allocator.h
rename to third_party/blink/renderer/modules/p2p/port_allocator.h
index ba335f72..0358e16 100644
--- a/content/renderer/p2p/port_allocator.h
+++ b/third_party/blink/renderer/modules/p2p/port_allocator.h
@@ -2,21 +2,22 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_RENDERER_P2P_PORT_ALLOCATOR_H_
-#define CONTENT_RENDERER_P2P_PORT_ALLOCATOR_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_P2P_PORT_ALLOCATOR_H_
+#define THIRD_PARTY_BLINK_RENDERER_MODULES_P2P_PORT_ALLOCATOR_H_
 
 #include <memory>
 
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
+#include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/webrtc/p2p/client/basic_port_allocator.h"
 #include "url/gurl.h"
 
-namespace content {
+namespace blink {
 
 class P2PSocketDispatcher;
 
-class P2PPortAllocator : public cricket::BasicPortAllocator {
+class MODULES_EXPORT P2PPortAllocator : public cricket::BasicPortAllocator {
  public:
   struct Config {
     // Enable non-proxied UDP-based transport when set to true. When set to
@@ -56,6 +57,6 @@
   DISALLOW_COPY_AND_ASSIGN(P2PPortAllocator);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_RENDERER_P2P_PORT_ALLOCATOR_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_MODULES_P2P_PORT_ALLOCATOR_H_
diff --git a/third_party/blink/renderer/modules/payments/abort_payment_respond_with_observer.h b/third_party/blink/renderer/modules/payments/abort_payment_respond_with_observer.h
index dd2844e..112e23f1 100644
--- a/third_party/blink/renderer/modules/payments/abort_payment_respond_with_observer.h
+++ b/third_party/blink/renderer/modules/payments/abort_payment_respond_with_observer.h
@@ -5,7 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_ABORT_PAYMENT_RESPOND_WITH_OBSERVER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_ABORT_PAYMENT_RESPOND_WITH_OBSERVER_H_
 
-#include "third_party/blink/public/mojom/service_worker/service_worker_error_type.mojom-blink.h"
+#include "third_party/blink/public/mojom/service_worker/service_worker_error_type.mojom-blink-forward.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/service_worker/respond_with_observer.h"
 
diff --git a/third_party/blink/renderer/modules/payments/basic_card_helper.h b/third_party/blink/renderer/modules/payments/basic_card_helper.h
index 239e305..67b7a83 100644
--- a/third_party/blink/renderer/modules/payments/basic_card_helper.h
+++ b/third_party/blink/renderer/modules/payments/basic_card_helper.h
@@ -5,7 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_BASIC_CARD_HELPER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_BASIC_CARD_HELPER_H_
 
-#include "third_party/blink/public/mojom/payments/payment_request.mojom-blink.h"
+#include "third_party/blink/public/mojom/payments/payment_request.mojom-blink-forward.h"
 #include "third_party/blink/renderer/platform/bindings/exception_state.h"
 #include "third_party/blink/renderer/platform/wtf/vector.h"
 
diff --git a/third_party/blink/renderer/modules/payments/can_make_payment_respond_with_observer.h b/third_party/blink/renderer/modules/payments/can_make_payment_respond_with_observer.h
index 6df64fdf..4adbd59 100644
--- a/third_party/blink/renderer/modules/payments/can_make_payment_respond_with_observer.h
+++ b/third_party/blink/renderer/modules/payments/can_make_payment_respond_with_observer.h
@@ -5,7 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_CAN_MAKE_PAYMENT_RESPOND_WITH_OBSERVER_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_CAN_MAKE_PAYMENT_RESPOND_WITH_OBSERVER_H_
 
-#include "third_party/blink/public/mojom/service_worker/service_worker_error_type.mojom-blink.h"
+#include "third_party/blink/public/mojom/service_worker/service_worker_error_type.mojom-blink-forward.h"
 #include "third_party/blink/renderer/modules/modules_export.h"
 #include "third_party/blink/renderer/modules/service_worker/respond_with_observer.h"
 
diff --git a/third_party/blink/renderer/modules/payments/payment_event_data_conversion.cc b/third_party/blink/renderer/modules/payments/payment_event_data_conversion.cc
index 14618ea..031ee99 100644
--- a/third_party/blink/renderer/modules/payments/payment_event_data_conversion.cc
+++ b/third_party/blink/renderer/modules/payments/payment_event_data_conversion.cc
@@ -4,6 +4,7 @@
 
 #include "third_party/blink/renderer/modules/payments/payment_event_data_conversion.h"
 
+#include "third_party/blink/public/mojom/payments/payment_app.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h"
 #include "third_party/blink/renderer/modules/payments/can_make_payment_event_init.h"
 #include "third_party/blink/renderer/modules/payments/payment_currency_amount.h"
diff --git a/third_party/blink/renderer/modules/payments/payment_event_data_conversion.h b/third_party/blink/renderer/modules/payments/payment_event_data_conversion.h
index 7fd5625a..c9d4999e 100644
--- a/third_party/blink/renderer/modules/payments/payment_event_data_conversion.h
+++ b/third_party/blink/renderer/modules/payments/payment_event_data_conversion.h
@@ -5,7 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_PAYMENT_EVENT_DATA_CONVERSION_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_PAYMENTS_PAYMENT_EVENT_DATA_CONVERSION_H_
 
-#include "third_party/blink/public/mojom/payments/payment_app.mojom-blink.h"
+#include "third_party/blink/public/mojom/payments/payment_app.mojom-blink-forward.h"
 #include "third_party/blink/renderer/modules/payments/can_make_payment_event_init.h"
 #include "third_party/blink/renderer/modules/payments/payment_request_event_init.h"
 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
diff --git a/third_party/blink/renderer/modules/payments/payment_event_data_conversion_test.cc b/third_party/blink/renderer/modules/payments/payment_event_data_conversion_test.cc
index 56fc024..dbb6d2ea 100644
--- a/third_party/blink/renderer/modules/payments/payment_event_data_conversion_test.cc
+++ b/third_party/blink/renderer/modules/payments/payment_event_data_conversion_test.cc
@@ -6,6 +6,7 @@
 
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/mojom/payments/payment_app.mojom-blink.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_value.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/BUILD.gn b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
index 57d4956..0e6bfea 100644
--- a/third_party/blink/renderer/modules/peerconnection/BUILD.gn
+++ b/third_party/blink/renderer/modules/peerconnection/BUILD.gn
@@ -53,6 +53,7 @@
     "call_setup_state_tracker.cc",
     "call_setup_state_tracker.h",
     "media_stream_remote_video_source.cc",
+    "peer_connection_dependency_factory.cc",
     "rtc_certificate.cc",
     "rtc_certificate.h",
     "rtc_data_channel.cc",
diff --git a/third_party/blink/renderer/modules/peerconnection/DEPS b/third_party/blink/renderer/modules/peerconnection/DEPS
index f84dc56..3256f78 100644
--- a/third_party/blink/renderer/modules/peerconnection/DEPS
+++ b/third_party/blink/renderer/modules/peerconnection/DEPS
@@ -1,5 +1,4 @@
 include_rules = [
-    "+services/metrics/public/cpp/ukm_builders.h",
     "-third_party/blink/renderer/modules",
     "+third_party/blink/renderer/modules/crypto",
     "+third_party/blink/renderer/modules/event_modules.h",
@@ -7,11 +6,18 @@
     "+third_party/blink/renderer/modules/mediastream",
     "+third_party/blink/renderer/modules/modules_export.h",
     "+third_party/blink/renderer/modules/peerconnection",
+    "+third_party/blink/renderer/modules/p2p",
+
+    "+crypto/openssl_util.h",
+    "+jingle/glue/thread_wrapper.h",
     "+media/base",
+    "+media/media_buildflags.h",
+    "+media/video/gpu_video_accelerator_factories.h",
     "+net/third_party/quiche/src/quic",
     "+net/quic/chromium",
     "+net/quic",
     "+net/test",
+    "+services/metrics/public/cpp/ukm_builders.h",
 ]
 
 specific_include_rules = {
diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
similarity index 93%
rename from content/renderer/media/webrtc/peer_connection_dependency_factory.cc
rename to third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
index 124f3579..9825c4d 100644
--- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
+++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.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 "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 
 #include <stddef.h>
 
@@ -15,15 +15,8 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
 #include "base/synchronization/waitable_event.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
-#include "content/renderer/p2p/ipc_socket_factory.h"
-#include "content/renderer/p2p/mdns_responder_adapter.h"
-#include "content/renderer/p2p/port_allocator.h"
-#include "content/renderer/p2p/socket_dispatcher.h"
 #include "crypto/openssl_util.h"
 #include "jingle/glue/thread_wrapper.h"
 #include "media/base/media_permission.h"
@@ -31,11 +24,7 @@
 #include "media/video/gpu_video_accelerator_factories.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/peerconnection/webrtc_ip_handling_policy.h"
-#include "third_party/blink/public/platform/modules/p2p/empty_network_manager.h"
-#include "third_party/blink/public/platform/modules/p2p/filtering_network_manager.h"
-#include "third_party/blink/public/platform/modules/p2p/ipc_network_manager.h"
 #include "third_party/blink/public/platform/modules/peerconnection/audio_codec_factory.h"
-#include "third_party/blink/public/platform/modules/peerconnection/video_codec_factory.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_media_constraints.h"
@@ -49,6 +38,15 @@
 #include "third_party/blink/public/web/modules/webrtc/webrtc_audio_device_impl.h"
 #include "third_party/blink/public/web/web_document.h"
 #include "third_party/blink/public/web/web_local_frame.h"
+#include "third_party/blink/renderer/modules/p2p/port_allocator.h"
+#include "third_party/blink/renderer/platform/p2p/empty_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/filtering_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/ipc_socket_factory.h"
+#include "third_party/blink/renderer/platform/p2p/mdns_responder_adapter.h"
+#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
+#include "third_party/blink/renderer/platform/peerconnection/stun_field_trial.h"
+#include "third_party/blink/renderer/platform/peerconnection/video_codec_factory.h"
 #include "third_party/webrtc/api/call/call_factory_interface.h"
 #include "third_party/webrtc/api/peer_connection_interface.h"
 #include "third_party/webrtc/api/rtc_event_log/rtc_event_log_factory.h"
@@ -62,7 +60,7 @@
 #include "third_party/webrtc/rtc_base/ssl_adapter.h"
 #include "third_party/webrtc_overrides/task_queue_factory.h"
 
-namespace content {
+namespace blink {
 
 namespace {
 
@@ -128,6 +126,13 @@
   DCHECK(!pc_factory_);
 }
 
+PeerConnectionDependencyFactory*
+PeerConnectionDependencyFactory::GetInstance() {
+  DEFINE_STATIC_LOCAL(PeerConnectionDependencyFactory, instance,
+                      (/*create_p2p_socket_dispatcher= */ true));
+  return &instance;
+}
+
 std::unique_ptr<blink::WebRTCPeerConnectionHandler>
 PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler(
     blink::WebRTCPeerConnectionHandlerClient* client,
@@ -334,7 +339,7 @@
 }
 
 bool PeerConnectionDependencyFactory::PeerConnectionFactoryCreated() {
-  return pc_factory_.get() != nullptr;
+  return !!pc_factory_;
 }
 
 scoped_refptr<webrtc::PeerConnectionInterface>
@@ -431,8 +436,14 @@
     }
   }
 
+  // Now that this file is within Blink, it can not rely on WebURL's
+  // GURL() operator directly. Hence, as per the comment on gurl.h, the
+  // following GURL ctor is used instead.
+  WebURL document_url = web_frame->GetDocument().Url();
   const GURL& requesting_origin =
-      GURL(web_frame->GetDocument().Url()).GetOrigin();
+      GURL(document_url.GetString().Utf8(), document_url.GetParsed(),
+           document_url.IsValid())
+          .GetOrigin();
 
   std::unique_ptr<rtc::NetworkManager> network_manager;
   if (port_config.enable_multiple_routes) {
@@ -491,10 +502,9 @@
 }
 
 webrtc::IceCandidateInterface*
-PeerConnectionDependencyFactory::CreateIceCandidate(
-    const std::string& sdp_mid,
-    int sdp_mline_index,
-    const std::string& sdp) {
+PeerConnectionDependencyFactory::CreateIceCandidate(const std::string& sdp_mid,
+                                                    int sdp_mline_index,
+                                                    const std::string& sdp) {
   return webrtc::CreateIceCandidate(sdp_mid, sdp_mline_index, sdp, nullptr);
 }
 
@@ -634,4 +644,4 @@
   return nullptr;
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
index d2a2c69..26e4ca3 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.h"
 
 #include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/renderer/core/dom/document.h"
 #include "third_party/blink/renderer/core/dom/events/event.h"
@@ -88,8 +89,13 @@
     DCHECK(!port_allocator_);
     DCHECK(!worker_thread_rtc_thread_);
     DCHECK(!async_resolver_factory_);
-    port_allocator_ = Platform::Current()->CreateWebRtcPortAllocator(
+
+    auto* rtc_dependency_factory =
+        blink::PeerConnectionDependencyFactory::GetInstance();
+    rtc_dependency_factory->EnsureInitialized();
+    port_allocator_ = rtc_dependency_factory->CreatePortAllocator(
         frame.Client()->GetWebFrame());
+
     async_resolver_factory_ =
         Platform::Current()->CreateWebRtcAsyncResolverFactory();
     worker_thread_rtc_thread_ =
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
index 76b82656..158e3c8 100644
--- a/third_party/blink/renderer/platform/BUILD.gn
+++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -1227,16 +1227,31 @@
     "mojo/canonical_cookie_mojom_traits.cc",
     "mojo/canonical_cookie_mojom_traits.h",
     "mojo/fetch_api_request_headers_mojom_traits.h",
-    "mojo/interface_invalidator.cc",
-    "mojo/interface_invalidator.h",
     "mojo/mojo_helper.h",
-    "mojo/revocable_interface_ptr.h",
     "mojo/string16_mojom_traits.cc",
     "mojo/string16_mojom_traits.h",
     "p2p/empty_network_manager.cc",
+    "p2p/empty_network_manager.h",
     "p2p/filtering_network_manager.cc",
+    "p2p/filtering_network_manager.h",
+    "p2p/host_address_request.cc",
+    "p2p/host_address_request.h",
     "p2p/ipc_network_manager.cc",
+    "p2p/ipc_network_manager.h",
+    "p2p/ipc_socket_factory.cc",
+    "p2p/ipc_socket_factory.h",
+    "p2p/mdns_responder_adapter.cc",
+    "p2p/mdns_responder_adapter.h",
+    "p2p/network_list_manager.h",
+    "p2p/network_list_observer.h",
     "p2p/network_manager_uma.cc",
+    "p2p/network_manager_uma.h",
+    "p2p/socket_client.h",
+    "p2p/socket_client_delegate.h",
+    "p2p/socket_client_impl.cc",
+    "p2p/socket_client_impl.h",
+    "p2p/socket_dispatcher.cc",
+    "p2p/socket_dispatcher.h",
     "peerconnection/audio_codec_factory.cc",
     "peerconnection/rtc_answer_options_platform.h",
     "peerconnection/rtc_dtmf_sender_handler.cc",
@@ -1261,9 +1276,11 @@
     "peerconnection/rtc_video_encoder_factory.h",
     "peerconnection/rtc_void_request.h",
     "peerconnection/stun_field_trial.cc",
+    "peerconnection/stun_field_trial.h",
     "peerconnection/transmission_encoding_info_handler.cc",
     "peerconnection/transmission_encoding_info_handler.h",
     "peerconnection/video_codec_factory.cc",
+    "peerconnection/video_codec_factory.h",
     "peerconnection/webrtc_audio_sink.cc",
     "peerconnection/webrtc_video_track_source.cc",
     "prerender.cc",
@@ -1451,6 +1468,7 @@
   deps = [
     ":platform_export",
     "//base/allocator:buildflags",
+    "//components/paint_preview/common",
     "//components/viz/client",
     "//components/viz/common",
     "//crypto",
@@ -1824,7 +1842,6 @@
     "mhtml/mhtml_parser_test.cc",
     "mojo/big_string_mojom_traits_test.cc",
     "mojo/geometry_mojom_traits_test.cc",
-    "mojo/interface_invalidator_test.cc",
     "mojo/kurl_security_origin_test.cc",
     "mojo/string16_mojom_traits_test.cc",
     "p2p/filtering_network_manager_test.cc",
diff --git a/third_party/blink/renderer/platform/graphics/DEPS b/third_party/blink/renderer/platform/graphics/DEPS
index 5647769..37eff60 100644
--- a/third_party/blink/renderer/platform/graphics/DEPS
+++ b/third_party/blink/renderer/platform/graphics/DEPS
@@ -11,6 +11,7 @@
     "+base/barrier_closure.h",
     "+base/callback_helpers.h",
     "+cc",
+    "+components/paint_preview/common",
     "+components/viz/client",
     "+components/viz/common",
     "+gpu/config",
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.cc b/third_party/blink/renderer/platform/graphics/graphics_context.cc
index a822cd3..2976ccd 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_context.cc
+++ b/third_party/blink/renderer/platform/graphics/graphics_context.cc
@@ -30,6 +30,7 @@
 
 #include "base/optional.h"
 #include "build/build_config.h"
+#include "components/paint_preview/common/paint_preview_tracker.h"
 #include "skia/ext/platform_canvas.h"
 #include "third_party/blink/renderer/platform/fonts/text_run_paint_info.h"
 #include "third_party/blink/renderer/platform/geometry/float_rect.h"
@@ -89,12 +90,14 @@
 
 GraphicsContext::GraphicsContext(PaintController& paint_controller,
                                  DisabledMode disable_context_or_painting,
-                                 printing::MetafileSkia* metafile)
+                                 printing::MetafileSkia* metafile,
+                                 paint_preview::PaintPreviewTracker* tracker)
     : canvas_(nullptr),
       paint_controller_(paint_controller),
       paint_state_stack_(),
       paint_state_index_(0),
       metafile_(metafile),
+      tracker_(tracker),
 #if DCHECK_IS_ON()
       layer_count_(0),
       disable_destruction_checks_(false),
@@ -1368,6 +1371,12 @@
     return;
   DCHECK(canvas_);
 
+  // Intercept URL rects when painting previews.
+  if (IsPaintingPreview() && tracker_) {
+    tracker_->AnnotateLink(link.GetString().Utf8(), dest_rect);
+    return;
+  }
+
   sk_sp<SkData> url(SkData::MakeWithCString(link.GetString().Utf8().c_str()));
   canvas_->Annotate(cc::PaintCanvas::AnnotationType::URL, dest_rect,
                     std::move(url));
@@ -1379,6 +1388,12 @@
     return;
   DCHECK(canvas_);
 
+  // Intercept URL rects when painting previews.
+  if (IsPaintingPreview() && tracker_) {
+    tracker_->AnnotateLink(dest_name.Utf8(), rect);
+    return;
+  }
+
   sk_sp<SkData> sk_dest_name(SkData::MakeWithCString(dest_name.Utf8().c_str()));
   canvas_->Annotate(cc::PaintCanvas::AnnotationType::LINK_TO_DESTINATION, rect,
                     std::move(sk_dest_name));
diff --git a/third_party/blink/renderer/platform/graphics/graphics_context.h b/third_party/blink/renderer/platform/graphics/graphics_context.h
index 950e1f4..5a42e81 100644
--- a/third_party/blink/renderer/platform/graphics/graphics_context.h
+++ b/third_party/blink/renderer/platform/graphics/graphics_context.h
@@ -53,6 +53,10 @@
 class SkRRect;
 struct SkRect;
 
+namespace paint_preview {
+class PaintPreviewTracker;
+}  // namespace paint_preview
+
 namespace blink {
 
 class FloatRect;
@@ -74,7 +78,8 @@
 
   explicit GraphicsContext(PaintController&,
                            DisabledMode = kNothingDisabled,
-                           printing::MetafileSkia* = nullptr);
+                           printing::MetafileSkia* = nullptr,
+                           paint_preview::PaintPreviewTracker* = nullptr);
 
   ~GraphicsContext();
 
@@ -161,6 +166,19 @@
   bool Printing() const { return printing_; }
   void SetPrinting(bool printing) { printing_ = printing; }
 
+  // Returns if the context is saving a paint preview instead of displaying.
+  // In such cases, clipping should not occur.
+  bool IsPaintingPreview() const { return is_painting_preview_; }
+  void SetIsPaintingPreview(bool is_painting_preview) {
+    is_painting_preview_ = is_painting_preview;
+  }
+
+  // Returns if the context is printing or painting a preview. Many of the
+  // behaviors required for printing and paint previews are shared.
+  bool IsPrintingOrPaintingPreview() const {
+    return Printing() || IsPaintingPreview();
+  }
+
   SkColorFilter* GetColorFilter() const;
   void SetColorFilter(ColorFilter);
   // ---------- End state management methods -----------------
@@ -498,6 +516,7 @@
   PaintRecorder paint_recorder_;
 
   printing::MetafileSkia* metafile_;
+  paint_preview::PaintPreviewTracker* tracker_;
 
 #if DCHECK_IS_ON()
   int layer_count_;
@@ -512,6 +531,7 @@
   DarkModeFilter dark_mode_filter_;
 
   unsigned printing_ : 1;
+  unsigned is_painting_preview_ : 1;
   unsigned in_drawing_recorder_ : 1;
 
   DISALLOW_COPY_AND_ASSIGN(GraphicsContext);
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc
index 6b690463..b7b3241 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.cc
@@ -10,9 +10,11 @@
 
 namespace blink {
 
-PaintRecordBuilder::PaintRecordBuilder(printing::MetafileSkia* metafile,
-                                       GraphicsContext* containing_context,
-                                       PaintController* paint_controller)
+PaintRecordBuilder::PaintRecordBuilder(
+    printing::MetafileSkia* metafile,
+    GraphicsContext* containing_context,
+    PaintController* paint_controller,
+    paint_preview::PaintPreviewTracker* tracker)
     : paint_controller_(nullptr) {
   GraphicsContext::DisabledMode disabled_mode =
       GraphicsContext::kNothingDisabled;
@@ -30,12 +32,13 @@
   paint_controller_->UpdateCurrentPaintChunkProperties(
       base::nullopt, PropertyTreeState::Root());
 
-  context_ = std::make_unique<GraphicsContext>(*paint_controller_,
-                                               disabled_mode, metafile);
+  context_ = std::make_unique<GraphicsContext>(
+      *paint_controller_, disabled_mode, metafile, tracker);
   if (containing_context) {
     context_->SetDarkMode(containing_context->dark_mode_settings());
     context_->SetDeviceScaleFactor(containing_context->DeviceScaleFactor());
     context_->SetPrinting(containing_context->Printing());
+    context_->SetIsPaintingPreview(containing_context->IsPaintingPreview());
   }
 }
 
diff --git a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.h b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.h
index 521dd79c..42631cf 100644
--- a/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.h
+++ b/third_party/blink/renderer/platform/graphics/paint/paint_record_builder.h
@@ -19,12 +19,15 @@
 class PaintCanvas;
 }
 
+namespace paint_preview {
+class PaintPreviewTracker;
+}
+
 namespace blink {
 class GraphicsContext;
 class PaintController;
 
 class PLATFORM_EXPORT PaintRecordBuilder final : public DisplayItemClient {
-
  public:
   // Constructs a new builder for the resulting paint record. If |metadata|
   // is specified, that metadata is propagated to the builder's internal canvas.
@@ -39,7 +42,8 @@
   // CompositeAfterPaint.
   PaintRecordBuilder(printing::MetafileSkia* metafile = nullptr,
                      GraphicsContext* containing_context = nullptr,
-                     PaintController* = nullptr);
+                     PaintController* = nullptr,
+                     paint_preview::PaintPreviewTracker* tracker = nullptr);
   ~PaintRecordBuilder() override;
 
   GraphicsContext& Context() { return *context_; }
diff --git a/third_party/blink/renderer/platform/mojo/interface_invalidator.cc b/third_party/blink/renderer/platform/mojo/interface_invalidator.cc
deleted file mode 100644
index a0bde42cf..0000000
--- a/third_party/blink/renderer/platform/mojo/interface_invalidator.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "third_party/blink/renderer/platform/mojo/interface_invalidator.h"
-
-namespace blink {
-
-InterfaceInvalidator::InterfaceInvalidator() {}
-
-InterfaceInvalidator::~InterfaceInvalidator() {
-  weak_factory_.InvalidateWeakPtrs();
-  NotifyInvalidate();
-}
-
-void InterfaceInvalidator::AddObserver(Observer* observer) {
-  DCHECK(observer);
-  observers_.AddObserver(observer);
-}
-
-void InterfaceInvalidator::RemoveObserver(const Observer* observer) {
-  DCHECK(observer);
-  observers_.RemoveObserver(observer);
-}
-
-base::WeakPtr<InterfaceInvalidator> InterfaceInvalidator::GetWeakPtr() {
-  return weak_factory_.GetWeakPtr();
-}
-
-void InterfaceInvalidator::NotifyInvalidate() {
-  for (auto& observer : observers_)
-    observer.OnInvalidate();
-}
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/platform/mojo/interface_invalidator.h b/third_party/blink/renderer/platform/mojo/interface_invalidator.h
deleted file mode 100644
index e6e815b..0000000
--- a/third_party/blink/renderer/platform/mojo/interface_invalidator.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_INTERFACE_INVALIDATOR_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_INTERFACE_INVALIDATOR_H_
-
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
-#include "third_party/blink/renderer/platform/platform_export.h"
-#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
-
-namespace blink {
-
-// Notifies weak interface bindings to be invalidated when this object is
-// destroyed.
-class PLATFORM_EXPORT InterfaceInvalidator {
-  USING_FAST_MALLOC(InterfaceInvalidator);
-
- public:
-  InterfaceInvalidator();
-  ~InterfaceInvalidator();
-
-  class Observer {
-   public:
-    virtual void OnInvalidate() = 0;
-  };
-
-  void AddObserver(Observer*);
-  void RemoveObserver(const Observer*);
-
-  base::WeakPtr<InterfaceInvalidator> GetWeakPtr();
-
- private:
-  void NotifyInvalidate();
-
-  base::ObserverList<Observer>::Unchecked observers_;
-  base::WeakPtrFactory<InterfaceInvalidator> weak_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(InterfaceInvalidator);
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_INTERFACE_INVALIDATOR_H_
diff --git a/third_party/blink/renderer/platform/mojo/interface_invalidator_test.cc b/third_party/blink/renderer/platform/mojo/interface_invalidator_test.cc
deleted file mode 100644
index 4f6d275..0000000
--- a/third_party/blink/renderer/platform/mojo/interface_invalidator_test.cc
+++ /dev/null
@@ -1,344 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <memory>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/macros.h"
-#include "base/run_loop.h"
-#include "base/test/bind_test_util.h"
-#include "base/test/task_environment.h"
-#include "mojo/public/cpp/bindings/interface_ptr.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/interfaces/bindings/tests/ping_service.mojom-blink.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/mojo/interface_invalidator.h"
-#include "third_party/blink/renderer/platform/mojo/revocable_interface_ptr.h"
-
-namespace blink {
-
-namespace {
-
-void DoSetFlag(bool* flag) {
-  *flag = true;
-}
-
-class PingServiceImplBase : public mojo::test::blink::PingService {
- public:
-  PingServiceImplBase(bool send_response = true)
-      : send_response_(send_response) {}
-  ~PingServiceImplBase() override {}
-
-  // mojo::test::blink::PingService:
-  void Ping(PingCallback callback) override {
-    if (ping_handler_)
-      ping_handler_.Run();
-
-    if (send_response_) {
-      std::move(callback).Run();
-    } else {
-      saved_callback_ = std::move(callback);
-    }
-
-    if (post_ping_handler_)
-      post_ping_handler_.Run();
-  }
-
-  void set_ping_handler(const base::RepeatingClosure& handler) {
-    ping_handler_ = handler;
-  }
-
-  void set_post_ping_handler(const base::RepeatingClosure& handler) {
-    post_ping_handler_ = handler;
-  }
-
- private:
-  bool send_response_;
-  PingCallback saved_callback_;
-  base::RepeatingClosure ping_handler_;
-  base::RepeatingClosure post_ping_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(PingServiceImplBase);
-};
-
-class PingServiceImpl : public PingServiceImplBase {
- public:
-  PingServiceImpl(
-      mojo::PendingReceiver<mojo::test::blink::PingService> receiver,
-      bool send_response = true)
-      : PingServiceImplBase(send_response),
-        error_handler_called_(false),
-        receiver_(this, std::move(receiver)) {
-    receiver_.set_disconnect_handler(
-        base::BindOnce(DoSetFlag, &error_handler_called_));
-  }
-
-  ~PingServiceImpl() override {}
-
-  bool error_handler_called() { return error_handler_called_; }
-
-  mojo::Receiver<mojo::test::blink::PingService>* receiver() {
-    return &receiver_;
-  }
-
- private:
-  bool error_handler_called_;
-  mojo::Receiver<mojo::test::blink::PingService> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(PingServiceImpl);
-};
-
-class InterfaceInvalidatorTest : public testing::Test {
- public:
-  InterfaceInvalidatorTest() {}
-  ~InterfaceInvalidatorTest() override {}
-
- private:
-  base::test::TaskEnvironment task_environment_;
-
-  DISALLOW_COPY_AND_ASSIGN(InterfaceInvalidatorTest);
-};
-
-class InterfaceInvalidatorObserver : public InterfaceInvalidator::Observer {
- public:
-  InterfaceInvalidatorObserver(const base::RepeatingClosure& handler) {
-    invalidate_handler_ = handler;
-  }
-  ~InterfaceInvalidatorObserver() {}
-
-  void OnInvalidate() override { invalidate_handler_.Run(); }
-
- private:
-  base::RepeatingClosure invalidate_handler_;
-
-  DISALLOW_COPY_AND_ASSIGN(InterfaceInvalidatorObserver);
-};
-
-TEST_F(InterfaceInvalidatorTest, DestroyNotifiesObservers) {
-  int called = 0;
-  auto inc_called_cb = base::BindLambdaForTesting([&] { ++called; });
-  InterfaceInvalidatorObserver observer1(inc_called_cb);
-  InterfaceInvalidatorObserver observer2(inc_called_cb);
-  {
-    InterfaceInvalidator invalidator;
-    invalidator.AddObserver(&observer1);
-    invalidator.AddObserver(&observer2);
-    EXPECT_EQ(called, 0);
-  }
-  EXPECT_EQ(called, 2);
-}
-
-TEST_F(InterfaceInvalidatorTest, DestroyInvalidatesRevocableInterfacePtr) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  bool ping_called = false;
-  wptr->Ping(base::BindRepeating(DoSetFlag, &ping_called));
-  base::RunLoop().RunUntilIdle();
-  ASSERT_TRUE(ping_called);
-
-  bool error_handler_called = false;
-  wptr.set_connection_error_handler(
-      base::BindOnce(DoSetFlag, &error_handler_called));
-
-  invalidator.reset();
-  impl.set_ping_handler(base::BindRepeating([] { FAIL(); }));
-  wptr->Ping(base::BindRepeating([] { FAIL(); }));
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(error_handler_called);
-  EXPECT_TRUE(impl.error_handler_called());
-  EXPECT_TRUE(wptr.encountered_error());
-  EXPECT_TRUE(wptr);
-}
-
-TEST_F(InterfaceInvalidatorTest, InvalidateAfterMessageSent) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  bool called = false;
-  impl.set_ping_handler(base::BindRepeating(DoSetFlag, &called));
-  // The passed in callback will not be called as the interface is invalidated
-  // before a response can come back.
-  wptr->Ping(base::BindRepeating([] { FAIL(); }));
-  invalidator.reset();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(called);
-  EXPECT_TRUE(impl.error_handler_called());
-}
-
-TEST_F(InterfaceInvalidatorTest, PassInterfaceThenInvalidate) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  bool impl_called = false;
-  impl.set_ping_handler(base::BindRepeating(DoSetFlag, &impl_called));
-  wptr.set_connection_error_handler(base::BindOnce([] { FAIL(); }));
-
-  mojo::test::blink::PingServicePtr ptr(wptr.PassInterface());
-  invalidator.reset();
-  bool ping_called = false;
-  ptr->Ping(base::BindRepeating(DoSetFlag, &ping_called));
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_TRUE(ping_called);
-  EXPECT_TRUE(impl_called);
-  EXPECT_FALSE(impl.error_handler_called());
-}
-
-TEST_F(InterfaceInvalidatorTest, PassInterfaceOfInvalidatedPtr) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  impl.set_ping_handler(base::BindRepeating([] { FAIL(); }));
-  bool error_handler_called = false;
-  wptr.set_connection_error_handler(
-      base::BindOnce(DoSetFlag, &error_handler_called));
-
-  // This also destroys the original invalidator.
-  invalidator = std::make_unique<InterfaceInvalidator>();
-  base::RunLoop().RunUntilIdle();
-  ASSERT_TRUE(error_handler_called);
-  ASSERT_TRUE(impl.error_handler_called());
-
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr2(
-      wptr.PassInterface(), invalidator.get(),
-      blink::scheduler::GetSingleThreadTaskRunnerForTesting());
-  wptr2->Ping(base::BindRepeating([] { FAIL(); }));
-  base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(InterfaceInvalidatorTest,
-       PassInterfaceBeforeConnectionErrorNotification) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  impl.set_ping_handler(base::BindRepeating([] { FAIL(); }));
-  wptr.set_connection_error_handler(base::BindOnce([] { FAIL(); }));
-
-  // This also destroys the original invalidator.
-  invalidator = std::make_unique<InterfaceInvalidator>();
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr2(
-      wptr.PassInterface(), invalidator.get(),
-      blink::scheduler::GetSingleThreadTaskRunnerForTesting());
-  wptr2->Ping(base::BindRepeating([] { FAIL(); }));
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(impl.error_handler_called());
-}
-
-TEST_F(InterfaceInvalidatorTest, InvalidateAfterReset) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-  wptr.set_connection_error_handler(base::BindOnce([] { FAIL(); }));
-
-  wptr.reset();
-  invalidator.reset();
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_FALSE(wptr);
-}
-
-TEST_F(InterfaceInvalidatorTest, ResetInvalidatedRevocableInterfacePtr) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-  wptr.set_connection_error_handler(base::BindOnce([] { FAIL(); }));
-
-  invalidator.reset();
-  wptr.reset();
-  base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(InterfaceInvalidatorTest, InvalidateErroredPtr) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  int called = 0;
-  wptr.set_connection_error_handler(
-      base::BindLambdaForTesting([&] { called++; }));
-
-  impl.receiver()->reset();
-  base::RunLoop().RunUntilIdle();
-  invalidator.reset();
-  base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(called, 1);
-  EXPECT_FALSE(impl.error_handler_called());
-}
-
-// InterfacePtrs do not set up a proxy until they are used for the first
-// time.
-TEST_F(InterfaceInvalidatorTest, InvalidateBeforeProxyConfigured) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  invalidator.reset();
-  wptr->Ping(base::BindRepeating([] { FAIL(); }));
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(impl.error_handler_called());
-}
-
-TEST_F(InterfaceInvalidatorTest, MoveChangesInvalidatorObserver) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  auto wptr2(std::move(wptr));
-  bool called = false;
-  wptr2.set_connection_error_handler(base::BindOnce(DoSetFlag, &called));
-
-  invalidator.reset();
-  wptr2->Ping(base::BindRepeating([] { FAIL(); }));
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(called);
-  EXPECT_TRUE(impl.error_handler_called());
-}
-
-TEST_F(InterfaceInvalidatorTest, MoveInvalidatedPointer) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  invalidator.reset();
-  auto wptr2(std::move(wptr));
-  wptr2->Ping(base::BindRepeating([] { FAIL(); }));
-  base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(InterfaceInvalidatorTest, InvalidateRevocableInterfacePtrDuringSyncIPC) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()));
-
-  impl.set_ping_handler(
-      base::BindLambdaForTesting([&]() { invalidator.reset(); }));
-  bool result = wptr->Ping();
-  EXPECT_FALSE(result);
-}
-
-TEST_F(InterfaceInvalidatorTest,
-       InvalidateRevocableInterfacePtrDuringSyncIPCWithoutResponse) {
-  RevocableInterfacePtr<mojo::test::blink::PingService> wptr;
-  auto invalidator = std::make_unique<InterfaceInvalidator>();
-  PingServiceImpl impl(MakeRequest(&wptr, invalidator.get()),
-                       false /* send_response */);
-
-  impl.set_ping_handler(
-      base::BindLambdaForTesting([&]() { invalidator.reset(); }));
-  bool result = wptr->Ping();
-  EXPECT_FALSE(result);
-}
-
-}  // namespace
-
-}  // namespace blink
diff --git a/third_party/blink/renderer/platform/mojo/revocable_interface_ptr.h b/third_party/blink/renderer/platform/mojo/revocable_interface_ptr.h
deleted file mode 100644
index 34bad3f..0000000
--- a/third_party/blink/renderer/platform/mojo/revocable_interface_ptr.h
+++ /dev/null
@@ -1,241 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_REVOCABLE_INTERFACE_PTR_H_
-#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_REVOCABLE_INTERFACE_PTR_H_
-
-#include <stdint.h>
-
-#include <cstddef>
-#include <string>
-#include <utility>
-
-#include "base/callback_forward.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
-#include "base/single_thread_task_runner.h"
-#include "mojo/public/cpp/bindings/connection_error_callback.h"
-#include "mojo/public/cpp/bindings/interface_ptr_info.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
-#include "mojo/public/cpp/bindings/lib/interface_ptr_state.h"
-#include "third_party/blink/renderer/platform/mojo/interface_invalidator.h"
-
-namespace blink {
-
-// RevocableInterfacePtr is a wrapper around an InterfacePtr that has to be tied
-// to an InterfaceInvalidator when bound to a message pipe. The underlying
-// connection is closed once the InterfaceInvalidator is destroyed and the
-// interface will behave as if its peer had closed the connection. This is
-// useful for tying the lifetime of interface pointers to another object.
-template <typename Interface>
-class RevocableInterfacePtr : public InterfaceInvalidator::Observer {
- public:
-  using PtrType = mojo::InterfacePtr<Interface>;
-  using PtrInfoType = mojo::InterfacePtrInfo<Interface>;
-  using Proxy = typename Interface::Proxy_;
-
-  // Constructs an unbound RevocableInterfacePtr.
-  RevocableInterfacePtr() {}
-  RevocableInterfacePtr(std::nullptr_t) {}
-
-  // Takes over the binding of another RevocableInterfacePtr.
-  RevocableInterfacePtr(RevocableInterfacePtr&& other) {
-    interface_ptr_ = std::move(other.interface_ptr_);
-    SetInvalidator(other.invalidator_.get());
-    // Reset the other interface ptr to remove it as an observer of the
-    // invalidator.
-    other.reset();
-  }
-
-  RevocableInterfacePtr(
-      PtrInfoType info,
-      InterfaceInvalidator* invalidator,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
-    Bind(std::move(info), invalidator, task_runner);
-  }
-
-  // Takes over the binding of another RevocableInterfacePtr, and closes any
-  // message pipe already bound to this pointer.
-  RevocableInterfacePtr& operator=(RevocableInterfacePtr&& other) {
-    reset();
-    interface_ptr_ = std::move(other.interface_ptr_);
-    SetInvalidator(other.invalidator_.get());
-    // Reset the other interface ptr to remove it as an observer of the
-    // invalidator.
-    other.reset();
-    return *this;
-  }
-
-  // Assigning nullptr to this class causes it to close the currently bound
-  // message pipe (if any) and returns the pointer to the unbound state.
-  RevocableInterfacePtr& operator=(std::nullptr_t) {
-    reset();
-    return *this;
-  }
-
-  // Closes the bound message pipe (if any) on destruction.
-  ~RevocableInterfacePtr() {
-    if (invalidator_) {
-      invalidator_->RemoveObserver(this);
-    }
-  }
-
-  // Binds the RevocableInterfacePtr to a remote implementation of Interface.
-  //
-  // Calling with an invalid |info| (containing an invalid message pipe handle)
-  // has the same effect as reset(). In this case, the InterfacePtr is not
-  // considered as bound.
-  //
-  // |runner| must belong to the same thread. It will be used to dispatch all
-  // callbacks and connection error notification. It is useful when you attach
-  // multiple task runners to a single thread for the purposes of task
-  // scheduling.
-  void Bind(PtrInfoType info,
-            InterfaceInvalidator* invalidator,
-            scoped_refptr<base::SingleThreadTaskRunner> runner = nullptr) {
-    DCHECK(invalidator);
-    reset();
-    if (info.is_valid()) {
-      interface_ptr_.Bind(std::move(info), std::move(runner));
-      invalidator_ = invalidator->GetWeakPtr();
-      invalidator_->AddObserver(this);
-    }
-  }
-
-  // Returns a raw pointer to the local proxy. Caller does not take ownership.
-  // Note that the local proxy is thread hostile, as stated above.
-  Proxy* get() const { return interface_ptr_.get(); }
-
-  // Functions like a pointer to Interface. Must already be bound.
-  Proxy* operator->() const { return get(); }
-  Proxy& operator*() const { return *get(); }
-
-  // Returns the version number of the interface that the remote side supports.
-  uint32_t version() const { return interface_ptr_.version(); }
-
-  // Queries the max version that the remote side supports. On completion, the
-  // result will be returned as the input of |callback|. The version number of
-  // this interface pointer will also be updated.
-  void QueryVersion(const base::RepeatingCallback<void(uint32_t)>& callback) {
-    interface_ptr_.QueryVersion(callback);
-  }
-
-  // If the remote side doesn't support the specified version, it will close its
-  // end of the message pipe asynchronously. This does nothing if it's already
-  // known that the remote side supports the specified version, i.e., if
-  // |version <= this->version()|.
-  //
-  // After calling RequireVersion() with a version not supported by the remote
-  // side, all subsequent calls to interface methods will be ignored.
-  void RequireVersion(uint32_t version) {
-    interface_ptr_.RequireVersion(version);
-  }
-
-  // Sends a no-op message on the underlying message pipe and runs the current
-  // message loop until its response is received. This can be used in tests to
-  // verify that no message was sent on a message pipe in response to some
-  // stimulus.
-  void FlushForTesting() { interface_ptr_.FlushForTesting(); }
-
-  // Closes the bound message pipe, if any.
-  void reset() {
-    interface_ptr_.reset();
-    SetInvalidator(nullptr);
-  }
-
-  // Similar to the method above, but also specifies a disconnect reason.
-  void ResetWithReason(uint32_t custom_reason, const std::string& description) {
-    interface_ptr_.ResetWithReason(custom_reason, description);
-    SetInvalidator(nullptr);
-  }
-
-  // Whether there are any associated interfaces running on the pipe currently.
-  bool HasAssociatedInterfaces() const {
-    return interface_ptr_.HasAssociatedInterfaces();
-  }
-
-  // Indicates whether the message pipe has encountered an error. If true,
-  // method calls made on this interface will be dropped (and may already have
-  // been dropped).
-  bool encountered_error() const { return interface_ptr_.encountered_error(); }
-
-  // Registers a handler to receive error notifications. The handler will be
-  // called from the sequence that owns this RevocableInterfacePtr.
-  //
-  // This method may only be called after the RevocableInterfacePtr has been
-  // bound to a message pipe.
-  void set_connection_error_handler(base::OnceClosure error_handler) {
-    interface_ptr_.set_connection_error_handler(std::move(error_handler));
-  }
-
-  void set_connection_error_with_reason_handler(
-      mojo::ConnectionErrorWithReasonCallback error_handler) {
-    interface_ptr_.set_connection_error_with_reason_handler(
-        std::move(error_handler));
-  }
-
-  // Unbinds the RevocableInterfacePtr and returns the information which could
-  // be used to setup a RevocableInterfacePtr again. See comments on
-  // InterfacePtr::PassInterface for details.
-  PtrInfoType PassInterface() {
-    SetInvalidator(nullptr);
-    return interface_ptr_.PassInterface();
-  }
-
-  bool operator==(const RevocableInterfacePtr& other) const {
-    if (this == &other)
-      return true;
-
-    // Now that the two refer to different objects, they are equivalent if
-    // and only if they are both null.
-    return !(*this) && !other;
-  }
-
-  // Allow RevocableInterfacePtr<> to be used in boolean expressions.
-  explicit operator bool() const { return static_cast<bool>(interface_ptr_); }
-
- private:
-  // InterfaceInvalidator::Observer
-  void OnInvalidate() override {
-    interface_ptr_.internal_state()->RaiseError();
-    if (invalidator_) {
-      invalidator_->RemoveObserver(this);
-    }
-    invalidator_.reset();
-  }
-
-  // Replaces the existing invalidator with a new invalidator and changes the
-  // invalidator being observed.
-  void SetInvalidator(InterfaceInvalidator* invalidator) {
-    if (invalidator_)
-      invalidator_->RemoveObserver(this);
-
-    invalidator_.reset();
-    if (invalidator) {
-      invalidator_ = invalidator->GetWeakPtr();
-      invalidator_->AddObserver(this);
-    }
-  }
-
-  PtrType interface_ptr_;
-  base::WeakPtr<InterfaceInvalidator> invalidator_;
-
-  DISALLOW_COPY_AND_ASSIGN(RevocableInterfacePtr);
-};
-
-template <typename Interface>
-mojo::InterfaceRequest<Interface> MakeRequest(
-    RevocableInterfacePtr<Interface>* ptr,
-    InterfaceInvalidator* invalidator,
-    scoped_refptr<base::SingleThreadTaskRunner> runner = nullptr) {
-  mojo::MessagePipe pipe;
-  ptr->Bind(mojo::InterfacePtrInfo<Interface>(std::move(pipe.handle0), 0u),
-            invalidator, std::move(runner));
-  return mojo::InterfaceRequest<Interface>(std::move(pipe.handle1));
-}
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_MOJO_REVOCABLE_INTERFACE_PTR_H_
diff --git a/third_party/blink/renderer/platform/p2p/DEPS b/third_party/blink/renderer/platform/p2p/DEPS
index 51f66cb..4dca1d57 100644
--- a/third_party/blink/renderer/platform/p2p/DEPS
+++ b/third_party/blink/renderer/platform/p2p/DEPS
@@ -1,7 +1,13 @@
 include_rules = [
-    "+media/base/media_permission.h",
+    "+base/observer_list_threadsafe.h",
+    "+crypto/random.h",
     "+jingle/glue/utils.h",
+    "+media/base/media_permission.h",
     "+net/base/ip_address.h",
+    "+net/base/ip_endpoint.h",
     "+net/base/network_change_notifier.h",
     "+net/base/network_interfaces.h",
+    "+net/traffic_annotation/network_traffic_annotation.h",
+    "+services/network/public/cpp/p2p_param_traits.h",
+    "+services/network/public/cpp/p2p_socket_type.h",
 ]
diff --git a/third_party/blink/renderer/platform/p2p/empty_network_manager.cc b/third_party/blink/renderer/platform/p2p/empty_network_manager.cc
index 9422a0d..4895e42 100644
--- a/third_party/blink/renderer/platform/p2p/empty_network_manager.cc
+++ b/third_party/blink/renderer/platform/p2p/empty_network_manager.cc
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/public/platform/modules/p2p/empty_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/empty_network_manager.h"
 
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "third_party/blink/public/platform/modules/p2p/network_manager_uma.h"
+#include "third_party/blink/renderer/platform/p2p/network_manager_uma.h"
 
 namespace blink {
 
diff --git a/third_party/blink/public/platform/modules/p2p/empty_network_manager.h b/third_party/blink/renderer/platform/p2p/empty_network_manager.h
similarity index 78%
rename from third_party/blink/public/platform/modules/p2p/empty_network_manager.h
rename to third_party/blink/renderer/platform/p2p/empty_network_manager.h
index 41f5495..77d4363 100644
--- a/third_party/blink/public/platform/modules/p2p/empty_network_manager.h
+++ b/third_party/blink/renderer/platform/p2p/empty_network_manager.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_EMPTY_NETWORK_MANAGER_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_EMPTY_NETWORK_MANAGER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_EMPTY_NETWORK_MANAGER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_EMPTY_NETWORK_MANAGER_H_
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
-#include "third_party/blink/public/platform/web_common.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/webrtc/rtc_base/network.h"
 #include "third_party/webrtc/rtc_base/third_party/sigslot/sigslot.h"
 
@@ -21,17 +21,14 @@
 // A NetworkManager implementation which handles the case where local address
 // enumeration is not requested and just returns empty network lists. This class
 // is not thread safe and should only be used by WebRTC's network thread.
-//
-// TODO(crbug.com/787254): Move this class out of the Blink exposed API when
-// all users of it have been Onion souped. Also, move it away from std::vector.
 class EmptyNetworkManager : public rtc::NetworkManagerBase,
                             public sigslot::has_slots<> {
  public:
   // This class is created by WebRTC's signaling thread but used by WebRTC's
   // worker thread |task_runner|.
-  BLINK_PLATFORM_EXPORT explicit EmptyNetworkManager(
+  PLATFORM_EXPORT explicit EmptyNetworkManager(
       rtc::NetworkManager* network_manager);
-  BLINK_PLATFORM_EXPORT ~EmptyNetworkManager() override;
+  PLATFORM_EXPORT ~EmptyNetworkManager() override;
 
   // rtc::NetworkManager:
   void StartUpdating() override;
@@ -69,4 +66,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_EMPTY_NETWORK_MANAGER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_EMPTY_NETWORK_MANAGER_H_
diff --git a/third_party/blink/renderer/platform/p2p/filtering_network_manager.cc b/third_party/blink/renderer/platform/p2p/filtering_network_manager.cc
index 71efbae..0f7994e 100644
--- a/third_party/blink/renderer/platform/p2p/filtering_network_manager.cc
+++ b/third_party/blink/renderer/platform/p2p/filtering_network_manager.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 "third_party/blink/public/platform/modules/p2p/filtering_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/filtering_network_manager.h"
 
 #include <utility>
 
diff --git a/third_party/blink/public/platform/modules/p2p/filtering_network_manager.h b/third_party/blink/renderer/platform/p2p/filtering_network_manager.h
similarity index 93%
rename from third_party/blink/public/platform/modules/p2p/filtering_network_manager.h
rename to third_party/blink/renderer/platform/p2p/filtering_network_manager.h
index bb957e6..39611ce 100644
--- a/third_party/blink/public/platform/modules/p2p/filtering_network_manager.h
+++ b/third_party/blink/renderer/platform/p2p/filtering_network_manager.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_FILTERING_NETWORK_MANAGER_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_FILTERING_NETWORK_MANAGER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_FILTERING_NETWORK_MANAGER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_FILTERING_NETWORK_MANAGER_H_
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "base/time/time.h"
-#include "third_party/blink/public/platform/modules/p2p/network_manager_uma.h"
 #include "third_party/blink/public/platform/web_common.h"
+#include "third_party/blink/renderer/platform/p2p/network_manager_uma.h"
 #include "third_party/webrtc/rtc_base/network.h"
 #include "third_party/webrtc/rtc_base/third_party/sigslot/sigslot.h"
 #include "url/gurl.h"
@@ -125,4 +125,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_FILTERING_NETWORK_MANAGER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_FILTERING_NETWORK_MANAGER_H_
diff --git a/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.cc b/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.cc
index 0732a2b..a928561 100644
--- a/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.cc
+++ b/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.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 "third_party/blink/public/platform/modules/p2p/filtering_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/filtering_network_manager.h"
 
 #include <stddef.h>
 
@@ -18,7 +18,7 @@
 #include "media/base/media_permission.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/platform/modules/p2p/empty_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/empty_network_manager.h"
 #include "third_party/webrtc/rtc_base/ip_address.h"
 
 using NetworkList = rtc::NetworkManager::NetworkList;
diff --git a/content/renderer/p2p/host_address_request.cc b/third_party/blink/renderer/platform/p2p/host_address_request.cc
similarity index 79%
rename from content/renderer/p2p/host_address_request.cc
rename to third_party/blink/renderer/platform/p2p/host_address_request.cc
index 64581e0..c2ecba2 100644
--- a/content/renderer/p2p/host_address_request.cc
+++ b/third_party/blink/renderer/platform/p2p/host_address_request.cc
@@ -2,18 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/renderer/p2p/host_address_request.h"
+#include "third_party/blink/renderer/platform/p2p/host_address_request.h"
 
 #include <utility>
 
 #include "base/bind.h"
 #include "base/feature_list.h"
 #include "base/location.h"
-#include "content/renderer/p2p/socket_dispatcher.h"
 #include "jingle/glue/utils.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
-namespace content {
+namespace blink {
 
 P2PAsyncAddressResolver::P2PAsyncAddressResolver(
     P2PSocketDispatcher* dispatcher)
@@ -35,7 +36,7 @@
   bool enable_mdns = base::FeatureList::IsEnabled(
       blink::features::kWebRtcHideLocalIpsWithMdns);
   dispatcher_->GetP2PSocketManager()->get()->GetHostAddress(
-      host_name.hostname(), enable_mdns,
+      String(host_name.hostname().data()), enable_mdns,
       base::BindOnce(&P2PAsyncAddressResolver::OnResponse,
                      base::Unretained(this)));
 }
@@ -49,7 +50,8 @@
   done_callback_.Reset();
 }
 
-void P2PAsyncAddressResolver::OnResponse(const net::IPAddressList& addresses) {
+void P2PAsyncAddressResolver::OnResponse(
+    const Vector<net::IPAddress>& addresses) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   if (state_ == STATE_SENT) {
     state_ = STATE_FINISHED;
@@ -57,4 +59,4 @@
   }
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/content/renderer/p2p/host_address_request.h b/third_party/blink/renderer/platform/p2p/host_address_request.h
similarity index 75%
rename from content/renderer/p2p/host_address_request.h
rename to third_party/blink/renderer/platform/p2p/host_address_request.h
index f130dce..9bb5ccf 100644
--- a/content/renderer/p2p/host_address_request.h
+++ b/third_party/blink/renderer/platform/p2p/host_address_request.h
@@ -2,22 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_RENDERER_P2P_HOST_ADDRESS_REQUEST_H_
-#define CONTENT_RENDERER_P2P_HOST_ADDRESS_REQUEST_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_HOST_ADDRESS_REQUEST_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_HOST_ADDRESS_REQUEST_H_
 
 #include <stdint.h>
 
-#include <string>
-
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
-#include "content/common/content_export.h"
 #include "net/base/ip_address.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/webrtc/rtc_base/async_resolver_interface.h"
 
-namespace content {
+namespace blink {
 
 class P2PSocketDispatcher;
 
@@ -26,7 +24,7 @@
 class P2PAsyncAddressResolver
     : public base::RefCountedThreadSafe<P2PAsyncAddressResolver> {
  public:
-  using DoneCallback = base::OnceCallback<void(const net::IPAddressList&)>;
+  using DoneCallback = base::OnceCallback<void(const Vector<net::IPAddress>&)>;
 
   P2PAsyncAddressResolver(P2PSocketDispatcher* dispatcher);
   // Start address resolve process.
@@ -47,7 +45,7 @@
 
   virtual ~P2PAsyncAddressResolver();
 
-  void OnResponse(const net::IPAddressList& address);
+  void OnResponse(const Vector<net::IPAddress>& address);
 
   P2PSocketDispatcher* dispatcher_;
   THREAD_CHECKER(thread_checker_);
@@ -59,6 +57,6 @@
   DISALLOW_COPY_AND_ASSIGN(P2PAsyncAddressResolver);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_RENDERER_P2P_HOST_ADDRESS_REQUEST_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_HOST_ADDRESS_REQUEST_H_
diff --git a/third_party/blink/renderer/platform/p2p/ipc_network_manager.cc b/third_party/blink/renderer/platform/p2p/ipc_network_manager.cc
index 52d7d120..1ac806d 100644
--- a/third_party/blink/renderer/platform/p2p/ipc_network_manager.cc
+++ b/third_party/blink/renderer/platform/p2p/ipc_network_manager.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 "third_party/blink/public/platform/modules/p2p/ipc_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h"
 
 #include <string>
 #include <utility>
diff --git a/third_party/blink/public/platform/modules/p2p/ipc_network_manager.h b/third_party/blink/renderer/platform/p2p/ipc_network_manager.h
similarity index 73%
rename from third_party/blink/public/platform/modules/p2p/ipc_network_manager.h
rename to third_party/blink/renderer/platform/p2p/ipc_network_manager.h
index d70b628..8db0420 100644
--- a/third_party/blink/public/platform/modules/p2p/ipc_network_manager.h
+++ b/third_party/blink/renderer/platform/p2p/ipc_network_manager.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_IPC_NETWORK_MANAGER_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_IPC_NETWORK_MANAGER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_IPC_NETWORK_MANAGER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_IPC_NETWORK_MANAGER_H_
 
 #include <memory>
 
 #include "base/memory/weak_ptr.h"
-#include "third_party/blink/public/platform/modules/p2p/network_list_manager.h"
-#include "third_party/blink/public/platform/modules/p2p/network_list_observer.h"
-#include "third_party/blink/public/platform/web_common.h"
+#include "third_party/blink/renderer/platform/p2p/network_list_manager.h"
+#include "third_party/blink/renderer/platform/p2p/network_list_observer.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/webrtc/rtc_base/mdns_responder_interface.h"
 #include "third_party/webrtc/rtc_base/network.h"
 
@@ -26,7 +26,7 @@
                           public blink::NetworkListObserver {
  public:
   // Constructor doesn't take ownership of the |network_list_manager|.
-  BLINK_PLATFORM_EXPORT IpcNetworkManager(
+  PLATFORM_EXPORT IpcNetworkManager(
       blink::NetworkListManager* network_list_manager,
       std::unique_ptr<webrtc::MdnsResponderInterface> mdns_responder);
   ~IpcNetworkManager() override;
@@ -45,6 +45,8 @@
  private:
   void SendNetworksChangedSignal();
 
+  // TODO(crbug.com/787254): Consider moving NetworkListManager to Oilpan and
+  // avoid using a raw pointer.
   blink::NetworkListManager* network_list_manager_;
   std::unique_ptr<webrtc::MdnsResponderInterface> mdns_responder_;
   int start_count_ = 0;
@@ -55,4 +57,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_IPC_NETWORK_MANAGER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_IPC_NETWORK_MANAGER_H_
diff --git a/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.cc b/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.cc
index 152dd782..b00dc6f 100644
--- a/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.cc
+++ b/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.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 "third_party/blink/public/platform/modules/p2p/ipc_network_manager.h"
+#include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h"
 
 #include <algorithm>
 #include <memory>
@@ -11,7 +11,7 @@
 #include "net/base/network_change_notifier.h"
 #include "net/base/network_interfaces.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/blink/public/platform/modules/p2p/network_list_manager.h"
+#include "third_party/blink/renderer/platform/p2p/network_list_manager.h"
 #include "third_party/webrtc/rtc_base/mdns_responder_interface.h"
 
 namespace blink {
diff --git a/content/renderer/p2p/ipc_socket_factory.cc b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.cc
similarity index 93%
rename from content/renderer/p2p/ipc_socket_factory.cc
rename to third_party/blink/renderer/platform/p2p/ipc_socket_factory.cc
index 57342f1..a28777e 100644
--- a/content/renderer/p2p/ipc_socket_factory.cc
+++ b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.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 "content/renderer/p2p/ipc_socket_factory.h"
+#include "third_party/blink/renderer/platform/p2p/ipc_socket_factory.h"
 
 #include <stddef.h>
 
@@ -18,16 +18,17 @@
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_checker.h"
 #include "base/trace_event/trace_event.h"
-#include "content/renderer/p2p/host_address_request.h"
-#include "content/renderer/p2p/socket_client_impl.h"
-#include "content/renderer/p2p/socket_dispatcher.h"
 #include "jingle/glue/utils.h"
 #include "net/base/ip_address.h"
-#include "third_party/blink/public/platform/modules/p2p/socket_client_delegate.h"
 #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h"
+#include "third_party/blink/renderer/platform/p2p/host_address_request.h"
+#include "third_party/blink/renderer/platform/p2p/socket_client_delegate.h"
+#include "third_party/blink/renderer/platform/p2p/socket_client_impl.h"
+#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 #include "third_party/webrtc/rtc_base/async_packet_socket.h"
 
-namespace content {
+namespace blink {
 
 namespace {
 
@@ -125,7 +126,7 @@
       const network::P2PSendPacketMetrics& send_metrics) override;
   void OnError() override;
   void OnDataReceived(const net::IPEndPoint& address,
-                      const std::vector<int8_t>& data,
+                      const Vector<int8_t>& data,
                       const base::TimeTicks& timestamp) override;
 
  private:
@@ -221,7 +222,7 @@
   void Destroy(bool wait) override;
 
  private:
-  virtual void OnAddressResolved(const net::IPAddressList& addresses);
+  virtual void OnAddressResolved(const Vector<net::IPAddress>& addresses);
 
   scoped_refptr<P2PAsyncAddressResolver> resolver_;
 
@@ -247,8 +248,7 @@
 }
 
 IpcPacketSocket::~IpcPacketSocket() {
-  if (state_ == IS_OPENING || state_ == IS_OPEN ||
-      state_ == IS_ERROR) {
+  if (state_ == IS_OPENING || state_ == IS_OPEN || state_ == IS_ERROR) {
     Close();
   }
 
@@ -293,8 +293,7 @@
   state_ = IS_OPENING;
 
   net::IPEndPoint local_endpoint;
-  if (!jingle_glue::SocketAddressToIPEndPoint(
-          local_address, &local_endpoint)) {
+  if (!jingle_glue::SocketAddressToIPEndPoint(local_address, &local_endpoint)) {
     return false;
   }
 
@@ -350,13 +349,15 @@
   return remote_address_;
 }
 
-int IpcPacketSocket::Send(const void *data, size_t data_size,
+int IpcPacketSocket::Send(const void* data,
+                          size_t data_size,
                           const rtc::PacketOptions& options) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   return SendTo(data, data_size, remote_address_, options);
 }
 
-int IpcPacketSocket::SendTo(const void *data, size_t data_size,
+int IpcPacketSocket::SendTo(const void* data,
+                            size_t data_size,
                             const rtc::SocketAddress& address,
                             const rtc::PacketOptions& options) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
@@ -388,8 +389,7 @@
 
   if (data_size > send_bytes_available_) {
     TRACE_EVENT_INSTANT1("p2p", "MaxPendingBytesWouldBlock",
-                         TRACE_EVENT_SCOPE_THREAD,
-                         "id",
+                         TRACE_EVENT_SCOPE_THREAD, "id",
                          client_->GetSocketID());
     if (!writable_signal_expected_) {
       blink::WebRtcLogMessage(base::StringPrintf(
@@ -424,7 +424,8 @@
   send_bytes_available_ -= data_size;
 
   const int8_t* data_char = reinterpret_cast<const int8_t*>(data);
-  std::vector<int8_t> data_vector(data_char, data_char + data_size);
+  Vector<int8_t> data_vector;
+  data_vector.AppendRange(data_char, data_char + data_size);
   uint64_t packet_id = client_->Send(address_chrome, data_vector, options);
 
   // Ensure packet_id is not 0. It can't be the case according to
@@ -552,8 +553,8 @@
       // |remote_address| could be unresolved if the connection is behind a
       // proxy.
       if (!remote_address.address().empty() &&
-          jingle_glue::IPEndPointToSocketAddress(
-              remote_address, &jingle_socket_address)) {
+          jingle_glue::IPEndPointToSocketAddress(remote_address,
+                                                 &jingle_socket_address)) {
         // Set only the IP address.
         remote_address_.SetResolvedIP(jingle_socket_address.ipaddr());
       }
@@ -625,7 +626,7 @@
 }
 
 void IpcPacketSocket::OnDataReceived(const net::IPEndPoint& address,
-                                     const std::vector<int8_t>& data,
+                                     const Vector<int8_t>& data,
                                      const base::TimeTicks& timestamp) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
@@ -650,8 +651,7 @@
 
 AsyncAddressResolverImpl::AsyncAddressResolverImpl(
     P2PSocketDispatcher* dispatcher)
-    : resolver_(new P2PAsyncAddressResolver(dispatcher)) {
-}
+    : resolver_(new P2PAsyncAddressResolver(dispatcher)) {}
 
 AsyncAddressResolverImpl::~AsyncAddressResolverImpl() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -669,11 +669,12 @@
 }
 
 bool AsyncAddressResolverImpl::GetResolvedAddress(
-    int family, rtc::SocketAddress* addr) const {
+    int family,
+    rtc::SocketAddress* addr) const {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (addresses_.empty())
-   return false;
+    return false;
 
   for (size_t i = 0; i < addresses_.size(); ++i) {
     if (family == addresses_[i].family()) {
@@ -699,7 +700,7 @@
 }
 
 void AsyncAddressResolverImpl::OnAddressResolved(
-    const net::IPAddressList& addresses) {
+    const Vector<net::IPAddress>& addresses) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   for (size_t i = 0; i < addresses.size(); ++i) {
     rtc::SocketAddress socket_address;
@@ -720,8 +721,7 @@
     : socket_dispatcher_(socket_dispatcher),
       traffic_annotation_(traffic_annotation) {}
 
-IpcPacketSocketFactory::~IpcPacketSocketFactory() {
-}
+IpcPacketSocketFactory::~IpcPacketSocketFactory() {}
 
 rtc::AsyncPacketSocket* IpcPacketSocketFactory::CreateUdpSocket(
     const rtc::SocketAddress& local_address,
@@ -788,11 +788,10 @@
   return socket.release();
 }
 
-rtc::AsyncResolverInterface*
-IpcPacketSocketFactory::CreateAsyncResolver() {
+rtc::AsyncResolverInterface* IpcPacketSocketFactory::CreateAsyncResolver() {
   std::unique_ptr<AsyncAddressResolverImpl> resolver(
       new AsyncAddressResolverImpl(socket_dispatcher_));
   return resolver.release();
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/content/renderer/p2p/ipc_socket_factory.h b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.h
similarity index 82%
rename from content/renderer/p2p/ipc_socket_factory.h
rename to third_party/blink/renderer/platform/p2p/ipc_socket_factory.h
index 10237540..21a0a25 100644
--- a/content/renderer/p2p/ipc_socket_factory.h
+++ b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.h
@@ -2,18 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
-#define CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_IPC_SOCKET_FACTORY_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_IPC_SOCKET_FACTORY_H_
 
 #include <stdint.h>
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
-#include "content/common/content_export.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/webrtc/api/packet_socket_factory.h"
 
-namespace content {
+namespace blink {
 
 class P2PSocketDispatcher;
 
@@ -25,7 +25,7 @@
 // created on.
 class IpcPacketSocketFactory : public rtc::PacketSocketFactory {
  public:
-  CONTENT_EXPORT explicit IpcPacketSocketFactory(
+  PLATFORM_EXPORT explicit IpcPacketSocketFactory(
       P2PSocketDispatcher* socket_dispatcher,
       const net::NetworkTrafficAnnotationTag& traffic_annotation);
   ~IpcPacketSocketFactory() override;
@@ -54,6 +54,6 @@
   DISALLOW_COPY_AND_ASSIGN(IpcPacketSocketFactory);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_RENDERER_P2P_IPC_SOCKET_FACTORY_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_IPC_SOCKET_FACTORY_H_
diff --git a/content/renderer/p2p/mdns_responder_adapter.cc b/third_party/blink/renderer/platform/p2p/mdns_responder_adapter.cc
similarity index 83%
rename from content/renderer/p2p/mdns_responder_adapter.cc
rename to third_party/blink/renderer/platform/p2p/mdns_responder_adapter.cc
index f75ff6c..70a2730a 100644
--- a/content/renderer/p2p/mdns_responder_adapter.cc
+++ b/third_party/blink/renderer/platform/p2p/mdns_responder_adapter.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 "content/renderer/p2p/mdns_responder_adapter.h"
+#include "third_party/blink/renderer/platform/p2p/mdns_responder_adapter.h"
 
 #include <string>
 
@@ -12,19 +12,20 @@
 #include "net/base/ip_endpoint.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 #include "third_party/webrtc/rtc_base/ip_address.h"
 
-namespace content {
+namespace blink {
 
 namespace {
 
 void OnNameCreatedForAddress(
     webrtc::MdnsResponderInterface::NameCreatedCallback callback,
     const rtc::IPAddress& addr,
-    const std::string& name,
+    const String& name,
     bool announcement_scheduled) {
   // We currently ignore whether there is an announcement sent for the name.
-  callback(addr, name);
+  callback(addr, name.Utf8());
 }
 
 void OnNameRemovedForAddress(
@@ -38,10 +39,11 @@
 }  // namespace
 
 MdnsResponderAdapter::MdnsResponderAdapter() {
-  network::mojom::MdnsResponderPtr client;
+  network::mojom::blink::MdnsResponderPtr client;
   auto request = mojo::MakeRequest(&client);
   thread_safe_client_ =
-      network::mojom::ThreadSafeMdnsResponderPtr::Create(std::move(client));
+      network::mojom::blink::ThreadSafeMdnsResponderPtr::Create(
+          std::move(client));
   blink::Platform::Current()->GetBrowserInterfaceBrokerProxy()->GetInterface(
       std::move(request));
 }
@@ -62,4 +64,4 @@
       base::BindOnce(&OnNameRemovedForAddress, callback));
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/content/renderer/p2p/mdns_responder_adapter.h b/third_party/blink/renderer/platform/p2p/mdns_responder_adapter.h
similarity index 66%
rename from content/renderer/p2p/mdns_responder_adapter.h
rename to third_party/blink/renderer/platform/p2p/mdns_responder_adapter.h
index 3e532a5..b829832fc 100644
--- a/content/renderer/p2p/mdns_responder_adapter.h
+++ b/third_party/blink/renderer/platform/p2p/mdns_responder_adapter.h
@@ -2,23 +2,25 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_RENDERER_P2P_MDNS_RESPONDER_ADAPTER_H_
-#define CONTENT_RENDERER_P2P_MDNS_RESPONDER_ADAPTER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_MDNS_RESPONDER_ADAPTER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_MDNS_RESPONDER_ADAPTER_H_
 
-#include "services/network/public/mojom/mdns_responder.mojom.h"
+#include "services/network/public/mojom/mdns_responder.mojom-blink.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/webrtc/rtc_base/mdns_responder_interface.h"
 
 namespace rtc {
 class IPAddress;
 }  // namespace rtc
 
-namespace content {
+namespace blink {
 
 // This class is created on the main thread but is used only on the WebRTC
 // worker threads. The MdnsResponderAdapter implements the WebRTC mDNS responder
 // interface via the MdnsResponder service in Chromium, and is used to register
 // and resolve mDNS hostnames to conceal local IP addresses.
-class MdnsResponderAdapter : public webrtc::MdnsResponderInterface {
+class PLATFORM_EXPORT MdnsResponderAdapter
+    : public webrtc::MdnsResponderInterface {
  public:
   // The adapter should be created on the main thread to have access to the
   // connector to the service manager.
@@ -32,11 +34,12 @@
                             NameRemovedCallback callback) override;
 
  private:
-  scoped_refptr<network::mojom::ThreadSafeMdnsResponderPtr> thread_safe_client_;
+  scoped_refptr<network::mojom::blink::ThreadSafeMdnsResponderPtr>
+      thread_safe_client_;
 
   DISALLOW_COPY_AND_ASSIGN(MdnsResponderAdapter);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_RENDERER_P2P_MDNS_RESPONDER_ADAPTER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_MDNS_RESPONDER_ADAPTER_H_
diff --git a/third_party/blink/public/platform/modules/p2p/network_list_manager.h b/third_party/blink/renderer/platform/p2p/network_list_manager.h
similarity index 70%
rename from third_party/blink/public/platform/modules/p2p/network_list_manager.h
rename to third_party/blink/renderer/platform/p2p/network_list_manager.h
index 0928325..0be11c0 100644
--- a/third_party/blink/public/platform/modules/p2p/network_list_manager.h
+++ b/third_party/blink/renderer/platform/p2p/network_list_manager.h
@@ -6,18 +6,18 @@
 // IpcNetworkManager such that it doesn't depend on implementation of
 // P2PSocketDispatcher.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_LIST_MANAGER_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_LIST_MANAGER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_MANAGER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_MANAGER_H_
 
-#include "third_party/blink/public/platform/web_common.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
 
 namespace blink {
 
 class NetworkListObserver;
 
-// TODO(crbug.com/787254): Move this class out of the Blink exposed API when
-// all users of it have been Onion souped.
-class BLINK_PLATFORM_EXPORT NetworkListManager {
+// TODO(crbug.com/787254): Verify whether this abstract class is still
+// needed now that its Clients have all switched to Blink.
+class PLATFORM_EXPORT NetworkListManager {
  public:
   // Add a new network list observer. Each observer is called
   // immidiately after it is registered and then later whenever
@@ -39,4 +39,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_LIST_MANAGER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_MANAGER_H_
diff --git a/third_party/blink/public/platform/modules/p2p/network_list_observer.h b/third_party/blink/renderer/platform/p2p/network_list_observer.h
similarity index 61%
rename from third_party/blink/public/platform/modules/p2p/network_list_observer.h
rename to third_party/blink/renderer/platform/p2p/network_list_observer.h
index 8c80fbd..714c9a7 100644
--- a/third_party/blink/public/platform/modules/p2p/network_list_observer.h
+++ b/third_party/blink/renderer/platform/p2p/network_list_observer.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 THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_LIST_OBSERVER_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_LIST_OBSERVER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_OBSERVER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_OBSERVER_H_
 
 #include <vector>
 
@@ -15,8 +15,10 @@
 
 namespace blink {
 
-// TODO(crbug.com/787254): Move this class out of the Blink exposed API when
-// all users of it have been Onion souped. Also, move it away from std::vector.
+// TODO(crbug.com/787254): Verify whether this abstract class is still
+// needed now that its Clients have all switched to Blink.
+//
+// TODO(crbug.com/787254): Move this class away from std::vector.
 class NetworkListObserver {
  public:
   virtual ~NetworkListObserver() {}
@@ -32,4 +34,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_LIST_OBSERVER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_OBSERVER_H_
diff --git a/third_party/blink/renderer/platform/p2p/network_manager_uma.cc b/third_party/blink/renderer/platform/p2p/network_manager_uma.cc
index f98a9442..b21e0a4 100644
--- a/third_party/blink/renderer/platform/p2p/network_manager_uma.cc
+++ b/third_party/blink/renderer/platform/p2p/network_manager_uma.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 "third_party/blink/public/platform/modules/p2p/network_manager_uma.h"
+#include "third_party/blink/renderer/platform/p2p/network_manager_uma.h"
 
 #include "base/metrics/histogram_macros.h"
 #include "base/time/time.h"
diff --git a/third_party/blink/public/platform/modules/p2p/network_manager_uma.h b/third_party/blink/renderer/platform/p2p/network_manager_uma.h
similarity index 71%
rename from third_party/blink/public/platform/modules/p2p/network_manager_uma.h
rename to third_party/blink/renderer/platform/p2p/network_manager_uma.h
index f26a93b..618e3d9 100644
--- a/third_party/blink/public/platform/modules/p2p/network_manager_uma.h
+++ b/third_party/blink/renderer/platform/p2p/network_manager_uma.h
@@ -2,10 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_MANAGER_UMA_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_MANAGER_UMA_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_MANAGER_UMA_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_MANAGER_UMA_H_
 
-#include "third_party/blink/public/platform/web_common.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
 
 namespace base {
 class TimeDelta;
@@ -28,10 +28,10 @@
   PERMISSION_MAX,
 };
 
-BLINK_PLATFORM_EXPORT void ReportIPPermissionStatus(IPPermissionStatus status);
-BLINK_PLATFORM_EXPORT void ReportTimeToUpdateNetworkList(
+PLATFORM_EXPORT void ReportIPPermissionStatus(IPPermissionStatus status);
+PLATFORM_EXPORT void ReportTimeToUpdateNetworkList(
     const base::TimeDelta& ticks);
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_NETWORK_MANAGER_UMA_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_MANAGER_UMA_H_
diff --git a/third_party/blink/public/platform/modules/p2p/socket_client.h b/third_party/blink/renderer/platform/p2p/socket_client.h
similarity index 69%
rename from third_party/blink/public/platform/modules/p2p/socket_client.h
rename to third_party/blink/renderer/platform/p2p/socket_client.h
index 6d7fe7a..4b0ef9b8 100644
--- a/third_party/blink/public/platform/modules/p2p/socket_client.h
+++ b/third_party/blink/renderer/platform/p2p/socket_client.h
@@ -2,15 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_SOCKET_CLIENT_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_SOCKET_CLIENT_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_H_
 
 #include <stdint.h>
 
-#include <vector>
-
 #include "net/base/ip_endpoint.h"
 #include "services/network/public/cpp/p2p_socket_type.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace rtc {
 struct PacketOptions;
@@ -22,8 +21,10 @@
 
 // P2P socket that routes all calls over IPC.
 //
-// TODO(crbug.com/787254): Move this class out of the Blink exposed API when
-// all users of it have been Onion souped. Also, move it away from std::vector.
+// TODO(crbug.com/787254): Verify whether this class is still needed
+// now that all its clients are in Blink.
+//
+// Also, move it away from std::vector.
 class P2PSocketClient {
  public:
   virtual ~P2PSocketClient() {}
@@ -31,7 +32,7 @@
   // Send the |data| to the |address| using Differentiated Services Code Point
   // |dscp|. Return value is the unique packet_id for this packet.
   virtual uint64_t Send(const net::IPEndPoint& address,
-                        const std::vector<int8_t>& data,
+                        const Vector<int8_t>& data,
                         const rtc::PacketOptions& options) = 0;
 
   virtual void SetOption(network::P2PSocketOption option, int value) = 0;
@@ -47,4 +48,4 @@
 };
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_SOCKET_CLIENT_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_H_
diff --git a/third_party/blink/public/platform/modules/p2p/socket_client_delegate.h b/third_party/blink/renderer/platform/p2p/socket_client_delegate.h
similarity index 74%
rename from third_party/blink/public/platform/modules/p2p/socket_client_delegate.h
rename to third_party/blink/renderer/platform/p2p/socket_client_delegate.h
index e9eaf28d..282784fb 100644
--- a/third_party/blink/public/platform/modules/p2p/socket_client_delegate.h
+++ b/third_party/blink/renderer/platform/p2p/socket_client_delegate.h
@@ -2,10 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_SOCKET_CLIENT_DELEGATE_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_SOCKET_CLIENT_DELEGATE_H_
-
-#include <vector>
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_DELEGATE_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_DELEGATE_H_
 
 #include "net/base/ip_endpoint.h"
 #include "services/network/public/cpp/p2p_socket_type.h"
@@ -14,8 +12,8 @@
 
 class P2PSocketClient;
 
-// TODO(crbug.com/787254): Move this class out of the Blink exposed API when
-// all users of it have been Onion souped. Also, move it away from std::vector.
+// TODO(crbug.com/787254): Consider eliminating this pure virtual class now
+// that it has moved to blink/renderer.
 class P2PSocketClientDelegate {
  public:
   virtual ~P2PSocketClientDelegate() {}
@@ -41,10 +39,10 @@
 
   // Called when data is received on the socket.
   virtual void OnDataReceived(const net::IPEndPoint& address,
-                              const std::vector<int8_t>& data,
+                              const Vector<int8_t>& data,
                               const base::TimeTicks& timestamp) = 0;
 };
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_P2P_SOCKET_CLIENT_DELEGATE_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_DELEGATE_H_
diff --git a/content/renderer/p2p/socket_client_impl.cc b/third_party/blink/renderer/platform/p2p/socket_client_impl.cc
similarity index 87%
rename from content/renderer/p2p/socket_client_impl.cc
rename to third_party/blink/renderer/platform/p2p/socket_client_impl.cc
index 1f4c585..65a8945 100644
--- a/content/renderer/p2p/socket_client_impl.cc
+++ b/third_party/blink/renderer/platform/p2p/socket_client_impl.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/renderer/p2p/socket_client_impl.h"
+#include "third_party/blink/renderer/platform/p2p/socket_client_impl.h"
 
 #include "base/bind.h"
 #include "base/location.h"
 #include "base/time/time.h"
-#include "content/renderer/p2p/socket_dispatcher.h"
 #include "crypto/random.h"
 #include "services/network/public/cpp/p2p_param_traits.h"
-#include "third_party/blink/public/platform/modules/p2p/socket_client_delegate.h"
+#include "third_party/blink/renderer/platform/p2p/socket_client_delegate.h"
+#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
 
 namespace {
 
@@ -23,7 +23,7 @@
 
 }  // namespace
 
-namespace content {
+namespace blink {
 
 P2PSocketClientImpl::P2PSocketClientImpl(
     P2PSocketDispatcher* dispatcher,
@@ -57,7 +57,7 @@
 
   DCHECK_EQ(state_, STATE_UNINITIALIZED);
   state_ = STATE_OPENING;
-  network::mojom::P2PSocketClientPtr socket_client;
+  network::mojom::blink::P2PSocketClientPtr socket_client;
   binding_.Bind(mojo::MakeRequest(&socket_client));
   binding_.set_connection_error_handler(base::BindOnce(
       &P2PSocketClientImpl::OnConnectionError, base::Unretained(this)));
@@ -67,7 +67,7 @@
 }
 
 uint64_t P2PSocketClientImpl::Send(const net::IPEndPoint& address,
-                                   const std::vector<int8_t>& data,
+                                   const Vector<int8_t>& data,
                                    const rtc::PacketOptions& options) {
   uint64_t unique_id = GetUniqueId(random_socket_id_, ++next_packet_id_);
 
@@ -81,7 +81,7 @@
 }
 
 void P2PSocketClientImpl::SendWithPacketId(const net::IPEndPoint& address,
-                                           const std::vector<int8_t>& data,
+                                           const Vector<int8_t>& data,
                                            const rtc::PacketOptions& options,
                                            uint64_t packet_id) {
   TRACE_EVENT_ASYNC_BEGIN0("p2p", "Send", packet_id);
@@ -134,15 +134,15 @@
 
 void P2PSocketClientImpl::IncomingTcpConnection(
     const net::IPEndPoint& socket_address,
-    network::mojom::P2PSocketPtr socket,
-    network::mojom::P2PSocketClientRequest client_request) {
+    network::mojom::blink::P2PSocketPtr socket,
+    network::mojom::blink::P2PSocketClientRequest client_request) {
   DCHECK_EQ(state_, STATE_OPEN);
 
   auto new_client =
       std::make_unique<P2PSocketClientImpl>(dispatcher_, traffic_annotation_);
   new_client->state_ = STATE_OPEN;
 
-  network::mojom::P2PSocketClientPtr socket_client;
+  network::mojom::blink::P2PSocketClientPtr socket_client;
   new_client->socket_ = std::move(socket);
   new_client->binding_.Bind(std::move(client_request));
   new_client->binding_.set_connection_error_handler(base::BindOnce(
@@ -158,7 +158,7 @@
 }
 
 void P2PSocketClientImpl::DataReceived(const net::IPEndPoint& socket_address,
-                                       const std::vector<int8_t>& data,
+                                       const Vector<int8_t>& data,
                                        base::TimeTicks timestamp) {
   DCHECK_EQ(STATE_OPEN, state_);
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
@@ -172,4 +172,4 @@
     delegate_->OnError();
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/content/renderer/p2p/socket_client_impl.h b/third_party/blink/renderer/platform/p2p/socket_client_impl.h
similarity index 77%
rename from content/renderer/p2p/socket_client_impl.h
rename to third_party/blink/renderer/platform/p2p/socket_client_impl.h
index 4bcd5a9..080c3fa5 100644
--- a/content/renderer/p2p/socket_client_impl.h
+++ b/third_party/blink/renderer/platform/p2p/socket_client_impl.h
@@ -2,13 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_RENDERER_P2P_SOCKET_CLIENT_IMPL_H_
-#define CONTENT_RENDERER_P2P_SOCKET_CLIENT_IMPL_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_IMPL_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_IMPL_H_
 
 #include <stdint.h>
 
-#include <vector>
-
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
@@ -16,14 +14,15 @@
 #include "net/base/ip_endpoint.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
 #include "services/network/public/cpp/p2p_socket_type.h"
-#include "services/network/public/mojom/p2p.mojom.h"
-#include "third_party/blink/public/platform/modules/p2p/socket_client.h"
+#include "services/network/public/mojom/p2p.mojom-blink.h"
+#include "third_party/blink/renderer/platform/p2p/socket_client.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace base {
 class TimeTicks;
 }  // namespace base
 
-namespace content {
+namespace blink {
 
 class P2PSocketDispatcher;
 
@@ -31,7 +30,7 @@
 //
 // The object runs on the WebRTC worker thread.
 class P2PSocketClientImpl : public blink::P2PSocketClient,
-                            public network::mojom::P2PSocketClient {
+                            public network::mojom::blink::P2PSocketClient {
  public:
   P2PSocketClientImpl(
       P2PSocketDispatcher* dispatcher,
@@ -51,7 +50,7 @@
   // Send the |data| to the |address| using Differentiated Services Code Point
   // |dscp|. Return value is the unique packet_id for this packet.
   uint64_t Send(const net::IPEndPoint& address,
-                const std::vector<int8_t>& data,
+                const Vector<int8_t>& data,
                 const rtc::PacketOptions& options) override;
 
   // Setting socket options.
@@ -79,20 +78,20 @@
   // Helper function to be called by Send to handle different threading
   // condition.
   void SendWithPacketId(const net::IPEndPoint& address,
-                        const std::vector<int8_t>& data,
+                        const Vector<int8_t>& data,
                         const rtc::PacketOptions& options,
                         uint64_t packet_id);
 
-  // network::mojom::P2PSocketClient interface.
+  // network::mojom::blink::P2PSocketClient interface.
   void SocketCreated(const net::IPEndPoint& local_address,
                      const net::IPEndPoint& remote_address) override;
   void SendComplete(const network::P2PSendPacketMetrics& send_metrics) override;
   void IncomingTcpConnection(
       const net::IPEndPoint& socket_address,
-      network::mojom::P2PSocketPtr socket,
-      network::mojom::P2PSocketClientRequest client_request) override;
+      network::mojom::blink::P2PSocketPtr socket,
+      network::mojom::blink::P2PSocketClientRequest client_request) override;
   void DataReceived(const net::IPEndPoint& socket_address,
-                    const std::vector<int8_t>& data,
+                    const Vector<int8_t>& data,
                     base::TimeTicks timestamp) override;
 
   void OnConnectionError();
@@ -108,12 +107,12 @@
   uint32_t random_socket_id_;
   uint32_t next_packet_id_;
 
-  network::mojom::P2PSocketPtr socket_;
-  mojo::Binding<network::mojom::P2PSocketClient> binding_;
+  network::mojom::blink::P2PSocketPtr socket_;
+  mojo::Binding<network::mojom::blink::P2PSocketClient> binding_;
 
   DISALLOW_COPY_AND_ASSIGN(P2PSocketClientImpl);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_RENDERER_P2P_SOCKET_CLIENT_IMPL_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_CLIENT_IMPL_H_
diff --git a/content/renderer/p2p/socket_dispatcher.cc b/third_party/blink/renderer/platform/p2p/socket_dispatcher.cc
similarity index 68%
rename from content/renderer/p2p/socket_dispatcher.cc
rename to third_party/blink/renderer/platform/p2p/socket_dispatcher.cc
index 24e91869..c82473e 100644
--- a/content/renderer/p2p/socket_dispatcher.cc
+++ b/third_party/blink/renderer/platform/p2p/socket_dispatcher.cc
@@ -2,25 +2,24 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/renderer/p2p/socket_dispatcher.h"
+#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h"
 
 #include "base/bind.h"
 #include "base/memory/scoped_refptr.h"
-#include "content/renderer/p2p/socket_client_impl.h"
 #include "services/network/public/cpp/p2p_param_traits.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
-#include "third_party/blink/public/platform/modules/p2p/network_list_observer.h"
 #include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/platform/p2p/network_list_observer.h"
+#include "third_party/blink/renderer/platform/p2p/socket_client_impl.h"
 
-namespace content {
+namespace blink {
 
 P2PSocketDispatcher::P2PSocketDispatcher()
     : main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       network_list_observers_(
           new base::ObserverListThreadSafe<blink::NetworkListObserver>()) {}
 
-P2PSocketDispatcher::~P2PSocketDispatcher() {
-}
+P2PSocketDispatcher::~P2PSocketDispatcher() {}
 
 void P2PSocketDispatcher::AddNetworkListObserver(
     blink::NetworkListObserver* network_list_observer) {
@@ -36,16 +35,16 @@
   network_list_observers_->RemoveObserver(network_list_observer);
 }
 
-scoped_refptr<network::mojom::ThreadSafeP2PSocketManagerPtr>
+scoped_refptr<network::mojom::blink::ThreadSafeP2PSocketManagerPtr>
 P2PSocketDispatcher::GetP2PSocketManager() {
   base::AutoLock lock(p2p_socket_manager_lock_);
   if (!thread_safe_p2p_socket_manager_) {
-    network::mojom::P2PSocketManagerPtr p2p_socket_manager;
+    network::mojom::blink::P2PSocketManagerPtr p2p_socket_manager;
     p2p_socket_manager_request_ = mojo::MakeRequest(&p2p_socket_manager);
     p2p_socket_manager.set_connection_error_handler(base::BindOnce(
         &P2PSocketDispatcher::OnConnectionError, base::Unretained(this)));
     thread_safe_p2p_socket_manager_ =
-        network::mojom::ThreadSafeP2PSocketManagerPtr::Create(
+        network::mojom::blink::ThreadSafeP2PSocketManagerPtr::Create(
             std::move(p2p_socket_manager));
   }
   main_task_runner_->PostTask(
@@ -55,16 +54,24 @@
 }
 
 void P2PSocketDispatcher::NetworkListChanged(
-    const std::vector<net::NetworkInterface>& networks,
+    const Vector<net::NetworkInterface>& networks,
     const net::IPAddress& default_ipv4_local_address,
     const net::IPAddress& default_ipv6_local_address) {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
   networks_ = networks;
   default_ipv4_local_address_ = default_ipv4_local_address;
   default_ipv6_local_address_ = default_ipv6_local_address;
+
+  // TODO(crbug.com/787254): Remove this helper when network_list_observer.h
+  // gets moved from blink/public to blink/renderer, and operate over
+  // WTF::Vector.
+  std::vector<net::NetworkInterface> copy(networks.size());
+  for (size_t i = 0; i < networks.size(); i++)
+    copy[i] = networks[i];
+
   network_list_observers_->Notify(
-      FROM_HERE, &blink::NetworkListObserver::OnNetworkListChanged, networks,
-      default_ipv4_local_address, default_ipv6_local_address);
+      FROM_HERE, &blink::NetworkListObserver::OnNetworkListChanged,
+      std::move(copy), default_ipv4_local_address, default_ipv6_local_address);
 }
 
 void P2PSocketDispatcher::RequestInterfaceIfNecessary() {
@@ -77,9 +84,17 @@
 
 void P2PSocketDispatcher::RequestNetworkEventsIfNecessary() {
   if (network_notification_client_receiver_.is_bound()) {
+    // TODO(crbug.com/787254): Remove this helper when network_list_observer.h
+    // gets moved from blink/public to blink/renderer, and operate over
+    // WTF::Vector.
+    std::vector<net::NetworkInterface> copy(networks_.size());
+    for (size_t i = 0; i < networks_.size(); i++)
+      copy[i] = networks_[i];
+
     network_list_observers_->Notify(
-        FROM_HERE, &blink::NetworkListObserver::OnNetworkListChanged, networks_,
-        default_ipv4_local_address_, default_ipv6_local_address_);
+        FROM_HERE, &blink::NetworkListObserver::OnNetworkListChanged,
+        std::move(copy), default_ipv4_local_address_,
+        default_ipv6_local_address_);
   } else {
     GetP2PSocketManager()->get()->StartNetworkNotifications(
         network_notification_client_receiver_.BindNewPipeAndPassRemote());
@@ -91,4 +106,4 @@
   thread_safe_p2p_socket_manager_.reset();
 }
 
-}  // namespace content
+}  // namespace blink
diff --git a/content/renderer/p2p/socket_dispatcher.h b/third_party/blink/renderer/platform/p2p/socket_dispatcher.h
similarity index 70%
rename from content/renderer/p2p/socket_dispatcher.h
rename to third_party/blink/renderer/platform/p2p/socket_dispatcher.h
index 1d05550a..5342377 100644
--- a/content/renderer/p2p/socket_dispatcher.h
+++ b/third_party/blink/renderer/platform/p2p/socket_dispatcher.h
@@ -18,27 +18,26 @@
 // P2PSocketDispatcher receives and dispatches messages on the
 // IO thread.
 
-#ifndef CONTENT_RENDERER_P2P_SOCKET_DISPATCHER_H_
-#define CONTENT_RENDERER_P2P_SOCKET_DISPATCHER_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_DISPATCHER_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_DISPATCHER_H_
 
 #include <stdint.h>
 
-#include <vector>
-
 #include "base/callback_forward.h"
 #include "base/compiler_specific.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/observer_list_threadsafe.h"
 #include "base/synchronization/lock.h"
-#include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h"
 #include "net/base/ip_address.h"
 #include "net/base/network_interfaces.h"
 #include "services/network/public/cpp/p2p_socket_type.h"
-#include "services/network/public/mojom/p2p.mojom.h"
-#include "third_party/blink/public/platform/modules/p2p/network_list_manager.h"
+#include "services/network/public/mojom/p2p.mojom-blink.h"
+#include "third_party/blink/renderer/platform/p2p/network_list_manager.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -48,14 +47,14 @@
 class NetworkListObserver;
 }
 
-namespace content {
+namespace blink {
 
 // This class is created on the main thread, but is used primarily on the
 // WebRTC worker threads.
-class CONTENT_EXPORT P2PSocketDispatcher
+class PLATFORM_EXPORT P2PSocketDispatcher
     : public base::RefCountedThreadSafe<P2PSocketDispatcher>,
       public blink::NetworkListManager,
-      public network::mojom::P2PNetworkNotificationClient {
+      public network::mojom::blink::P2PNetworkNotificationClient {
  public:
   P2PSocketDispatcher();
 
@@ -65,7 +64,7 @@
   void RemoveNetworkListObserver(
       blink::NetworkListObserver* network_list_observer) override;
 
-  scoped_refptr<network::mojom::ThreadSafeP2PSocketManagerPtr>
+  scoped_refptr<network::mojom::blink::ThreadSafeP2PSocketManagerPtr>
   GetP2PSocketManager();
 
  private:
@@ -73,9 +72,9 @@
 
   ~P2PSocketDispatcher() override;
 
-  // network::mojom::P2PNetworkNotificationClient interface.
+  // network::mojom::blink::P2PNetworkNotificationClient interface.
   void NetworkListChanged(
-      const std::vector<net::NetworkInterface>& networks,
+      const Vector<net::NetworkInterface>& networks,
       const net::IPAddress& default_ipv4_local_address,
       const net::IPAddress& default_ipv6_local_address) override;
 
@@ -86,25 +85,27 @@
 
   scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
 
+  // TODO(crbug.com/787254): When moving NetworkListObserver to Oilpan,
+  // thread-safety needs to be taken into account.
   scoped_refptr<base::ObserverListThreadSafe<blink::NetworkListObserver>>
       network_list_observers_;
 
-  network::mojom::P2PSocketManagerRequest p2p_socket_manager_request_;
-  scoped_refptr<network::mojom::ThreadSafeP2PSocketManagerPtr>
+  network::mojom::blink::P2PSocketManagerRequest p2p_socket_manager_request_;
+  scoped_refptr<network::mojom::blink::ThreadSafeP2PSocketManagerPtr>
       thread_safe_p2p_socket_manager_;
   base::Lock p2p_socket_manager_lock_;
 
   // Cached from last |NetworkListChanged| call.
-  std::vector<net::NetworkInterface> networks_;
+  Vector<net::NetworkInterface> networks_;
   net::IPAddress default_ipv4_local_address_;
   net::IPAddress default_ipv6_local_address_;
 
-  mojo::Receiver<network::mojom::P2PNetworkNotificationClient>
+  mojo::Receiver<network::mojom::blink::P2PNetworkNotificationClient>
       network_notification_client_receiver_{this};
 
   DISALLOW_COPY_AND_ASSIGN(P2PSocketDispatcher);
 };
 
-}  // namespace content
+}  // namespace blink
 
-#endif  // CONTENT_RENDERER_P2P_SOCKET_DISPATCHER_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_SOCKET_DISPATCHER_H_
diff --git a/third_party/blink/renderer/platform/peerconnection/DEPS b/third_party/blink/renderer/platform/peerconnection/DEPS
index c24e188..27851784 100644
--- a/third_party/blink/renderer/platform/peerconnection/DEPS
+++ b/third_party/blink/renderer/platform/peerconnection/DEPS
@@ -3,6 +3,7 @@
     "-third_party/blink/renderer/platform",
 
     # Module.
+    "+third_party/blink/renderer/platform/p2p",
     "+third_party/blink/renderer/platform/peerconnection",
     "+third_party/blink/renderer/platform/media_capabilities",
     "+third_party/blink/renderer/platform/webrtc",
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.cc
index ba2a0ab10..2ab30075 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.cc
@@ -10,7 +10,6 @@
 #include "base/memory/ptr_util.h"
 #include "build/build_config.h"
 #include "media/video/gpu_video_accelerator_factories.h"
-#include "third_party/blink/public/platform/modules/peerconnection/rtc_video_decoder_factory_util.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_adapter.h"
 
 namespace blink {
@@ -59,11 +58,6 @@
 
 }  // namespace
 
-std::unique_ptr<webrtc::VideoDecoderFactory> CreateRTCVideoDecoderFactory(
-    media::GpuVideoAcceleratorFactories* gpu_factories) {
-  return std::make_unique<RTCVideoDecoderFactory>(gpu_factories);
-}
-
 RTCVideoDecoderFactory::RTCVideoDecoderFactory(
     media::GpuVideoAcceleratorFactories* gpu_factories)
     : gpu_factories_(gpu_factories) {
diff --git a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc
index a0943b8..fc5bcb11 100644
--- a/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.cc
@@ -11,7 +11,6 @@
 #include "media/media_buildflags.h"
 #include "media/video/gpu_video_accelerator_factories.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/public/platform/modules/peerconnection/rtc_video_encoder_factory_util.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_video_encoder.h"
 #include "third_party/webrtc/api/video_codecs/sdp_video_format.h"
 #include "third_party/webrtc/api/video_codecs/video_encoder.h"
@@ -104,11 +103,6 @@
 
 }  // anonymous namespace
 
-std::unique_ptr<webrtc::VideoEncoderFactory> CreateRTCVideoEncoderFactory(
-    media::GpuVideoAcceleratorFactories* gpu_factories) {
-  return std::make_unique<RTCVideoEncoderFactory>(gpu_factories);
-}
-
 RTCVideoEncoderFactory::RTCVideoEncoderFactory(
     media::GpuVideoAcceleratorFactories* gpu_factories)
     : gpu_factories_(gpu_factories) {
diff --git a/third_party/blink/renderer/platform/peerconnection/stun_field_trial.cc b/third_party/blink/renderer/platform/peerconnection/stun_field_trial.cc
index 2182823..bd64f2e0 100644
--- a/third_party/blink/renderer/platform/peerconnection/stun_field_trial.cc
+++ b/third_party/blink/renderer/platform/peerconnection/stun_field_trial.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 "third_party/blink/public/platform/modules/peerconnection/stun_field_trial.h"
+#include "third_party/blink/renderer/platform/peerconnection/stun_field_trial.h"
 
 #include <math.h>
 
diff --git a/third_party/blink/public/platform/modules/peerconnection/stun_field_trial.h b/third_party/blink/renderer/platform/peerconnection/stun_field_trial.h
similarity index 74%
rename from third_party/blink/public/platform/modules/peerconnection/stun_field_trial.h
rename to third_party/blink/renderer/platform/peerconnection/stun_field_trial.h
index 45953c03..223e0145 100644
--- a/third_party/blink/public/platform/modules/peerconnection/stun_field_trial.h
+++ b/third_party/blink/renderer/platform/peerconnection/stun_field_trial.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 THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_STUN_FIELD_TRIAL_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_STUN_FIELD_TRIAL_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_STUN_FIELD_TRIAL_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_STUN_FIELD_TRIAL_H_
 
 #include <memory>
 #include <string>
@@ -12,9 +12,9 @@
 #include "base/macros.h"
 #include "base/threading/thread_checker.h"
 #include "base/timer/timer.h"
-#include "third_party/blink/public/platform/modules/p2p/network_list_manager.h"
-#include "third_party/blink/public/platform/modules/p2p/network_list_observer.h"
-#include "third_party/blink/public/platform/web_common.h"
+#include "third_party/blink/renderer/platform/p2p/network_list_manager.h"
+#include "third_party/blink/renderer/platform/p2p/network_list_observer.h"
+#include "third_party/blink/renderer/platform/platform_export.h"
 #include "third_party/webrtc/p2p/stunprober/stun_prober.h"
 #include "third_party/webrtc/rtc_base/network.h"
 #include "third_party/webrtc/rtc_base/third_party/sigslot/sigslot.h"
@@ -32,13 +32,11 @@
 // stun probe.
 static const int kExperimentStartDelayMs = 30000;
 
-// TODO(crbug.com/787254): Move this class out of the Blink exposed API when
-// all users of it have been Onion souped. Also migrate away from std::vector
-// and std::string.
+// TODO(crbug.com/787254): Migrate away from std::vector and std::string.
 class StunProberTrial : public stunprober::StunProber::Observer,
                         public sigslot::has_slots<> {
  public:
-  struct BLINK_PLATFORM_EXPORT Param {
+  struct PLATFORM_EXPORT Param {
     Param();
     ~Param();
     int requests_per_ip = 0;
@@ -49,9 +47,9 @@
     std::vector<rtc::SocketAddress> servers;
   };
 
-  BLINK_PLATFORM_EXPORT StunProberTrial(rtc::NetworkManager* network_manager,
-                                        const std::string& params,
-                                        rtc::PacketSocketFactory* factory);
+  PLATFORM_EXPORT StunProberTrial(rtc::NetworkManager* network_manager,
+                                  const std::string& params,
+                                  rtc::PacketSocketFactory* factory);
   ~StunProberTrial() override;
 
  private:
@@ -61,9 +59,8 @@
   void OnNetworksChanged();
 
   // Parsing function to decode the '/' separated parameter string |params|.
-  static BLINK_PLATFORM_EXPORT bool ParseParameters(
-      const std::string& param_line,
-      Param* params);
+  static PLATFORM_EXPORT bool ParseParameters(const std::string& param_line,
+                                              Param* params);
 
   // stunprober::StunProber::Observer:
   void OnPrepared(stunprober::StunProber* prober,
@@ -103,4 +100,4 @@
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_MODULES_PEERCONNECTION_STUN_FIELD_TRIAL_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_STUN_FIELD_TRIAL_H_
diff --git a/third_party/blink/renderer/platform/peerconnection/stun_field_trial_test.cc b/third_party/blink/renderer/platform/peerconnection/stun_field_trial_test.cc
index 719c30e7..e48d6c0 100644
--- a/third_party/blink/renderer/platform/peerconnection/stun_field_trial_test.cc
+++ b/third_party/blink/renderer/platform/peerconnection/stun_field_trial_test.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 "third_party/blink/public/platform/modules/peerconnection/stun_field_trial.h"
+#include "third_party/blink/renderer/platform/peerconnection/stun_field_trial.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/webrtc/rtc_base/socket_address.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/transmission_encoding_info_handler.cc b/third_party/blink/renderer/platform/peerconnection/transmission_encoding_info_handler.cc
index 753f0e8..9ce0d60 100644
--- a/third_party/blink/renderer/platform/peerconnection/transmission_encoding_info_handler.cc
+++ b/third_party/blink/renderer/platform/peerconnection/transmission_encoding_info_handler.cc
@@ -11,10 +11,10 @@
 #include "base/logging.h"
 #include "base/system/sys_info.h"
 #include "third_party/blink/public/platform/modules/peerconnection/audio_codec_factory.h"
-#include "third_party/blink/public/platform/modules/peerconnection/video_codec_factory.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/platform/media_capabilities/web_media_configuration.h"
 #include "third_party/blink/renderer/platform/media_capabilities/web_video_configuration.h"
+#include "third_party/blink/renderer/platform/peerconnection/video_codec_factory.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_hash.h"
 #include "third_party/webrtc/api/audio_codecs/audio_encoder_factory.h"
 #include "third_party/webrtc/api/audio_codecs/audio_format.h"
diff --git a/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc
index 5adc8b1..85ae4df 100644
--- a/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc
+++ b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.cc
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "third_party/blink/public/platform/modules/peerconnection/video_codec_factory.h"
+#include "third_party/blink/renderer/platform/peerconnection/video_codec_factory.h"
 
 #include "base/memory/ptr_util.h"
 #include "build/build_config.h"
 #include "media/video/gpu_video_accelerator_factories.h"
-#include "third_party/blink/public/platform/modules/peerconnection/rtc_video_decoder_factory_util.h"
-#include "third_party/blink/public/platform/modules/peerconnection/rtc_video_encoder_factory_util.h"
 #include "third_party/blink/public/platform/platform.h"
+#include "third_party/blink/renderer/platform/peerconnection/rtc_video_decoder_factory.h"
+#include "third_party/blink/renderer/platform/peerconnection/rtc_video_encoder_factory.h"
 #include "third_party/webrtc/api/video_codecs/video_decoder_software_fallback_wrapper.h"
 #include "third_party/webrtc/api/video_codecs/video_encoder_software_fallback_wrapper.h"
 #include "third_party/webrtc/media/base/codec.h"
@@ -178,7 +178,7 @@
 
   if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled() &&
       Platform::Current()->IsWebRtcHWEncodingEnabled()) {
-    encoder_factory = blink::CreateRTCVideoEncoderFactory(gpu_factories);
+    encoder_factory = std::make_unique<RTCVideoEncoderFactory>(gpu_factories);
   }
 
 #if defined(OS_ANDROID)
@@ -195,7 +195,7 @@
 
   if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled() &&
       Platform::Current()->IsWebRtcHWDecodingEnabled()) {
-    decoder_factory = blink::CreateRTCVideoDecoderFactory(gpu_factories);
+    decoder_factory = std::make_unique<RTCVideoDecoderFactory>(gpu_factories);
   }
 
   return std::make_unique<DecoderAdapter>(std::move(decoder_factory));
diff --git a/third_party/blink/renderer/platform/peerconnection/video_codec_factory.h b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.h
new file mode 100644
index 0000000..522d9ae
--- /dev/null
+++ b/third_party/blink/renderer/platform/peerconnection/video_codec_factory.h
@@ -0,0 +1,27 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_VIDEO_CODEC_FACTORY_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_VIDEO_CODEC_FACTORY_H_
+
+#include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/webrtc/api/video_codecs/video_decoder_factory.h"
+#include "third_party/webrtc/api/video_codecs/video_encoder_factory.h"
+
+namespace media {
+class GpuVideoAcceleratorFactories;
+}
+
+namespace blink {
+
+PLATFORM_EXPORT std::unique_ptr<webrtc::VideoEncoderFactory>
+CreateWebrtcVideoEncoderFactory(
+    media::GpuVideoAcceleratorFactories* gpu_factories);
+PLATFORM_EXPORT std::unique_ptr<webrtc::VideoDecoderFactory>
+CreateWebrtcVideoDecoderFactory(
+    media::GpuVideoAcceleratorFactories* gpu_factories);
+
+}  // namespace blink
+
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_VIDEO_CODEC_FACTORY_H_
diff --git a/third_party/blink/renderer/platform/scheduler/test/fuzzer/task_queue_with_voters.h b/third_party/blink/renderer/platform/scheduler/test/fuzzer/task_queue_with_voters.h
index be90c17..f21302c 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fuzzer/task_queue_with_voters.h
+++ b/third_party/blink/renderer/platform/scheduler/test/fuzzer/task_queue_with_voters.h
@@ -13,7 +13,8 @@
 namespace base {
 namespace sequence_manager {
 
-struct PLATFORM_EXPORT TaskQueueWithVoters {
+struct PLATFORM_EXPORT TaskQueueWithVoters
+    : public RefCountedThreadSafe<TaskQueueWithVoters> {
   explicit TaskQueueWithVoters(scoped_refptr<TestTaskQueue> task_queue)
       : queue(std::move(task_queue)) {}
 
diff --git a/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc b/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc
index 7265f0f..caec9ba 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc
+++ b/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.cc
@@ -58,7 +58,7 @@
                                      test_task_runner_->GetMockTickClock());
 
   TaskQueue::Spec spec = TaskQueue::Spec("default_task_queue");
-  task_queues_.emplace_back(std::make_unique<TaskQueueWithVoters>(
+  task_queues_.emplace_back(MakeRefCounted<TaskQueueWithVoters>(
       manager_->CreateTaskQueueWithType<TestTaskQueue>(spec)));
 }
 
@@ -157,7 +157,7 @@
   TestTaskQueue* chosen_task_queue;
   {
     AutoLock lock(lock_);
-    task_queues_.emplace_back(std::make_unique<TaskQueueWithVoters>(
+    task_queues_.emplace_back(MakeRefCounted<TaskQueueWithVoters>(
         manager_->CreateTaskQueueWithType<TestTaskQueue>(spec)));
     chosen_task_queue = task_queues_.back()->queue.get();
   }
@@ -197,7 +197,10 @@
     uint64_t task_queue_id,
     uint32_t delay_ms,
     const SequenceManagerTestDescription::Task& task) {
-  TestTaskQueue* chosen_task_queue =
+  // PostDelayedTask could be called cross-thread - therefore we need a
+  // refptr to the TestTaskQueue which could potentially be deleted by the
+  // thread on which ThreadManager lives.
+  scoped_refptr<TestTaskQueue> chosen_task_queue =
       GetTaskQueueFor(task_queue_id)->queue.get();
 
   std::unique_ptr<Task> pending_task = std::make_unique<Task>(this);
@@ -240,7 +243,7 @@
                                   ActionForTest::ActionType::kSetQueueEnabled,
                                   NowTicks());
 
-  TaskQueueWithVoters* chosen_task_queue =
+  scoped_refptr<TaskQueueWithVoters> chosen_task_queue =
       GetTaskQueueFor(action.task_queue_id());
 
   if (chosen_task_queue->voters.IsEmpty()) {
@@ -261,7 +264,7 @@
                                   ActionForTest::ActionType::kCreateQueueVoter,
                                   NowTicks());
 
-  TaskQueueWithVoters* chosen_task_queue =
+  scoped_refptr<TaskQueueWithVoters> chosen_task_queue =
       GetTaskQueueFor(action.task_queue_id());
   chosen_task_queue->voters.push_back(
       chosen_task_queue->queue.get()->CreateQueueEnabledVoter());
@@ -326,7 +329,7 @@
                                   ActionForTest::ActionType::kInsertFence,
                                   NowTicks());
 
-  TestTaskQueue* chosen_task_queue =
+  scoped_refptr<TestTaskQueue> chosen_task_queue =
       GetTaskQueueFor(action.task_queue_id())->queue.get();
 
   if (action.position() ==
@@ -347,7 +350,7 @@
                                   ActionForTest::ActionType::kRemoveFence,
                                   NowTicks());
 
-  TestTaskQueue* chosen_task_queue =
+  scoped_refptr<TestTaskQueue> chosen_task_queue =
       GetTaskQueueFor(action.task_queue_id())->queue.get();
   chosen_task_queue->RemoveFence();
 }
@@ -391,7 +394,8 @@
     pending_tasks_.erase(pending_tasks_.begin() + i);
 }
 
-TaskQueueWithVoters* ThreadManager::GetTaskQueueFor(uint64_t task_queue_id) {
+scoped_refptr<TaskQueueWithVoters> ThreadManager::GetTaskQueueFor(
+    uint64_t task_queue_id) {
   AutoLock lock(lock_);
   DCHECK(!task_queues_.IsEmpty());
   return task_queues_[task_queue_id % task_queues_.size()].get();
diff --git a/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.h b/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.h
index b0c52af5..e17fc8b 100644
--- a/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.h
+++ b/third_party/blink/renderer/platform/scheduler/test/fuzzer/thread_manager.h
@@ -127,7 +127,7 @@
   // Used to delete |task| from |pending_tasks_|.
   void DeleteTask(Task* task);
 
-  TaskQueueWithVoters* GetTaskQueueFor(uint64_t task_queue_id);
+  scoped_refptr<TaskQueueWithVoters> GetTaskQueueFor(uint64_t task_queue_id);
 
   // Used to protect |task_queues_| and |pending_tasks_|.
   Lock lock_;
@@ -140,7 +140,7 @@
 
   // For testing purposes, this should follow the order in which queues
   // were created on the thread in which |this| was instantiated.
-  Vector<std::unique_ptr<TaskQueueWithVoters>> task_queues_;
+  Vector<scoped_refptr<TaskQueueWithVoters>> task_queues_;
 
   // Used to be able to cancel pending tasks from the sequence manager. For
   // testing purposes, this should follow the order in which the tasks were
diff --git a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
index 8a038025..7f7551bd 100755
--- a/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
+++ b/third_party/blink/tools/blinkpy/presubmit/audit_non_blink_usage.py
@@ -845,12 +845,33 @@
     },
     {
         'paths': [
+            'third_party/blink/renderer/modules/p2p',
+        ],
+        'allowed': [
+            # TODO(crbug.com/787254): Remove GURL usage.
+            'GURL',
+            'cricket::.*',
+            'rtc::.+',
+        ]
+    },
+    {
+        'paths': [
             'third_party/blink/renderer/modules/peerconnection',
             'third_party/blink/renderer/bindings/modules/v8/serialization',
         ],
         'allowed': [
+            # TODO(crbug.com/787254): Remove base::BindOnce, base::Unretained,
+            # base::MessageLoopCurrent.
+            'base::BindOnce',
+            "base::MessageLoopCurrent",
+            'base::Unretained',
             'cricket::.*',
+            'jingle_glue::JingleThreadWrapper',
+            # TODO(crbug.com/787254): Remove GURL usage.
+            'GURL',
             'media::.+',
+            'net::NetworkTrafficAnnotationTag',
+            'net::DefineNetworkTrafficAnnotation',
             'rtc::.+',
             'webrtc::.+',
             'quic::.+',
diff --git a/third_party/blink/web_tests/MSANExpectations b/third_party/blink/web_tests/MSANExpectations
index e1c202b..5ff0fd8 100644
--- a/third_party/blink/web_tests/MSANExpectations
+++ b/third_party/blink/web_tests/MSANExpectations
@@ -158,7 +158,6 @@
 crbug.com/856601 [ Linux ] virtual/feature-policy-permissions/external/wpt/mediacapture-streams/idlharness.https.window.html [ Pass Timeout ]
 crbug.com/856601 [ Linux ] virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/interfaces-sw.https.html [ Timeout Pass ]
 crbug.com/856601 [ Linux ] virtual/service-worker-servicification/external/wpt/service-workers/service-worker/interfaces-sw.https.html [ Timeout Pass ]
-crbug.com/856601 [ Linux ] virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/interfaces-sw.https.html [ Pass Timeout ]
 crbug.com/856601 [ Linux ] virtual/omt-service-worker-startup/external/wpt/service-workers/service-worker/interfaces-sw.https.html [ Pass Failure Timeout ]
 crbug.com/856601 [ Linux ] external/wpt/fetch/api/idl.any.sharedworker.html [ Pass Timeout ]
 crbug.com/856601 [ Linux ] external/wpt/fetch/cors-rfc1918/idlharness.tentative.https.any.serviceworker.html [ Pass Timeout ]
diff --git a/third_party/blink/web_tests/NeverFixTests b/third_party/blink/web_tests/NeverFixTests
index 94fd890..3dacf150 100644
--- a/third_party/blink/web_tests/NeverFixTests
+++ b/third_party/blink/web_tests/NeverFixTests
@@ -1920,9 +1920,6 @@
 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ]
 virtual/omt-worker-fetch/external/wpt/xhr/send-authentication-existing-session-manual.htm [ WontFix ]
 virtual/omt-worker-fetch/external/wpt/xhr/send-authentication-prompt-2-manual.htm [ WontFix ]
-virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-event-is-history-backward-navigation-manual.https.html [ WontFix ]
-virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-event-is-history-forward-navigation-manual.https.html [ WontFix ]
-virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-event-is-reload-navigation-manual.https.html [ WontFix ]
 virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-abort-manual.https.html [ WontFix ]
 virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-onerror-manual.https.html [ WontFix ]
 virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechRecognition-onresult-manual.https.html [ WontFix ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 6b8e1a9..04d51f4 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -2951,7 +2951,6 @@
 # Failure messages are unstable so we cannot create baselines.
 crbug.com/832071 external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
 crbug.com/832071 virtual/navigation-mojo-response/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
-crbug.com/832071 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
 crbug.com/832071 virtual/omt-service-worker-startup/external/wpt/service-workers/service-worker/worker-client-id.https.html [ Failure ]
 
 # failures in external/wpt/css/css-animations/ and web-animations/ from Mozilla tests
@@ -3281,7 +3280,6 @@
 crbug.com/626703 external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
 crbug.com/626703 virtual/omt-service-worker-startup/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
 crbug.com/626703 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
-crbug.com/626703 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/ready.https.html [ Timeout ]
 crbug.com/626703 [ Linux ] external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html [ Failure ]
 crbug.com/626703 [ Mac ] external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html [ Failure ]
 crbug.com/626703 [ Win ] external/wpt/css/css-fonts/math-script-level-and-math-style/math-script-level-auto-and-math-style-002.tentative.html [ Failure ]
@@ -3611,6 +3609,7 @@
 crbug.com/626703 external/wpt/speech-api/SpeechSynthesis-pause-resume.tentative.html [ Timeout ]
 crbug.com/626703 virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechSynthesis-pause-resume.tentative.html [ Timeout ]
 crbug.com/626703 virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechSynthesis-speak-events.html [ Timeout ]
+crbug.com/626703 virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Failure ]
 crbug.com/880983 external/wpt/css/css-masking/clip-path/clip-path-path-interpolation-001.html [ Failure ]
 crbug.com/880983 external/wpt/css/css-masking/clip-path/clip-path-path-interpolation-002.html [ Failure ]
 crbug.com/626703 external/wpt/css/css-scrollbars/textarea-scrollbar-width-none.html [ Failure ]
@@ -3663,7 +3662,7 @@
 crbug.com/626703 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-align-content-horiz-002.xhtml [ Failure ]
 crbug.com/875411 external/wpt/svg/text/reftests/text-shape-inside-002.svg [ Failure ]
 crbug.com/626703 external/wpt/speech-api/SpeechSynthesis-speak-twice.html [ Timeout ]
-crbug.com/626703 external/wpt/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Timeout ]
+crbug.com/626703 external/wpt/speech-api/SpeechSynthesis-speak-without-activation-fails.tentative.html [ Failure ]
 crbug.com/626703 virtual/speech-with-unified-autoplay/external/wpt/speech-api/SpeechSynthesis-speak-twice.html [ Timeout ]
 crbug.com/366553 external/wpt/svg/text/reftests/text-inline-size-007.svg [ Failure ]
 crbug.com/366553 external/wpt/svg/text/reftests/text-inline-size-005.svg [ Failure ]
@@ -4433,13 +4432,11 @@
 crbug.com/691944 external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 crbug.com/691944 virtual/omt-service-worker-startup/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 crbug.com/691944 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
-crbug.com/691944 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/update-after-oneday.https.html [ Skip ]
 
 # These tests (erroneously) see a platform-specific User-Agent header
 crbug.com/595993 external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 crbug.com/595993 virtual/omt-service-worker-startup/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 crbug.com/595993 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
-crbug.com/595993 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-header-visibility.https.html [ Failure ]
 
 crbug.com/619427 [ Mac ] fast/overflow/overflow-height-float-not-removed-crash3.html [ Pass Failure ]
 
@@ -4697,7 +4694,6 @@
 
 # Service worker updates need to handle redirect appropriately.
 crbug.com/889798 external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
-crbug.com/889798 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
 crbug.com/889798 virtual/omt-service-worker-startup/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
 crbug.com/889798 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/import-scripts-redirect.https.html [ Skip ]
 
@@ -5265,8 +5261,6 @@
 
 crbug.com/873873 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ]
 crbug.com/873873 external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ]
-crbug.com/873873 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video.https.html [ Timeout Pass ]
-crbug.com/873873 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/fetch-canvas-tainting-video-cache.https.html [ Timeout Pass ]
 
 crbug.com/875884 [ Linux ] lifecycle/background-change-lifecycle-count.html [ Pass Failure ]
 crbug.com/875884 [ Win ] lifecycle/background-change-lifecycle-count.html [ Pass Failure ]
@@ -5585,7 +5579,6 @@
 crbug.com/933880 external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 crbug.com/933880 virtual/omt-service-worker-startup/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 crbug.com/933880 virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
-crbug.com/933880 virtual/cache-storage-sequence/external/wpt/service-workers/service-worker/request-end-to-end.https.html [ Failure ]
 crbug.com/933880 http/tests/inspector-protocol/network/interception-take-stream.js [ Failure ]
 crbug.com/933880 http/tests/inspector-protocol/network/xhr-interception-auth-fail.js [ Failure ]
 # This passes in content_shell but not in chrome with network service disabled,
@@ -6073,6 +6066,7 @@
 crbug.com/998917 external/wpt/native-file-system/native_FileSystemDirectoryHandle-getEntries.tentative.https.manual.window.html [ Skip ]
 crbug.com/998917 external/wpt/native-file-system/native_FileSystemDirectoryHandle-getFile.tentative.https.manual.window.html [ Skip ]
 crbug.com/998917 external/wpt/native-file-system/native_FileSystemDirectoryHandle-removeEntry.tentative.https.manual.window.html [ Skip ]
+crbug.com/998917 external/wpt/native-file-system/native_FileSystemFileHandle-getFile.tentative.https.manual.window.html [ Skip ]
 crbug.com/998917 external/wpt/native-file-system/native_FileSystemWriter.tentative.https.manual.window.html [ Skip ]
 
 crbug.com/1000051 media/controls/volume-slider.html [ Failure Timeout Pass ]
@@ -6187,4 +6181,3 @@
 # Sheriff 2019-10-04
 crbug.com/1011191 [ Mac ] paint/invalidation/svg/use-clipped-hit.svg  [ Pass Failure ]
 crbug.com/1011188 [ Mac ] paint/invalidation/svg/svg-background-partial-redraw.html [ Pass Failure ]
-crbug.com/1010863 http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html [ Skip ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index ef89c18..eaa7f39 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -1090,11 +1090,6 @@
     "args": ["--enable-blink-features=CSSVariables2AtProperty"]
   },
   {
-    "prefix": "cache-storage-sequence",
-    "base": "external/wpt/service-workers",
-    "args": ["--disable-features=CacheStorageSequence"]
-  },
-  {
     "prefix": "conditional-appcache-delay",
     "base": "http/tests/loading/appcache-delay",
     "args": ["--enable-features=VerifyHTMLFetchedFromAppCacheBeforeDelay"]
diff --git a/third_party/blink/web_tests/WebDriverExpectations b/third_party/blink/web_tests/WebDriverExpectations
index ea618f3..786bafe 100644
--- a/third_party/blink/web_tests/WebDriverExpectations
+++ b/third_party/blink/web_tests/WebDriverExpectations
@@ -169,8 +169,3 @@
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/new_session/default_values.py>>test_desired [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/take_screenshot/user_prompts.py>>test_dismiss_and_notify[capabilities0-alert] [ Failure ]
 crbug.com/626703 [ Linux ] external/wpt/webdriver/tests/take_element_screenshot/user_prompts.py>>test_ignore[capabilities0-alert] [ Failure ]
-
-# Sheriff 2019-09-10
-crbug.com/1000734 [ Linux ] external/wpt/webdriver/tests/take_screenshot/iframe.py>>test_source_origin[same_origin] [ Failure Pass ]
-# Sheriff 2019-09-11
-crbug.com/1000734 [ Linux ] external/wpt/webdriver/tests/take_screenshot/screenshot.py>>test_format_and_dimensions [ Failure Pass ]
diff --git a/third_party/blink/web_tests/animations/interpolation/float-interpolation.html b/third_party/blink/web_tests/animations/interpolation/float-interpolation.html
deleted file mode 100644
index acce4c8..0000000
--- a/third_party/blink/web_tests/animations/interpolation/float-interpolation.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<meta charset="UTF-8">
-<style>
-.expected { color: green; }
-</style>
-<body>
-<script src="resources/interpolation-test.js"></script>
-<template id="target-template">float</template>
-<script>
-assertNoInterpolation({
-  property: 'float',
-  from: 'left',
-  to: 'right',
-});
-</script>
-</body>
diff --git a/third_party/blink/web_tests/animations/interpolation/sample-interpolation-test.html b/third_party/blink/web_tests/animations/interpolation/sample-interpolation-test.html
deleted file mode 100644
index d9a1c83..0000000
--- a/third_party/blink/web_tests/animations/interpolation/sample-interpolation-test.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<body>
-<style>
-.target {
-  width: 100px;
-  height: 100px;
-  background-color: black;
-  display: inline-block;
-}
-</style>
-<script src="resources/interpolation-test.js"></script>
-<script>
-assertInterpolation({
-  property: 'opacity',
-  from: '0',
-  to: '1'
-}, [
-  {at: -0.3, is: '0'},
-  {at: 0, is: '0'},
-  {at: 0.3, is: '0.3'},
-  {at: 0.6, is: '0.6'},
-  {at: 1, is: '1'},
-  {at: 1.5, is: '1'}
-]);
-</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
index a9bc4c5..e7153d3 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -153514,6 +153514,15 @@
    "fetch/metadata/resources/xslt-test.sub.xml": [
     []
    ],
+   "fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub-expected.txt": [
+    []
+   ],
+   "fetch/metadata/sec-fetch-dest/report.tentative.https.sub.html.sub.headers": [
+    []
+   ],
+   "fetch/metadata/sec-fetch-dest/xslt.tentative.https.sub-expected.txt": [
+    []
+   ],
    "fetch/metadata/xslt.tentative.https.sub-expected.txt": [
     []
    ],
@@ -155056,6 +155065,9 @@
    "html/browsers/offline/resources/manifest/url_check.manifest": [
     []
    ],
+   "html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt": [
+    []
+   ],
    "html/browsers/origin/cross-origin-objects/frame-with-then.html": [
     []
    ],
@@ -210648,6 +210660,12 @@
      {}
     ]
    ],
+   "css/css-scroll-anchoring/heuristic-with-offset-update-from-scroll-event-listener.html": [
+    [
+     "css/css-scroll-anchoring/heuristic-with-offset-update-from-scroll-event-listener.html",
+     {}
+    ]
+   ],
    "css/css-scroll-anchoring/heuristic-with-offset-update.html": [
     [
      "css/css-scroll-anchoring/heuristic-with-offset-update.html",
@@ -219398,6 +219416,12 @@
      {}
     ]
    ],
+   "css/cssom-view/scrollLeft-of-scroller-with-wider-scrollbar.html": [
+    [
+     "css/cssom-view/scrollLeft-of-scroller-with-wider-scrollbar.html",
+     {}
+    ]
+   ],
    "css/cssom-view/scrollLeftTop.html": [
     [
      "css/cssom-view/scrollLeftTop.html",
@@ -238733,6 +238757,240 @@
      {}
     ]
    ],
+   "fetch/metadata/sec-fetch-dest/appcache.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/appcache.tentative.https.sub.html",
+     {
+      "timeout": "long"
+     }
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/embed.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/embed.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/fetch-preflight.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/fetch-preflight.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/fetch-via-serviceworker--fallback.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/fetch-via-serviceworker--fallback.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/fetch-via-serviceworker--respondWith.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/fetch-via-serviceworker--respondWith.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/fetch.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/fetch.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/fetch.tentative.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/fetch.tentative.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/history.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/history.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/iframe.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/iframe.tentative.https.sub.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/iframe.tentative.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/iframe.tentative.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/img.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/img.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/navigation.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/navigation.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/object.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/object.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/portal.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/portal.tentative.https.sub.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/prefetch.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/prefetch.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/preload.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/preload.tentative.https.sub.html",
+     {
+      "timeout": "long"
+     }
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/cross-site-redirect.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/cross-site-redirect.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-cross-site.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-cross-site.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-same-site.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-same-site.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/same-origin-redirect.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/same-origin-redirect.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/redirect/same-site-redirect.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/redirect/same-site-redirect.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/report.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/report.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/script.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/script.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/script.tentative.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/script.tentative.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/serviceworker.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/serviceworker.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/style.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/style.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/track.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/track.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/trailing-dot.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/trailing-dot.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/unload.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/unload.tentative.https.sub.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/window-open.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/window-open.tentative.https.sub.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/worker.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/worker.tentative.https.sub.html",
+     {}
+    ]
+   ],
+   "fetch/metadata/sec-fetch-dest/xslt.tentative.https.sub.html": [
+    [
+     "fetch/metadata/sec-fetch-dest/xslt.tentative.https.sub.html",
+     {}
+    ]
+   ],
    "fetch/metadata/serviceworker.tentative.https.sub.html": [
     [
      "fetch/metadata/serviceworker.tentative.https.sub.html",
@@ -389716,6 +389974,10 @@
    "2158d39802969be102ff9a20e256a3ae78acb51d",
    "testharness"
   ],
+  "css/css-scroll-anchoring/heuristic-with-offset-update-from-scroll-event-listener.html": [
+   "b3964dfcc71e9928c640a4e696e79352be90b40c",
+   "testharness"
+  ],
   "css/css-scroll-anchoring/heuristic-with-offset-update.html": [
    "7fcbd983ed569025e5f46fe69002ca91e86fd21a",
    "testharness"
@@ -418916,6 +419178,10 @@
    "cec27f412c926ab087f2cd736e4c6a7d4efb4c99",
    "testharness"
   ],
+  "css/cssom-view/scrollLeft-of-scroller-with-wider-scrollbar.html": [
+   "062edaf8f2dbe99012483f5a10bbf9c2e98fccac",
+   "testharness"
+  ],
   "css/cssom-view/scrollLeftTop-expected.txt": [
    "a0ecd95107eab1d8a403a948f58213a84a0214da",
    "support"
@@ -437265,91 +437531,91 @@
    "support"
   ],
   "fetch/metadata/appcache.tentative.https.sub.html": [
-   "1b5a5767c2c60e969f9e24204ff17017d599c9dc",
+   "3aa902cc1462c08cedc4f8efbd0ae2d86c6961bd",
    "testharness"
   ],
   "fetch/metadata/embed.tentative.https.sub.html": [
-   "bf895e9d5385e9c6e1411f3360fd8480b2a6aa84",
+   "aae61e0ff426494ec4f824aea1ae553ec0d18258",
    "testharness"
   ],
   "fetch/metadata/fetch-preflight.tentative.https.sub.html": [
-   "27dafc25df78b74bb5ae2f86b414b49058c372de",
+   "1ab3de615c8a620c01378577acd8e032998fb980",
    "testharness"
   ],
   "fetch/metadata/fetch-via-serviceworker--fallback.tentative.https.sub.html": [
-   "86edfd06decf56e1ee81030054a582b570bdbecf",
+   "13016fe35374949ddc27c42b1b57a74190675c7e",
    "testharness"
   ],
   "fetch/metadata/fetch-via-serviceworker--respondWith.tentative.https.sub.html": [
-   "d59348c257b1c01b3b7c58015da2457294948b29",
+   "d43715785b4a6c323bae1f96a064b97914c0db3f",
    "testharness"
   ],
   "fetch/metadata/fetch.tentative.https.sub.html": [
-   "30042f8aeb86605bbc1d35d623554cec17b32f87",
+   "72fb52ecd5d8123d5e387fdb20c171a320e38caf",
    "testharness"
   ],
   "fetch/metadata/fetch.tentative.sub.html": [
-   "a2d66d6afa932011f8f64b0a85e79fd91486eef9",
+   "a14c2c5f411c803b28d7a12f314eba466c838437",
    "testharness"
   ],
   "fetch/metadata/font.tentative.https.sub.html": [
-   "07152e8f18ca0234710a64e98b6641b32070e36f",
+   "9064dd6897393b184634a1abcef2f92fed7f9a71",
    "testharness"
   ],
   "fetch/metadata/history.tentative.https.sub.html": [
-   "ef8e74bc86daf994ff8249230b6ddaf7162bb749",
+   "0d78ec06035fa11e6cd9b6f50381079b2001a564",
    "testharness"
   ],
   "fetch/metadata/iframe.tentative.https.sub.html": [
-   "7b89d8dc0daa6d50b76eeec7f7a7f7349e23a0cd",
+   "b8f11c66b7edeedeab85b947e0a0138e5dd0f333",
    "testharness"
   ],
   "fetch/metadata/iframe.tentative.sub.html": [
-   "418e2a2d449ee48d2ab8147ed6923706a1eb9cba",
+   "c5469f458d37bed0ce43ddbf1011085879e9f743",
    "testharness"
   ],
   "fetch/metadata/img.tentative.https.sub.html": [
-   "c3248f6096136149e9d496ecd0ffe30106f99326",
+   "ced6f9845e8af9e6a312d85e9c3f6efa209b8cbb",
    "testharness"
   ],
   "fetch/metadata/navigation.https.sub.html": [
-   "50857aeabafc0e544a9895f4b862a38ad50109aa",
+   "1c2ce9537959c184d864e76010b0d5882932c2a4",
    "testharness"
   ],
   "fetch/metadata/object.tentative.https.sub.html": [
-   "40ef308362eea3effd99a11a6b725d182742b8fb",
+   "cf1c26039995336e413c432c35589322cbcbc43f",
    "testharness"
   ],
   "fetch/metadata/portal.tentative.https.sub.html": [
-   "50f0037dfd054dc4a9ea0e70c79b6a42c448d483",
+   "ee24b5ecbb90c7f0d2892d4f5abeb3c5d1d6acf3",
    "testharness"
   ],
   "fetch/metadata/prefetch.tentative.https.sub.html": [
-   "1902b9bca7992a6d29910d60642acd3bdfd08b1c",
+   "30966f872f85bf0596011b4be2cb192ce7f55d15",
    "testharness"
   ],
   "fetch/metadata/preload.tentative.https.sub.html": [
-   "9dbcad322a64bc545f5e00146efcd37f0101235a",
+   "e8c541ef7f955d72ac95bca171c401c2501f0e5c",
    "testharness"
   ],
   "fetch/metadata/redirect/cross-site-redirect.tentative.https.sub.html": [
-   "4747ebf36f87d4b51927f4b87f29c7c180b75170",
+   "0874273ef94f91eda96b8244ea6c11c9809467eb",
    "testharness"
   ],
   "fetch/metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html": [
-   "8120e762517d025d433ab3d28368c56cb0abc43e",
+   "efff1cdaae8415f54d51b2c54a7cb3f12e6b702e",
    "testharness"
   ],
   "fetch/metadata/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html": [
-   "a15e681ad84c95c012d0863aa20968e1771a2f1c",
+   "e7774f6ba10585a1897e11df10ee25fcaae473c6",
    "testharness"
   ],
   "fetch/metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html": [
-   "8c65095cc9cd7a3e63c04e990f7c632da0cf0c45",
+   "b1df738354cc31b9c553b38a0d02f4edaac88462",
    "testharness"
   ],
   "fetch/metadata/redirect/redirect-http-upgrade.tentative.sub.html": [
-   "6ba5b948332aa451d10c9c08aa07c80a2f2f8f13",
+   "c7e1721af78bbf6b3c258df7c7e8f28369c67e27",
    "testharness"
   ],
   "fetch/metadata/redirect/redirect-https-downgrade.tentative.sub-expected.txt": [
@@ -437357,19 +437623,19 @@
    "support"
   ],
   "fetch/metadata/redirect/redirect-https-downgrade.tentative.sub.html": [
-   "54e48e0c61c258905da416841a6243847ddc65b8",
+   "eee21dafcac42c5074f786b2b76f12d08735f0ef",
    "testharness"
   ],
   "fetch/metadata/redirect/same-origin-redirect.tentative.https.sub.html": [
-   "b88429c540dab3743fb8d674aa0a6927d2ae06d4",
+   "a31d2d399f2ca7f9c3e167276287baf34e5b9202",
    "testharness"
   ],
   "fetch/metadata/redirect/same-site-redirect.tentative.https.sub.html": [
-   "795e418660d8ed6e5b499985415aa6d18970d506",
+   "f342b1c2669ecc17a68cd2699e786c9ee008af28",
    "testharness"
   ],
   "fetch/metadata/report.tentative.https.sub.html": [
-   "8209fd17cd54295faffa9826fa2b7ac371e75eea",
+   "821c56f5877a7a478047ae8711bb8b4f856d54cd",
    "testharness"
   ],
   "fetch/metadata/report.tentative.https.sub.html.sub.headers": [
@@ -437409,7 +437675,7 @@
    "support"
   ],
   "fetch/metadata/resources/helper.js": [
-   "9425246881b1bdc7f4cace59e4e211d298316197",
+   "eac176a49871c9a08ce1358c03543ccabee5aaa4",
    "support"
   ],
   "fetch/metadata/resources/post-to-owner.py": [
@@ -437437,43 +437703,203 @@
    "support"
   ],
   "fetch/metadata/script.tentative.https.sub.html": [
-   "f877b50ec2bd1f04862886853eebf15b0a0dd1c7",
+   "d5a1096e8198c30e8547e8d6dbcbf71822aad3ed",
    "testharness"
   ],
   "fetch/metadata/script.tentative.sub.html": [
-   "66b821265baec27be875bc04dfd8f220facf1e57",
+   "b1361516cb5371bfe5562a09a32bac680ec2af0d",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/appcache.tentative.https.sub.html": [
+   "469001e2f3380a61f59ffc9cebc123e8912b0f36",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/embed.tentative.https.sub.html": [
+   "d880deee5dd9560d180357d0631846ae92076447",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/fetch-preflight.tentative.https.sub.html": [
+   "63d53e8969dad3d564eedc29675d1fdbd4430eda",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/fetch-via-serviceworker--fallback.tentative.https.sub.html": [
+   "d2341572eb7940fd046e3f895dc251ee27074a5d",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/fetch-via-serviceworker--respondWith.tentative.https.sub.html": [
+   "f70ae8b9dd3a55c5dac0d83d01332cd6eba4fea4",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/fetch.tentative.https.sub.html": [
+   "99f8191d7cb928ff5f552e3a4f65e50064bd13b8",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/fetch.tentative.sub.html": [
+   "cf6c7977af221f2e5d2abd9f717e55988dc0294a",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/font.tentative.https.sub.html": [
+   "bc892db320c29b2979060b4ed29aaf5f507798d8",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/history.tentative.https.sub.html": [
+   "55e03a23660bc13d98763ffbe0ba8b077914cbcd",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/iframe.tentative.https.sub.html": [
+   "ed9cfa0c76a45e1871a6759c5d71932556fbc931",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/iframe.tentative.sub.html": [
+   "d90a4147d06dda07a21525a4fbf9afd6a161397c",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/img.tentative.https.sub.html": [
+   "f6b84b1795b40b9a9a8e0cab84456ee12d5547ea",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/navigation.https.sub.html": [
+   "3ab843d165c0510192bca51a36f701ac583ea1bd",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/object.tentative.https.sub.html": [
+   "29db51117858415f4a751892c758c88e9a72bc3e",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/portal.tentative.https.sub.html": [
+   "ad9e8fd936236ef2d8ba07cb0ad73dadd2e74ce3",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/prefetch.tentative.https.sub.html": [
+   "be495ba332ec50e6d2d499b25331154a27dde1a2",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/preload.tentative.https.sub.html": [
+   "2c82abb366403bd055ad3d95754b3d9df76d06dc",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/cross-site-redirect.tentative.https.sub.html": [
+   "ea13cc83bdfdb65d2af15f458accc18e20e2b1ec",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-cross-site.tentative.https.sub.html": [
+   "e74ce0c06d5b30765a696ea5c57be6f78ff68989",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-https-downgrade-upgrade.tentative.sub.html": [
+   "78ee10dc736cac4ae648254df21afac781ca7526",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/multiple-redirect-same-site.tentative.https.sub.html": [
+   "90a476684398cad2cf0ce14c29c2dcfcc08ff7c3",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/redirect-http-upgrade.tentative.sub.html": [
+   "a31efcbf26acd986aab126d990b2eb07f9e0da37",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub-expected.txt": [
+   "f6bcb6a644e174c4ff9d355088acb06d97adc0e3",
+   "support"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/redirect-https-downgrade.tentative.sub.html": [
+   "425753cb5080fab47942a006914d14b9f15cc534",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/same-origin-redirect.tentative.https.sub.html": [
+   "9b8b44b0ef28882f80a7b6289eb4fe7e6b4b5451",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/redirect/same-site-redirect.tentative.https.sub.html": [
+   "2f12fe03cab3bee32e9d65be24bbe5784411982b",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/report.tentative.https.sub.html": [
+   "d3cb7e101a56c95a2fad3519fc7f6b45789bcd91",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/report.tentative.https.sub.html.sub.headers": [
+   "1ec5df78f30183b07f2739f180354d87e4572c5b",
+   "support"
+  ],
+  "fetch/metadata/sec-fetch-dest/script.tentative.https.sub.html": [
+   "18e8be78848ffc2d821c38545f75d5a5fd23b0e1",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/script.tentative.sub.html": [
+   "0512dc676aae721fcbd339540cc9f04f681da2c4",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/serviceworker.tentative.https.sub.html": [
+   "1faee65bf076d15155e6f678064a851f18b949c9",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/sharedworker.tentative.https.sub.html": [
+   "882572c86fec7c1b6fcd3b4abbee870fbcb866d7",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/style.tentative.https.sub.html": [
+   "ed30c81c7dd23469510ed9a47cd4fef497b976bb",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/track.tentative.https.sub.html": [
+   "09e927f1a7c10ab1214c3f4591baeb3944b81e82",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/trailing-dot.tentative.https.sub.html": [
+   "283b928e921917f6d6e54150f992713b29ed4135",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/unload.tentative.https.sub.html": [
+   "a702fb83d597e7662452d5afc8bcdbf3455502f6",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/window-open.tentative.https.sub.html": [
+   "650ba6afa16c0b4cd230fbc85dfc4adb63001ede",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/worker.tentative.https.sub.html": [
+   "8e40fb621e24ae1fc60dc512fd8b6455e92bffdb",
+   "testharness"
+  ],
+  "fetch/metadata/sec-fetch-dest/xslt.tentative.https.sub-expected.txt": [
+   "be26fdf980b54cb052250b379421f776f009fea0",
+   "support"
+  ],
+  "fetch/metadata/sec-fetch-dest/xslt.tentative.https.sub.html": [
+   "df44514fa1f346b5bc46eb73c18495f84c68e8f1",
    "testharness"
   ],
   "fetch/metadata/serviceworker.tentative.https.sub.html": [
-   "6fdb37a7f69c2e0bf15bebf5098dcdaac24a9962",
+   "1fbdee4f091bc46007a627bc80e07c50a1be708f",
    "testharness"
   ],
   "fetch/metadata/sharedworker.tentative.https.sub.html": [
-   "90144156ee4b3e36368f685cc4a879f72998ac8e",
+   "0408c44201fa5125281671e71281d82b0925939f",
    "testharness"
   ],
   "fetch/metadata/style.tentative.https.sub.html": [
-   "1f875e8c5104cdf6b950f3c406f8d80206489328",
+   "08ac184b42109259a5d4977ab1bf0f4865c988b7",
    "testharness"
   ],
   "fetch/metadata/track.tentative.https.sub.html": [
-   "63d76372e0329708c6ef5629800c65c8279c358d",
+   "11e45e23efd00dc5f8c79af8a2f43747628c9050",
    "testharness"
   ],
   "fetch/metadata/trailing-dot.tentative.https.sub.html": [
-   "f1a0ad1b485f68a2e097761769b333465b2d614e",
+   "f7069e7225586ca2de7b3a2c849142e0b4e6a498",
    "testharness"
   ],
   "fetch/metadata/unload.tentative.https.sub.html": [
-   "c93ecab3197e32758a173df742a116b90e279f84",
+   "8917c53a3b3814162366df110fc20aaf38428d3b",
    "testharness"
   ],
   "fetch/metadata/window-open.tentative.https.sub.html": [
-   "79f1eec8542a1122e1402dfd734a7051c87bba29",
+   "29c325f1213e7ca943da8144b0b9badc1e7fb11c",
    "testharness"
   ],
   "fetch/metadata/worker.tentative.https.sub.html": [
-   "df1abc4bbca5f69404c9a21dfe9c1b584ddc10a0",
+   "d2162d5bc7aba1674a75a2f9bc19fccf0aa4eb81",
    "testharness"
   ],
   "fetch/metadata/xslt.tentative.https.sub-expected.txt": [
@@ -437481,7 +437907,7 @@
    "support"
   ],
   "fetch/metadata/xslt.tentative.https.sub.html": [
-   "6e4f186d55c6c793dc8a6a6006b9217473443236",
+   "5fc647b3ae7da7a2d0d65a8a6808deb642165084",
    "testharness"
   ],
   "fetch/nosniff/image.html": [
@@ -441132,6 +441558,10 @@
    "a5d8e59406e870c7be80dfe57ef404ddc7b288a4",
    "manual"
   ],
+  "html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt": [
+   "7aceba49b657cf3c3ae2df1ec1cbf794878b932a",
+   "support"
+  ],
   "html/browsers/origin/cross-origin-objects/cross-origin-objects-on-new-window.html": [
    "3ad0de6a3a3fd7fb2304154d602226e9d5299724",
    "testharness"
@@ -490085,7 +490515,7 @@
    "support"
   ],
   "resources/chromium/webusb-child-test.js": [
-   "add04fa58250d58d56759d242663a6510d306090",
+   "ee790bb619f2c5fc189b0fd826e620d9a9f68bac",
    "support"
   ],
   "resources/chromium/webusb-child-test.js.headers": [
@@ -490093,7 +490523,7 @@
    "support"
   ],
   "resources/chromium/webusb-test.js": [
-   "8bccfd1f724cc622619e024b95c7068b2899ff07",
+   "83b881f7d6eacf95dacc8565f49eccaeb56e1a69",
    "support"
   ],
   "resources/chromium/webusb-test.js.headers": [
@@ -513997,7 +514427,7 @@
    "support"
   ],
   "websockets/handlers/send-backpressure_wsh.py": [
-   "fe69b8f9c0170ec4e18ba3f7c3ab988fbdf77b97",
+   "c57b997b7efbdc83d8ab4c769403421a0930ff2b",
    "support"
   ],
   "websockets/handlers/set-cookie-secure_wsh.py": [
@@ -514413,7 +514843,7 @@
    "testharness"
   ],
   "websockets/stream-tentative/backpressure-receive.any.js": [
-   "11f4bd9d35016b6a36cb1532e4071f42e2f1b817",
+   "b4b090958818fe28aaf4fdbeb8e1aec8d811bb32",
    "testharness"
   ],
   "websockets/stream-tentative/backpressure-send.any.js": [
@@ -520597,7 +521027,7 @@
    "support"
   ],
   "worklets/resources/import-tests.js": [
-   "f504588cdb065cd0616cbde27a6747beb2e145f2",
+   "de4ca726facc71b29b5838c0ec7139cada8865da",
    "support"
   ],
   "worklets/resources/referrer-checker.py": [
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/line-breaking-font-size-zero-001-ref.html b/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/line-breaking-font-size-zero-001-ref.html
new file mode 100644
index 0000000..c9ad496
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/line-breaking-font-size-zero-001-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<style>
+div {
+  width: 100px;
+  background: blue;
+}
+
+inline-block {
+  display: inline-block;
+  width: 80px;
+  height: 1em;
+  background: orange;
+}
+</style>
+</head>
+<body>
+  <div>
+    <inline-block></inline-block><br>
+    <inline-block></inline-block><br>
+    <inline-block></inline-block><br>
+    <inline-block></inline-block><br>
+    <inline-block></inline-block>
+  </div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/line-breaking-font-size-zero-001.html b/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/line-breaking-font-size-zero-001.html
new file mode 100644
index 0000000..6378af39f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/CSS2/linebox/line-breaking-font-size-zero-001.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>CSS Test: Check line breaks when break opportunities have font-size: 0</title>
+<link rel="match" href="line-breaking-font-size-zero-001-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css2/text.html#propdef-white-space" />
+<link rel="author" href="mailto:kojii@chromium.org">
+<style>
+div {
+  width: 100px;
+  background: blue;
+}
+
+inline-block {
+  display: inline-block;
+  width: 80px;
+  height: 1em;
+  background: orange;
+}
+
+sep {
+  font-size: 0;
+}
+</style>
+</head>
+<body>
+  <div>
+    <inline-block></inline-block><sep> </sep>
+    <inline-block></inline-block><sep>, </sep>
+    <inline-block></inline-block><sep>) (</sep>
+    <inline-block></inline-block><sep>a</sep>
+    <inline-block></inline-block>
+  </div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-logical/animations/float-interpolation.html b/third_party/blink/web_tests/external/wpt/css/css-logical/animations/float-interpolation.html
new file mode 100644
index 0000000..c067f2f0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-logical/animations/float-interpolation.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>float interpolation</title>
+<link rel="help" href="https://drafts.csswg.org/css-logical/#float-clear">
+<meta name="assert" content="float supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.expected { color: green; }
+</style>
+
+<body>
+<template id="target-template">float</template>
+<script>
+test_no_interpolation({
+  property: 'float',
+  from: 'left',
+  to: 'right',
+});
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/heuristic-with-offset-update-from-scroll-event-listener.html b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/heuristic-with-offset-update-from-scroll-event-listener.html
new file mode 100644
index 0000000..b3964df
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-scroll-anchoring/heuristic-with-offset-update-from-scroll-event-listener.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring-1/">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1586909">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://mozilla.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+  #scroller {
+    overflow: scroll;
+    height: 500px;
+    height: 500px;
+  }
+  #before {
+    height: 200px;
+  }
+  #anchor {
+    position: relative;
+    width: 200px;
+    height: 200px;
+    margin-bottom: 500px;
+    background-color: blue;
+    top: 0px;
+  }
+</style>
+<div id="scroller">
+  <div id="before">
+  </div>
+  <div id="anchor">
+  </div>
+</div>
+<script>
+async_test(t => {
+  let scroller = document.querySelector('#scroller');
+  let before = document.querySelector('#before');
+  let anchor = document.querySelector('#anchor');
+
+  scroller.onscroll = t.step_func(function() {
+    // Adjust the 'top' of #anchor, which should trigger a suppression
+    anchor.style.top = '10px';
+
+    // Expand #before and make sure we don't apply an adjustment
+    before.style.height = '300px';
+
+    assert_equals(scroller.scrollTop, 200);
+
+    t.step_timeout(t.step_func_done(function() {
+      // Expand #before again and make sure we don't keep #anchor as
+      // an anchor from the last time.
+      before.style.height = '600px';
+      assert_equals(scroller.scrollTop, 200);
+    }), 0);
+  });
+
+  // Scroll down to select #anchor as a scroll anchor
+  scroller.scrollTop = 200;
+}, 'Positioned ancestors with dynamic changes to offsets trigger scroll suppressions.');
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/mongolian-span-001.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/mongolian-span-001.html
new file mode 100644
index 0000000..eeefbb4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/mongolian-span-001.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Test: Test Mongolian in a span renders the same as without the span</title>
+<link rel="match" href="reference/mongolian-span-001-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-writing-modes-3/#block-flow">
+<link rel="author" href="mailto:kojii@chromium.org">
+<style>
+html {
+  writing-mode: vertical-lr;
+  font-size: 50px;
+}
+</style>
+<body>
+  <div>ᠶᠠᠫᠣᠨ</div>
+  <div><span>ᠶᠠᠫᠣᠨ</span></div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/mongolian-span-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/mongolian-span-001-ref.html
new file mode 100644
index 0000000..0b32c3a5a
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-writing-modes/reference/mongolian-span-001-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<style>
+html {
+  writing-mode: vertical-lr;
+  font-size: 50px;
+}
+</style>
+<body>
+  <div>ᠶᠠᠫᠣᠨ</div>
+  <div>ᠶᠠᠫᠣᠨ</div>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini b/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini
index 4fc91a1..b9465c0 100644
--- a/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini
+++ b/third_party/blink/web_tests/external/wpt/infrastructure/metadata/infrastructure/testdriver/actions/actionsWithKeyPressed.html.ini
@@ -1,7 +1,3 @@
 [actionsWithKeyPressed.html]
   expected:
     if product == "safari" or product == "epiphany" or product == "webkit": ERROR
-
-  [TestDriver actions: actions with key pressed]
-    expected:
-      if product == "firefox" and os == "mac": FAIL
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html
index 74e939f5..b977f0c2 100644
--- a/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html
+++ b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/actionsWithKeyPressed.html
@@ -40,12 +40,12 @@
   let test1 = document.getElementById("test1");
   let test2 = document.getElementById("test2");
   document.getElementById("test1").addEventListener("click",
-    e => {keys.push(e.getModifierState("Control"))});
+    e => {keys.push(e.getModifierState("Shift"))});
   document.getElementById("test2").addEventListener("click",
-    e => {keys.push(e.getModifierState("Control"))});
+    e => {keys.push(e.getModifierState("Shift"))});
 
   let actions = new test_driver.Actions()
-    .keyDown("\uE009")
+    .keyDown("\uE008")
     .addTick()
     .pointerMove(0, 0, {origin: test1})
     .pointerDown()
@@ -54,7 +54,7 @@
     .pointerDown()
     .pointerUp()
     .addTick()
-    .keyUp("\uE009")
+    .keyUp("\uE008")
     .addTick()
     .pointerMove(0, 0, {origin: test1})
     .pointerDown()
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemFileHandle-getFile.tentative.https.manual.window.js b/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemFileHandle-getFile.tentative.https.manual.window.js
new file mode 100644
index 0000000..16c68c5
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/native-file-system/native_FileSystemFileHandle-getFile.tentative.https.manual.window.js
@@ -0,0 +1,4 @@
+// META: script=/resources/testdriver.js
+// META: script=resources/test-helpers.js
+// META: script=resources/native-fs-test-helpers.js
+// META: script=script-tests/FileSystemFileHandle-getFile.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.tentative.https.any.js b/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.tentative.https.any.js
new file mode 100644
index 0000000..fb93858
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/native-file-system/sandboxed_FileSystemFileHandle-getFile.tentative.https.any.js
@@ -0,0 +1,3 @@
+// META: script=resources/test-helpers.js
+// META: script=resources/sandboxed-fs-test-helpers.js
+// META: script=script-tests/FileSystemFileHandle-getFile.js
diff --git a/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemFileHandle-getFile.js b/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemFileHandle-getFile.js
new file mode 100644
index 0000000..88e5593
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/native-file-system/script-tests/FileSystemFileHandle-getFile.js
@@ -0,0 +1,8 @@
+directory_test(async (t, root) => {
+  const fileContents = 'awesome content';
+  let handle = await createFileWithContents(t, 'foo.txt', fileContents, /*parent=*/ root);
+  let file = await handle.getFile();
+  let slice = file.slice(1, file.size);
+  let actualContents = await slice.text();
+  assert_equals(actualContents, fileContents.slice(1, fileContents.length));
+}, 'getFile() provides a file that can be sliced');
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/dependent-begin-on-syncbase.html b/third_party/blink/web_tests/external/wpt/svg/animations/dependent-begin-on-syncbase.html
new file mode 100644
index 0000000..591fb64
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/dependent-begin-on-syncbase.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<title>Dependent timed element begin (restart) on syncbase</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<svg>
+  <rect width="10" height="10" fill="red">
+    <set attributeName="fill" to="blue" begin="0s; other.end" id="dependent"/>
+  </rect>
+  <rect x="10" width="10" height="10" fill="blue">
+    <animate attributeName="fill" from="yellow" to="red"
+             begin="indefinite" dur="10ms" id="other"/>
+  </rect>
+</svg>
+<script>
+  async_test(t => {
+    let count = 0;
+    let dependent = document.getElementById('dependent');
+    dependent.addEventListener('endEvent', t.step_func(() => count++));
+    let other = document.getElementById('other');
+    // Wait for #other to end and check animation values.
+    other.addEventListener('endEvent', t.step_func(() => {
+      t.step_timeout(() => {
+        assert_equals(count, 1);
+        assert_equals(getComputedStyle(dependent, null).fill, 'rgb(0, 0, 255)');
+        assert_equals(getComputedStyle(other, null).fill, 'rgb(0, 0, 255)');
+        t.done();
+      });
+    }));
+    let svg = other.ownerSVGElement;
+    // Check initial values.
+    window.onload = t.step_func(() => {
+      window.requestAnimationFrame(t.step_func(() => {
+        assert_equals(count, 0);
+        assert_equals(getComputedStyle(other, null).fill, 'rgb(0, 0, 255)');
+        assert_equals(getComputedStyle(dependent, null).fill, 'rgb(0, 0, 255)');
+        svg.unpauseAnimations();
+      }));
+    });
+    svg.pauseAnimations();
+    other.beginElementAt(0.01);
+  });
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/svg/animations/dependent-end-on-syncbase.html b/third_party/blink/web_tests/external/wpt/svg/animations/dependent-end-on-syncbase.html
new file mode 100644
index 0000000..4879e5f
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/svg/animations/dependent-end-on-syncbase.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<title>Dependent timed element end on syncbase</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<svg>
+  <rect width="10" height="10" fill="blue">
+    <set attributeName="fill" to="yellow" end="other.end" id="dependent"/>
+  </rect>
+  <rect x="10" width="10" height="10" fill="blue">
+    <animate attributeName="fill" from="yellow" to="red"
+             begin="indefinite" dur="10ms" id="other"/>
+  </rect>
+</svg>
+<script>
+  async_test(t => {
+    let count = 0;
+    let dependent = document.getElementById('dependent');
+    dependent.addEventListener('endEvent', t.step_func(() => count++));
+    let other = document.getElementById('other');
+    // Wait for #other to end and check animation values.
+    other.addEventListener('endEvent', t.step_func(() => {
+      t.step_timeout(() => {
+        assert_equals(count, 1);
+        assert_equals(getComputedStyle(dependent, null).fill, 'rgb(0, 0, 255)');
+        assert_equals(getComputedStyle(other, null).fill, 'rgb(0, 0, 255)');
+        t.done();
+      });
+    }));
+    let svg = other.ownerSVGElement;
+    // Check initial values.
+    window.onload = t.step_func(() => {
+      window.requestAnimationFrame(t.step_func(() => {
+        assert_equals(count, 0);
+        assert_equals(getComputedStyle(dependent, null).fill, 'rgb(255, 255, 0)');
+        assert_equals(getComputedStyle(other, null).fill, 'rgb(0, 0, 255)');
+        svg.unpauseAnimations();
+      }));
+    });
+    svg.pauseAnimations();
+    other.beginElementAt(0.01);
+  });
+</script>
diff --git a/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic-expected.html b/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic-expected.html
new file mode 100644
index 0000000..c1ec51cf
--- /dev/null
+++ b/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic-expected.html
@@ -0,0 +1,3 @@
+<!doctype html>
+<p>You should see the word PASS below.</p>
+<div>PASS</div>
diff --git a/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic-expected.txt b/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic-expected.txt
new file mode 100644
index 0000000..9a13424
--- /dev/null
+++ b/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic-expected.txt
@@ -0,0 +1 @@
+CONSOLE WARNING: line 5: Element.createShadowRoot is deprecated and will be removed in M80, around February 2020. Please use Element.attachShadow instead. See https://www.chromestatus.com/features/4507242028072960 and https://developers.google.com/web/updates/2019/07/web-components-time-to-upgrade for more details.
diff --git a/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic.html b/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic.html
new file mode 100644
index 0000000..4042c9b8
--- /dev/null
+++ b/third_party/blink/web_tests/fast/dom/shadow/content-element-fallback-display-none-dynamic.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<p>You should see the word PASS below.</p>
+<div id="host"></div>
+<script>
+  const root = host.createShadowRoot();
+  root.innerHTML = '<content><span style="display:none">PASS</span></content>';
+  host.offsetTop;
+  root.firstChild.firstChild.style.display = "";
+</script>
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-from-nested-frame.html b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-from-nested-frame.html
index ae66badb..9a2b627 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-from-nested-frame.html
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-from-nested-frame.html
@@ -103,6 +103,10 @@
 
 promise_test(async t => {
   let testAuthenticator = await navigator.credentials.test.createAuthenticator();
+  t.add_cleanup(async () => {
+    let id = await testAuthenticator.id();
+    return navigator.credentials.test.removeAuthenticator(id);
+  });
   assert_true(await testAuthenticator.generateAndRegisterKey(ACCEPTABLE_CREDENTIAL_ID, "subdomain.example.test"));
   let keys = await testAuthenticator.registeredKeys();
   assert_equals(keys.length, 1);
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html
index 55e1d38..d1ce0d3 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/credentialscontainer-get-with-virtual-authenticator.html
@@ -26,6 +26,10 @@
 
 promise_test(async t => {
   let testAuthenticator = await navigator.credentials.test.createAuthenticator();
+  t.add_cleanup(async () => {
+    let id = await testAuthenticator.id();
+    return navigator.credentials.test.removeAuthenticator(id);
+  });
   assert_true(await testAuthenticator.generateAndRegisterKey(ACCEPTABLE_CREDENTIAL_ID, "subdomain.example.test"));
   let keys = await testAuthenticator.registeredKeys();
   assert_equals(keys.length, 1);
@@ -93,6 +97,10 @@
   let bleTestAuthenticator = await navigator.credentials.test.createAuthenticator({
     transport: blink.mojom.AuthenticatorTransport.BLE,
   });
+  t.add_cleanup(async () => {
+    let id = await bleTestAuthenticator.id();
+    return navigator.credentials.test.removeAuthenticator(id);
+  });
   let bleCredential = deepCopy(ACCEPTABLE_CREDENTIAL);
   bleCredential.id = new TextEncoder().encode("bleCredential");
   bleCredential.transports = ["ble"]
diff --git a/third_party/blink/web_tests/http/tests/credentialmanager/virtual-navigator-credentials.html b/third_party/blink/web_tests/http/tests/credentialmanager/virtual-navigator-credentials.html
index cf436bc..25bb5efc 100644
--- a/third_party/blink/web_tests/http/tests/credentialmanager/virtual-navigator-credentials.html
+++ b/third_party/blink/web_tests/http/tests/credentialmanager/virtual-navigator-credentials.html
@@ -16,7 +16,7 @@
   assert_false(!!window.mockAuthenticator);
 }, "The WebAuthn Testing API should be active, and the mocked out API should not.");
 
-promise_test(async _ => {
+promise_test(async t => {
   let authenticators = await navigator.credentials.test.authenticators();
   assert_equals(authenticators.length, 0);
 
@@ -24,6 +24,7 @@
   let testAuthenticator2 = await navigator.credentials.test.createAuthenticator();
   let id1 = await testAuthenticator1.id();
   let id2 = await testAuthenticator2.id();
+  t.add_cleanup(() => navigator.credentials.test.clearAuthenticators());
 
   authenticators = await navigator.credentials.test.authenticators();
   assert_equals(authenticators.length, 2);
@@ -41,8 +42,9 @@
   assert_equals(authenticators.length, 0);
 }, "Methods of VirtualAuthenticatorManager work.");
 
-promise_test(async _ => {
+promise_test(async t => {
   let testAuthenticator = await navigator.credentials.test.createAuthenticator();
+  t.add_cleanup(() => navigator.credentials.test.clearAuthenticators());
   let id = await testAuthenticator.id();
   assert_equals(await testAuthenticator.uniqueId(), id);
 
@@ -79,6 +81,4 @@
   assert_equals(keys.length, 0);
 }, "Methods of VirtualAuthenticator work.");
 
-promise_test(_ => navigator.credentials.test.clearAuthenticators(), "Clean up testing environment.");
-
 </script>
diff --git a/third_party/blink/web_tests/virtual/cache-storage-sequence/external/wpt/service-workers/README.txt b/third_party/blink/web_tests/virtual/cache-storage-sequence/external/wpt/service-workers/README.txt
deleted file mode 100644
index a63f3fc..0000000
--- a/third_party/blink/web_tests/virtual/cache-storage-sequence/external/wpt/service-workers/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This suite runs the ServiceWorker and CacheStorage tests with the
-CacheStorageSequence feature disabled.  This makes CacheStorage operate on
-the IO thread in the browser process.
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index c4b095e..354693c 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-10-1-65-g1167bff3e
-Revision: 1167bff3e9a6302687667c6134673e4b3fd13636
+Version: VER-2-10-1-66-g5a1a79c0e
+Revision: 5a1a79c0e8de8e886cc347ad22801982e8298a06
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
 License File: src/docs/FTL.TXT
diff --git a/third_party/webxr_test_pages/bucket_latest.html b/third_party/webxr_test_pages/bucket_latest.html
new file mode 100644
index 0000000..b83ad2ed
--- /dev/null
+++ b/third_party/webxr_test_pages/bucket_latest.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset='utf-8'>
+    <meta name='viewport' content='width=device-width, initial-scale=1'>
+
+    <title>WebXR - Latest test pages redirector</title>
+  </head>
+  <body>
+    <main class='main' id='main'>
+      <script>
+        // Grab url parameters
+        let urlParams = new URLSearchParams(window.location.search);
+        let target = "index.html"
+        if(urlParams.has('target')) {
+          target = urlParams.get('target');
+        }
+
+        console.debug("Target:", target);
+
+        const revisionString = "r{{ revisionString }}";
+        let destination = "https://storage.googleapis.com/chromium-webxr-test/" + revisionString + "/" + target;
+
+        console.debug(destination);
+        window.location.replace(destination);
+      </script>
+    </main>
+  </body>
+</html>
diff --git a/third_party/webxr_test_pages/update_bucket.py b/third_party/webxr_test_pages/update_bucket.py
index 3b42cc0..53d695a 100755
--- a/third_party/webxr_test_pages/update_bucket.py
+++ b/third_party/webxr_test_pages/update_bucket.py
@@ -23,6 +23,7 @@
 FIRST_REVISION = '08a37e09f110ab9cb2af3180f054f26a2fd274d6'
 TEST_SUBDIR = 'webxr-samples'
 INDEX_TEMPLATE = 'bucket_index.html'
+LATEST_TEMPLATE = 'bucket_latest.html'
 
 # Google Cloud storage bucket destination.
 BUCKET = 'gs://chromium-webxr-test'
@@ -193,6 +194,32 @@
     finally:
       os.unlink(temp.name)
 
+def write_latest():
+  """Updates Cloud Storage latest.html based on available test copies, pointing
+  to the latest copy."""
+  cr_positions = get_bucket_copies()
+  cr_positions.sort(key=int, reverse=True)
+  logging.debug('Index: %s', cr_positions)
+
+  if not cr_positions:
+    logging.debug('No cr_positions found, skipping generation of latest.html')
+    return
+
+  logging.debug('Latest cr position: %s', cr_positions[0])
+
+  template = jinja2.Template(open(LATEST_TEMPLATE).read())
+  content = template.render({'revisionString' : cr_positions[0]})
+  logging.debug('latest.html content:\n%s', content)
+
+  with tempfile.NamedTemporaryFile(suffix='.html', delete=False) as temp:
+    try:
+      temp.write(content)
+      temp.seek(0)
+      temp.close()
+      run_modify('gsutil.py', 'cp', temp.name, BUCKET + '/latest.html')
+    finally:
+      os.unlink(temp.name)
+
 def update_test_copies():
   """Uploads a new test copy if available"""
 
@@ -313,8 +340,9 @@
   # Create an index.html file covering all found test copies.
   if need_index_update:
     write_index()
+    write_latest()
   else:
-    logging.info('No changes, skipping index update.')
+    logging.info('No changes, skipping index.html and latest.html update.')
 
 
 if __name__ == '__main__':
diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
index 8bc95fb57..79c3e27 100644
--- a/tools/gritsettings/resource_ids
+++ b/tools/gritsettings/resource_ids
@@ -166,6 +166,9 @@
   "chrome/browser/resources/bluetooth_internals/resources.grd": {
     "includes": [13970],
   },
+  "chrome/browser/resources/omnibox/resources.grd": {
+    "includes": [14000],
+  },
   "chrome/browser/resources/usb_internals/resources.grd": {
     "includes": [14030],
   },
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 9ae22a84..84bdcb5 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -24867,6 +24867,9 @@
   <int value="3043" label="InvalidFragmentDirective"/>
   <int value="3044" label="ContactsManagerGetProperties"/>
   <int value="3045" label="EvaluateScriptMovedBetweenElementDocuments"/>
+  <int value="3046" label="PluginElementLoadedDocument"/>
+  <int value="3047" label="PluginElementLoadedImage"/>
+  <int value="3048" label="PluginElementLoadedExternal"/>
 </enum>
 
 <enum name="FeaturePolicyAllowlistType">
diff --git a/tools/perf/benchmarks/system_health_smoke_test.py b/tools/perf/benchmarks/system_health_smoke_test.py
index aeebcefc..6764d31 100644
--- a/tools/perf/benchmarks/system_health_smoke_test.py
+++ b/tools/perf/benchmarks/system_health_smoke_test.py
@@ -44,6 +44,7 @@
   'system_health.memory_mobile/browse:social:instagram',
   'system_health.memory_mobile/browse:news:reddit',
   'system_health.memory_mobile/browse:social:tumblr_infinite_scroll',
+  'system_health.memory_mobile/browse:social:twitter',
   'system_health.memory_mobile/browse:tools:maps',
   'system_health.memory_mobile/browse:news:cnn',
   'system_health.memory_mobile/browse:news:washingtonpost',
@@ -104,6 +105,7 @@
   'system_health.memory_desktop/browse:media:youtube',
   'system_health.memory_desktop/browse:search:google_india',
   'system_health.memory_desktop/load:games:alphabetty',
+  'system_health.memory_desktop/load:games:bubbles',
   'system_health.memory_desktop/load:games:miniclip',
   'system_health.memory_desktop/load:games:spychase',
   'system_health.memory_desktop/load:media:flickr',
@@ -121,6 +123,7 @@
   'system_health.memory_desktop/load:tools:stackoverflow',
   'system_health.memory_mobile/load:media:soundcloud',
   # MOBILE:
+  'system_health.memory_mobile/load:games:bubbles',
   'system_health.memory_mobile/load:games:spychase',
   'system_health.memory_mobile/load:media:flickr',
   'system_health.memory_mobile/load:media:google_images',
diff --git a/tools/perf/core/results_processor/compute_metrics.py b/tools/perf/core/results_processor/compute_metrics.py
index fae52c1..a56b8c0 100644
--- a/tools/perf/core/results_processor/compute_metrics.py
+++ b/tools/perf/core/results_processor/compute_metrics.py
@@ -28,8 +28,9 @@
   try:
     metrics = [tag['value'] for tag in test_result['tags']
                if tag['key'] == 'tbmv2']
-    html_local_path = test_result['artifacts'][HTML_TRACE_NAME]['filePath']
-    html_remote_url = test_result['artifacts'][HTML_TRACE_NAME]['remoteUrl']
+    html_trace = test_result['outputArtifacts'][HTML_TRACE_NAME]
+    html_local_path = html_trace['filePath']
+    html_remote_url = html_trace['remoteUrl']
 
     logging.info('%s: Starting to compute metrics on trace.',
                  test_result['testPath'])
@@ -73,7 +74,7 @@
   histogram_dicts = []
   work_list = []
   for test_result in intermediate_results['testResults']:
-    artifacts = test_result.get('artifacts', {})
+    artifacts = test_result.get('outputArtifacts', {})
     # TODO(crbug.com/981349): If metrics have already been computed in
     # Telemetry, we read it from the file. Remove this branch after Telemetry
     # does not compute metrics anymore.
diff --git a/tools/perf/core/results_processor/compute_metrics_unittest.py b/tools/perf/core/results_processor/compute_metrics_unittest.py
index 87dcbff..6afc3df0 100644
--- a/tools/perf/core/results_processor/compute_metrics_unittest.py
+++ b/tools/perf/core/results_processor/compute_metrics_unittest.py
@@ -24,14 +24,14 @@
     in_results = testing.IntermediateResults([
         testing.TestResult(
             'benchmark/story1',
-            artifacts={
+            output_artifacts={
                 compute_metrics.HTML_TRACE_NAME:
                     testing.Artifact('/trace1.html', 'gs://trace1.html')},
             tags=['tbmv2:metric1'],
         ),
         testing.TestResult(
             'benchmark/story2',
-            artifacts={
+            output_artifacts={
                 compute_metrics.HTML_TRACE_NAME:
                     testing.Artifact('/trace2.html', 'gs://trace2.html')},
             tags=['tbmv2:metric2'],
@@ -56,7 +56,7 @@
     in_results = testing.IntermediateResults([
         testing.TestResult(
             'benchmark/story1',
-            artifacts={
+            output_artifacts={
                 compute_metrics.HTML_TRACE_NAME:
                     testing.Artifact('/trace1.html', 'gs://trace1.html')},
             tags=['tbmv2:metric1'],
@@ -76,7 +76,7 @@
     in_results = testing.IntermediateResults([
         testing.TestResult(
             'benchmark/story1',
-            artifacts={
+            output_artifacts={
                 compute_metrics.HTML_TRACE_NAME:
                     testing.Artifact('/trace1.html', 'gs://trace1.html')},
             tags=['tbmv2:metric1'],
@@ -99,7 +99,7 @@
     in_results = testing.IntermediateResults([
         testing.TestResult(
             'benchmark/story1',
-            artifacts={
+            output_artifacts={
                 compute_metrics.HTML_TRACE_NAME:
                     testing.Artifact('/trace1.html', 'gs://trace1.html')},
             tags=['tbmv2:metric1'],
diff --git a/tools/perf/core/results_processor/formatters/json3_output.py b/tools/perf/core/results_processor/formatters/json3_output.py
index 0ae49ae..8294758 100644
--- a/tools/perf/core/results_processor/formatters/json3_output.py
+++ b/tools/perf/core/results_processor/formatters/json3_output.py
@@ -46,7 +46,7 @@
     actual_status = result['status']
     expected_status = actual_status if result['isExpected'] else 'PASS'
     status_counter[actual_status] += 1
-    artifacts = result.get('artifacts', {})
+    artifacts = result.get('outputArtifacts', {})
     shard = _GetTagValue(result.get('tags', []), 'shard', as_type=int)
     _MergeDict(
         results['tests'],
diff --git a/tools/perf/core/results_processor/formatters/json3_output_unittest.py b/tools/perf/core/results_processor/formatters/json3_output_unittest.py
index 297ca30e..8cb396f 100644
--- a/tools/perf/core/results_processor/formatters/json3_output_unittest.py
+++ b/tools/perf/core/results_processor/formatters/json3_output_unittest.py
@@ -155,10 +155,10 @@
   def testRepeatedTestCaseWithArtifacts(self):
     self.base_dir = 'base'
     results = self.Convert([
-        testing.TestResult('benchmark/story1', artifacts={
+        testing.TestResult('benchmark/story1', output_artifacts={
             'logs.txt': testing.Artifact('base/artifacts/logs1.txt')
         }),
-        testing.TestResult('benchmark/story1', artifacts={
+        testing.TestResult('benchmark/story1', output_artifacts={
             'logs.txt': testing.Artifact('base/artifacts/logs2.txt'),
             'trace.json': testing.Artifact('base/artifacts/trace2.json')
         }),
@@ -174,12 +174,12 @@
 
   def testRemoteArtifacts(self):
     results = self.Convert([
-        testing.TestResult('benchmark/story1', artifacts={
+        testing.TestResult('benchmark/story1', output_artifacts={
             'logs.txt': testing.Artifact(
                 'base/artifacts/logs1.txt',
                 'https://example.org/artifacts/logs1.txt')
         }),
-        testing.TestResult('benchmark/story1', artifacts={
+        testing.TestResult('benchmark/story1', output_artifacts={
             'logs.txt': testing.Artifact(
                 'base/artifacts/logs2.txt',
                 'https://example.org/artifacts/logs2.txt'),
diff --git a/tools/perf/core/results_processor/processor.py b/tools/perf/core/results_processor/processor.py
index fbb63c4..8c1451c 100644
--- a/tools/perf/core/results_processor/processor.py
+++ b/tools/perf/core/results_processor/processor.py
@@ -89,7 +89,12 @@
       if 'benchmarkRun' in record:
         results['benchmarkRun'].update(record['benchmarkRun'])
       if 'testResult' in record:
-        results['testResults'].append(record['testResult'])
+        test_result = record['testResult']
+        # TODO(crbug.com/1011813): This is for compatibility with old version
+        # of LUCI format. Remove it when Telemetry switches to a new version.
+        if 'artifacts' in test_result:
+          test_result['outputArtifacts'] = test_result.pop('artifacts')
+        results['testResults'].append(test_result)
   return results
 
 
@@ -100,7 +105,7 @@
   all entries for individual traces and adds one entry for aggregate one.
   """
   for result in intermediate_results['testResults']:
-    artifacts = result.get('artifacts', {})
+    artifacts = result.get('outputArtifacts', {})
     traces = [name for name in artifacts if name.startswith('trace/')]
     if len(traces) > 0:
       # For now, the html trace is generated by Telemetry, so it should be there
@@ -138,7 +143,7 @@
   work_list = []
 
   for result in intermediate_results['testResults']:
-    artifacts = result.get('artifacts', {})
+    artifacts = result.get('outputArtifacts', {})
     for name, artifact in artifacts.iteritems():
       if 'remoteUrl' in artifact:
         continue
@@ -161,7 +166,7 @@
     pass
 
   for result in intermediate_results['testResults']:
-    artifacts = result.get('artifacts', {})
+    artifacts = result.get('outputArtifacts', {})
     for name, artifact in artifacts.iteritems():
       logging.info('Uploaded %s of %s to %s', name, result['testPath'],
                    artifact['remoteUrl'])
diff --git a/tools/perf/core/results_processor/processor_test.py b/tools/perf/core/results_processor/processor_test.py
index c049d07..a755845 100644
--- a/tools/perf/core/results_processor/processor_test.py
+++ b/tools/perf/core/results_processor/processor_test.py
@@ -80,7 +80,7 @@
     self.SerializeIntermediateResults([
         testing.TestResult(
             'benchmark/story',
-            artifacts={
+            output_artifacts={
                 'logs': testing.Artifact('/logs.txt', 'gs://logs.txt'),
                 'trace/telemetry': testing.Artifact('/telemetry.json'),
                 'trace.html':
@@ -116,7 +116,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'histogram_dicts.json': testing.Artifact(hist_file)},
+                output_artifacts={
+                    'histogram_dicts.json': testing.Artifact(hist_file)
+                },
             ),
         ],
         diagnostics={
@@ -161,7 +163,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'histogram_dicts.json': testing.Artifact(hist_file)},
+                output_artifacts={
+                    'histogram_dicts.json': testing.Artifact(hist_file)
+                },
             ),
         ],
     )
@@ -202,7 +206,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'histogram_dicts.json': testing.Artifact(hist_file)},
+                output_artifacts={
+                    'histogram_dicts.json': testing.Artifact(hist_file)
+                },
             ),
         ],
     )
@@ -241,9 +247,10 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={
+                output_artifacts={
                     compute_metrics.HTML_TRACE_NAME:
-                        testing.Artifact(trace_file, 'gs://trace.html')},
+                        testing.Artifact(trace_file, 'gs://trace.html')
+                },
                 tags=['tbmv2:sampleMetric'],
             ),
         ],
@@ -278,7 +285,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'histogram_dicts.json': testing.Artifact(hist_file)},
+                output_artifacts={
+                    'histogram_dicts.json': testing.Artifact(hist_file)
+                },
             ),
         ],
         diagnostics={
@@ -380,7 +389,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'histogram_dicts.json': testing.Artifact(hist_file)},
+                output_artifacts={
+                    'histogram_dicts.json': testing.Artifact(hist_file)
+                },
             ),
         ],
         diagnostics={
@@ -424,7 +435,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'histogram_dicts.json': testing.Artifact(hist_file)},
+                output_artifacts={
+                    'histogram_dicts.json': testing.Artifact(hist_file)
+                },
             ),
         ],
     )
@@ -460,7 +473,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'histogram_dicts.json': testing.Artifact(hist_file)},
+                output_artifacts={
+                    'histogram_dicts.json': testing.Artifact(hist_file)
+                },
             ),
         ],
     )
diff --git a/tools/perf/core/results_processor/processor_unittest.py b/tools/perf/core/results_processor/processor_unittest.py
index aa872e5..192f37e 100644
--- a/tools/perf/core/results_processor/processor_unittest.py
+++ b/tools/perf/core/results_processor/processor_unittest.py
@@ -45,11 +45,11 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'log': testing.Artifact('/log.log')},
+                output_artifacts={'log': testing.Artifact('/log.log')},
             ),
             testing.TestResult(
                 'benchmark/story',
-                artifacts={
+                output_artifacts={
                   'trace.html': testing.Artifact('/trace.html'),
                   'screenshot': testing.Artifact('/screenshot.png'),
                 },
@@ -69,7 +69,7 @@
       )
 
     for result in in_results['testResults']:
-      for artifact in result['artifacts'].itervalues():
+      for artifact in result['outputArtifacts'].itervalues():
         self.assertEqual(artifact['remoteUrl'], 'gs://url')
 
   def testUploadArtifacts_CheckRemoteUrl(self):
@@ -77,7 +77,9 @@
         test_results=[
             testing.TestResult(
                 'benchmark/story',
-                artifacts={'trace.html': testing.Artifact('/trace.html')},
+                output_artifacts={
+                    'trace.html': testing.Artifact('/trace.html')
+                },
             ),
         ],
         start_time='2019-10-01T12:00:00.123456Z',
diff --git a/tools/perf/core/results_processor/testing.py b/tools/perf/core/results_processor/testing.py
index 21adc520..2f3b8b9 100644
--- a/tools/perf/core/results_processor/testing.py
+++ b/tools/perf/core/results_processor/testing.py
@@ -36,7 +36,7 @@
 
 def TestResult(test_path, status='PASS', is_expected=None,
                start_time='2015-10-21T07:28:00.000Z', run_duration='1.00s',
-               artifacts=None, tags=None):
+               output_artifacts=None, tags=None):
   """Build a TestResult dict.
 
   This follows the TestResultEntry spec of LUCI Test Results format.
@@ -69,8 +69,8 @@
       'startTime': start_time,
       'runDuration': run_duration
   }
-  if artifacts is not None:
-    test_result['artifacts'] = artifacts
+  if output_artifacts is not None:
+    test_result['outputArtifacts'] = output_artifacts
   if tags is not None:
     test_result['tags'] = [_SplitTag(tag) for tag in tags]
 
diff --git a/tools/perf/page_sets/data/system_health_desktop.json b/tools/perf/page_sets/data/system_health_desktop.json
index 64aee06..6f93af7 100644
--- a/tools/perf/page_sets/data/system_health_desktop.json
+++ b/tools/perf/page_sets/data/system_health_desktop.json
@@ -113,7 +113,7 @@
         },
         "browse:tools:maps:2019": {
             "DEFAULT": "system_health_desktop_feb332ef0c.wprgo"
-	},
+        },
         "browse:tools:sheets:2019": {
             "DEFAULT": "system_health_desktop_d7b02362d8.wprgo"
         },
@@ -135,6 +135,9 @@
         "load:games:bubbles": {
             "DEFAULT": "system_health_desktop_005.wprgo"
         },
+        "load:games:bubbles:2019": {
+            "DEFAULT": "system_health_desktop_615d4e02e4.wprgo"
+        },
         "load:games:lazors": {
             "DEFAULT": "system_health_desktop_005.wprgo"
         },
@@ -372,4 +375,4 @@
     },
     "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.",
     "platform_specific": true
-}
+}
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/system_health_desktop_615d4e02e4.wprgo.sha1 b/tools/perf/page_sets/data/system_health_desktop_615d4e02e4.wprgo.sha1
new file mode 100644
index 0000000..9acfc06
--- /dev/null
+++ b/tools/perf/page_sets/data/system_health_desktop_615d4e02e4.wprgo.sha1
@@ -0,0 +1 @@
+615d4e02e4bde26c8f9ce26df83db11936aab673
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/system_health_mobile.json b/tools/perf/page_sets/data/system_health_mobile.json
index 256c804..f09b4d1 100644
--- a/tools/perf/page_sets/data/system_health_mobile.json
+++ b/tools/perf/page_sets/data/system_health_mobile.json
@@ -120,6 +120,9 @@
         "browse:social:twitter": {
             "DEFAULT": "system_health_mobile_023.wprgo"
         },
+        "browse:social:twitter:2019": {
+            "DEFAULT": "system_health_mobile_34b94b48e8.wprgo"
+        },
         "browse:tech:discourse_infinite_scroll": {
             "DEFAULT": "system_health_mobile_062.wprgo"
         },
@@ -135,6 +138,9 @@
         "load:games:bubbles": {
             "DEFAULT": "system_health_mobile_005.wprgo"
         },
+        "load:games:bubbles:2019": {
+            "DEFAULT": "system_health_mobile_43f2372bc8.wprgo"
+        },
         "load:games:lazors": {
             "DEFAULT": "system_health_mobile_005.wprgo"
         },
diff --git a/tools/perf/page_sets/data/system_health_mobile_34b94b48e8.wprgo.sha1 b/tools/perf/page_sets/data/system_health_mobile_34b94b48e8.wprgo.sha1
new file mode 100644
index 0000000..d63a8e3
--- /dev/null
+++ b/tools/perf/page_sets/data/system_health_mobile_34b94b48e8.wprgo.sha1
@@ -0,0 +1 @@
+34b94b48e8244003a936d97117604cd151aef0e7
\ No newline at end of file
diff --git a/tools/perf/page_sets/data/system_health_mobile_43f2372bc8.wprgo.sha1 b/tools/perf/page_sets/data/system_health_mobile_43f2372bc8.wprgo.sha1
new file mode 100644
index 0000000..5ec7ac4
--- /dev/null
+++ b/tools/perf/page_sets/data/system_health_mobile_43f2372bc8.wprgo.sha1
@@ -0,0 +1 @@
+43f2372bc8984576b434dd2ab5f0eb08f875ee5a
\ No newline at end of file
diff --git a/tools/perf/page_sets/system_health/browsing_stories.py b/tools/perf/page_sets/system_health/browsing_stories.py
index 8ba87ce..bc67ad7 100644
--- a/tools/perf/page_sets/system_health/browsing_stories.py
+++ b/tools/perf/page_sets/system_health/browsing_stories.py
@@ -271,6 +271,17 @@
   SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
   TAGS = [story_tags.YEAR_2016]
 
+class TwitterMobileStory2019(_ArticleBrowsingStory):
+  NAME = 'browse:social:twitter:2019'
+  URL = 'https://www.twitter.com/nasa'
+  ITEM_SELECTOR = ('[class="css-901oao r-hkyrab r-1qd0xha r-1b43r93 r-16dba41 '
+      'r-ad9z0x r-bcqeeo r-bnwqim r-qvutc0"]')
+  SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
+  TAGS = [story_tags.YEAR_2019]
+
+  def _WaitForNavigation(self, action_runner):
+    action_runner.WaitForElement(selector=('[class="css-901oao css-16my406 '
+        'r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0"]'))
 
 class TwitterDesktopStory2018(_ArticleBrowsingStory):
   NAME = 'browse:social:twitter:2018'
diff --git a/tools/perf/page_sets/system_health/loading_stories.py b/tools/perf/page_sets/system_health/loading_stories.py
index afb3cf7..6b5b4452 100644
--- a/tools/perf/page_sets/system_health/loading_stories.py
+++ b/tools/perf/page_sets/system_health/loading_stories.py
@@ -484,6 +484,12 @@
     action_runner.WaitForJavaScriptCondition(
         'document.getElementById("logo") === null')
 
+class LoadBubblesStory2019(_LoadingStory):
+  """Load "smarty bubbles" game on famobi.com"""
+  NAME = 'load:games:bubbles:2019'
+  URL = (
+      'https://games.cdn.famobi.com/html5games/s/smarty-bubbles/v010/?fg_domain=play.famobi.com&fg_uid=d8f24956-dc91-4902-9096-a46cb1353b6f&fg_pid=4638e320-4444-4514-81c4-d80a8c662371&fg_beat=620')
+  TAGS = [story_tags.HEALTH_CHECK, story_tags.YEAR_2019]
 
 class LoadLazorsStory(_LoadingStory):
   NAME = 'load:games:lazors'
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml
index f5f3f91..6ce87b01 100644
--- a/tools/traffic_annotation/summary/annotations.xml
+++ b/tools/traffic_annotation/summary/annotations.xml
@@ -297,7 +297,7 @@
  <item id="web_push_message" hash_code="39886742" type="0" content_hash_code="110064650" os_list="linux,windows" file_path="components/gcm_driver/web_push_sender.cc"/>
  <item id="webrtc_event_log_uploader" hash_code="24186190" type="0" content_hash_code="11005245" os_list="linux,windows" file_path="chrome/browser/media/webrtc/webrtc_event_log_uploader.cc"/>
  <item id="webrtc_log_upload" hash_code="62443804" type="0" content_hash_code="33661169" os_list="linux,windows" file_path="chrome/browser/media/webrtc/webrtc_log_uploader.cc"/>
- <item id="webrtc_peer_connection" hash_code="63497370" type="0" content_hash_code="60553259" os_list="linux,windows" file_path="content/renderer/media/webrtc/peer_connection_dependency_factory.cc"/>
+ <item id="webrtc_peer_connection" hash_code="63497370" type="0" content_hash_code="60553259" os_list="linux,windows" file_path="third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc"/>
  <item id="websocket_basic_stream" hash_code="51586722" type="0" content_hash_code="68121427" os_list="linux,windows" file_path="net/websockets/websocket_basic_stream.cc"/>
  <item id="websocket_stream" hash_code="17188928" type="0" content_hash_code="7250776" os_list="linux,windows" file_path="net/websockets/websocket_stream.cc"/>
  <item id="webstore_data_fetcher" hash_code="26302604" type="0" content_hash_code="24000746" os_list="linux,windows" file_path="chrome/browser/extensions/webstore_data_fetcher.cc"/>
diff --git a/ui/base/webui/web_ui_util.cc b/ui/base/webui/web_ui_util.cc
index 53875795..8864340 100644
--- a/ui/base/webui/web_ui_util.cc
+++ b/ui/base/webui/web_ui_util.cc
@@ -33,6 +33,15 @@
 #endif
 
 namespace webui {
+namespace {
+std::string GetWebUiCssTextDefaults(const std::string& css_template) {
+  ui::TemplateReplacements placeholders;
+  placeholders["textDirection"] = GetTextDirection();
+  placeholders["fontFamily"] = GetFontFamily();
+  placeholders["fontSize"] = GetFontSize();
+  return ui::ReplaceTemplateExpressions(css_template, placeholders);
+}
+}  // namespace
 
 std::string GetBitmapDataUrl(const SkBitmap& bitmap) {
   TRACE_EVENT2("ui", "GetBitmapDataUrl", "width", bitmap.width(), "height",
@@ -193,26 +202,18 @@
   (*replacements)["textdirection"] = GetTextDirection();
 }
 
-std::string GetWebUiCssTextDefaults(base::StringPiece css_template) {
-  ui::TemplateReplacements placeholders;
-  placeholders["textDirection"] = GetTextDirection();
-  placeholders["fontFamily"] = GetFontFamily();
-  placeholders["fontSize"] = GetFontSize();
-  return ui::ReplaceTemplateExpressions(css_template, placeholders);
-}
-
 std::string GetWebUiCssTextDefaults() {
   const ui::ResourceBundle& resource_bundle =
       ui::ResourceBundle::GetSharedInstance();
   return GetWebUiCssTextDefaults(
-      resource_bundle.GetRawDataResource(IDR_WEBUI_CSS_TEXT_DEFAULTS));
+      resource_bundle.DecompressDataResource(IDR_WEBUI_CSS_TEXT_DEFAULTS));
 }
 
 std::string GetWebUiCssTextDefaultsMd() {
   const ui::ResourceBundle& resource_bundle =
       ui::ResourceBundle::GetSharedInstance();
   return GetWebUiCssTextDefaults(
-      resource_bundle.GetRawDataResource(IDR_WEBUI_CSS_TEXT_DEFAULTS_MD));
+      resource_bundle.DecompressDataResource(IDR_WEBUI_CSS_TEXT_DEFAULTS_MD));
 }
 
 void AppendWebUiCssTextDefaults(std::string* html) {
diff --git a/ui/base/webui/web_ui_util.h b/ui/base/webui/web_ui_util.h
index e0e49ea..53a0c275 100644
--- a/ui/base/webui/web_ui_util.h
+++ b/ui/base/webui/web_ui_util.h
@@ -72,10 +72,6 @@
     const std::string& app_locale,
     ui::TemplateReplacements* replacements);
 
-// Get a CSS declaration for common text styles using provided template.
-UI_BASE_EXPORT std::string GetWebUiCssTextDefaults(
-    const std::string& css_template);
-
 // Get a CSS declaration for common text styles for all of Web UI.
 UI_BASE_EXPORT std::string GetWebUiCssTextDefaults();
 
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
index 0ac6e68..fdb01b40 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -464,7 +464,7 @@
 <translation id="6339145975392024142">Bàn phím quốc tế Hoa Kỳ (PC)</translation>
 <translation id="6346310558342052870">Truy cập bị hạn chế</translation>
 <translation id="6353618411602605519">Bàn phím tiếng Croatia</translation>
-<translation id="6356685157277930264">Cửa sổ phản hồi của Files</translation>
+<translation id="6356685157277930264">Cửa sổ phản hồi về tệp</translation>
 <translation id="6358884629796491903">Rồng</translation>
 <translation id="637062427944097960">Tệp này được mở trên máy tính khác. Chuyển sang <ph name="USER_NAME" /> (<ph name="MAIL_ADDRESS" />) để xem tệp này.</translation>
 <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> mục</translation>
diff --git a/ui/events/devices/x11/touch_factory_x11.cc b/ui/events/devices/x11/touch_factory_x11.cc
index 33ddc3e..e4995f7 100644
--- a/ui/events/devices/x11/touch_factory_x11.cc
+++ b/ui/events/devices/x11/touch_factory_x11.cc
@@ -45,6 +45,9 @@
       virtual_core_keyboard_device_(-1),
       id_generator_(0),
       touch_screens_enabled_(true) {
+  // Ensure device data manager is properly initialized.
+  DeviceDataManagerX11::CreateInstance();
+
   if (!DeviceDataManagerX11::GetInstance()->IsXInput2Available())
     return;
 
@@ -282,7 +285,7 @@
 bool TouchFactory::QuerySlotForTrackingID(uint32_t tracking_id, int* slot) {
   if (!id_generator_.HasGeneratedIDFor(tracking_id))
     return false;
-  *slot = static_cast<int>(id_generator_.GetGeneratedID(tracking_id));
+  *slot = GetSlotForTrackingID(tracking_id);
   return true;
 }
 
@@ -290,8 +293,8 @@
   return id_generator_.GetGeneratedID(tracking_id);
 }
 
-void TouchFactory::ReleaseSlotForTrackingID(uint32_t tracking_id) {
-  id_generator_.ReleaseNumber(tracking_id);
+void TouchFactory::ReleaseSlot(int slot) {
+  id_generator_.ReleaseID(slot);
 }
 
 bool TouchFactory::IsTouchDevicePresent() {
diff --git a/ui/events/devices/x11/touch_factory_x11.h b/ui/events/devices/x11/touch_factory_x11.h
index dfe0d2c..fccee24 100644
--- a/ui/events/devices/x11/touch_factory_x11.h
+++ b/ui/events/devices/x11/touch_factory_x11.h
@@ -81,7 +81,7 @@
   int GetSlotForTrackingID(uint32_t tracking_id);
 
   // Releases the slot ID mapping to tracking ID.
-  void ReleaseSlotForTrackingID(uint32_t tracking_id);
+  void ReleaseSlot(int slot);
 
   // Whether any touch device is currently present and enabled.
   bool IsTouchDevicePresent();
diff --git a/ui/events/event.cc b/ui/events/event.cc
index 57a97f75..da9bde42 100644
--- a/ui/events/event.cc
+++ b/ui/events/event.cc
@@ -27,6 +27,7 @@
 #include "ui/gfx/transform_util.h"
 
 #if defined(USE_X11)
+#include "ui/events/devices/x11/touch_factory_x11.h"        // nogncheck
 #include "ui/events/keycodes/keyboard_code_conversion_x.h"  // nogncheck
 #include "ui/events/x/events_x_utils.h"                     // nogncheck
 #include "ui/gfx/x/x11.h"                                   // nogncheck
@@ -733,15 +734,11 @@
     : LocatedEvent(native_event),
       unique_event_id_(ui::GetNextTouchEventId()),
       may_cause_scrolling_(false),
-      should_remove_native_touch_id_mapping_(false),
       hovering_(false),
       pointer_details_(GetTouchPointerDetailsFromNative(native_event)) {
   latency()->AddLatencyNumberWithTimestamp(
       INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, time_stamp());
   latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT);
-
-  if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED)
-    should_remove_native_touch_id_mapping_ = true;
 }
 
 TouchEvent::TouchEvent(EventType type,
@@ -753,7 +750,6 @@
     : LocatedEvent(type, location, root_location, time_stamp, flags),
       unique_event_id_(ui::GetNextTouchEventId()),
       may_cause_scrolling_(false),
-      should_remove_native_touch_id_mapping_(false),
       hovering_(false),
       pointer_details_(pointer_details) {
   latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT);
@@ -775,7 +771,6 @@
     : LocatedEvent(copy),
       unique_event_id_(copy.unique_event_id_),
       may_cause_scrolling_(copy.may_cause_scrolling_),
-      should_remove_native_touch_id_mapping_(false),
       hovering_(copy.hovering_),
       pointer_details_(copy.pointer_details_) {
   // Copied events should not remove touch id mapping, as this either causes the
@@ -784,14 +779,13 @@
 }
 
 TouchEvent::~TouchEvent() {
+#if defined(USE_X11)
   // In ctor TouchEvent(native_event) we call GetTouchId() which in X11
   // platform setups the tracking_id to slot mapping. So in dtor here,
   // if this touch event is a release event, we clear the mapping accordingly.
-  if (should_remove_native_touch_id_mapping_) {
-    DCHECK(type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED);
-    if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED)
-      ClearTouchIdIfReleased(native_event());
-  }
+  if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED)
+    TouchFactory::GetInstance()->ReleaseSlot(pointer_details().id);
+#endif
 }
 
 void TouchEvent::UpdateForRootTransform(
@@ -838,71 +832,6 @@
 KeyEvent* KeyEvent::last_ibus_key_event_ = nullptr;
 #endif
 
-// static
-bool KeyEvent::IsRepeated(const KeyEvent& event) {
-  // A safe guard in case if there were continuous key pressed events that are
-  // not auto repeat.
-  const int kMaxAutoRepeatTimeMs = 2000;
-  KeyEvent** last_key_event;
-#if defined(USE_X11)
-  // Use a different static variable for key events that have non standard
-  // state masks as it may be reposted by an IME. IBUS-GTK uses this field
-  // to detect the re-posted event for example. crbug.com/385873.
-  last_key_event = X11EventHasNonStandardState(event.native_event())
-                       ? &last_ibus_key_event_
-                       : &last_key_event_;
-#else
-  last_key_event = &last_key_event_;
-#endif
-  if (event.is_char())
-    return false;
-  if (event.type() == ui::ET_KEY_RELEASED) {
-    delete *last_key_event;
-    *last_key_event = nullptr;
-    return false;
-  }
-
-  CHECK_EQ(ui::ET_KEY_PRESSED, event.type());
-
-  if (!(*last_key_event)) {
-    *last_key_event = new KeyEvent(event);
-    return false;
-  } else if (event.time_stamp() == (*last_key_event)->time_stamp()) {
-    // The KeyEvent is created from the same native event.
-    return ((*last_key_event)->flags() & ui::EF_IS_REPEAT) != 0;
-  }
-
-  DCHECK(*last_key_event);
-  bool is_repeat = false;
-
-#if defined(OS_WIN)
-  if (event.HasNativeEvent()) {
-    // Bit 30 of lParam represents the "previous key state". If set, the key
-    // was already down, therefore this is an auto-repeat.
-    is_repeat = (event.native_event().lParam & 0x40000000) != 0;
-  }
-#endif
-  if (!is_repeat) {
-    if (event.key_code() == (*last_key_event)->key_code() &&
-        event.flags() == ((*last_key_event)->flags() & ~ui::EF_IS_REPEAT) &&
-        (event.time_stamp() - (*last_key_event)->time_stamp())
-                .InMilliseconds() < kMaxAutoRepeatTimeMs) {
-      is_repeat = true;
-    }
-  }
-
-  if (is_repeat) {
-    (*last_key_event)->set_time_stamp(event.time_stamp());
-    (*last_key_event)->set_flags((*last_key_event)->flags() | ui::EF_IS_REPEAT);
-    return true;
-  }
-
-  delete *last_key_event;
-  *last_key_event = new KeyEvent(event);
-
-  return false;
-}
-
 KeyEvent::KeyEvent(const PlatformEvent& native_event)
     : KeyEvent(native_event, EventFlagsFromNative(native_event)) {}
 
@@ -915,10 +844,15 @@
       INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, time_stamp());
   latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT);
 
-  if (IsRepeated(*this))
-    set_flags(flags() | ui::EF_IS_REPEAT);
+  KeyEvent** last_key_event = &last_key_event_;
 
 #if defined(USE_X11)
+  // Use a different static variable for key events that have non standard
+  // state masks as it may be reposted by an IME. IBUS-GTK uses this field
+  // to detect the re-posted event for example. crbug.com/385873.
+  if (X11EventHasNonStandardState(native_event))
+    last_key_event = &last_ibus_key_event_;
+
   NormalizeFlags();
   key_ = GetDomKeyFromXEvent(native_event);
   SetProperties(GetEventPropertiesFromXEvent(type(), *native_event));
@@ -933,6 +867,9 @@
     set_flags(adjusted_flags);
   }
 #endif
+
+  if (IsRepeated(last_key_event))
+    set_flags(flags() | ui::EF_IS_REPEAT);
 }
 
 KeyEvent::KeyEvent(EventType type,
@@ -1033,6 +970,63 @@
     key_ = DomKey::UNIDENTIFIED;
 }
 
+bool KeyEvent::IsRepeated(KeyEvent** last_key_event) {
+  DCHECK(last_key_event);
+
+  // A safe guard in case if there were continuous key pressed events that are
+  // not auto repeat.
+  const int kMaxAutoRepeatTimeMs = 2000;
+
+  if (is_char())
+    return false;
+  if (type() == ui::ET_KEY_RELEASED) {
+    delete *last_key_event;
+    *last_key_event = nullptr;
+    return false;
+  }
+
+  CHECK_EQ(ui::ET_KEY_PRESSED, type());
+  KeyEvent* last = *last_key_event;
+
+  if (!last) {
+    *last_key_event = new KeyEvent(*this);
+    return false;
+  } else if (time_stamp() == last->time_stamp()) {
+    // The KeyEvent is created from the same native event.
+    return (last->flags() & ui::EF_IS_REPEAT) != 0;
+  }
+
+  DCHECK(last);
+  bool is_repeat = false;
+
+#if defined(OS_WIN)
+  if (HasNativeEvent()) {
+    // Bit 30 of lParam represents the "previous key state". If set, the key
+    // was already down, therefore this is an auto-repeat.
+    is_repeat = (native_event().lParam & 0x40000000) != 0;
+  }
+#endif
+  if (!is_repeat) {
+    if (key_code() == last->key_code() &&
+        flags() == (last->flags() & ~ui::EF_IS_REPEAT) &&
+        (time_stamp() - last->time_stamp()).InMilliseconds() <
+            kMaxAutoRepeatTimeMs) {
+      is_repeat = true;
+    }
+  }
+
+  if (is_repeat) {
+    last->set_time_stamp(time_stamp());
+    last->set_flags(last->flags() | ui::EF_IS_REPEAT);
+    return true;
+  }
+
+  delete *last_key_event;
+  *last_key_event = new KeyEvent(*this);
+
+  return false;
+}
+
 DomKey KeyEvent::GetDomKey() const {
   // Determination of key_ may be done lazily.
   if (key_ == DomKey::NONE)
diff --git a/ui/events/event.h b/ui/events/event.h
index 4ee8135..f38982e 100644
--- a/ui/events/event.h
+++ b/ui/events/event.h
@@ -653,7 +653,6 @@
       : LocatedEvent(model, source, target),
         unique_event_id_(model.unique_event_id_),
         may_cause_scrolling_(model.may_cause_scrolling_),
-        should_remove_native_touch_id_mapping_(false),
         hovering_(false),
         pointer_details_(model.pointer_details_) {}
 
@@ -684,15 +683,6 @@
   void set_hovering(bool hovering) { hovering_ = hovering; }
   bool hovering() const { return hovering_; }
 
-  void set_should_remove_native_touch_id_mapping(
-      bool should_remove_native_touch_id_mapping) {
-    should_remove_native_touch_id_mapping_ =
-        should_remove_native_touch_id_mapping;
-  }
-  bool should_remove_native_touch_id_mapping() const {
-    return should_remove_native_touch_id_mapping_;
-  }
-
   // Overridden from LocatedEvent.
   void UpdateForRootTransform(
       const gfx::Transform& inverted_root_transform,
@@ -721,13 +711,6 @@
   // causes a fling). Defaults to false.
   bool may_cause_scrolling_;
 
-  // True if this event should remove the mapping between the native
-  // event id and the touch_id_. This should only be the case for
-  // release and cancel events where the associated touch press event
-  // created a mapping between the native id and the touch_id_.
-  // NOTE: this is not serialized, as it's generally unique to the source.
-  bool should_remove_native_touch_id_mapping_;
-
   // True for devices like some pens when they support hovering over
   // digitizer and they send events while hovering.
   bool hovering_;
@@ -894,7 +877,9 @@
   // Determine key_ on a keystroke event from code_ and flags().
   void ApplyLayout() const;
 
-  static bool IsRepeated(const KeyEvent& event);
+  // Tells if this is a repeated KeyEvent based on |last_key_event|, which is
+  // then updated with the new last KeyEvent address.
+  bool IsRepeated(KeyEvent** last_key_event);
 
   KeyboardCode key_code_;
 
diff --git a/ui/events/event_utils.h b/ui/events/event_utils.h
index c36d0cd..23da212 100644
--- a/ui/events/event_utils.h
+++ b/ui/events/event_utils.h
@@ -134,9 +134,6 @@
 // Gets the touch id from a native event.
 EVENTS_EXPORT int GetTouchId(const PlatformEvent& native_event);
 
-// Clear the touch id from bookkeeping if it is a release/cancel event.
-EVENTS_EXPORT void ClearTouchIdIfReleased(const PlatformEvent& native_event);
-
 // Gets the fling velocity from a native event. is_cancel is set to true if
 // this was a tap down, intended to stop an ongoing fling.
 EVENTS_EXPORT bool GetFlingData(const PlatformEvent& native_event,
diff --git a/ui/events/events_default.cc b/ui/events/events_default.cc
index 0f52e53..f034ffe 100644
--- a/ui/events/events_default.cc
+++ b/ui/events/events_default.cc
@@ -87,8 +87,6 @@
 
 void ReleaseCopiedNativeEvent(const PlatformEvent& event) {}
 
-void ClearTouchIdIfReleased(const PlatformEvent& xev) {}
-
 // TODO(687724): Will remove all GetTouchId functions.
 int GetTouchId(const PlatformEvent& native_event) {
   const ui::TouchEvent* event =
diff --git a/ui/events/events_stub.cc b/ui/events/events_stub.cc
index b952952..07d093a2 100644
--- a/ui/events/events_stub.cc
+++ b/ui/events/events_stub.cc
@@ -69,10 +69,6 @@
 
 void ReleaseCopiedNativeEvent(const PlatformEvent& event) {}
 
-void ClearTouchIdIfReleased(const PlatformEvent& native_event) {
-  NOTIMPLEMENTED();
-}
-
 int GetTouchId(const PlatformEvent& native_event) {
   NOTIMPLEMENTED();
   return 0;
diff --git a/ui/events/mojom/mojom_traits_unittest.cc b/ui/events/mojom/mojom_traits_unittest.cc
index adab8ca79..0050208 100644
--- a/ui/events/mojom/mojom_traits_unittest.cc
+++ b/ui/events/mojom/mojom_traits_unittest.cc
@@ -385,17 +385,11 @@
   std::unique_ptr<TouchEvent> touch_event =
       std::make_unique<TouchEvent>(ET_TOUCH_CANCELLED, gfx::Point(),
                                    base::TimeTicks::Now(), PointerDetails());
-  touch_event->set_should_remove_native_touch_id_mapping(true);
   std::unique_ptr<Event> expected = std::move(touch_event);
   std::unique_ptr<Event> output;
   ASSERT_TRUE(
       mojo::test::SerializeAndDeserialize<mojom::Event>(&expected, &output));
   ExpectEventsEqual(*expected, *output);
-  // Have to set this back to false, else the destructor tries to access
-  // state not setup in tests.
-  expected->AsTouchEvent()->set_should_remove_native_touch_id_mapping(false);
-  // See comments in TouchEvent for why these two fields are not persisted.
-  EXPECT_FALSE(output->AsTouchEvent()->should_remove_native_touch_id_mapping());
   EXPECT_NE(expected->AsTouchEvent()->unique_event_id(),
             output->AsTouchEvent()->unique_event_id());
 }
diff --git a/ui/events/win/events_win.cc b/ui/events/win/events_win.cc
index 2a7a918..8cffb9e 100644
--- a/ui/events/win/events_win.cc
+++ b/ui/events/win/events_win.cc
@@ -57,10 +57,6 @@
 
 void ReleaseCopiedNativeEvent(const MSG& event) {}
 
-void ClearTouchIdIfReleased(const MSG& xev) {
-  NOTIMPLEMENTED();
-}
-
 int GetTouchId(const MSG& xev) {
   NOTIMPLEMENTED();
   return 0;
diff --git a/ui/events/x/events_x.cc b/ui/events/x/events_x.cc
index f43189b..4c67a73 100644
--- a/ui/events/x/events_x.cc
+++ b/ui/events/x/events_x.cc
@@ -89,10 +89,6 @@
   delete native_event;
 }
 
-void ClearTouchIdIfReleased(const PlatformEvent& native_event) {
-  ClearTouchIdIfReleasedFromXEvent(*native_event);
-}
-
 int GetTouchId(const PlatformEvent& native_event) {
   return GetTouchIdFromXEvent(*native_event);
 }
diff --git a/ui/events/x/events_x_unittest.cc b/ui/events/x/events_x_unittest.cc
index bc2eeac..9ddc11c 100644
--- a/ui/events/x/events_x_unittest.cc
+++ b/ui/events/x/events_x_unittest.cc
@@ -338,42 +338,31 @@
 }
 
 TEST_F(EventsXTest, TouchEventNotRemovingFromNativeMapping) {
-  std::vector<int> devices;
-  devices.push_back(0);
+  const int kTrackingId = 5;
+  const int kDeviceId = 0;
+
+  std::vector<int> devices{kDeviceId};
   ui::SetUpTouchDevicesForTest(devices);
   std::vector<Valuator> valuators;
 
-  const int kTrackingId = 5;
-
   // Two touch presses with the same tracking id.
   ui::ScopedXI2Event xpress0;
-  xpress0.InitTouchEvent(
-      0, XI_TouchBegin, kTrackingId, gfx::Point(10, 10), valuators);
+  xpress0.InitTouchEvent(kDeviceId, XI_TouchBegin, kTrackingId,
+                         gfx::Point(10, 10), valuators);
   std::unique_ptr<ui::TouchEvent> upress0(new ui::TouchEvent(xpress0));
-  EXPECT_EQ(0, GetTouchIdForTrackingId(kTrackingId));
+  EXPECT_EQ(kDeviceId, GetTouchIdForTrackingId(kTrackingId));
 
   ui::ScopedXI2Event xpress1;
-  xpress1.InitTouchEvent(
-      0, XI_TouchBegin, kTrackingId, gfx::Point(20, 20), valuators);
+  xpress1.InitTouchEvent(kDeviceId, XI_TouchBegin, kTrackingId,
+                         gfx::Point(20, 20), valuators);
   ui::TouchEvent upress1(xpress1);
-  EXPECT_EQ(0, GetTouchIdForTrackingId(kTrackingId));
-
-  // The first touch release shouldn't clear the mapping from the
-  // tracking id.
-  ui::ScopedXI2Event xrelease0;
-  xrelease0.InitTouchEvent(
-      0, XI_TouchEnd, kTrackingId, gfx::Point(10, 10), valuators);
-  {
-    ui::TouchEvent urelease0(xrelease0);
-    urelease0.set_should_remove_native_touch_id_mapping(false);
-  }
-  EXPECT_EQ(0, GetTouchIdForTrackingId(kTrackingId));
+  EXPECT_EQ(kDeviceId, GetTouchIdForTrackingId(kTrackingId));
 
   // The second touch release should clear the mapping from the
   // tracking id.
   ui::ScopedXI2Event xrelease1;
-  xrelease1.InitTouchEvent(
-      0, XI_TouchEnd, kTrackingId, gfx::Point(10, 10), valuators);
+  xrelease1.InitTouchEvent(kDeviceId, XI_TouchEnd, kTrackingId,
+                           gfx::Point(10, 10), valuators);
   {
     ui::TouchEvent urelease1(xrelease1);
   }
diff --git a/ui/events/x/events_x_utils.cc b/ui/events/x/events_x_utils.cc
index 7137c10..0d75284 100644
--- a/ui/events/x/events_x_utils.cc
+++ b/ui/events/x/events_x_utils.cc
@@ -677,20 +677,6 @@
   }
 }
 
-void ClearTouchIdIfReleasedFromXEvent(const XEvent& xev) {
-  ui::EventType type = ui::EventTypeFromXEvent(xev);
-  if (type == ui::ET_TOUCH_CANCELLED || type == ui::ET_TOUCH_RELEASED) {
-    ui::TouchFactory* factory = ui::TouchFactory::GetInstance();
-    ui::DeviceDataManagerX11* manager = ui::DeviceDataManagerX11::GetInstance();
-    double tracking_id;
-    if (manager->GetEventData(xev,
-                              ui::DeviceDataManagerX11::DT_TOUCH_TRACKING_ID,
-                              &tracking_id)) {
-      factory->ReleaseSlotForTrackingID(tracking_id);
-    }
-  }
-}
-
 int GetTouchIdFromXEvent(const XEvent& xev) {
   double slot = 0;
   ui::DeviceDataManagerX11* manager = ui::DeviceDataManagerX11::GetInstance();
diff --git a/ui/events/x/events_x_utils.h b/ui/events/x/events_x_utils.h
index 0cdc3a3c..0aa7579 100644
--- a/ui/events/x/events_x_utils.h
+++ b/ui/events/x/events_x_utils.h
@@ -49,9 +49,6 @@
 // Gets the mouse wheel offsets from a XEvent.
 EVENTS_X_EXPORT gfx::Vector2d GetMouseWheelOffsetFromXEvent(const XEvent& xev);
 
-// Clear the touch id from bookkeeping if it is a release/cancel event.
-EVENTS_X_EXPORT void ClearTouchIdIfReleasedFromXEvent(const XEvent& xev);
-
 // Gets the touch id from a XEvent.
 EVENTS_X_EXPORT int GetTouchIdFromXEvent(const XEvent& xev);
 
diff --git a/ui/gfx/font_fallback_linux.cc b/ui/gfx/font_fallback_linux.cc
index 67f4bb9..e57866a 100644
--- a/ui/gfx/font_fallback_linux.cc
+++ b/ui/gfx/font_fallback_linux.cc
@@ -10,12 +10,19 @@
 #include <memory>
 #include <string>
 
+#include "base/containers/mru_cache.h"
+#include "base/files/file_path.h"
 #include "base/lazy_instance.h"
 #include "base/memory/ptr_util.h"
 #include "base/no_destructor.h"
 #include "base/trace_event/trace_event.h"
+#include "third_party/icu/source/common/unicode/uchar.h"
+#include "third_party/icu/source/common/unicode/utf16.h"
+#include "third_party/skia/include/core/SkTypeface.h"
 #include "ui/gfx/font.h"
+#include "ui/gfx/font_fallback.h"
 #include "ui/gfx/linux/fontconfig_util.h"
+#include "ui/gfx/platform_font.h"
 
 namespace gfx {
 
@@ -44,15 +51,171 @@
   return true;
 }
 
-}  // namespace
+// This class uniquely identified a typeface. A typeface can be identified by
+// its file path and it's ttc index.
+class TypefaceCacheKey {
+ public:
+  TypefaceCacheKey(const base::FilePath& font_path, int ttc_index)
+      : font_path_(font_path), ttc_index_(ttc_index) {}
 
-FallbackFontsCache* GetFallbackFontsCacheInstance() {
+  const base::FilePath& font_path() const { return font_path_; }
+  int ttc_index() const { return ttc_index_; }
+
+  bool operator<(const TypefaceCacheKey& other) const {
+    return std::tie(ttc_index_, font_path_) <
+           std::tie(other.ttc_index_, other.font_path_);
+  }
+
+ private:
+  base::FilePath font_path_;
+  int ttc_index_;
+
+  DISALLOW_ASSIGN(TypefaceCacheKey);
+};
+
+// Returns a SkTypeface for a given font path and ttc_index. The typeface is
+// cached to avoid reloading the font from file. SkTypeface is not caching
+// these requests.
+sk_sp<SkTypeface> GetSkTypefaceFromPathAndIndex(const base::FilePath& font_path,
+                                                int ttc_index) {
+  using TypefaceCache = std::map<TypefaceCacheKey, sk_sp<SkTypeface>>;
+  static base::NoDestructor<TypefaceCache> typeface_cache;
+
+  if (font_path.empty())
+    return nullptr;
+
+  TypefaceCache* cache = typeface_cache.get();
+  TypefaceCacheKey key(font_path, ttc_index);
+  TypefaceCache::iterator entry = cache->find(key);
+  if (entry != cache->end())
+    return sk_sp<SkTypeface>(entry->second);
+
+  std::string filename = font_path.AsUTF8Unsafe();
+  sk_sp<SkTypeface> typeface =
+      SkTypeface::MakeFromFile(filename.c_str(), ttc_index);
+  (*cache)[key] = typeface;
+
+  return sk_sp<SkTypeface>(typeface);
+}
+
+// Implements a fallback font cache over FontConfig API.
+//
+// A MRU cache is kept from a font to its potential fallback fonts.
+// The key (e.g. FallbackFontEntry) contains the font for which
+// fallback font must be returned.
+//
+// For each key, the cache is keeping a set (e.g. FallbackFontEntries) of
+// potential fallback font (e.g. FallbackFontEntry). Each fallback font entry
+// contains the supported codepoints (e.g. charset). The fallback font returned
+// by GetFallbackFont(...) depends on the input text and is using the charset
+// to determine the best candidate.
+class FallbackFontKey {
+ public:
+  FallbackFontKey(std::string locale, Font font)
+      : locale_(locale), font_(font) {}
+
+  FallbackFontKey(const FallbackFontKey&) = default;
+  ~FallbackFontKey() = default;
+
+  bool operator<(const FallbackFontKey& other) const {
+    if (font_.GetFontSize() != other.font_.GetFontSize())
+      return font_.GetFontSize() < other.font_.GetFontSize();
+    if (font_.GetStyle() != other.font_.GetStyle())
+      return font_.GetStyle() < other.font_.GetStyle();
+    if (font_.GetFontName() != other.font_.GetFontName())
+      return font_.GetFontName() < other.font_.GetFontName();
+    return locale_ < other.locale_;
+  }
+
+ private:
+  std::string locale_;
+  Font font_;
+
+  DISALLOW_ASSIGN(FallbackFontKey);
+};
+
+class FallbackFontEntry {
+ public:
+  FallbackFontEntry(const base::FilePath& font_path,
+                    int ttc_index,
+                    FontRenderParams font_params,
+                    FcCharSet* charset)
+      : font_path_(font_path),
+        ttc_index_(ttc_index),
+        font_params_(font_params),
+        charset_(FcCharSetCopy(charset)) {}
+
+  FallbackFontEntry(const FallbackFontEntry& other)
+      : font_path_(other.font_path_),
+        ttc_index_(other.ttc_index_),
+        font_params_(other.font_params_),
+        charset_(FcCharSetCopy(other.charset_)) {}
+
+  ~FallbackFontEntry() { FcCharSetDestroy(charset_); }
+
+  const base::FilePath& font_path() const { return font_path_; }
+  int ttc_index() const { return ttc_index_; }
+  FontRenderParams font_params() const { return font_params_; }
+
+  // Returns whether the fallback font support the codepoint.
+  bool HasGlyphForCharacter(UChar32 c) const {
+    return FcCharSetHasChar(charset_, static_cast<FcChar32>(c));
+  }
+
+ private:
+  // Font identity fields.
+  base::FilePath font_path_;
+  int ttc_index_;
+
+  // Font rendering parameters.
+  FontRenderParams font_params_;
+
+  // Font code points coverage.
+  FcCharSet* charset_;
+
+  DISALLOW_ASSIGN(FallbackFontEntry);
+};
+
+using FallbackFontEntries = std::vector<FallbackFontEntry>;
+using FallbackFontEntriesCache =
+    base::MRUCache<FallbackFontKey, FallbackFontEntries>;
+
+// The fallback font cache is a mapping from a font to the potential fallback
+// fonts with their codepoint coverage.
+FallbackFontEntriesCache* GetFallbackFontEntriesCacheInstance() {
+  constexpr int kFallbackFontCacheSize = 256;
+  static base::NoDestructor<FallbackFontEntriesCache> cache(
+      kFallbackFontCacheSize);
+  return cache.get();
+}
+
+// The fallback fonts cache is a mapping from a font family name to its
+// potential fallback fonts.
+using FallbackFontList = std::vector<Font>;
+using FallbackFontListCache = base::MRUCache<std::string, FallbackFontList>;
+
+FallbackFontListCache* GetFallbackFontListCacheInstance() {
   constexpr int kFallbackCacheSize = 64;
-  static base::NoDestructor<FallbackFontsCache> fallback_cache(
+  static base::NoDestructor<FallbackFontListCache> fallback_cache(
       kFallbackCacheSize);
   return fallback_cache.get();
 }
 
+}  // namespace
+
+size_t GetFallbackFontEntriesCacheSizeForTesting() {
+  return GetFallbackFontEntriesCacheInstance()->size();
+}
+
+size_t GetFallbackFontListCacheSizeForTesting() {
+  return GetFallbackFontListCacheInstance()->size();
+}
+
+void ClearAllFontFallbackCachesForTesting() {
+  GetFallbackFontEntriesCacheInstance()->Clear();
+  GetFallbackFontListCacheInstance()->Clear();
+}
+
 bool GetFallbackFont(const Font& font,
                      const std::string& locale,
                      base::StringPiece16 text,
@@ -63,54 +226,107 @@
   if (text.empty())
     return false;
 
-  ScopedFcPattern pattern(FcPatternCreate());
+  FallbackFontEntriesCache* cache = GetFallbackFontEntriesCacheInstance();
+  FallbackFontKey key(locale, font);
+  FallbackFontEntriesCache::iterator cache_entry = cache->Get(key);
 
-  // Add pattern for family name.
-  std::string font_family = font.GetFontName();
-  FcPatternAddString(pattern.get(), FC_FAMILY,
-                     reinterpret_cast<const FcChar8*>(font_family.c_str()));
+  // The cache entry for this font is missing, build it.
+  if (cache_entry == cache->end()) {
+    ScopedFcPattern pattern(FcPatternCreate());
 
-  // Prefer scalable font.
-  FcPatternAddBool(pattern.get(), FC_SCALABLE, FcTrue);
+    // Add pattern for family name.
+    std::string font_family = font.GetFontName();
+    FcPatternAddString(pattern.get(), FC_FAMILY,
+                       reinterpret_cast<const FcChar8*>(font_family.c_str()));
 
-  // Add pattern for locale.
-  FcPatternAddString(pattern.get(), FC_LANG,
-                     reinterpret_cast<const FcChar8*>(locale.c_str()));
+    // Prefer scalable font.
+    FcPatternAddBool(pattern.get(), FC_SCALABLE, FcTrue);
 
-  // Add pattern for font style.
-  if ((font.GetStyle() & gfx::Font::ITALIC) != 0)
-    FcPatternAddInteger(pattern.get(), FC_SLANT, FC_SLANT_ITALIC);
+    // Add pattern for locale.
+    FcPatternAddString(pattern.get(), FC_LANG,
+                       reinterpret_cast<const FcChar8*>(locale.c_str()));
 
-  // Add pattern for characters.
-  FcCharSet* charset = FcCharSetCreate();
-  size_t offset = 0;
-  while (offset < text.length()) {
-    UChar32 code_point;
-    U16_NEXT(text.data(), offset, text.length(), code_point);
-    FcCharSetAddChar(charset, code_point);
+    // Add pattern for font style.
+    if ((font.GetStyle() & gfx::Font::ITALIC) != 0)
+      FcPatternAddInteger(pattern.get(), FC_SLANT, FC_SLANT_ITALIC);
+
+    // Match a font fallback.
+    FcConfig* config = GetGlobalFontConfig();
+    FcConfigSubstitute(config, pattern.get(), FcMatchPattern);
+    FcDefaultSubstitute(pattern.get());
+
+    FallbackFontEntries fallback_font_entries;
+    FcResult fc_result;
+    FcFontSet* fonts =
+        FcFontSort(config, pattern.get(), FcTrue, nullptr, &fc_result);
+    if (fonts) {
+      // Add each potential fallback font returned by font-config to the
+      // set of fallback fonts and keep track of their codepoints coverage.
+      for (int i = 0; i < fonts->nfont; ++i) {
+        FcPattern* current_font = fonts->fonts[i];
+        if (!IsValidFontFromPattern(current_font))
+          continue;
+
+        // Retrieve the font identity fields.
+        base::FilePath font_path = GetFontPath(current_font);
+        int font_ttc_index = GetFontTtcIndex(current_font);
+
+        // Retrieve the charset of the current font.
+        FcCharSet* char_set = nullptr;
+        fc_result = FcPatternGetCharSet(current_font, FC_CHARSET, 0, &char_set);
+        if (fc_result != FcResultMatch || char_set == nullptr)
+          continue;
+
+        // Retrieve the font render params.
+        FontRenderParams font_params;
+        GetFontRenderParamsFromFcPattern(current_font, &font_params);
+
+        fallback_font_entries.push_back(FallbackFontEntry(
+            font_path, font_ttc_index, font_params, char_set));
+      }
+      FcFontSetDestroy(fonts);
+    }
+
+    cache_entry = cache->Put(key, std::move(fallback_font_entries));
   }
-  FcPatternAddCharSet(pattern.get(), "charset", charset);
-  FcCharSetDestroy(charset);
 
-  // Match a font fallback.
-  FcConfig* config = GetGlobalFontConfig();
-  FcConfigSubstitute(config, pattern.get(), FcMatchPattern);
-  FcDefaultSubstitute(pattern.get());
+  // Try each font in the cache to find the one with the highest coverage.
+  size_t fewest_missing_glyphs = text.length() + 1;
+  const FallbackFontEntry* prefered_entry = nullptr;
 
-  FcResult fc_result;
-  ScopedFcPattern matched_pattern(
-      FcFontMatch(config, pattern.get(), &fc_result));
-  if (!matched_pattern || !IsValidFontFromPattern(matched_pattern.get()))
-    return false;
+  for (const auto& entry : cache_entry->second) {
+    // Validate that every character has a known glyph in the font.
+    size_t missing_glyphs = 0;
+    size_t i = 0;
+    while (i < text.length()) {
+      UChar32 c = 0;
+      U16_NEXT(text.data(), i, text.length(), c);
+      if (!entry.HasGlyphForCharacter(c))
+        ++missing_glyphs;
+    }
 
-  FcChar8* fallback_family = nullptr;
-  FcPatternGetString(matched_pattern.get(), FC_FAMILY, 0, &fallback_family);
-  if (!fallback_family)
-    return false;
+    if (missing_glyphs < fewest_missing_glyphs) {
+      fewest_missing_glyphs = missing_glyphs;
+      prefered_entry = &entry;
+    }
 
-  *result =
-      Font(reinterpret_cast<const char*>(fallback_family), font.GetFontSize());
-  return true;
+    // The font is a valid fallback font for the given text.
+    if (missing_glyphs == 0)
+      break;
+  }
+
+  if (prefered_entry) {
+    sk_sp<SkTypeface> typeface = GetSkTypefaceFromPathAndIndex(
+        prefered_entry->font_path(), prefered_entry->ttc_index());
+
+    Font fallback_font(PlatformFont::CreateFromSkTypeface(
+        typeface, font.GetFontSize(), prefered_entry->font_params()));
+
+    *result = fallback_font;
+    return true;
+  }
+
+  return false;
 }
 
 std::vector<Font> GetFallbackFonts(const Font& font) {
@@ -119,7 +335,7 @@
   std::string font_family = font.GetFontName();
 
   // Lookup in the cache for already processed family.
-  FallbackFontsCache* font_cache = GetFallbackFontsCacheInstance();
+  FallbackFontListCache* font_cache = GetFallbackFontListCacheInstance();
   auto cached_fallback_fonts = font_cache->Get(font_family);
   if (cached_fallback_fonts != font_cache->end()) {
     // Already in cache.
@@ -127,7 +343,7 @@
   }
 
   // Retrieve the font fallbacks for a given family name.
-  std::vector<Font> fallback_fonts;
+  FallbackFontList fallback_fonts;
   FcPattern* pattern = FcPatternCreate();
   FcPatternAddString(pattern, FC_FAMILY,
                      reinterpret_cast<const FcChar8*>(font_family.c_str()));
diff --git a/ui/gfx/font_fallback_linux.h b/ui/gfx/font_fallback_linux.h
index 7ce59db..e21ca1b 100644
--- a/ui/gfx/font_fallback_linux.h
+++ b/ui/gfx/font_fallback_linux.h
@@ -6,20 +6,16 @@
 #define UI_GFX_FONT_FALLBACK_LINUX_H_
 
 #include <string>
-#include <vector>
 
-#include "base/containers/mru_cache.h"
 #include "third_party/icu/source/common/unicode/uchar.h"
-#include "ui/gfx/font.h"
-#include "ui/gfx/font_fallback.h"
 #include "ui/gfx/gfx_export.h"
 
 namespace gfx {
 
-// The fallback cache is a mapping from a font family name to its potential
-// fallback fonts.
-using FallbackFontsCache = base::MRUCache<std::string, std::vector<Font>>;
-GFX_EXPORT FallbackFontsCache* GetFallbackFontsCacheInstance();
+// Exposed fallback font caches methods for testing.
+GFX_EXPORT size_t GetFallbackFontEntriesCacheSizeForTesting();
+GFX_EXPORT size_t GetFallbackFontListCacheSizeForTesting();
+GFX_EXPORT void ClearAllFontFallbackCachesForTesting();
 
 // Return a font family which provides a glyph for the Unicode code point
 // specified by character.
diff --git a/ui/gfx/font_fallback_linux_unittest.cc b/ui/gfx/font_fallback_linux_unittest.cc
index 1e1db2f..eb86ca0 100644
--- a/ui/gfx/font_fallback_linux_unittest.cc
+++ b/ui/gfx/font_fallback_linux_unittest.cc
@@ -13,13 +13,14 @@
 
 namespace {
 const char kDefaultApplicationLocale[] = "us-en";
+const char kFrenchApplicationLocale[] = "ca-fr";
 }  // namespace
 
 class FontFallbackLinuxTest : public testing::Test {
  public:
   void SetUp() override {
-    // Clear the font fallback cache.
-    GetFallbackFontsCacheInstance()->Clear();
+    // Clear the font fallback caches.
+    ClearAllFontFallbackCachesForTesting();
   }
 };
 
@@ -52,13 +53,42 @@
   EXPECT_EQ(fallback_font_khmer.GetFontName(), "Noto Sans Khmer");
 }
 
+TEST_F(FontFallbackLinuxTest, GetFallbackFontCache) {
+  EXPECT_EQ(0U, GetFallbackFontEntriesCacheSizeForTesting());
+
+  Font base_font;
+  Font fallback_font;
+  EXPECT_TRUE(GetFallbackFont(base_font, kDefaultApplicationLocale,
+                              base::WideToUTF16(L"⻩"), &fallback_font));
+  EXPECT_EQ(1U, GetFallbackFontEntriesCacheSizeForTesting());
+
+  // Second call should not increase the cache size.
+  EXPECT_TRUE(GetFallbackFont(base_font, kDefaultApplicationLocale,
+                              base::WideToUTF16(L"⻩"), &fallback_font));
+  EXPECT_EQ(1U, GetFallbackFontEntriesCacheSizeForTesting());
+
+  // Third call with a different code point in the same font, should not
+  // increase the cache size.
+  EXPECT_TRUE(GetFallbackFont(base_font, kDefaultApplicationLocale,
+                              base::WideToUTF16(L"⻪"), &fallback_font));
+  EXPECT_EQ(1U, GetFallbackFontEntriesCacheSizeForTesting());
+
+  // A different locale should trigger an new cache entry.
+  EXPECT_TRUE(GetFallbackFont(base_font, kFrenchApplicationLocale,
+                              base::WideToUTF16(L"⻩"), &fallback_font));
+  EXPECT_EQ(2U, GetFallbackFontEntriesCacheSizeForTesting());
+
+  // The fallbackfonts cache should not be affected.
+  EXPECT_EQ(0U, GetFallbackFontListCacheSizeForTesting());
+}
+
 TEST_F(FontFallbackLinuxTest, Fallbacks) {
-  EXPECT_EQ(0U, GetFallbackFontsCacheInstance()->size());
+  EXPECT_EQ(0U, GetFallbackFontListCacheSizeForTesting());
 
   Font default_font("sans", 13);
   std::vector<Font> fallbacks = GetFallbackFonts(default_font);
   EXPECT_FALSE(fallbacks.empty());
-  EXPECT_EQ(1U, GetFallbackFontsCacheInstance()->size());
+  EXPECT_EQ(1U, GetFallbackFontListCacheSizeForTesting());
 
   // The first fallback should be 'DejaVu Sans' which is the default linux
   // fonts. The fonts on linux are mock with test_fonts (see
@@ -69,7 +99,10 @@
   // Second lookup should not increase the cache size.
   fallbacks = GetFallbackFonts(default_font);
   EXPECT_FALSE(fallbacks.empty());
-  EXPECT_EQ(1U, GetFallbackFontsCacheInstance()->size());
+  EXPECT_EQ(1U, GetFallbackFontListCacheSizeForTesting());
+
+  // The fallbackfont cache should not be affected.
+  EXPECT_EQ(0U, GetFallbackFontEntriesCacheSizeForTesting());
 }
 
 }  // namespace gfx
diff --git a/ui/gfx/sequential_id_generator.cc b/ui/gfx/sequential_id_generator.cc
index 9ad8c5c..86b9359 100644
--- a/ui/gfx/sequential_id_generator.cc
+++ b/ui/gfx/sequential_id_generator.cc
@@ -55,6 +55,13 @@
   }
 }
 
+void SequentialIDGenerator::ReleaseID(uint32_t id) {
+  if (id_to_number_.count(id) > 0U) {
+    UpdateNextAvailableIDAfterRelease(id);
+    Remove(id_to_number_[id], &number_to_id_, &id_to_number_);
+  }
+}
+
 void SequentialIDGenerator::ResetForTest() {
   number_to_id_.clear();
   id_to_number_.clear();
diff --git a/ui/gfx/sequential_id_generator.h b/ui/gfx/sequential_id_generator.h
index c61fca64..9de8181 100644
--- a/ui/gfx/sequential_id_generator.h
+++ b/ui/gfx/sequential_id_generator.h
@@ -36,6 +36,10 @@
   // |GetGeneratedID()| - does nothing if the number is not mapped.
   void ReleaseNumber(uint32_t number);
 
+  // Releases ID previously generated by calling |GetGeneratedID()|. Does
+  // nothing if the ID is not mapped.
+  void ReleaseID(uint32_t id);
+
   void ResetForTest();
 
  private:
diff --git a/ui/gl/gl_context.cc b/ui/gl/gl_context.cc
index f0941e62..3d238f9 100644
--- a/ui/gl/gl_context.cc
+++ b/ui/gl/gl_context.cc
@@ -14,8 +14,10 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_local.h"
+#include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_fence.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface.h"
@@ -60,6 +62,9 @@
 }
 
 GLContext::~GLContext() {
+#if defined(OS_MACOSX)
+  DCHECK(!HasBackpressureFences());
+#endif
   share_group_->RemoveContext(this);
   if (GetCurrent() == this) {
     SetCurrent(nullptr);
@@ -193,13 +198,82 @@
 }
 
 #if defined(OS_MACOSX)
+constexpr uint64_t kInvalidFenceId = 0;
+
 uint64_t GLContext::BackpressureFenceCreate() {
-  return 0;
+  TRACE_EVENT0("gpu", "GLContextEGL::BackpressureFenceCreate");
+
+  // This flush will trigger a crash if FlushForDriverCrashWorkaround is not
+  // called sufficiently frequently.
+  glFlush();
+
+  if (gl::GLFence::IsSupported()) {
+    next_backpressure_fence_ += 1;
+    backpressure_fences_[next_backpressure_fence_] = GLFence::Create();
+    return next_backpressure_fence_;
+  }
+  glFinish();
+  return kInvalidFenceId;
 }
 
-void GLContext::BackpressureFenceWait(uint64_t fence) {}
+void GLContext::BackpressureFenceWait(uint64_t fence_id) {
+  TRACE_EVENT0("gpu", "GLContext::BackpressureFenceWait");
+  if (fence_id == kInvalidFenceId) {
+    return;
+  }
 
-void GLContext::FlushForDriverCrashWorkaround() {}
+  // If a fence is not found, then it has already been waited on.
+  auto found = backpressure_fences_.find(fence_id);
+  if (found == backpressure_fences_.end())
+    return;
+  std::unique_ptr<GLFence> fence = std::move(found->second);
+  backpressure_fences_.erase(found);
+
+  // While we could call GLFence::ClientWait, this performs a busy wait on
+  // Mac, leading to high CPU usage. Instead we poll with a 1ms delay. This
+  // should have minimal impact, as we will only hit this path when we are
+  // more than one frame (16ms) behind.
+  //
+  // Note that on some platforms (10.9), fences appear to sometimes get
+  // lost and will never pass. Add a 32ms timeout to prevent these
+  // situations from causing a GPU process hang.
+  // https://crbug.com/618075
+  bool fence_completed = false;
+  for (int poll_iter = 0; !fence_completed && poll_iter < 32; ++poll_iter) {
+    if (poll_iter > 0) {
+      base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
+    }
+    {
+      TRACE_EVENT0("gpu", "GLFence::HasCompleted");
+      fence_completed = fence->HasCompleted();
+    }
+  }
+  if (!fence_completed) {
+    TRACE_EVENT0("gpu", "Finish");
+    // We timed out waiting for the above fence, just issue a glFinish.
+    glFinish();
+  }
+  fence.reset();
+
+  // Waiting on |fence_id| has implicitly waited on all previous fences, so
+  // remove them.
+  while (backpressure_fences_.begin()->first < fence_id)
+    backpressure_fences_.erase(backpressure_fences_.begin());
+}
+
+bool GLContext::HasBackpressureFences() const {
+  return !backpressure_fences_.empty();
+}
+
+void GLContext::DestroyBackpressureFences() {
+  backpressure_fences_.clear();
+}
+
+void GLContext::FlushForDriverCrashWorkaround() {
+  if (!IsCurrent(nullptr))
+    return;
+  glFlush();
+}
 #endif
 
 bool GLContext::HasExtension(const char* name) {
diff --git a/ui/gl/gl_context.h b/ui/gl/gl_context.h
index e0ba3704..af08773 100644
--- a/ui/gl/gl_context.h
+++ b/ui/gl/gl_context.h
@@ -5,6 +5,7 @@
 #ifndef UI_GL_GL_CONTEXT_H_
 #define UI_GL_GL_CONTEXT_H_
 
+#include <map>
 #include <memory>
 #include <string>
 
@@ -39,6 +40,7 @@
 class DebugGLApi;
 struct DriverGL;
 class GLApi;
+class GLFence;
 class GLSurface;
 class GPUTiming;
 class GPUTimingClient;
@@ -256,6 +258,13 @@
 
   GLApi* gl_api() { return gl_api_.get(); }
 
+#if defined(OS_MACOSX)
+  // Child classes are responsible for calling DestroyBackpressureFences during
+  // their destruction while a context is current.
+  bool HasBackpressureFences() const;
+  void DestroyBackpressureFences();
+#endif
+
  private:
   friend class base::RefCounted<GLContext>;
 
@@ -290,6 +299,11 @@
   std::unique_ptr<GLStateRestorer> state_restorer_;
   std::unique_ptr<GLVersionInfo> version_info_;
 
+#if defined(OS_MACOSX)
+  std::map<uint64_t, std::unique_ptr<GLFence>> backpressure_fences_;
+  uint64_t next_backpressure_fence_ = 0;
+#endif
+
   DISALLOW_COPY_AND_ASSIGN(GLContext);
 };
 
diff --git a/ui/gl/gl_context_cgl.cc b/ui/gl/gl_context_cgl.cc
index 8167e646..28b9264 100644
--- a/ui/gl/gl_context_cgl.cc
+++ b/ui/gl/gl_context_cgl.cc
@@ -19,7 +19,6 @@
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/dual_gpu_state_mac.h"
 #include "ui/gl/gl_bindings.h"
-#include "ui/gl/gl_fence.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface.h"
@@ -131,7 +130,7 @@
 }
 
 void GLContextCGL::Destroy() {
-  if (!yuv_to_rgb_converters_.empty() || !backpressure_fences_.empty()) {
+  if (!yuv_to_rgb_converters_.empty() || HasBackpressureFences()) {
     // If this context is not current, bind this context's API so that the YUV
     // converter and GLFences can safely destruct
     GLContext* current_context = GetRealCurrent();
@@ -142,7 +141,7 @@
     ScopedCGLSetCurrentContext scoped_set_current(
         static_cast<CGLContextObj>(context_));
     yuv_to_rgb_converters_.clear();
-    backpressure_fences_.clear();
+    DestroyBackpressureFences();
 
     // Rebind the current context's API if needed.
     if (current_context && current_context != this) {
@@ -211,75 +210,6 @@
   return yuv_to_rgb_converter.get();
 }
 
-constexpr uint64_t kInvalidFenceId = 0;
-
-uint64_t GLContextCGL::BackpressureFenceCreate() {
-  TRACE_EVENT0("gpu", "GLContextCGL::BackpressureFenceCreate");
-
-  // This flush will trigger a crash if FlushForDriverCrashWorkaround is not
-  // called sufficiently frequently.
-  glFlush();
-
-  if (gl::GLFence::IsSupported()) {
-    next_backpressure_fence_ += 1;
-    backpressure_fences_[next_backpressure_fence_] = GLFence::Create();
-    return next_backpressure_fence_;
-  }
-  glFinish();
-  return kInvalidFenceId;
-}
-
-void GLContextCGL::BackpressureFenceWait(uint64_t fence_id) {
-  TRACE_EVENT0("gpu", "GLContextCGL::BackpressureFenceWait");
-  if (fence_id == kInvalidFenceId) {
-    return;
-  }
-
-  // If a fence is not found, then it has already been waited on.
-  auto found = backpressure_fences_.find(fence_id);
-  if (found == backpressure_fences_.end())
-    return;
-  std::unique_ptr<GLFence> fence = std::move(found->second);
-  backpressure_fences_.erase(found);
-
-  // While we could call GLFence::ClientWait, this performs a busy wait on
-  // Mac, leading to high CPU usage. Instead we poll with a 1ms delay. This
-  // should have minimal impact, as we will only hit this path when we are
-  // more than one frame (16ms) behind.
-  //
-  // Note that on some platforms (10.9), fences appear to sometimes get
-  // lost and will never pass. Add a 32ms timout to prevent these
-  // situations from causing a GPU process hang.
-  // https://crbug.com/618075
-  bool fence_completed = false;
-  for (int poll_iter = 0; !fence_completed && poll_iter < 32; ++poll_iter) {
-    if (poll_iter > 0) {
-      base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
-    }
-    {
-      TRACE_EVENT0("gpu", "GLFence::HasCompleted");
-      fence_completed = fence->HasCompleted();
-    }
-  }
-  if (!fence_completed) {
-    TRACE_EVENT0("gpu", "Finish");
-    // We timed out waiting for the above fence, just issue a glFinish.
-    glFinish();
-  }
-  fence.reset();
-
-  // Waiting on |fence_id| has implicitly waited on all previous fences, so
-  // remove them.
-  while (backpressure_fences_.begin()->first < fence_id)
-    backpressure_fences_.erase(backpressure_fences_.begin());
-}
-
-void GLContextCGL::FlushForDriverCrashWorkaround() {
-  if (!context_ || CGLGetCurrentContext() != context_)
-    return;
-  glFlush();
-}
-
 bool GLContextCGL::MakeCurrent(GLSurface* surface) {
   DCHECK(context_);
 
diff --git a/ui/gl/gl_context_cgl.h b/ui/gl/gl_context_cgl.h
index bbb73ec..2738632 100644
--- a/ui/gl/gl_context_cgl.h
+++ b/ui/gl/gl_context_cgl.h
@@ -7,7 +7,6 @@
 
 #include <OpenGL/CGLTypes.h>
 
-#include <map>
 #include <memory>
 
 #include "base/macros.h"
@@ -17,7 +16,6 @@
 
 namespace gl {
 
-class GLFence;
 class GLSurface;
 
 // Encapsulates a CGL OpenGL context.
@@ -36,9 +34,6 @@
   bool ForceGpuSwitchIfNeeded() override;
   YUVToRGBConverter* GetYUVToRGBConverter(
       const gfx::ColorSpace& color_space) override;
-  uint64_t BackpressureFenceCreate() override;
-  void BackpressureFenceWait(uint64_t fence) override;
-  void FlushForDriverCrashWorkaround() override;
   void SetVisibility(bool visibility) override;
 
  protected:
@@ -53,9 +48,6 @@
   std::map<gfx::ColorSpace, std::unique_ptr<YUVToRGBConverter>>
       yuv_to_rgb_converters_;
 
-  std::map<uint64_t, std::unique_ptr<GLFence>> backpressure_fences_;
-  uint64_t next_backpressure_fence_ = 0;
-
   int screen_ = -1;
   int renderer_id_ = -1;
   bool safe_to_force_gpu_switch_ = true;
diff --git a/ui/gl/gl_context_egl.cc b/ui/gl/gl_context_egl.cc
index f64fdd0..81a57a5 100644
--- a/ui/gl/gl_context_egl.cc
+++ b/ui/gl/gl_context_egl.cc
@@ -21,6 +21,7 @@
 #include "third_party/khronos/EGL/eglext.h"
 #include "ui/gl/egl_util.h"
 #include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_fence.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_surface_egl.h"
 #include "ui/gl/yuv_to_rgb_converter.h"
@@ -214,7 +215,7 @@
 }
 
 void GLContextEGL::Destroy() {
-  ReleaseYUVToRGBConverters();
+  ReleaseYUVToRGBConvertersAndBackpressureFences();
   if (context_) {
     if (!eglDestroyContext(display_, context_)) {
       LOG(ERROR) << "eglDestroyContext failed with error "
@@ -230,7 +231,7 @@
   // Make sure YUVToRGBConverter objects never get created when surfaceless EGL
   // contexts aren't supported since support for surfaceless EGL contexts is
   // required in order to properly release YUVToRGBConverter objects (see
-  // GLContextEGL::ReleaseYUVToRGBConverters())
+  // GLContextEGL::ReleaseYUVToRGBConvertersAndBackpressureFences())
   if (!GLSurfaceEGL::IsEGLSurfacelessContextSupported()) {
     return nullptr;
   }
@@ -244,8 +245,14 @@
   return yuv_to_rgb_converter.get();
 }
 
-void GLContextEGL::ReleaseYUVToRGBConverters() {
-  if (!yuv_to_rgb_converters_.empty()) {
+void GLContextEGL::ReleaseYUVToRGBConvertersAndBackpressureFences() {
+#if defined(OS_MACOSX)
+  bool has_backpressure_fences = HasBackpressureFences();
+#else
+  bool has_backpressure_fences = false;
+#endif
+
+  if (!yuv_to_rgb_converters_.empty() || has_backpressure_fences) {
     // If this context is not current, bind this context's API so that the YUV
     // converter can safely destruct
     GLContext* current_context = GetRealCurrent();
@@ -269,6 +276,9 @@
     }
 
     yuv_to_rgb_converters_.clear();
+#if defined(OS_MACOSX)
+    DestroyBackpressureFences();
+#endif
 
     // Rebind the current context's API if needed.
     if (current_context && current_context != this) {
diff --git a/ui/gl/gl_context_egl.h b/ui/gl/gl_context_egl.h
index 0cba379..31945fd 100644
--- a/ui/gl/gl_context_egl.h
+++ b/ui/gl/gl_context_egl.h
@@ -43,7 +43,7 @@
 
  private:
   void Destroy();
-  void ReleaseYUVToRGBConverters();
+  void ReleaseYUVToRGBConvertersAndBackpressureFences();
 
   EGLContext context_ = nullptr;
   EGLDisplay display_ = nullptr;
diff --git a/ui/gl/gl_context_stub.cc b/ui/gl/gl_context_stub.cc
index fc9a1ee..8c43dcc 100644
--- a/ui/gl/gl_context_stub.cc
+++ b/ui/gl/gl_context_stub.cc
@@ -75,6 +75,10 @@
          HasExtension("GL_KHR_robustness") || HasExtension("GL_EXT_robustness");
 }
 
+#if defined(OS_MACOSX)
+void GLContextStub::FlushForDriverCrashWorkaround() {}
+#endif
+
 GLContextStub::~GLContextStub() {}
 
 GLApi* GLContextStub::CreateGLApi(DriverGL* driver) {
diff --git a/ui/gl/gl_context_stub.h b/ui/gl/gl_context_stub.h
index 53107a3..0a24ab04 100644
--- a/ui/gl/gl_context_stub.h
+++ b/ui/gl/gl_context_stub.h
@@ -6,6 +6,7 @@
 #define UI_GL_GL_CONTEXT_STUB_H_
 
 #include "base/macros.h"
+#include "build/build_config.h"
 #include "ui/gl/gl_context.h"
 #include "ui/gl/gl_export.h"
 
@@ -35,6 +36,10 @@
   void SetGLVersionString(const char* version_str);
   bool HasRobustness();
 
+#if defined(OS_MACOSX)
+  void FlushForDriverCrashWorkaround() override;
+#endif
+
  protected:
   ~GLContextStub() override;
 
diff --git a/ui/ozone/common/gpu/ozone_gpu_message_params.cc b/ui/ozone/common/gpu/ozone_gpu_message_params.cc
index 72d40a99..79ddb77 100644
--- a/ui/ozone/common/gpu/ozone_gpu_message_params.cc
+++ b/ui/ozone/common/gpu/ozone_gpu_message_params.cc
@@ -31,7 +31,6 @@
       format(candidate.format),
       display_rect(gfx::ToNearestRect(candidate.display_rect)),
       crop_rect(candidate.crop_rect),
-      is_opaque(candidate.is_opaque),
       plane_z_order(candidate.plane_z_order),
       is_overlay_candidate(candidate.overlay_handled) {}
 
diff --git a/ui/ozone/common/gpu/ozone_gpu_message_params.h b/ui/ozone/common/gpu/ozone_gpu_message_params.h
index efd3ceb..4aa6bc3f 100644
--- a/ui/ozone/common/gpu/ozone_gpu_message_params.h
+++ b/ui/ozone/common/gpu/ozone_gpu_message_params.h
@@ -73,7 +73,6 @@
   gfx::BufferFormat format = gfx::BufferFormat::BGRA_8888;
   gfx::Rect display_rect;
   gfx::RectF crop_rect;
-  bool is_opaque = false;
   int plane_z_order = 0;
   // By default we mark this configuration valid for promoting it to an overlay.
   bool is_overlay_candidate = true;
diff --git a/ui/ozone/common/gpu/ozone_gpu_messages.h b/ui/ozone/common/gpu/ozone_gpu_messages.h
index fd9813f..ec617b1 100644
--- a/ui/ozone/common/gpu/ozone_gpu_messages.h
+++ b/ui/ozone/common/gpu/ozone_gpu_messages.h
@@ -86,7 +86,6 @@
   IPC_STRUCT_TRAITS_MEMBER(format)
   IPC_STRUCT_TRAITS_MEMBER(display_rect)
   IPC_STRUCT_TRAITS_MEMBER(crop_rect)
-  IPC_STRUCT_TRAITS_MEMBER(is_opaque)
   IPC_STRUCT_TRAITS_MEMBER(plane_z_order)
   IPC_STRUCT_TRAITS_MEMBER(is_overlay_candidate)
 IPC_STRUCT_TRAITS_END()
diff --git a/ui/ozone/platform/drm/common/drm_util.cc b/ui/ozone/platform/drm/common/drm_util.cc
index a8fc1d9..902fec3 100644
--- a/ui/ozone/platform/drm/common/drm_util.cc
+++ b/ui/ozone/platform/drm/common/drm_util.cc
@@ -10,7 +10,6 @@
 #include <sys/mman.h>
 #include <xf86drm.h>
 #include <xf86drmMode.h>
-
 #include <algorithm>
 #include <memory>
 #include <utility>
@@ -609,7 +608,6 @@
     osc.format = p.format;
     osc.display_rect = gfx::RectF(p.display_rect);
     osc.crop_rect = p.crop_rect;
-    osc.is_opaque = p.is_opaque;
     osc.plane_z_order = p.plane_z_order;
     osc.overlay_handled = p.is_overlay_candidate;
     candidates.push_back(osc);
diff --git a/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc b/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc
index 9f8a49d..d0fe454 100644
--- a/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc
+++ b/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc
@@ -5,7 +5,6 @@
 #include "ui/ozone/platform/drm/gpu/drm_overlay_validator.h"
 
 #include <drm_fourcc.h>
-
 #include <memory>
 #include <utility>
 
@@ -86,10 +85,7 @@
 
     scoped_refptr<DrmFramebuffer> buffer = GetBufferForPageFlipTest(
         drm, params[i].buffer_size,
-        params[i].is_opaque
-            ? GetFourCCFormatForOpaqueFramebuffer(params[i].format)
-            : GetFourCCFormatFromBufferFormat(params[i].format),
-        &reusable_buffers);
+        GetFourCCFormatFromBufferFormat(params[i].format), &reusable_buffers);
 
     DrmOverlayPlane plane(buffer, params[i].plane_z_order, params[i].transform,
                           params[i].display_rect, params[i].crop_rect,
diff --git a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
index 4ecac34..f2a54c4 100644
--- a/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc
@@ -144,7 +144,6 @@
   ui::OverlayCheck_Params primary_candidate;
   primary_candidate.buffer_size = primary_rect_.size();
   primary_candidate.display_rect = primary_rect_;
-  primary_candidate.is_opaque = true;
   primary_candidate.format = gfx::BufferFormat::BGRX_8888;
   overlay_params_.push_back(primary_candidate);
   AddPlane(primary_candidate);
@@ -153,7 +152,6 @@
   overlay_candidate.buffer_size = overlay_rect_.size();
   overlay_candidate.display_rect = overlay_rect_;
   overlay_candidate.plane_z_order = 1;
-  primary_candidate.is_opaque = true;
   overlay_candidate.format = gfx::BufferFormat::BGRX_8888;
   overlay_params_.push_back(overlay_candidate);
   AddPlane(overlay_candidate);
@@ -227,7 +225,7 @@
       ui::GetFourCCFormatFromBufferFormat(params.format), params.buffer_size);
   plane_list_.push_back(ui::DrmOverlayPlane(
       std::move(drm_framebuffer), params.plane_z_order, params.transform,
-      params.display_rect, params.crop_rect, !params.is_opaque, nullptr));
+      params.display_rect, params.crop_rect, true, nullptr));
 }
 
 void DrmOverlayValidatorTest::TearDown() {
@@ -304,7 +302,6 @@
   overlay_params_.back().buffer_size = overlay_rect_.size();
   overlay_params_.back().display_rect = overlay_rect_;
   overlay_params_.back().crop_rect = crop_rect;
-  overlay_params_.back().is_opaque = false;
   overlay_params_.back().format = gfx::BufferFormat::YUV_420_BIPLANAR;
   plane_list_.pop_back();
   AddPlane(overlay_params_.back());
diff --git a/ui/ozone/public/mojom/overlay_surface_candidate.mojom b/ui/ozone/public/mojom/overlay_surface_candidate.mojom
index 8dd6b7e..3794dff 100644
--- a/ui/ozone/public/mojom/overlay_surface_candidate.mojom
+++ b/ui/ozone/public/mojom/overlay_surface_candidate.mojom
@@ -32,8 +32,6 @@
   gfx.mojom.Rect clip_rect;
   // If the quad is clipped after composition.
   bool is_clipped;
-  // If the quad doesn't require blending.
-  bool is_opaque;
   // Stacking order of the overlay plane relative to the main surface,
   // which is 0. Signed to allow for "underlays".
  int32 plane_z_order = 0;
diff --git a/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits.h b/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits.h
index 26fb4334..2da3c28 100644
--- a/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits.h
+++ b/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits.h
@@ -80,10 +80,6 @@
     return osc.is_clipped;
   }
 
-  static bool is_opaque(const ui::OverlaySurfaceCandidate& osc) {
-    return osc.is_opaque;
-  }
-
   static int plane_z_order(const ui::OverlaySurfaceCandidate& osc) {
     return osc.plane_z_order;
   }
@@ -95,7 +91,6 @@
   static bool Read(ui::ozone::mojom::OverlaySurfaceCandidateDataView data,
                    ui::OverlaySurfaceCandidate* out) {
     out->is_clipped = data.is_clipped();
-    out->is_opaque = data.is_opaque();
     out->plane_z_order = data.plane_z_order();
     out->overlay_handled = data.overlay_handled();
     return data.ReadTransform(&out->transform) &&
diff --git a/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits_unittest.cc b/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits_unittest.cc
index 823a4e5..1694e4c 100644
--- a/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits_unittest.cc
+++ b/ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits_unittest.cc
@@ -2,13 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits.h"
-
 #include <utility>
 
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/ozone/public/mojom/overlay_surface_candidate.mojom.h"
+#include "ui/ozone/public/mojom/overlay_surface_candidate_mojom_traits.h"
 #include "ui/ozone/public/overlay_surface_candidate.h"
 
 namespace ui {
@@ -23,7 +22,6 @@
   input.crop_rect = gfx::RectF(10., 20., 30., 40.);
   input.clip_rect = gfx::Rect(11, 21, 31, 41);
   input.is_clipped = true;
-  input.is_opaque = true;
   input.plane_z_order = 42;
   input.overlay_handled = true;
 
@@ -41,7 +39,6 @@
   EXPECT_EQ(input.crop_rect, output.crop_rect);
   EXPECT_EQ(input.clip_rect, output.clip_rect);
   EXPECT_EQ(input.is_clipped, output.is_clipped);
-  EXPECT_EQ(input.is_opaque, output.is_opaque);
   EXPECT_EQ(input.plane_z_order, output.plane_z_order);
   EXPECT_EQ(input.overlay_handled, output.overlay_handled);
 }
@@ -50,7 +47,6 @@
   ui::OverlaySurfaceCandidate input;
 
   input.is_clipped = false;
-  input.is_opaque = false;
   input.overlay_handled = false;
 
   ui::OverlaySurfaceCandidate output;
@@ -60,7 +56,6 @@
 
   EXPECT_TRUE(success);
   EXPECT_EQ(input.is_clipped, output.is_clipped);
-  EXPECT_EQ(input.is_opaque, output.is_opaque);
   EXPECT_EQ(input.overlay_handled, output.overlay_handled);
 }
 
diff --git a/ui/ozone/public/overlay_surface_candidate.h b/ui/ozone/public/overlay_surface_candidate.h
index 0bc4feb..9b0824a 100644
--- a/ui/ozone/public/overlay_surface_candidate.h
+++ b/ui/ozone/public/overlay_surface_candidate.h
@@ -30,7 +30,7 @@
   ~OverlaySurfaceCandidate();
   OverlaySurfaceCandidate& operator=(const OverlaySurfaceCandidate& other);
 
-  // Note that |clip_rect|, |is_clipped|, |is_opaque| and |overlay_handled| are
+  // Note that |clip_rect|, |is_clipped| and |overlay_handled| are
   // *not* used as part of the comparison.
   bool operator<(const OverlaySurfaceCandidate& other) const;
 
@@ -53,8 +53,6 @@
   gfx::Rect clip_rect;
   // If the quad is clipped after composition.
   bool is_clipped = false;
-  // If the quad doesn't require blending.
-  bool is_opaque = false;
 
   // To be modified by the implementer if this candidate can go into
   // an overlay.
diff --git a/ui/resources/ui_resources.grd b/ui/resources/ui_resources.grd
index d145c74..5f88d78 100644
--- a/ui/resources/ui_resources.grd
+++ b/ui/resources/ui_resources.grd
@@ -83,7 +83,6 @@
         <structure type="chrome_scaled_image" name="IDR_CLOSE_2_H" file="close_2_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_CLOSE_2_MASK" file="close_2_mask.png" />
         <structure type="chrome_scaled_image" name="IDR_CLOSE_2_P" file="close_2_pressed.png" />
-        <structure type="chrome_scaled_image" name="IDR_CLOSE_3_MASK" file="common/close_3_mask.png" />
         <structure type="chrome_scaled_image" name="IDR_CLOSE_DIALOG" file="close_dialog.png" />
         <structure type="chrome_scaled_image" name="IDR_CLOSE_DIALOG_H" file="close_dialog_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_CLOSE_DIALOG_P" file="close_dialog_pressed.png" />
diff --git a/ui/strings/translations/ui_strings_hu.xtb b/ui/strings/translations/ui_strings_hu.xtb
index c0512ab9..780d1c5 100644
--- a/ui/strings/translations/ui_strings_hu.xtb
+++ b/ui/strings/translations/ui_strings_hu.xtb
@@ -74,7 +74,7 @@
 <translation id="3068711042108640621">A polc a bal oldalon található</translation>
 <translation id="3087734570205094154">Alja</translation>
 <translation id="3126026824346185272">Ctrl</translation>
-<translation id="3157931365184549694">Visszaállítás</translation>
+<translation id="3157931365184549694">Helyreállítás</translation>
 <translation id="3183922693828471536">Görgessen ide</translation>
 <translation id="3234408098842461169">Lefelé nyíl</translation>
 <translation id="3291688615589870984">{DAYS,plural, =1{1 nap}other{# nap}}</translation>
diff --git a/ui/strings/ui_strings.grd b/ui/strings/ui_strings.grd
index 0daa84f..dfc1218 100644
--- a/ui/strings/ui_strings.grd
+++ b/ui/strings/ui_strings.grd
@@ -952,14 +952,6 @@
         {UNREAD_NOTIFICATIONS, plural, =1 {1 Unread Notification} other {# Unread Notifications}}
       </message>
 
-      <!-- Send Tab To Self -->
-      <message name="IDS_SEND_TAB_TO_SELF_INFOBAR_MESSAGE" desc="The message text for the infobar when a user receives a shared tab from another device.">
-        Tab received.
-      </message>
-      <message name="IDS_SEND_TAB_TO_SELF_INFOBAR_MESSAGE_URL" desc="Clickable text displayed as part of a URL in the inforbar displayed when a user receives a shared tab from another device.">
-        Open
-      </message>
-
       <!-- Browser sharing messages -->
       <message name="IDS_BROWSER_SHARING_CLICK_TO_CALL_DIALOG_TITLE_LABEL" desc="The label to be shown as the title of the dialog when user click on a phone number, which means which device from the dialog to use for telephony service.">
         Make a call from
diff --git a/ui/views/bubble/bubble_dialog_delegate_view.cc b/ui/views/bubble/bubble_dialog_delegate_view.cc
index 8d480044..36b4dd6b 100644
--- a/ui/views/bubble/bubble_dialog_delegate_view.cc
+++ b/ui/views/bubble/bubble_dialog_delegate_view.cc
@@ -170,7 +170,7 @@
 
   std::unique_ptr<BubbleBorder> border =
       std::make_unique<BubbleBorder>(arrow(), GetShadow(), color());
-  if (CustomShadowsSupported() && ShouldHaveRoundCorners()) {
+  if (CustomShadowsSupported() && GetParams().round_corners) {
     border->SetCornerRadius(
         base::FeatureList::IsEnabled(features::kEnableMDRoundedCornersOnDialogs)
             ? provider->GetCornerRadiusMetric(views::EMPHASIS_HIGH)
diff --git a/ui/views/layout/grid_layout.cc b/ui/views/layout/grid_layout.cc
index 9056d52..f43c0f80 100644
--- a/ui/views/layout/grid_layout.cc
+++ b/ui/views/layout/grid_layout.cc
@@ -418,19 +418,17 @@
             min_width, false);
 }
 
-
-void ColumnSet::LinkColumnSizes(int first, ...) {
-  va_list marker;
-  va_start(marker, first);
-  DCHECK(first >= 0 && first < num_columns());
-  for (int last = first, next = va_arg(marker, int); next != -1;
-       next = va_arg(marker, int)) {
+void ColumnSet::LinkColumnSizes(const std::vector<int>& columns) {
+  if (columns.size() <= 1)
+    return;
+  int last = columns[0];
+  for (size_t i = 1; i < columns.size(); ++i) {
+    int next = columns[i];
     DCHECK_GE(next, 0);
     DCHECK_LT(next, num_columns());
     columns_[last]->same_size_column_ = next;
     last = next;
   }
-  va_end(marker);
 }
 
 void ColumnSet::AddColumn(GridLayout::Alignment h_align,
diff --git a/ui/views/layout/grid_layout.h b/ui/views/layout/grid_layout.h
index 3d59143..e60f039f 100644
--- a/ui/views/layout/grid_layout.h
+++ b/ui/views/layout/grid_layout.h
@@ -332,11 +332,10 @@
                  int min_width);
 
   // Forces the specified columns to have the same size. The size of
-  // linked columns is that of the max of the specified columns. This
-  // must end with -1. For example, the following forces the first and
-  // second column to have the same size:
-  // LinkColumnSizes(0, 1, -1);
-  void LinkColumnSizes(int first, ...);
+  // linked columns is that of the max of the specified columns.
+  // For example, the following forces the first and
+  // second column to have the same size: LinkColumnSizes({0, 1});
+  void LinkColumnSizes(const std::vector<int>& columns);
 
   // When sizing linked columns, columns wider than |size_limit| are ignored.
   void set_linked_column_size_limit(int size_limit) {
diff --git a/ui/views/layout/grid_layout_unittest.cc b/ui/views/layout/grid_layout_unittest.cc
index 8b4dc47..99870c3d 100644
--- a/ui/views/layout/grid_layout_unittest.cc
+++ b/ui/views/layout/grid_layout_unittest.cc
@@ -210,7 +210,7 @@
   auto* v3 = layout()->AddView(CreateSizedView(gfx::Size(0, 20)));
 
   // Link all the columns.
-  c1->LinkColumnSizes(0, 1, 2, -1);
+  c1->LinkColumnSizes({0, 1, 2});
   gfx::Size pref = GetPreferredSize();
 
   // |v1| and |v3| should obtain the same width as |v2|, since |v2| is largest.
@@ -376,7 +376,7 @@
                 0, GridLayout::USE_PREF, 0, 0);
   c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
                 0, GridLayout::USE_PREF, 0, 0);
-  c1->LinkColumnSizes(0, 1, -1);
+  c1->LinkColumnSizes({0, 1});
   layout()->StartRow(0, 0);
   auto* v1 = layout()->AddView(CreateSizedView(gfx::Size(50, 20)));
   auto* v2 = layout()->AddView(CreateSizedView(gfx::Size(10, 10)));
diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc
index 4c946da5..9d7c5b5 100644
--- a/ui/views/window/dialog_client_view.cc
+++ b/ui/views/window/dialog_client_view.cc
@@ -399,15 +399,23 @@
 
   // Track which columns to link sizes under MD.
   constexpr int kViewToColumnIndex[] = {1, 3, 5};
-  int link[] = {-1, -1, -1};
-  size_t link_index = 0;
+  std::vector<int> columns_to_link;
+
+  // Skip views that are not a button, or are a specific subclass of Button
+  // that should never be linked. Otherwise, link everything.
+  auto should_link = [](views::View* view) {
+    return Button::AsButton(view) &&
+           view->GetClassName() != Checkbox::kViewClassName &&
+           view->GetClassName() != ImageButton::kViewClassName;
+  };
 
   layout->StartRowWithPadding(kFixed, kButtonRowId, kFixed,
                               button_row_insets_.top());
   for (size_t view_index = 0; view_index < kNumButtons; ++view_index) {
     if (views[view_index]) {
       layout->AddExistingView(views[view_index]);
-      link[link_index++] = kViewToColumnIndex[view_index];
+      if (should_link(views[view_index]))
+        columns_to_link.push_back(kViewToColumnIndex[view_index]);
     } else {
       layout->SkipColumns(1);
     }
@@ -415,19 +423,7 @@
 
   column_set->set_linked_column_size_limit(
       layout_provider->GetDistanceMetric(DISTANCE_BUTTON_MAX_LINKABLE_WIDTH));
-
-  // If |views[0]| is non-null, it is a visible |extra_view_| and its column
-  // will be in |link[0]|. Skip that if it is not a button, or if it is a
-  // specific subclass of Button that should never be linked. Otherwise, link
-  // everything.
-  bool skip_first_link =
-      views[0] && (!Button::AsButton(views[0]) ||
-                   views[0]->GetClassName() == Checkbox::kViewClassName ||
-                   views[0]->GetClassName() == ImageButton::kViewClassName);
-  if (skip_first_link)
-    column_set->LinkColumnSizes(link[1], link[2], -1);
-  else
-    column_set->LinkColumnSizes(link[0], link[1], link[2], -1);
+  column_set->LinkColumnSizes(columns_to_link);
 
   layout->AddPaddingRow(kFixed, button_row_insets_.bottom());
 
diff --git a/ui/views/window/dialog_delegate.cc b/ui/views/window/dialog_delegate.cc
index b8905f4..11e9df5 100644
--- a/ui/views/window/dialog_delegate.cc
+++ b/ui/views/window/dialog_delegate.cc
@@ -110,8 +110,8 @@
 }
 
 int DialogDelegate::GetDefaultDialogButton() const {
-  if (params_.default_button.has_value())
-    return *params_.default_button;
+  if (GetParams().default_button.has_value())
+    return *GetParams().default_button;
   if (GetDialogButtons() & ui::DIALOG_BUTTON_OK)
     return ui::DIALOG_BUTTON_OK;
   if (GetDialogButtons() & ui::DIALOG_BUTTON_CANCEL)
@@ -184,10 +184,6 @@
   return GetDialogButtons() != ui::DIALOG_BUTTON_NONE;
 }
 
-bool DialogDelegate::ShouldHaveRoundCorners() const {
-  return true;
-}
-
 View* DialogDelegate::GetInitiallyFocusedView() {
   // Focus the default button if any.
   const DialogClientView* dcv = GetDialogClientView();
@@ -236,7 +232,7 @@
   border->set_use_theme_background_color(true);
   DialogDelegate* delegate = widget->widget_delegate()->AsDialogDelegate();
   if (delegate) {
-    if (delegate->ShouldHaveRoundCorners()) {
+    if (delegate->GetParams().round_corners) {
       border->SetCornerRadius(
           base::FeatureList::IsEnabled(
               features::kEnableMDRoundedCornersOnDialogs)
diff --git a/ui/views/window/dialog_delegate.h b/ui/views/window/dialog_delegate.h
index 86b2d81..32b2b96f 100644
--- a/ui/views/window/dialog_delegate.h
+++ b/ui/views/window/dialog_delegate.h
@@ -39,6 +39,7 @@
     Params();
     ~Params();
     base::Optional<int> default_button = base::nullopt;
+    bool round_corners = true;
   };
 
   DialogDelegate();
@@ -125,9 +126,6 @@
   // LayoutProvider's snapping.
   virtual bool ShouldSnapFrameWidth() const;
 
-  // Returns whether the dialog should have round corners
-  virtual bool ShouldHaveRoundCorners() const;
-
   // Overridden from WidgetDelegate:
   View* GetInitiallyFocusedView() override;
   DialogDelegate* AsDialogDelegate() override;
@@ -157,6 +155,7 @@
   void DialogModelChanged();
 
   void set_default_button(int button) { params_.default_button = button; }
+  void set_use_round_corners(bool round) { params_.round_corners = round; }
 
  protected:
   ~DialogDelegate() override;
@@ -164,6 +163,8 @@
   // Overridden from WidgetDelegate:
   ax::mojom::Role GetAccessibleWindowRole() override;
 
+  const Params& GetParams() const { return params_; }
+
  private:
   // A flag indicating whether this dialog is able to use the custom frame
   // style for dialogs.
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.html b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.html
index 78f84b6..b1c47fc 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.html
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.html
@@ -40,7 +40,8 @@
         <template>
           <cr-network-list-item item="[[item]]"
               show-technology-badge="[[showTechnologyBadge]]"
-              show-buttons="[[showButtons]]" tabindex$="[[tabIndex]]">
+              show-buttons="[[showButtons]]" tabindex$="[[tabIndex]]"
+              activation-unavailable="[[activationUnavailable]]">
           </cr-network-list-item>
         </template>
       </iron-list>
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.js b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.js
index 724375a..9fb90683 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.js
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list.js
@@ -54,6 +54,9 @@
       observer: 'selectedItemChanged_',
     },
 
+    /** Whether cellular activation is unavailable in the current context. */
+    activationUnavailable: Boolean,
+
     /**
      * Contains |networks| + |customItems|.
      * @private {!Array<!CrNetworkList.CrNetworkListItemType>}
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html
index c2e4408b..efc97d5 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html
@@ -43,7 +43,7 @@
         font-weight: 400;
       }
 
-      #networkStateText[connected] {
+      #networkStateText[active] {
         color: var(--google-green-500);
       }
 
@@ -71,8 +71,9 @@
         <div aria-hidden="true">[[getItemName_(item)]]</div>
         <div id="networkStateText"
             hidden$="[[!isStateTextVisible_(networkState)]]"
-            connected$="[[isConnected_(networkState)]]">
-          [[getNetworkStateText_(networkState)]]
+            active$="[[isStateTextActive_(networkState,
+                         activationUnavailable)]]">
+          [[getNetworkStateText_(networkState, cellActivationAvailable)]]
         </div>
       </div>
       <template is="dom-if" if="[[isPolicySource(networkState.source)]]">
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.js b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.js
index 31def06..3d306977 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.js
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.js
@@ -66,7 +66,16 @@
     connectionState_: Number,
 
     /** Whether to show technology badge on mobile network icon. */
-    showTechnologyBadge: {type: Boolean, value: true},
+    showTechnologyBadge: {
+      type: Boolean,
+      value: true,
+    },
+
+    /** Whether cellular activation is unavailable in the current context. */
+    activationUnavailable: {
+      type: Boolean,
+      value: false,
+    }
   },
 
   /** @override */
@@ -140,6 +149,9 @@
     }
     const connectionState = this.networkState.connectionState;
     if (this.networkState.type == mojom.NetworkType.kCellular) {
+      if (this.shouldShowNotAvailableText_()) {
+        return CrOncStrings.networkListItemNotAvailable;
+      }
       if (this.networkState.typeState.cellular.scanning) {
         return CrOncStrings.networkListItemScanning;
       }
@@ -169,13 +181,18 @@
   },
 
   /**
-   * @return {boolean}
+   * @return {boolean} Whether this element's contents describe an "active"
+   *     network. In this case, an active network is connected and may have
+   *     additional properties (e.g., must be activated for cellular networks).
    * @private
    */
-  isConnected_: function() {
+  isStateTextActive_: function() {
     if (!this.networkState) {
       return false;
     }
+    if (this.shouldShowNotAvailableText_()) {
+      return false;
+    }
     return OncMojo.connectionStateIsConnected(
         this.networkState.connectionState);
   },
@@ -220,4 +237,21 @@
     this.fire('show-detail', this.networkState);
     event.stopPropagation();
   },
+
+  /**
+   * @return {boolean}
+   * @private
+   */
+  shouldShowNotAvailableText_: function() {
+    if (!this.networkState || !this.activationUnavailable) {
+      return false;
+    }
+
+    // If cellular activation is not currently available and |this.networkState|
+    // describes an unactivated cellular network, the text should be shown.
+    const mojom = chromeos.networkConfig.mojom;
+    return this.networkState.type == mojom.NetworkType.kCellular &&
+        this.networkState.typeState.cellular.activationState !=
+        mojom.ActivationStateType.kActivated;
+  },
 });
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.html b/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.html
index 376410e..feea931 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.html
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.html
@@ -34,7 +34,8 @@
         networks="[[networkStateList_]]" custom-items="[[customItems]]"
         show-buttons="[[showButtons]]"
         show-technology-badge="[[showTechnologyBadge]]"
-        no-bottom-scroll-border="[[noBottomScrollBorder]]">
+        no-bottom-scroll-border="[[noBottomScrollBorder]]"
+        activation-unavailable="[[activationUnavailable]]">
     </cr-network-list>
   </template>
   <script src="cr_network_select.js"></script>
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.js b/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.js
index d7bfc1b..61b1c295d 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.js
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_network_select.js
@@ -47,6 +47,9 @@
      */
     showScanProgress: {type: Boolean, value: false},
 
+    /** Whether cellular activation is unavailable in the current context. */
+    activationUnavailable: Boolean,
+
     /**
      * List of all network state data for all visible networks.
      * @private {!Array<!OncMojo.NetworkStateProperties>}
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_onc_strings.js b/ui/webui/resources/cr_elements/chromeos/network/cr_onc_strings.js
index f93bc08..7a908fe 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_onc_strings.js
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_onc_strings.js
@@ -19,6 +19,7 @@
  *   networkListItemConnecting: string,
  *   networkListItemConnectingTo: string,
  *   networkListItemInitializing: string,
+ *   networkListItemNotAvailable: string,
  *   networkListItemScanning: string,
  *   networkListItemSimCardLocked: string,
  *   networkListItemNotConnected: string,
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js
index 3850a43d..ae9a1ed 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js
@@ -121,12 +121,14 @@
     }
   },
 
-  /** @private */
+  /**
+   * @param {Event} e
+   * @private
+   */
   showSearch_: function(e) {
-    const clearSearchButton = this.$$('#clearSearch');
-    const wasClearSearchClicked = e.composedPath().includes(clearSearchButton);
-
-    this.showingSearch = !wasClearSearchClicked;
+    if (e.target != this.$.clearSearch) {
+      this.showingSearch = true;
+    }
   },
 
   /**
diff --git a/ui/webui/resources/webui_resources.grd b/ui/webui/resources/webui_resources.grd
index 3a64bd4..e79ea2f 100644
--- a/ui/webui/resources/webui_resources.grd
+++ b/ui/webui/resources/webui_resources.grd
@@ -168,9 +168,11 @@
                  file="css/menu_button.css" type="chrome_html" compress="gzip"
                  flattenhtml="true" />
       <structure name="IDR_WEBUI_CSS_TEXT_DEFAULTS"
-                 file="css/text_defaults.css" type="chrome_html" />
+                 file="css/text_defaults.css" type="chrome_html"
+                 compress="gzip" />
       <structure name="IDR_WEBUI_CSS_TEXT_DEFAULTS_MD"
-                 file="css/text_defaults_md.css" type="chrome_html" />
+                 file="css/text_defaults_md.css" type="chrome_html"
+                 compress="gzip" />
       <structure name="IDR_WEBUI_CSS_OVERLAY"
                  file="css/overlay.css" type="chrome_html" compress="gzip"
                  flattenhtml="true" />